FlowNet: Learning Optical Flow with Convolutional Networks

1. Introduction


虽然光流估计需要精确的每像素定位,但也需要在两个输入图像之间找到对应。这不仅需要学习图像特征表示,还需要学习如何在两个图像的不同位置匹配它们。由于不清楚这个任务是否可以用标准的CNN体系结构来解决,我们还开发了一个具有相关层的体系结构(FlowNetC),该体系结构明确地提供了匹配功能。其(flownetc中联系层)目的是利用卷积网络的能力来学习不同级别的强特性和抽象,并帮助它根据这些特性找到实际的对应关系。联系层之上的层学习如何从这些匹配中预测光流。为真实的视频材料获取光流的真实值是非常困难的

3. Network Architectures

 为了使网络培训在计算上可行,更根本的是,允许在输入图像的大范围内收集信息,在CNNs中加入池是必要的。但是池化会导致分辨率降低,因此为了提供密集的每像素预测,我们需要refine coarse pooled representation。

Contracting part:一个简单的选择是将两个输入图像叠加在一起,然后通过一个相当通用的网络将它们提供给神经网络,允许网络自行决定如何处理图像对来提取运动信息,另一种方法是为这两个图像创建两个独立但相同的卷积层,并在稍后阶段将它们合并,使用这种体系结构,网络必须首先分别生成两个图像的有意义的表示,然后在更高的级别上合并它们。使用联系层来建立两张图片特征表示之间的联系。

对于两个多通道的特征,通过联系层,可以使得这两个多通道的特征变为,c个多通道的特征,,w, h, and c being their width, height and number of channels。x1为第一个特征图中的一个点,x2为第二个特征图中的一个点,求以x1,x2为中心区域的联系,以下公式相当于一个没有参数的卷积,在区域X的区域做相乘相加。

计算一对c(x_{1},x_{2})需要c*K^{2} 次乘法,c为输出特征图的数量,K^{2}为平面区域(类似于卷积覆盖的区域)。计算所有点之间的联系需要w^{2}h^{2}次 如上(c*K^{2})的计算,w^{2}h^{2}相当于特征图1中的所有点与特征图中2中所有的点。

上面计算量太大,所以通过限制x_{2}的范围,即只计算x_{1}邻域范围内的x_{2},这个邻域范围为d为最大位移数,并且还设置了步长s_{1},s_{2}s_{1}x_{1}在特征图1上的步长,s_{2}x_{2}在以x_{1}为中心的邻域范围内的步长。在实际应用中,是把求出来的联系数值放在通道中,所以最后输出的为(w*h*D^{2})w*h*D^{2}w*h对应特征图1上所有的点,D^{2}对应 x_{1}x_{2}中的邻域,为一个正方形。

Expanding part:利用把反卷积应用于特征图,并把刚刚得到的结果与Contracting part中对应的特征图,以及上采样得到的粗略光流集合(upsampled coarser flow prediction),这样,我们既保留了从较粗的特征图(光流预测值)传递的高级信息,又保留了较低层(Contracting part中对应的特征图)中的特征图提供的精细的本地信息。每一步提高2倍的分辨率,经过4次之后,获得的光流大小还是比期望的小4倍。在进行相同的操作不能显著的提高结果,所以使用计算成本较低的双线性插值返回全分辨率。

Variational refinement:在最后阶段,没有使用双线性插值,使用了没有匹配条件的变分方法(T. Brox and J. Malik. Large displacement optical flow: descriptor matching in variational motion estimation.),从比全分辨率低4倍的分辨率开始,使用由粗到细的策略,迭代20次,就可以得到全分辨率的图像(与初始图像相同),最后在全分辨率上又进行了5次迭代,又使用了这项

虽然计算成本提高,但是使得光流场变得平滑以及精确,使用‘+v’的符号来表示。

4. Training Data

 4.1. Existing Datasets:kitti中存在大位移现象,但是运动的种类单一,真实值从真实世界的场景中获得,通过同时用摄像机和3D激光扫描仪记录,这假定场景是刚性的,并且运动源于一个移动的观察者,此外,遥远物体(如天空)的运动无法被捕捉,导致光流地面真相稀疏。Middlebury只存在小位移的情况,像素的移动距离不超过10.Sintel提供了两个版本:Final版本包含运动模糊和大气效果,如雾,而Clean版本不包含这些效果。

4.2. Flying Chairs

 椅子的变换与背景变换有关,可以解释为摄像机和物体的运动。每个图像对的所有参数(椅子的数量、类型、大小和初始位置;变换参数)随机抽样。我们调整这些参数的随机分布,使结果的位移直方图与Sintel的直方图相似。

5.1. Network and Training Details

 对于FlowNetC中的联系层,我们选择参数k = 0, d = 20, s1 = 1, s2 = 2。因为,在某种意义上,每个像素都是一个训练样本,我们使用小批量的8对图像。为了监控训练中的过拟合现象和微调网络,我们将飞行椅数据集分为22232个训练样本和640个测试样本,将Sintel培训分为908个训练样本和133个验证样本。

我们发现在测试过程中upscale输入图像可以提高性能。虽然最优的比例取决于特定的数据集,但是我们对于所有的任务为每个网络固定一次比例。对于flownet,我们不进行upscale,对于FlowNetC,我们选择了1.25的upscale。

Fine-tuning

 使用的数据集在对象类型和动作方面非常不同。一个标准的解决方案是对目标数据集上的网络进行微调。KITTI数据集很小,只有稀疏的真实值。因此,我们选择对kitti在Sintel训练集进行微调。

Sintel

 由于平均端点误差往往倾向于过于平滑的解决方案,因此看到我们的方法的定性结果是很有趣的。下图展现了网络如何经常产生视觉上吸引人的结果,但是在端点误差方面较差的情况。造成这种情况的原因为:Taking a closer look reveals that one reason for this may be the noisy non-smooth output of the nets especially in large smooth background regions。可以使用变分法来补偿。

KITTI.

 KITTI数据集包含强烈的投影转换,这与训练于flying chairs的网络非常的不同。

5.3. Analysis

使用sintel单独训练的神经网络的精度 ,大约比训练于flyingchairs微调于sintel的网络精度,EPE高了一个像素点。直接使用椅子进行训练,没有使用数据增强,那么对比使用数据增强的网络,EPE高了两个像素点。

第二,FlowNetC不擅长处理大位移情况。FlowNetS+ft达到s40+误差为(EPE对像素位移至少为40像素)43.3px,对于FlowNetC+ft,这个值为48px。一种解释是,联系层的最大位移不允许预测非常大的运动。检测大位移范围可以以计算效率为代价来增加。

猜你喜欢

转载自blog.csdn.net/Gussss/article/details/81382946