首页 > 技术文章 > 【转】FlowNet翻译

hf19950918 2019-02-16 17:13 原文

转自:https://blog.csdn.net/weixin_42164269/article/details/80613782

摘要

卷积神经网络(CNNs)最近在各种计算机视觉任务中非常成功,特别是那些与识别有关的任务。光流量估计并不在CNN能够成功完成的任务当中。本文提出了一种能够将光流估计问题作为监督学习任务的CNNs。我们提出并比较两个架构:一个通用架构和另一个架构,包括一个在不同的图像位置关联特征向量的层。由于现有的地ground truth数据集不够大,不足以训练CNN,所以我们生成了一个大型的合成Flying Chairs dataset。我们发现,在这种不现实的数据上训练的网络,仍然可以很好地推广到现有的数据集,比如Sintel和KITTI,在5到10 fps的帧率上达到了有竞争的精度。

1.介绍

卷积神经网络已成为计算机视觉的许多领域被选择使用的方法。它们通常适用于分类 [25, 24],但是最近提出的架构也允许对每个像素的预测,如语义分割[28]或对单个图像的深度估计[10]。在本文中,我们提出端到端的训练CNNs,学习对一对图片预测光流场。

虽然光流估计需要精确的定位每个像素,但它也需要在两个输入图像之间找到对应关系。这不仅涉及到学习图像特征表示,还包括学习如何在两个图像的不同位置匹配它们。在这方面,光流估计与以前的CNNs应用有本质上的不同。

由于不清楚这个任务是否可以用标准的CNN架构来解决,我们还额外开发了一个具有相关性层的结构,该层显式提供匹配功能。这种结构是端到端训练的。我们的想法是利用卷积神经网络的能力,在多个尺度和抽象层次上学习强大的特性,并帮助基于这些特征找到实际的对应关系。在相关层之上的层学习如何从这些匹配中预测光流。令人惊讶的是,用这种方式帮助网络是不必要的,即使是原始网络也能学会预测光流动。

训练一个网络来预测一般的光流需要一个足够大的训练集。尽管数据增加确实有帮助,但是现有的光流数据集仍然太小,不足以训练一个与艺术状态相媲美的网络。对于现实的视频材料来说,获得光流场的ground truth是非常困难的。在现实和数量之间平衡,我们生成了一个合成的Flying Chairs dataset,它由来自Flickr的随机背景图像组成,我们将它们和[1]中分割的图片叠加在一起。这些数据与现实世界没有什么共同之处,但是我们可以用定制的属性生成任意数量的样本。在这些数据上进行训练的CNNs,即使没有进行微调,也能很好地推广到现实中的数据集。

利用CNNs高效的GPU实现,我们的方法比大多数竞争对手都要快。我们的网络在Sintel数据集的完整分辨率下预测光流高达每秒10个图像对,在实时方法中达到最先进的精确度。

2. 相关工作

光流。自 Horn and Schunck [19]的工作以来,变分方法一直主导着光流估计。许多改进已经被引入[29, 5, 34]。最近的焦点是大规模的位移,组合匹配已经被集成到变分方法中[6,35]。[35] 的工作被称为Deep-Matching,并且 DeepFlow与我们的工作有关,它通过稀疏的卷积和最大池从细到粗的聚合特性信息。但是,它不执行任何学习,所有的参数都是手动设置的。继承工作[30]被称为EpicFlow,更强调了稀疏匹配的质量,因为[35]中的匹配只是在图像边界的情况下被插入到密集的光流场中。我们只使用一个变分方法来对卷积网络所预测的流场进行可选的细化,并且不需要任何手工方法来进行聚合、匹配和插值。

几位作者之前已经将机器学习技术应用于光流。Sun等人 [32]研究光流统计数据,并使用高斯比例混合学习规则; Rosenbaum等人[31]使用高斯混合模型建立光流的局部统计模型。Black等人[4]计算训练集光流场的主要组成部分。为了预测光流,他们估计了这些’basis flows’的线性组合的系数。其他方法训练分类器在不同的惯性估计中选择 [21] 或获得遮挡概率[27]。

