Quadratic Video Interpolation 视频插帧

Quadratic Video Interpolation

      • 1. 网络整体结构
      • 2. 主要模块
        • 2.1 quadratic flow prediction 模块
        • 2.2 flow reversal 模块
        • 2.3 frame synthesis
      • 3. 实验结果
      • References

这篇文章来自NeurIPS 2019,主要关于视频插帧。视频插帧的目的是在视频中合成新的中间帧,以提高视频的帧率。

以前的关于视频插帧工作的主要特点:

  • 通常假设物体帧间运动是匀速的,所以通常采用线性模型进行插帧

这篇论文的主要创新点是:

  • 考虑视频中帧间物体运动的加速度信息,能够更加准确刻画视频中物体的真实运动轨迹。(为了简单,文中考虑的是匀加速运动)

下面详细分析改论文的主要内容。

1. 网络整体结构

首先来看下,改论文进行二次视频插帧的整体网络框架。
Quadratic Video Interpolation 视频插帧_第1张图片从上图可以看出,为了实现二次视频插帧,作者提出了两个关键模块:quadratic flow prediction 和 flow reversal模块,来实现两个方向的光流计算,用于计算最终的插入视频帧。下面来分析这两个光流计算模块。

2. 主要模块

为了叙述的方便,先对下文中要用到的符号进行简单的说明。

  • { . . . , I − 2 , I − 1 , I 0 , I 1 , I 2 , . . . } : \{...,I_{-2},I_{-1},I_0,I_1,I_2,...\}: {...,I2,I1,I0,I1,I2,...}: 表示连续的视频帧。
  • 不失一般性,下文以在 I 0 , I 1 I_0,I_1 I0,I1 连续两帧之间插入新的帧 I t ^ , t ∈ ( 0 , 1 ) \hat{I_t},t\in(0,1) It^,t(0,1) 为例。
  • f 0 → t : f_{0\rightarrow t}: f0t: 表示像素从 0 时刻到 t t t 时刻产生的位移。
  • v t : v_t: vt: 表示像素在 t t t 时刻的运动速度
  • a t : a_{t}: at: 表示像素在 t t t 时刻的加速度

2.1 quadratic flow prediction 模块

对于一般的运动,有如下的关系式:
f 0 → t = ∫ 0 t [ v 0 + ∫ 0 κ a τ d τ ] d κ (1) f_{0\rightarrow t} = \int_{0}^{t}[v_0 + \int^{\kappa}_{0}a_{\tau}d_{\tau}]d\kappa\tag{1} f0t=0t[v0+0κaτdτ]dκ(1)

  • 假设 a τ = 0 a_{\tau}=0 aτ=0,即得到常用的线性模型 f 0 → t = t ⋅ f 0 → 1 f_{0\rightarrow t}=t\cdot f_{0\rightarrow 1} f0t=tf01 线性模型只需要两点,即 I 0 , I 1 I_0, I_1 I0,I1
  • 原文中为了兼顾运动高阶信息和模型复杂性,假设 a τ = a a_{\tau}=a aτ=a,为一个常数,即采用匀加速运动模型。易得, f 0 → t = ( f 0 → 1 + f 0 → − 1 ) / 2 ⋅ t 2 + ( f 0 → 1 − f 0 → − 1 ) / 2 ⋅ t (2) f_{0\rightarrow t}=(f_{0\rightarrow 1} + f_{0\rightarrow -1})/2\cdot t^2 + (f_{0\rightarrow 1} - f_{0\rightarrow -1})/2\cdot t \tag{2} f0t=(f01+f01)/2t2+(f01f01)/2t(2)
    这即一个二次模型,需要三个点的信息,即 I − 1 , I 0 , I 1 I_{-1},I_0,I_1 I1,I0,I1 三个点的信息。也就是原文中提到的用到了更多相邻帧的信息。(当然,高阶模型必然用到更多的点去进行拟合,自然就用到了更多帧的信息)
    Quadratic Video Interpolation 一文中用到的就是匀加速运动模型。显然,高阶模型能够更加准确刻画一些复杂的运动,如下图所示:
    Quadratic Video Interpolation 视频插帧_第2张图片

