视频帧间插值(一)Softmax Splatting for Video Frame Interpolation

视频插帧是计算机视觉许多应用中的一个传统问题,splatting transformer network 技术已被广泛用于两幅图像之间的新图像合成:非监督深度估计,非监督光流预测,光流预测,新视角合成,视频插帧,视频增强,视频编辑、视频压缩、去除视频运动模糊中。视频插帧方法被分为flow-based、kernel-based、phase-based。这些方法都是估计出两帧之间的光流场,一般通过warp前一帧来得到中间帧。视频插帧在某些场景下特别困难,比如场景和物体在不断运动和变化,或者存在遮挡时,插帧问题会同时存在多个解。

这篇博客介绍CVPR2020的一篇论文,是flow-based的方法。这篇文章主要贡献有两个,一是使用了softmax splatting的方法来处理不同源像素warp之后到同一点的问题,二是使用了特征金字塔,应该是对大位移有更鲁棒。

一、参考资料

主页:http://sniklaus.com/papers/softsplat

论文:https://arxiv.org/abs/2003.05534

代码:https://github.com/sniklaus/softmax-splatting

二、softmax splatting

论文提出了使用softermax splatting来做前向warp,并使用另一种方式处理了不同源像素映射到同一点时的问题,论文中定义了四个运算符,summation splatting 、average splatting、linear splatting、softmax splatting,各运算符表述如下:

  • summation splatting,就是用bilinear kernel直接采样对应映射点的值,将前一帧和后一帧的映射值求和相加。
  • averate splatting,顾名思义就是求取平均,在运动区域前景和背景重叠时会产生artifacts。
  • linear splatting,引入了一个mask Z,mask Z 中包含了像素深度信息,运动的前景有较高权重,不动较远的背景权重较低,这样artifacts就弱一些。
  • softmax splatting,为了更好的根据mask Z分割出运动重叠区域,对Z进行softmax计算,然后再做end-to-end trainning就可以较少很多artifacts。
  • Mask Z,和深度有关,但是计算像素的深度开销太高了,显然我们不需要也不可能精确知道每个pixel的depth是多少,于是我们使用亮度恒常性来判断遮挡就行,对背景进行warp之后相减,来得到遮挡区域的mask Z。论文中做的更细致,使用了一个神经网络来refine Z

三、算法流程

这个插帧算法的框架如上图,计算大致分为几部:

  • 1. 输入是两帧图像,计算帧间光流。光流估计使用的是作者fine-tune之后的PWC-Net,作者说FlowNet2和FlowNet也具有比较好的效果。
  • 2. 计算特征金字塔 。特征金字塔提取使用的是下图所示的网络,右边的可视化结果是使用PCA得到的。
  • 3. 把光流和特征金字塔在Z的约束下进行softmax splatting。Mask Z也使用了一个小的三层U-Net来refine。整个过程还是端到端的训练。
  • 4. 将特征金字塔和原始图像一起送入图像合成网络,生成插帧后的图像。文正介绍这个网络特点的时候,也是表示监督纹理抽取和特征金字塔对预测结果很重要。图像生成网络使用了一种GridNet架构的网络(酷似U-Net)。作者还提到,为了避免棋盘格状的artifacts,作者修改了Niklaus的网络(这个要对比下pytorch的源码)。

最终训练好的网络在TitanX上跑720p视频能到0.357s,在1080p视频上能跑道0.807s,参数大小为31M

四、实验结果

醉着公布的数据,看最好使用fine-tuned Z 、  4 feature levels、fine-tuned PWC-Net、Loss使用Llap

作者用一张可视化的图表示,特征金字塔在大位移场景下比较重要,效果更好。

最后是一些横向方法的对比

附录一:Niklaus的Paper

论文大量介绍和这篇文章的不同,可以看出流程是以Niklaus Paper里面的流程为基础的,这里挂一下这篇paper: Context-Aware Synthesis for Video Frame Interpolation

更多的视频插帧方法可以在:Paper With Code 中查看

附录二:Splatting

在介绍论文之后,我们再了解下splatting(抛雪球):(这部分本身和论文关系不密切,主要是文章标题中出现了这个名字,拓展一下)

splatting算法,也称为足迹法,最初由Westover提出,以物体工件为序的直接体绘制算法。该方法把数据场中每个体素看作一个能量源,当每个体素投向图像平面时,用以体素的投影点为中心的重建核将体素的能量扩散到图像像素上。这个过程中,用一个称为足迹的函数计算每一体素投影的影响范围,用高斯函数定义点或者小区域像素的强度分布,从而计算出其对图像的总体贡献,并加以合成,形成最后的图像。由于这个方法模仿了雪球被抛到墙壁上所留下的一个扩散状痕迹的现象,因而取名为“抛雪球法”。

(1) 速度快。与光线投射法相比,抛雪球法的主要优点是速度较快。在光线投射中,要对沿光线的每个样本点(设共有k 个样本点) 进行重建,在每个样本点,要用k3 卷积过滤。平均来讲,即使n3 个体素的每一个只采样一次,光线投射至少有k3n3的时间复杂度。另一方面,在抛雪球法中,卷积被预计算,并且每个体素被准确溅射一次,每个抛雪球要求k2 次合成操作,所以,可望最多k2n3 的时间复杂度。这就使抛雪球法具有一个特有的速度优势。
(2) 图像质量不如光线投射。当然,人们可以使用较大的重建核来改进抛雪球法精度。
(3) 色彩扩散。基本的抛雪球算法按从后向前次序合成溅射时,不能精确地确定隐藏的背景物体的可见性,这样,隐藏的背景物体的色彩可能会扩散到结果图像上。
(4) 渐近细化。因为抛雪球法严格地按由前向后或由后向前的次序产生图像,通过观察图像的逐步生成过程就能看到数据场的内部信息,这一点从图像空间为序的技术中是得不到的。特别地,按由后向前的次序,可以看到后面最终被隐藏起来的物体结构。
(5) 效率问题。因为原始抛雪球法按某种次序遍历全部体素,计算成本与数据场的规模呈线性变化,与其内容无关。通常,只有数据场的一小部分包含着要绘制的物体,如典型的CT或MRI 数据中大部分包含着空气,空气很少被绘制。因此,通过只抛雪球溅射与要绘制物体相对应的那些体素,从而使计算时间得到节省,这是完全有可能的。据报道,数据场中70 %~90 %是不感兴趣的体素,这种情况并不少见。

《视频帧间插值(一)Softmax Splatting for Video Frame Interpolation》有2条留言

  1. 你好,我不太明白这里的,如何使用亮度恒常性来判断遮挡?
    用F0->1的光流将I1重新warp回I0然后和原始的I0做差只是残差而已,残差如何能代表遮挡呢?

    回复
    • 我理解亮度恒常性就是像素亮度差大于噪声的时候就判定成遮挡了
      遮挡Z是softmax splatting时候使用的,train 图像合成网络的时候输入是没有遮挡的

      回复

留下评论