[翻译]Video Frame Interpolation via Adaptive Convolution
通过自适应卷积的视频插帧
摘要
视频插帧通常涉及两个步骤:运动估计和像素合成。这种两步法的效果很大程度上取决于运动估计的质量。本文提出了一种鲁棒的视频插帧方法,该方法将这两个步骤组合为一个过程。具体来说,我们的方法将内插帧的像素合成视为两个输入帧上的局部卷积。卷积核捕获输入帧之间的局部运动以及用于像素合成的系数。我们的方法采用全卷积的深度神经网络来估计每个像素的空间自适应卷积核。可以直接使用大量的可用视频数据直接端到端地训练此深度神经网络,而无需像光流这样的难以获得的标准数据。我们的实验表明,将视频插值表述为单个卷积过程可以使我们的方法很好地处理诸如遮挡,模糊和亮度突然变化之类的问题,并实现高质量的视频插帧。
1. 介绍
插帧是一个经典的计算机视觉问题,对于诸如新颖的视图插值(view interpolation)和帧率转换等应用非常重要[36]。传统的插帧方法有两个步骤:运动估计(通常是光流)和像素合成[1]。在受遮挡,模糊和亮度突然变化的区域,光流通常很难估算。基于流的像素合成方法无法可靠地处理遮挡问题。这两个步骤中任何一个步骤的失败都会导致插帧视频帧中出现明显的伪像(artifacts)。
本文提出了一种通过深度卷积神经网络实现插帧的鲁棒视频插帧方法,并且无需将其明确划分为单独的步骤。我们的方法将像素插值视为对两个输入视频帧中相应图像块的卷积,并使用深度全卷积神经网络来估计空间自适应卷积核。具体来说,对于内插帧中的像素,深度神经网络将以该像素为中心的两个感知野块(receptive field patches)和作为输入,并估计卷积核。该卷积核用于与输入块和进行卷积来合成输出像素,如图1所示。
我们方法的一个重点是将像素插值表述为在像素块上的卷积,而不是依赖于光流。该卷积公式将运动估计和像素合成统一为一个过程。它使我们能够为视频插帧设计一个深度全卷积神经网络,而无需将插值划分为单独的步骤。该公式比基于光流的公式更灵活,并且可以更好地处理具有挑战性的插帧情景。此外,我们的神经网络能够估计能得出清晰结果的边缘感知卷积核。
本文的主要贡献是一种鲁棒的视频插帧方法,该方法采用全深度卷积神经网络来产生高质量的视频插值结果。该方法具有一些优点:首先,由于将视频插值建模为单个过程,因此它能够在相互竞争的约束之间做出适当的权衡,从而可以提供鲁棒的插值方法。其次,可以使用广泛的可用视频数据直接端对端地训练该插帧深度卷积神经网络,而无需像光流这样的难以获取的标准数据。第三,如我们的实验所示,我们的方法可以为具有挑战性的视频场景(例如具有遮挡,伪影模糊和亮度突然变化的视频)生成高质量的插帧结果。
2. 相关的工作
视频插帧是计算机视觉和视频的基本处理技术之一。视频插帧是基于图像的渲染的特例,并且根据时间上相邻的帧插入中间帧。[25、44、62]是关于图像渲染的优秀研究。本节重点研究视频插帧和我们的工作。
现有的大多数插帧方法使用立体匹配或光流算法在两个连续的输入帧之间进行密度运动(dense motion)估计,然后根据估计的密度对应关系插值一个或多个中间帧[1、53、61]。与这些方法不同,Mahajan等人开发了一种运动梯度方法,该方法可以估计输入图像中的路径,将适当的梯度复制到待插值的帧中的每个像素,然后通过泊松重建合成插值的帧[33]。所有上述方法的性能都取决于密度对应估计(dense correspondence estimation)的质量,并且在之后的图像合成中要特别注意处理诸如遮挡之类的问题。
作为基于显式运动估计方法的替代,基于相位的方法近来已显示在视频处理方面很有前景。这些方法在输入帧之间的相位差中编码运动,并利用相位信息进行诸如运动放大[51]和视图展开[6]之类的应用。 Meyer等人通过使用有界位移校正策略在定向的多尺度金字塔层次上传播相位信息,进一步扩展了这些方法以适应大型运动[36]。这种基于相位的插值方法可以产生非常好的视频插值结果,并可以轻松地处理具有挑战性的场景。但是,仍需要进一步改进来更好地保留帧间变化较大的视频中的高频细节。
深度学习在解决困难的视觉理解问题[16、20、26、28、39、40、42、45、54、60、64]以及其他计算机视觉问题,例如光流估计[9、14、19、48、49、52],样式转换[11、15、23、30、50]和图像增强[3、7、8、41、43、55、57、63、66 ]方面的成功,都激发了我们的工作灵感。我们的方法与最近的用于视图合成的深度学习算法[10、13、24、29、47、59、65]尤其具有相关性。 Dosovitiskiy等人[10],Kulkarni等人[29],Yang等人[59]和Tatarchenko等人[47]开发了深度学习算法,可以从输入图像渲染看不见的视图。这些算法适用于椅子和面部等物体,不是为一般场景视频的插帧而研发的。
最近,Flynn等人开发了一种深度卷积神经网络方法,用于从真实的输入图像中合成新的自然图像。他们的方法将输入图像投影到多个深度平面(depth planes)上,并在这些深度平面上组合颜色以创建的视图[13]。 Kalantari等人提供了一种基于深度学习的视图合成算法,用于光场成像的视图扩展。他们将新的合成过程分解为两个部分:视差和颜色估计,并使用两个卷积神经网络依次对这两个部分进行建模。这两个神经网络被同时训练[24]。 Long等人将插帧作为图像匹配的中间步骤[31]。然而,他们的内插帧往往是模糊的。周观察到同一物体的不同视图的视觉外观(appearance)是高度相关的,并设计了一种深度学习算法来预测外观流,该流用于选择输入视图中的适当像素以合成新视图[65]。给定多个输入视图,他们的方法可以通过使用相应的外观变换单个输入视图,然后将它们正确组合在一起,从而得到插值的新视图。
与这些方法一样,我们的深度学习算法也可以直接使用视频进行端到端的训练。与这些方法相比,我们的方法专用于视频感知野。更重要的是,我们的方法估计了可以同时捕获运动系数和内插系数的卷积核,并使用这些卷积核直接与输入图像进行卷积以合成中间视频帧。我们的方法不需要将输入图像投影到多个深度平面上,也不需要显式估计视差或外观流来处理输入图像并将它们组合在一起。我们的实验表明,将感知野公式化为单个卷积步骤,可以使我们的方法可靠地处理具有挑战性的情况。最后,使用卷积进行图像合成的想法在帧外插中也有所体现[12,22,58]。
3. 视频插值
给定两个视频帧和,我们的方法旨在时域的两个输入的视频帧中间插入帧。传统的插值方法通过两个步骤,通过光流进行的密度运动估计和像素插值,来估计像素的颜色。例如,我们可以为像素找到中的对应像素和中的对应像素,然后根据这些对应像素插值生成颜色。通常,此步骤还涉及对图像和进行重新采样以获得相应的值和,来产生高质量的插值结果,尤其是如图2(a)所示,当和不是整数坐标的时候。当由于阻塞,运动模糊和缺乏纹理而导致光流不可靠时,这个两步法可以进行折衷处理。此外,对坐标进行舍入来查找和颜色的时候容易出现混叠,并且使用固定的内核进行重采样有时不能很好地保留锐利的边缘。现在有先进的重采样方法,可以用于保留边缘的重采样,但需要高质量的光流估计。
我们的解决方案是将运动估计和像素合成结合成一个步骤,并将像素插值公式化为对输入图像和中的块进行局部卷积。如*图2(b)*所示,可以通过在相应的输入图像中以为中心的输入色块和上卷积适当的卷积核来获得要插值的目标图像中像素的颜色。卷积核通过捕获运动和重新采样系数以进行像素合成。通过卷积表示像素内插具有一些优点。首先,将运动估计和像素合成结合到一个步骤中提供了比两步过程更为强大的解决方案。其次,卷积内核提供了解决和解决诸如遮挡之类的困难情况的灵活性。例如,在遮挡区域中的光流估计是一个本质上很困难的问题,这使得典型的两步法难以进行,必须采取其他基于启发式的步骤,例如流插值。本文提供了一种数据驱动的方法来直接估计卷积核,该卷积核可以为被遮挡区域产生视觉上合理的内插结果。第三,如果进行了正确的估计,则该卷积公式可以无缝地与高级的重新采样技术(如边缘感知滤波)相结合以提供清晰的插值结果。
估计适当的卷积核对于我们的方法至关重要。受到使用深度学习算法进行光流估计[9、14、19、48、49、52]和图像合成[13、24、65]的成功的鼓舞,我们开发了一种使用深度卷积神经网络方法来估计适当的用来合成插值图像中的每个输出像素的卷积核的方法。各个像素的卷积核根据局部运动和图像结构而变化,以提供高质量的插值结果。下面我们描述用于卷积核估计的深度神经网络,然后讨论实现细节。
3.1 卷积核估计
我们设计了一个全卷积神经网络来估计每一个输出像素的卷积核。表1中详细列出了我们的神经网络的体系结构。具体来说,为了估计输出像素的卷积核,我们的神经网络采用了感知野块(receptive field patches)和作为输入。和在各自的输入图像中均以为中心。用来与输出内核进行卷积来生成输出像素颜色的块和也以为中心,但尺寸较小,如图1 所示。我们使用比块更大的感知野来更好地处理运动估计中的光圈问题。在我们的具体实现中,默认的感知野大小为79×79像素。卷积块大小为41×41,卷积核大小为41×82,这是因为卷积核用于与两个块的合并进行卷积。我们的方法对三个颜色通道应用相同的卷积核。
如表1 所示,我们的卷积神经网络由几个卷积层以及替代最大池化层的下卷积层组成。我们使用ReLU作为**函数,并使用Batch Normalization[21]进行正则化。由于我们的神经网络可以使用大量的可用视频数据进行端到端训练,能够提供足够大的训练数据集,因此我们没有采用其他技术进行正则化。我们还可以通过水平和垂直翻转训练样本以及颠倒它们的顺序来进行数据增强。我们的神经网络是完全卷积的。因此,它不局限于固定大小的输入,而且如第3.3节所述,我们能够使用平移和拼接技术[17,32,39]为多个像素同时生成内核,从而加快我们的方法的运行速度。
一个关键的约束是输出卷积核的系数应为非负数且总和为1。因此,我们将最终的卷积层连接到空间softmax层以输出卷积核,这能够隐含地满足这一重要约束。
3.1.1 损失函数
为了清楚起见,我们首先定义符号。 第个训练示例包括两个以为中心的输入感知野块和,相应的输入块和尺寸小于感知野块并且也以为中心,定义处的标准颜色和梯度。 为了简单起见,我们在损失函数的定义中省略了。
我们的深度卷积神经网络的一种可能的损失函数可能是插值像素颜色和标准颜色之间的差异,如下所示
其中下标表示第个训练示例,而是我们的神经网络输出的卷积核。我们的实验表明,即使仅使用L1范数的颜色损失也会导致模糊的结果,如图3 所示。最近的一些工作中也报道了这种模糊问题[31,34,38]。 Mathieu等人的结果表明,通过在损失函数中加入图像梯度可以缓解这种模糊问题[34]。由于无法从单个像素直接计算图像梯度,因此在我们的逐像素插值方法中很难做到这一点。由于微分也是卷积,假设卷积核在局部是相同的,我们通过使用卷积的关联属性来解决此问题:首先计算输入块的梯度,然后与估计的内核进行卷积,这样就可以求得插值图像在感兴趣像素处的梯度。由于一个像素具有八个直接相邻的像素,因此我们使用有限差分计算八个梯度,并将它们全部合并到我们的梯度损失函数中。
其中表示我们计算出的八个梯度之一。和是输入块和的梯度,并且是标准图像的梯度。我们将之前的色彩和梯度损失函数组合为最终的顺势函数。我们发现表现最好所以令。如图3 所示,色彩加梯度的损失函数可以让我们的方法生成更清晰的插值结果。
3.2 训练
我们从一个在线视频集合中获取了训练数据集,本节稍后将对此进行详细介绍。 为了训练我们的神经网络,我们使用Xavier初始化方法[18]初始化其参数,然后使用AdaMax [27]来最小化损失函数,其中,每个mini-batch的学习率为0.001并且大小为128个样本。
3.2.1 训练数据集
我们的损失函数只基于标准视频帧,不需要任何其他标准信息,例如光流。因此,我们可以利用大量的在线可用视频来训练我们的神经网络。为了便于重现我们的结果,我们使用了具有知识共享许可的Flickr的公开视频。我们使用诸如“驾车”,“跳舞”,“冲浪”,“骑行”和“滑雪”之类的关键字下载了3000个视频,来提高数据集多样性。我们将下载的视频缩放到1280×720像素的固定大小。我们删除了隔行扫描的视频,这些视频有时质量比逐行扫描格式的视频低。
为了生成训练样本,我们将剩余的每个视频中的所有帧分为三帧一组,每个组包含视频中的三个连续帧。然后,我们在每个组中随机选择一个像素,并从视频帧中提取一个以该像素为中心的三块组(triple-patch group)。为了进行数据扩充,选择的块要比神经网络所需的感知野块大。我们训练数据集中的块大小为150×150像素。为了避免包含大量没有运动或运动很少的样本,我们估计了三帧组[46]中第一帧和最后一帧的块之间的光流,并计算了平均流大小。然后,我们对500000个triple-patch group进行采样,并且没有根据流大小进行替换:与运动较小的triple-patch group相比,运动较大的triple-patch group更可能被选择。这样,我们的训练集就可以包含有着大范围运动的样本,同时避免全是运动幅度小的块。由于某些视频包含许多镜头(shot),因此我们计算块之间的颜色直方图以检测镜头边界并删除镜头边界上的组。此外,纹理很少的样本对于训练我们的神经网络也不太有用。因此,我们计算每个样本中块的熵,最后选择250000个熵最大的triple-patch group,以形成训练数据集。在此训练数据集中,大约10%的像素的估计流至少为20像素。最大的5%的平均大小约为25个像素,流最大为38个像素。
我们在训练过程中会即时进行数据扩充。神经网络所需的感受野大小为79×79,小于训练样本中的块大小。因此,在训练过程中,我们从每个训练样本中随机裁剪了感受野块。我们进一步在水平和垂直方向上随机翻转样本,并随机交换其时间顺序。这可以迫使样本内的光流对称地分布,以使神经网络不会偏向某个方向。
3.3 实现细节
我们使用Torch[5]实现我们的神经网络。下面我们将描述一些重要的细节
3.3.1 移位和拼接的实现
将我们的神经网络应用于感知野的一种直接方法是估计卷积核并逐一合成插值像素。当将两组相邻的块对通过神经网络来估计两个对应像素的卷积核时,我们的神经网络的逐像素应用将不必要地执行冗余计算。我们的实现采用移位和拼接的方法来解决此问题,以加快系统速度[17、32、39]。
具体来说,由于我们的神经网络是完全卷积的,并且不需要固定大小的输入,它可以通过提供比产生一个内核所需的输入更大的输入,一次计算多个输出像素的内核。这可以减轻冗余计算的问题。但是,以这种方式获得的输出像素不相邻,而是稀疏分布。我们采用移位和拼接[17、32、39]方法,其中使用了相同输入的稍有移位的版本。此方法返回稀疏结果,可以将其组合以形成插值帧的密集表示。
考虑一个尺寸为1280×720的帧,我们的神经网络的像素化实现将需要进行921,600次前向过程。我们的神经网络的移位和拼接实现仅需要对输入的64种不同移位版本进行64次正向过程即可应对三个下卷积的缩放。与Nvidia Titan X上每帧花费104秒的逐像素实现相比,移位和拼接实现仅花费9秒。
3.3.2 边界处理
由于网络的感知野以及卷积核的大小,我们需要填充输入帧以合成内插帧的边界像素。 在我们的实现中,我们采用零填充。 我们的实验表明,这种方法通常效果很好,并且不会引入明显的伪像。
3.3.3 超参数选择
卷积核的大小和感知野的大小是我们深度神经网络的两个重要的超参数。从理论上讲,如图2所示,卷积内核必须大于两个帧之间的像素运动,才能(隐式)捕获运动以产生良好的插值结果。为了使我们的神经网络对大运动具有鲁棒性,我们倾向于选择大内核。另一方面,大内核包含大量要估计的值,这增加了我们的神经网络的复杂性。我们选择选择一个足够大的卷积核,以捕获训练数据集中最大的运动,即38个像素。特别地,如图1 所示,我们系统中用于两个41×41块的卷积核大小为41×82。我们将此卷积核核设置为比38像素大几个像素,以便为重采样提供像素支持。重采样的方法不会显式执行,而是隐藏在在内核中。
如前所述,感知野大于卷积核可以很好地处理孔径问题(aperture problem)。但是,较大的感知野需要更多的计算,并且对运动更不敏感。我们使用验证数据集选择感知野,发现79×79达到了良好的平衡。
4. 实验
我们将我们的方法与最新的视频帧插值方法进行了比较,包括最近的基于相位的插值方法[36]和一些基于光流的方法。 我们实验中的光流算法包括MDP-Flow2 [56],根据Middlebury基准,目前它可以产生最低的插值误差,还有来自Brox等人的方法[2],以及两种基于深度学习的新方法,即 DeepFlow2 [52]和FlowNetS [9]。 继最近的帧插值工作[36]之后,我们使用来自Middlebury基准[1]的插值方法使用光流结果合成插值帧。 或者,也可以使用其他基于图像的高级渲染算法[67]。 对于两种基于深度学习的光流方法,我们直接使用来自作者网站的训练模型。
4.1 比较
我们在Middlebury光流量基准[1]上定量评估我们的方法。 如表2 所示,我们的方法在具有真实场景的四个示例中表现出色。 在Middlebury基准测试中报告的100多种方法中,我们的方法在Evergreen和Basketball上达到最佳,在Dumptruck上排名第二,在Backyard上排名第三。 我们的方法在其他四个合成的或实验室场景的示例中效果不佳,部分原因是我们在具有真实场景的视频上训练了我们的网络。 定性地,我们发现我们的方法通常可以在具有挑战性的区域中产生更好的结果。
模糊:图4 显示了两个示例,其中输入视频遭受了离焦模糊(顶部)和运动模糊(底部)的困扰。模糊区域对于光流估计通常具有挑战性。因此,插值结果中的这些区域会出现明显的伪影。我们的方法和Meyer等人[36]的基于相位的方法。可以更好地处理模糊区域,而我们的方法可以产生更清晰的图像,尤其是在运动较大的区域,例如底部示例中的帽子右侧。
亮度突然变化:如图5 所示,突然的亮度变化违反了亮度一致性假设并损害了光流估计,从而导致帧插值中出现伪像。在此示例中,我们的方法和基于阶段的方法比基于流的方法生成更具视觉吸引力的插值结果。
遮挡:光流估计的最大挑战之一是遮挡。当在遮挡区域中光流不可靠或不可用时,帧插值方法需要填充空洞,例如通过对来自相邻像素的流进行插值[1]。我们的方法采用一种学习方法来获取适当的卷积核,从而为遮挡区域带来视觉上吸引人的像素合成结果,如图6 所示。
为了更好地了解我们的方法如何处理遮挡,我们检查了被遮挡区域中像素的卷积核。如图1 所示,卷积内核可以分为两个子内核,每个子内核用于与两个输入块之一进行卷积。为了便于说明,我们计算每个子内核的质心,并在相应的输入色块中使用x对其进行标记,以指示输出像素在何处获得其颜色。图7 显示了一个示例,其中白色的叶子从第1帧向上移动到第2帧。可以在覆盖两个输入帧的左侧图像中看到遮挡。对于此示例,绿色x指示的像素在两个帧中均可见,并且我们的内核显示该像素的颜色是从两个帧中插入的。相比之下,红色x表示的像素仅在第2帧中可见。我们发现第1帧的子内核中所有系数的总和几乎为零,这表明第1帧对此像素没有贡献,因此pixel仅从第2帧获得其颜色。类似地,青色x表示的像素仅在第1帧中可见。我们的内核正确地说明了这种遮挡,并且仅从第1帧获得了其颜色。
4.2 边缘感知像素插值
上文中,我们讨论了估计的卷积核如何适当地处理遮挡以进行帧插值。现在,我们检查这些内核如何适应图像特征。在图8 中,我们对插值图像中的三个像素进行了采样。我们在底部显示它们的内核。像素与其卷积核之间的对应关系通过颜色建立。首先,对于所有这些内核,只有极少数的内核元素具有非零值。(在我们的神经网络中使用空间softmax层已经保证了内核元素的值是非负的并且总和为1)。此外,所有这些非零元素在空间上都被组合在一起。这与典型的基于流的插值方法很好地吻合,该方法在两个帧中找到相应的像素或其邻域,然后进行插值。
其次,对于平坦区域(如绿色x所示)的像素,其内核只有两个具有有效值的元素。这两个内核元素中的每一个都对应于相应输入帧中的相关像素。这也与基于流的插值方法相一致,尽管我们的神经网络并未明确建模帧插值过程。
第三,更有趣的是,对于沿图像边缘的像素(例如由红色和青色x指示的像素),内核是各向异性的,并且其方向与边缘方向很好地对齐。这表明我们的神经网络学会了估计能够启用边缘感知像素插值的卷积核,这对于产生清晰的插值结果至关重要。
4.3 讨论
由于我们的方法的基于像素的特点,我们的方法可扩展到大图像。此外,神经网络的移位和拼接实现使我们既可以并行处理多个像素,又可以减少计算这些像素的卷积核时的冗余度。在单个Nvidia Titan X上,对于640×480图像,此实现需要大约2.8秒的时间和3.5G的内存,对于1280×720的图像需要9.1秒和4.7 GB的像素,对于1920×1080的图像则需要21.6秒。通过修改我们的网络以直接合成像素来建立基准神经网络,如图9 所示,对于Sintel基准测试[4],我们发现该基准产生了模糊的结果。在同一幅图中,我们进一步展示了与Long等人[31]的方法的比较,Long等人[31]的方法执行视频帧内插作为光流估计的中间步骤。尽管他们的结果比我们的基准要好,但仍然不如我们的结果清晰。
我们的方法可以处理的运动量必然受到神经网络中卷积核大小的限制,该大小目前为41×82。如图10所示,我们的方法可以很好地处理41个像素以内的运动。但是,我们的系统当前无法处理超过41像素的任何大运动。图11显示了一对来自KITTI基准测试的立体图像[35]。当使用我们的方法在左右视图之间插入中间帧时,由于较大的视差(超过41个像素),汽车变得模糊了,如(c)所示。将输入图像缩小为原始尺寸的一半后,我们的方法进行了很好的插值,如(d)所示。将来,我们计划通过探索多尺度策略(例如用于光流估计的策略)来解决此问题[37]。
与基于光流或基于相位的方法不同,我们的方法目前仅能够在两个给定帧之间插入单个帧,因为我们的神经网络经过训练可以插入中间帧。 虽然我们可以递归地继续合成以在例如t = 0.25和t = 0.75处插入帧,但是我们的方法无法在任意时间插入帧。 从最近的工作中借用视图合成[10、24、29、47、65],并扩展我们的神经网络,使其可以将变量作为输入来控制插值的时间步长,以便像基于流或基于阶段的方法一样插值任意数量的帧。
5. 结论
本文提出了一种视频帧插值方法,该方法将帧插值算法的两个步骤(运动估计和像素插值)组合为具有两个输入帧的单步局部卷积。 卷积内核捕获运动信息和重新采样系数以进行适当的像素插值。 我们开发了一个深层全卷积神经网络,该网络能够估计空间自适应的卷积核,从而使边缘感知像素合成能够产生清晰的内插结果。 可以直接从大量的可用视频数据中训练该神经网络。 我们的实验表明,我们的方法可以实现高质量的帧插值,并且可以很好地处理具有挑战性的情况(例如遮挡,模糊和亮度突然变化)。