在使用神经网络模型的视频帧之间,已经有了关于不受监督的学习差异或运动的研究。这些方法通常使用乘法交互来模拟一对图像之间的关系。然后可以从潜在的变量中推断出差异和光流。泰勒等人用分解的受限的、受限制的、有限制的、有限制的机器来完成任务。Konda和Memisevic 23使用了一种叫做“同步自动编码器”的特殊自动编码器。虽然这些方法在受控的设置中很好地工作,并且学习了在视频中对活动识别有用的特性,但是它们在现实的视频中并没有与经典的方法竞争。

卷积网络。用反向传播25的卷积神经网络最近被证明在Krizhevsky等人的大规模图像分类中表现良好。这使得在各种计算机视觉任务中应用cnn的工作开始激增。

虽然目前还没有研究用CNNs进行光学流动的研究,但已经有了与神经网络相匹配的研究。菲舍尔等人12种提取的特征表示,在受监督或无人监督的情况下接受训练,并根据欧氏距离来匹配这些特征。Zbontar和LeCun 36训练CNN的一个暹罗架构来预测图像的相似度。这些方法与我们的方法有很大的不同,那就是它们是基于补丁的,并且将空间聚合留给后处理,而本文中的网络直接预测了完整的流场。

CNNs最近的应用包括语义划分11、15、17、28、深度预测10、关键点预测17和边缘检测13。这些任务类似于光流估计,因为它们涉及到每个像素的预测。由于我们的体系结构很大程度上受到了这些像素预测任务最近的进展的启发,我们简要地回顾了不同的方法。

最简单的解决办法是在“滑动窗口”中应用传统的CNN,因此为每个输入图像8、11计算一个单一的预测(例如类标签)。这种方法在许多情况下都很有效,但也有缺点:高计算成本(即使使用了优化的实现,包括重新使用中间特性图)和每个补丁的特性,不允许考虑全局输出属性,例如锐边。另一种简单的方法是将所有的特性图都添加到所需的全部分辨率,并将它们堆叠在一起,从而形成一个连接的每个像素特征向量,可以用来预测感兴趣的值。

艾根等人通过训练一个额外的网络来完善一个粗糙的深度地图,这个网络可以作为输入的粗略预测和输入图像。Longetal。28和Dosovitskiy等人9次迭代地改进粗糙的功能图,并使用“向上卷积”层。我们的方法融合了两种作品的思想。与Long等人不同,我们的“卷积”不仅是粗糙的预测,还包括整个粗糙的特征图,允许将更多的高级信息传输到精细的预测中。与Dosovitskiy等人不同的是,我们将“up卷积”的结果与网络的“收缩”部分连接起来。


3.网络结构

给出了足够的标记数据,卷积神经网络被认为非常擅长学习输入——输出关系。因此,我们采用一种端到端的学习方法来预测光流:给定一个数据集包含图像对和ground truth flows,我们训练一个网络来直接从图像中预测x-y光流场。但是,为了达到这个目的,什么是好的架构呢?

为了使网络训练在计算上可行,而且更根本的是允许在输入图像的大范围内聚合信息,池化必要的。但是,池的导致分辨率降低,所以为了提供密集的像素预测,我们需要细化粗糙的池化表示。为了达到这个目的,我们的网络包含了一个扩展的部分,它可以智能地细化光流到高分辨率。包含收缩和扩展部分的网络,通过反向传播来进行整体训练。我们使用的架构在图2和图3中描述。现在,我们更详细地描述了网络的两个部分。

contractive部分。一个简单的选择是将两个输入图像叠加在一起,并将他们喂给一个相当通用的网络,从而允许网络自行决定如何处理图像对以提取运动信息。图2(上图)说明了这一点。我们称这个只包含卷积层的架构“FlowNetSimple”。

