Quadratic Video Interpolation 视频插帧

我的未来我决定 提交于 2020-01-10 03:41:39


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

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

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

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

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

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

1. 网络整体结构

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

2. 主要模块

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

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

2.1 quadratic flow prediction 模块

对于一般的运动,有如下的关系式:
f0t=0t[v0+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}

  • 假设 aτ=0a_{\tau}=0,即得到常用的线性模型 f0t=tf01f_{0\rightarrow t}=t\cdot f_{0\rightarrow 1} 线性模型只需要两点,即 I0,I1I_0, I_1
  • 原文中为了兼顾运动高阶信息和模型复杂性,假设 aτ=aa_{\tau}=a,为一个常数,即采用匀加速运动模型。易得,f0t=(f01+f01)/2t2+(f01f01)/2t(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}
    这即一个二次模型,需要三个点的信息,即 I1,I0,I1I_{-1},I_0,I_1 三个点的信息。也就是原文中提到的用到了更多相邻帧的信息。(当然,高阶模型必然用到更多的点去进行拟合,自然就用到了更多帧的信息)
    Quadratic Video Interpolation 一文中用到的就是匀加速运动模型。显然,高阶模型能够更加准确刻画一些复杂的运动,如下图所示:
    在这里插入图片描述

2.2 flow reversal 模块

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

2.3 frame synthesis

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

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

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

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

3. 实验结果

在UCF101, DAVIS数据集上的PSNR,SSIM指标
在这里插入图片描述

References

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!