Quadratic Video Interpolation
这篇文章来自NeurIPS 2019,主要关于视频插帧。视频插帧的目的是在视频中合成新的中间帧,以提高视频的帧率。
以前的关于视频插帧工作的主要特点:
- 通常假设物体帧间运动是匀速的,所以通常采用线性模型进行插帧
这篇论文的主要创新点是:
- 考虑视频中帧间物体运动的加速度信息,能够更加准确刻画视频中物体的真实运动轨迹。(为了简单,文中考虑的是匀加速运动)
下面详细分析改论文的主要内容。
1. 网络整体结构
首先来看下,改论文进行二次视频插帧的整体网络框架。
从上图可以看出,为了实现二次视频插帧,作者提出了两个关键模块:quadratic flow prediction 和 flow reversal模块,来实现两个方向的光流计算,用于计算最终的插入视频帧。下面来分析这两个光流计算模块。
2. 主要模块
为了叙述的方便,先对下文中要用到的符号进行简单的说明。
- 表示连续的视频帧。
- 不失一般性,下文以在 连续两帧之间插入新的帧 为例。
- 表示像素从 0 时刻到 时刻产生的位移。
- 表示像素在 时刻的运动速度
- 表示像素在 时刻的加速度
2.1 quadratic flow prediction 模块
对于一般的运动,有如下的关系式:
- 假设 ,即得到常用的线性模型 线性模型只需要两点,即 。
- 原文中为了兼顾运动高阶信息和模型复杂性,假设 ,为一个常数,即采用匀加速运动模型。易得,
这即一个二次模型,需要三个点的信息,即 三个点的信息。也就是原文中提到的用到了更多相邻帧的信息。(当然,高阶模型必然用到更多的点去进行拟合,自然就用到了更多帧的信息)
Quadratic Video Interpolation 一文中用到的就是匀加速运动模型。显然,高阶模型能够更加准确刻画一些复杂的运动,如下图所示:
2.2 flow reversal 模块
为了插入高质量的帧,需要用到光流 (可参考文献[1,2])。为了更好的适应文中提出的二次模型,文中作者提出了“flow reversal layer” 来计算流 , 具体如下:其中 表示 帧上的像素, 表示 的邻域, 表示高斯权重,原文实验中 。之所以用到邻域而非单个像素点,是为了使得算法更加鲁棒。
2.3 frame synthesis
实则上得到了backward flow 之后,已经可以进行新的视频帧的合成(如下面的公式(6),只需将(6)中的 替换为 即可)。但是一般地, 具有边缘震荡效果(ringing artifacts),文中作者希望对 进行中值滤波,但为了使得操作更加简单,使用如下方式来模拟一个中值滤波过程:
其中 表示 滤波后的值;,用 来实现,是可学习的(原文中用U-Net来估计 ),(这个有点类似可形变卷积deformable convolution过程),原文实验中 ;
在得到了滤波后的 之后,同理可得 ;然后,就可以根据下面的公式进行新的视频帧的合成,即
其中 是一个可学习的mask(可用CNN实现),用来记录哪些有效的点用于进行新的视频帧的合成。
这样,经过上面的三个步骤就可以计算得到新的插入视频帧。(这些操作,都是建立已经估计好光流信息的前提下,至于估计光流的网络,文中用的PWC-Net;当然也可以是其他的光流估计方法。)
注意: 原文中在提到希望对 进行中值滤波时,作者说到 “While the classical median filter involves indifferentiable operation and cannot be easily trained in our end-to-end model”,个人觉得这句话表述有误,中值滤波仅仅涉及元素的排序及取中值,这与CNN中常用的 是类似的(它相当于排序及取最大值)。所以原文中的表述说“不可微”是不恰当的。
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.
来源:CSDN
作者:雁知返
链接:https://blog.csdn.net/csuwoshikunge/article/details/103620119