另一种方法是为这两个图像创建两个独立但相同的处理流,并在稍后的阶段将它们组合在一起,如图2(底部)所示。有了这个体系结构,网络就被限制首先获取这两个图像进行有意义的表示,然后在一个更高的层次上将它们组合。这与标准匹配方法类似,当第一次从两个图像的patches中提取特征,然后比较这些特征向量。然而,给定两个图像的特征表示,网络如何找到对应的信息?

为了在这个匹配的过程中帮助网络,我们引入了一个“关联层”,它在两个特性图之间执行乘法patch比较。图2(下图)显示了包含这一层的网络架构“FlowNetCorr”的说明。给定两个多通道特征映射f 1,f 2:R^2->R^c,其中w、h和c是它们的宽度、高度和通道数,我们的相关层让网络比较f 1和f 2的每个patch。

目前,我们只考虑对两个patch进行比较。在第一张图中,第一个映射的patch的中心x_1,第二个映射中patch的中心x_2,两个patch的“相关性”被定义为

对于一个大小为K=2k+1的正方形patch。请注意,Eq.1与神经网络中的卷积的一个步骤是相同的,但它不是用过滤器与数据进行卷积,而是将数据与其他数据进行卷积。由于这个原因,它没有可训练的参数。

计算c(x_1,x_2)涉及到c*K^2的乘法。比较所有的patch组合涉及到w^2*h^2这样的计算,产生一个大的结果,使有效的向前和向后的传递变得棘手。因此,出于计算原因,我们限制了比较的最大位移,并在两个特征图中引入了步长。

给定最大位移d,对于每一个位置x1,我们只在大小为D=2d+1的范围内计算相关性c(x_1,x_2),通过限制x_2的范围。我们使用步长s_1和s_2,在全局上量化x_1,并在围绕着以x_1为中心量化x 2。

从理论上讲,这种相关性产生的结果是四维的:对于两个二维位置的组合,我们得到了一个相关值,即两个向量的标量积,它们分别包含了剪裁的patches的值。在实践中,我们组织了通道中的相对位移。这意味着我们获得了一个大小为(w*h*d^2)输出。对于反向传播,我们对每个底部的块进行了相应的求导。

扩大的部分。扩展部分的主要组成部分是“upconvolutional”层,由unpooling(扩展特性图,和pooling相反)和一个卷积组成。这些层以前被使用过 [38, 37, 16, 28, 9]。为了进行改进,我们将“向上卷积”应用到特征图中,并将其与来自网络“contractive”部分的相应特征图连接起来,并使用一个向上采样的粗流预测(如果可用的话)。通过这种方式,我们既保留了较粗的特征图所传递的高级信息,也保留了底层特征图中提供的精细的局部信息。每一步都增加到2倍的分辨率。我们重复这个4次,结果是一个预测的光流,分辨率仍然比输入小4倍。总体架构如图3所示。我们发现,与计算成本较低的双线性向上采样相比,该分辨率的进一步改进并没有显著改善结果。

变分优化。在一个替代方案,在最后阶段不是双线性上采样,我们使用[6]中的变分方法,没有匹配的术语:我们从4倍的下采样分辨率开始,然后使用粗到细的计划进行20迭代,并将光流用到整个分辨率。最后,我们在完整的图像分辨率下运行了5个迭代。我们还用[26]的方法来计算图像边界,并通过用α = exp(−λb(x,y) κ ),代替平滑系数来计算检测到的边界,b(x,y)表示在各自的尺度和像素之间重新采样的细边界强度。这种向上扩展的方法比简单的双线性向上采样要复杂得多,但它增加了变分方法的优点,以获得平滑和像素精确的光流场。在下面,我们用一个“+v”后缀来表示这个变分改进所得到的结果。图4中可以看到一个变分改进的例子。

4. 训练数据