2.2 flow reversal 模块

为了插入高质量的帧,需要用到光流 f t → 0 f_{t\rightarrow 0} ft0 (可参考文献[1,2])。为了更好的适应文中提出的二次模型,文中作者提出了“flow reversal layer” 来计算流 f t → 0 f_{t\rightarrow 0} ft0, 具体如下:在这里插入图片描述其中 u u u 表示 I t I_t It 帧上的像素, N ( u ) \mathcal{N}(u) N(u) 表示 u u u 的邻域, w ( d ) = e − d 2 / σ 2 w(d)=e^{-d^2/\sigma^2} w(d)=ed2/σ2 表示高斯权重,原文实验中 σ = 1 \sigma=1 σ=1。之所以用到邻域而非单个像素点,是为了使得算法更加鲁棒。

2.3 frame synthesis

实则上得到了backward flow f t → 0 f_{t\rightarrow 0} ft0 之后,已经可以进行新的视频帧的合成(如下面的公式(6),只需将(6)中的 f t → 0 ′ f^{'}_{t\rightarrow 0} ft0 替换为 f t → 0 f_{t\rightarrow 0} ft0 即可)。但是一般地, f t → 0 f_{t\rightarrow 0} ft0 具有边缘震荡效果(ringing artifacts),文中作者希望对 f t → 0 f_{t\rightarrow 0} ft0 进行中值滤波,但为了使得操作更加简单,使用如下方式来模拟一个中值滤波过程:
f t → 0 ′ ( u ) = f t → 0 ( u + δ ( u ) ) + r ( u ) (5) f^{'}_{t\rightarrow 0}(u)=f_{t\rightarrow 0}(u+\delta(u))+r(u)\tag{5} ft0(u)=ft0(u+δ(u))+r(u)(5)
其中 f t → 0 ′ f^{'}_{t\rightarrow 0} ft0 表示 f t → 0 f_{t\rightarrow 0} ft0 滤波后的值; δ ( u ) ∈ ( − k , k ) \delta(u)\in (-k,k) δ(u)(k,k),用 k × tanh ⁡ ( ⋅ ) k\times \tanh(\cdot) k×tanh() 来实现,是可学习的(原文中用U-Net来估计 δ ( u ) , r ( u ) \delta(u), r(u) δ(u),r(u)),(这个有点类似可形变卷积deformable convolution过程),原文实验中 k = 10 k=10 k=10

在得到了滤波后的 f t → 0 ′ f^{'}_{t\rightarrow 0} ft0 之后,同理可得 f t → 1 ′ f^{'}_{t\rightarrow 1} ft1;然后,就可以根据下面的公式进行新的视频帧的合成,即
在这里插入图片描述其中 m ( u ) m(u) m(u) 是一个可学习的mask(可用CNN实现),用来记录哪些有效的点用于进行新的视频帧的合成。

这样,经过上面的三个步骤就可以计算得到新的插入视频帧。(这些操作,都是建立已经估计好光流信息的前提下,至于估计光流的网络,文中用的PWC-Net;当然也可以是其他的光流估计方法。)

注意: 原文中在提到希望对 f t → 0 f_{t\rightarrow 0} ft0 进行中值滤波时,作者说到 “While the classical median filter involves indifferentiable operation and cannot be easily trained in our end-to-end model”,个人觉得这句话表述有误,中值滤波仅仅涉及元素的排序及取中值,这与CNN中常用的 m a x   p o o l i n g max ~pooling max pooling 是类似的(它相当于排序及取最大值)。所以原文中的表述说“不可微”是不恰当的

3. 实验结果

在UCF101, DAVIS数据集上的PSNR,SSIM指标
Quadratic Video Interpolation 视频插帧_第3张图片

References

[1]. High quality estimation of multiple intermediate frames for video interpolation.
[2]. Video frame synthesis using deep voxel flow.

你可能感兴趣的:(视频插帧,深度学习,算法,视频处理)