与传统方法不同的是,神经网络需要具有ground truth的数据,不仅要优化几个参数,还要从头开始学习执行任务。一般来说,获得这样的ground truth是很难的,因为真实世界场景的真实像素对应很难被确定。表1给出了可用数据集的概述。

 

4.1. 现存数据集

Middlebury数据集2只包含[2]个用于训练的图像对,使用四种不同的技术生成 ground truth光流。位移非常小,通常低于10个像素。

KITTI数据集 [14]更大(194个训练图像对),包括大量的位移,但只包含一个非常特殊的运动类型。ground truth是通过一个照相机和一个3D激光扫描仪来记录的真实世界场景。这假设场景是刚性的,运动是由一个移动的观察者产生的。此外,遥远物体的运动,如天空,不能被捕捉,从而导致稀疏的光流场ground truth。

MPI Sintel[7]数据集从渲染的人工场景中获得 ground truth,并对现实的图像属性进行了特别的关注。提供了两个版本:最终版本包含了运动模糊和大气效果,比如雾,而干净的版本不包括这些效果。Sintel是最大的数据集(每个版本都有1041个训练图像对),并为小和大的位移大小提供了密集的ground truth。

4.2. Flying Chairs

Sintel的数据集仍然太小,无法训练大型的CNN。为了提供足够的训练数据,我们创建了一个简单的合成数据集,我们将其命名为“Flying Chairs”,通过将仿射转换应用到从Flickr收集的图像,以及一组公开的3D椅子模型的渲染图。我们从Flickr中检索964张图片,分辨率为1024x768,来自“城市”(321)、“风景”(129)和“山”(514)。我们将图像切割成4个象限,并使用裁剪产生的512x384图像作为背景。我们从[1]中添加多个椅子图片到背景作为前景目标。从原来的数据集,我们去掉了非常相似的椅子,产生了809个椅子类型和每个椅子62个图片。示例如图5所示。

为了产生运动,我们对背景和椅子随机抽取二维仿射参数。这些椅子的转换是相对于背景变换的,它可以被解释为摄像机和物体移动。利用变换参数,生成第二幅图像, ground truth光流和遮挡区域。

对每个图像对,所有参数(数量、类型、大小和椅子的初始位置;转换参数)都是随机抽样的。我们调整这些参数的随机分布,使产生的位移直方图类似于Sintel(细节可以在补充材料中找到)。使用这个过程,我们生成一个数据集,其中包含22,872个图像对和流场(我们多次重用每个背景图像)。请注意,这个大小是任意选择的,原则上可以更大。

4.3. 数据扩充

一种被广泛使用的改进神经网络泛化的策略是数据增强[24, 10]。尽管Flying Chairs数据集相当大,但我们发现使用增强是避免过拟合的关键。我们在网络训练期间进行在线进行增强。我们使用的增强包括几何变换:平移、旋转和缩放,以及加高斯噪声和亮度、对比度、伽马和颜色的变化。为了合理的快速,所有这些操作都是在GPU上处理的。图5给出了一些增强的例子。

由于我们不仅要增加图像的多样性,而且要增加流场的多样性,我们对一对图像应用相同的强几何变换,但在这两个图像之间的相对变换也更小。

具体地说,我们从图片宽度x和y[-20%,20%]范围内采样变换;旋转 [−17 ◦ , 17 ◦ ];缩放从[0.9,2.0]。高斯噪声的抽样分布是0 0.04;对比度是在 [−0.8, 0.4];每张图片RGB通道颜色从 [0.5, 2];gamma值[0.7, 1.5],更新的亮度变换使用sigma 为0.2的高斯。

5. 实验

我们报告了我们的网络在Sintel、KITTI和Middlebury数据集的结果,以及我们的合成Flying Chairs数据集。我们还试验了在Sintel数据上对网络微调,以及对预测流场的变分改进。此外,与其他方法相比,我们报告了我们网络的运行时间。


5.1. 网络和训练细节

我们所训练的网络的确切架构如图2所示。总的来说,我们试图保持不同网络的架构是一致的:它们有9个卷积层,其中6个步长是2(最简单的池形式),每一层斗都有都有一个非线性的ReLU。我们没有任何全连接层,这使得网络可以将任意大小的图像作为输入。在更深的网络层方向卷积滤波器的大小会减少:第一层的7x7,下面两层的5x5,从第4层开始的3x3。在更深层的层中,特征图的数量增加,每一个步长为2的层都增加了2倍。对于FlowNetC中的相关层,我们选择了参数k=0,d=20,s_1=1,s_2=2。作为训练损失,我们使用了endpoint error (EPE),这是光流估计的标准误差测量方法。它是预测的光流向量和ground truth之间的欧氏距离,在所有像素上平均超。

为了训练CNNs,我们使用了一个修改版的caffe[20]框架。我们选择Adam [22]作为优化方法,因为对于我们的任务,它显示的收敛速度快于标准的带有动量的随机梯度下降。如[22]推荐的那样,我们固定Adam的参数: β_1 = 0.9 and β_2 = 0.999。因为,从某种意义上说,每个像素都是一个训练样本,我们使用相当小的小批量的8个图像对。我们从学习速率从 λ = 1e−4开始,然后在第一个300 k之后,每100 k次迭代除以2。使用FlowNetCorr,我们可以观察到λ = 1e−4梯度爆炸。为了解决这个问题,我们从一个非常低的学习率 λ = 1e−6开始,在10 k次迭代之后慢慢地将它增加到 λ = 1e−4,然后按照刚才描述的时间表进行。

为了在训练和微调过程中监测过度拟合,我们将 Flying Chairs的数据集分成了22,232个训练和640个测试样本,并将Sintel训练集分成908个训练和133个验证对。

我们发现在测试过程中增加输入图像可以提高性能。尽管最优的规模取决于具体的数据集,但是我们为每个网络所有任务固定了的规模。对于FlowNetS来说,我们并不上采样,对于FlowNetC我们选择了1.25的因数。

微调。所使用的数据集在对象类型和它们所包含的运动方面是非常不同的。标准的解决方案是在目标数据集上对网络进行微调。KITTI数据集很小,只有稀疏的流场ground truth。因此,我们选择在Sintel训练集上进行微调,我们使用来自Sintel的干净和最终版本的图像,并在使用低学习率λ = 1e−6迭代几千次进行微调。为了获得最佳性能,在定义了使用验证集的最佳迭代次数之后,我们将对整个训练进行微调,以获得相同数量的迭代。在表格中,我们表示带有“+ft”后缀的finetuned网络。

5.2. 结果

表2显示了我们的网络的endpoint error (EPE) 和公共数据集(Sintel、KITTI、Middlebury)的几个性能良好的方法,以及我们的Flying Chairs据集。另外,我们展示了在Sintel上不同方法的运行时间。

网络在不真实的Flying Chairs,在真实正的光学流数据集上表现得很好,例如打败了著名的LDOF [6]方法。在Sintel进行微调之后,我们的网络可以Sintel Final和KITTI数据集中优于实时的方法,并且速度是它的两倍。

Sintel。从表2中可以看出,FlowNetC比FlowNetS在Sintel Clean上好,而在Sintel Final,情况发生了变化。在这个困难的数据集上,FlowNetS+ft+v甚至与DeepFlow持平。由于平均end-point 错误通常倾向于过于平滑的解决方案,因此我们的方法的定性结果很有趣。图6显示了两个FlowNets(没有微调)所预测的原始光流的例子,与ground truth and EpicFlow对比。该图显示了网络通常如何产生视觉上吸引人的结果,但在endpoint错误方面仍然更差。仔细观察一下就会发现,其中一个原因可能是网络的非平滑输出,尤其是在大的光滑的背景区域。我们可以用不同的改进来部分补偿。

KITTI。KITTI数据集包含强大的映射转换,这与网络在训练Flying Chairs训练时遇到的非常不同。尽管如此,原始的网络输出已经相当不错了,额外的微调和变分的细化会带来进一步的提升。有趣的是,Sintel的微调改善了KITTI的结果,可能是因为Sintel中图像的动作比在 Flying Chairs上更自然。在这个数据集上,flownetS优于FlowNetC

Flying Chairs。我们的网络是在Flying Chairs上训练的,因此人们期望在这些椅子上表现最好。在训练时,我们不考虑由640张图片组成的测试集。表2显示了这个测试集中的各种方法的结果,一些示例预测显示在图7中。我们可以看到,FlowNetC的表现优于FlowNetS和于有最先进的方法。另一个有趣的发现是,这是唯一的数据集,在这种情况下,变分的细化不会提高性能,但会使事情变得更糟。显然,网络可以比各种各样的改进做得更好。这表明,通过更实际的训练集,网络可能在其他数据上表现得更好。

时间。在表2中,我们显示每帧在几秒钟内不同方法的运行时间。不幸的是,许多方法只在单个CPU上提供运行时,而我们的FlowNet只使用GPU来实现。虽然网络的错误率低于先进的水平,但它是实时方法中最好的。对于网络的训练和测试,我们使用的是NVIDIA GTX Titan GPU。DeepFlow和EpicFlow的CPU时间是从 [30]获得的,而LDOF的计时是在一个2.66 GHz的内核上计算的。

5.3. 分析

训练数据。为了检查我们是否从使用Flying Chairs 数据集而不是Sintel中获益,我们在Sintel上训练了一个网络,留出了一个验证集来控制性能。多亏了积极的数据扩充,即使是Sintel也足以很好地学习光流。在Sintel进行测试时,专门在Sintel上进行训练的网络其EPE比在Flying Chairs上训练并对Sintel进行微调的网络要高1个像素。

Flying Chairs数据集相当大,所以数据扩充仍然是必要的吗?答案是肯定的:在不增加数据的情况下训练一个网络,在Sintel测试中会增加大约2个像素。

比较架构。表2中的结果允许我们对我们测试的两个架构的优势和劣势得出结论。

首先,FlowNetS在Sintel Final优于FlowNetC。另一方面,FlowNetC在Flying chairs and Sintel Clean上表现优于FlowNetS。请注意,Flying chairs不包括运动模糊或雾,就像在Sintel Final中一样。这些结果共同表明,尽管两个网络的参数数量几乎相同,但FlowNetC的参数略高于训练数据。这并不意味着网络会记住训练样本,但它会适应训练过程中所呈现的数据类型。尽管在我们目前的设置中,这可能被视为一个弱点,如果有更好的培训数据可用,它将成为一个优势。

其次,FlowNetC在大位移问题上似乎有更多的问题。这可以从上面讨论的KITTI的结果中看到,也可以从Sintel Final的详细性能分析中看到(表中没有显示)。flownetS+ft实现了s40+错误(在像素上以至少40像素的位移)为43.3 px,而对于FlowNetC+ft来说,这个值是48 px。一种解释是,这种相关性的最大位移不允许预测非常大的运动。这个范围可以增加,但是以计算效率为代价。

6. 结论

基于最近在卷积网络架构设计方面的进展,我们已经证明了可以训练一个网络来直接预测来自两个输入图像的光流。有趣的是,训练数据不一定是现实的。人工Flying Chairs数据集,包括合成刚性物体的仿射运动,足以预测自然场景中的光流,具有较强的准确性。这证明了所提供的网络的泛化能力。在Flying Chairs的测试中,CNNs甚至比DeepFlow和EpicFlow等最先进的方法更有优势。随着更加现实的培训数据的出现,我们将会看到未来的网络是如何运作的。

推荐阅读