论文翻译:FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks

FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks

首先,附上代码。

代码下载: 
tensorflow:https://github.com/sampepose/flownet2-tf 
caffe:https://github.com/lmb-freiburg/flownet2 

摘要

       FlowNet证明光流估计可以作为学习问题。然而,关于光流法的最好技术仍然由传统方法实现。特别是在小位移和实际数据方面,FlowNet无法与多种方法竞争。在本文中,我们提出了光流的端到端学习的概念,并使其工作得非常好。质量和速度的大幅提升是由三个主要因素造成的:首先,我们关注训练数据,并表明在训练期间提供数据计划非常重要。其次,我们开发了一种堆叠式结构,其中包括使用中间光流对第二幅图像进行warp操作。第三,我们通过引入专门针对小运动的子网络来详细关注小位移。 FlowNet 2.0速度仅略低于原始FlowNet,但估计误差减少了50%以上。它达到现有的最佳效果,同时以交互式帧速率运行。此外,我们提供更快的变体,允许光流计算高达140fps,精度与原始FlowNet相同。

1、介绍

      Dosovitskiy等人提出的FlowNet 代表了光流估计上思维的转移。使用简单的卷积CNN架构直接从数据中学习光流的概念的想法与所有已建立的方法完全不相交。然而,新想法的首次实施通常很难与高精度的现有方法竞争,FlowNet也不例外。正是这种不断的学习解决了负面影响,并帮助我们认识到新思维方式的好处。
      同时,它解决了估计光流场中小位移和噪声影响的问题。这使得动作识别和运动分割等实际应用程序的性能得到了显着提升,使FlowNet 2.0达到了最先进的水平。

     通过几个发展的,但具有决定性的修改我们发现了FlowNet2.0方法。首先,我们评估数据集计划(即如何训练?)的影响。有趣的是,Mayer等人提供的更复杂的训练数据,如果单独使用会导致较差的结果。但是,由多个数据集组成的学习计划(训练的顺序)可显着改善结果。在此范围内,我们还发现具有关联层的FlowNet版本(FlowNetC)优于没有这类层的版本。这与Dosovitskiy等人论文的结果形成对比。FlowNet有结论说FlowNetC在更复杂的数据集上结果可能会好于FlowNetS。
     作为第二个贡献,我们引入了一个warp操作,并展示了如何使用此操作堆叠多个网络可以显着改善结果。通过改变堆叠网络的深度和各个子网络的大小规模,我们获得了许多具有不同大小和运行时间的网络变体。这使我们能够控制准确度和计算资源之间的权衡。我们为8fps和140fps之间的范围提供了网络。

     最后,我们专注于小的像素级运动和真实世界数据。为此,我们创建了一个特殊的训练数据集和一个专门的网络。我们展示了使用此数据集训练的网络在真实世界视频的典型的小动作位移上表现良好。为了在任意位移上达到最佳性能,我们添加了一个网络,该网络学会以最佳方式融合先前的堆叠网络和小位移网络。

     最终的网络大大优于以前的FlowNet,并且与Sintel和KITTI基准测试中的最先进方法相当。它可以在提供交互式帧速率的同时,以非常高的细节水平估计小的和大的位移。

2、相关工作

Dosovitskiy等人提出了利用卷积网络的端到端光流估计,他们把这个网络称为FlowNet,将一对图像作为输入并输出光流场。在FlowNet之后,又有几篇论文研究了CNN的光流估计,这些方法都没有明显优于原始的FlowNet。
            基于学习的光流估计的替代方法是使用CNN来匹配图像patches。Thewlis等将深度匹配[32]表示为卷积网络并对其进行端到端优化。 Gadot等人使用Siamese网络结构学习图像patch描述器。这些方法可以达到很好的准确性,但需要对patch进行详细的描述。因此,对于大多数实际应用来说,它们的限制性很慢。此外,基于patch的方法在使用整个图像的上下文可能性很低,因为它们在小图像块上操作。

针对像素预测任务而训练的卷积网络经常产生噪声或模糊结果。作为补救措施,可以使用一些优化作为后处理操作应用于网络预测,例如,可以使用变分方法来改进光流估计。最近,已经表明,通过将几个卷积网络堆叠在彼此之上可以获得类似的改进。这导致人类姿势估计和语义实例分割的结果得到改善。在本文中,我们将多个网络堆叠的思想应用于光流估计。

我们的网络结构包括warp,其补偿第二张图像中的一些已经估计的初步运动。图像warp的概念在变分光流方法中都很常见,并且可以追溯到Lucas&Kanade的工作。

3、数据集训练方案

     高质量的训练数据对于监督学习的成功至关重要。我们根据所提供的训练数据研究光流估计质量的差异。有趣的是,事实证明,不仅数据类型很重要,而且训练期间的数据顺序也很重要。
     最初的FlowNets在FlyingChairs数据集上进行了训练。这个相当简单的数据集包含大约22k个把椅子叠加在Flickr的随机背景图像上的图像对。将随机仿射变换应用于椅子和背景以获得第二张图像和真实的光流场。数据集仅包含平面运动。
     Mayer等人提出的FlyingThings3D(Things3D)数据集可以看作是FlyingChairs的三维版本。该数据集由22k个随机场景渲染组成,每个图像是来自ShapeNet数据集的3D模型在静态3D背景前移动。与Chairs相比,图像显示真实的3D运动和灯光效果,并且存在更多种类。
     我们测试了Dosovitskiy等人介绍的两种网络架构:FlowNetS,它是一种简单的编码器 - 解码器架构;以及FlowNetC,它包括特征映射的显式相关性(具体要见FlowNet论文)。我们使用图3中所示的不同学习率计划在Chairs 和 Things3D以及来自两个数据集的混合数据集上对FlowNetS和FlowNetC进行了训练。S_{short}是FlowNet1.0训练的学习率变化,S_{long}表示较长的时间训练的学习率,S_{fine}表示微调下的学习率。,在表1中给出了在不同计划下的在Chairs和Things3D上训练的网络的结果。

结果导致以下观察:

  1. 具有不同属性的训练数据的顺序对训练结果很重要。尽管Things3D更加逼真,但仅仅对Things3D进行训练会导致比训练Chairs更糟糕的结果。在先训练Chairs,再对Things3D进行微调,才能一致地取得最佳效果。这个方法也优于Chairs和Things3D混合数据集的训练。我们推测,更简单的Chairs数据集有助于网络学习颜色匹配的一般概念,而不会过早地学习3D运动和真实光照带来的令人困惑的结果。结果表明,在使用深度网络学习时,训练方案对于避免网络学习过于复杂的概念产生了重要作用。
  2. FlowNetC优于FlowNetS。我们用FlowNetS和S_{short}得到的结果对应于FlowNet1.0论文的结果。但是,我们在FlowNetC上获得了更好的结果。我们得出结论,FlowNet1.0没有在完全相同的条件下训练FlowNetS和FlowNetC。完成后,FlowNetC架构优于FlowNetS架构。
  3. 结果的改善。仅通过修改数据集和训练方案,我们就改进了FlowNet1.0的FlowNetS结果,提高了约为25%,FlowNetC结果提高了约为30%。

       在本节中,我们没有针对特定场景使用专门的训练集。经过训练的网络应该是通用的,并且在各种场景中都能很好地工作。数据集计划中的另一个可选的是将通用网络微调到特定的场景,例如我们在第6节中展示的驾驶场景。

4、堆叠网络(Stacking Networks)

4.1、堆叠两个网络

       所有最先进的光流方法都依赖于迭代方法[7,32,22,2]。深度网络也可以从迭代增强中受益吗?为了解决这个问题,我们尝试堆叠多个FlowNetS和FlowNetC结构。
      堆叠网络中的第一个网络始终将图像I1和I2作为输入。后续网络获得I1,I2和先前的光流估计wi,其中i表示堆叠网络中的子网络的索引。
       为了评估先前的误差并容易为网络计算增量更新,我们还可选择通过光流wi和双线性插值将第二个图像I2warp这样,堆叠网络中的下一个网络可以关注I1和\tilde{I_{2,i}}之间的剩余增量。当使用warp时,我们另外提供\tilde{I_{2,i}}和误差e= \left \| \tilde{I_{2,i}-I_{1}} \right \|作为下一个网络的输入,见下图。由于双线性插值,可以计算warp操作的导数。这使得能够端到端地训练堆叠网络

    表2显示了堆叠两个网络的效果,warp的影响以及端到端训练的效果。我们采用第3节中训练最好的FlowNetS并在顶部添加另一个FlowNetS。第二个网络随机初始化,然后整个网络在Chairs进行训练。我们尝试了两种方案:保持第一个网络的权重固定,或者将第一个网络与第二个网络的权重一起更新。在后一种情况下,为了给第二个网络提供良好初始化,第一网络的权重对于前400k次迭代是固定的。我们报告Sintel clean和Chairs测试集的误差。由于Chairs测试集与训练数据更相似,因此可能会发生过拟合。

    我们做出以下观察:(1)上表中的第一行和第二行结果表明,仅仅堆叠网络而不warp会改善在Chairs的结果,但会降低Sintel的性能,即堆叠网络过拟合。 (2)第一行和第五行结果表明,包含warp,堆叠网络结果很好。 (3)最后两行结果证明,在训练端到端堆叠网络时,在Net1后增加一个中间损失是有利的。 (4)第五行(Net1+W+Net2)表明,在保持第一网络固定并且仅在warp操作之后仅训练第二网络时能获得最佳结果。
    显然,由于堆叠网络是单个网络的两倍,因此过拟合是一个问题。warpflow refinement(FlowNet1中提及)的积极效果可以抵消这个问题,但是当堆叠网络一个接一个地训练时(即固定第一个网络,在训练第二个网络)能获得最佳效果,因为这避免了过拟合。

4.2 堆叠多个网络

      与其堆叠相同的网络,不如堆叠不同类型的网络(FlowNetC和FlowNetS)。减少单个网络的大小是另一个有效的选择。我们现在研究不同的组合,并且还改变每个网络大小。
      我们将第一个子网络称为bootstrap网络,因为它与第二个网络的输入不同。然而,第二网络可以以循环方式重复多次。我们进行了这项实验,发现多次应用具有相同权重的网络并对这个循环部分进行微调并不会改善结果(详见补充材料)。因此,我们将具有不同权重的网络添加到堆叠网络中。与相同权重相比,具有不同权重的堆叠网络增加了内存占用,但不会增加运行时间。在这种情况下,最上层网络不受限于其改进的输入,而是可以在不同阶段执行不同的任务,并且可以通过固定现有网络并逐个添加新网络来训练整个网络。我们对每个新网络通过使用第3节中的Chairs→Things3D计划以及第4.1节中的网络配置。此外,我们尝试不同的网络规模,或者使用FlowNetS或FlowNetC作为bootstrap网络。我们仅使用FlowNetC作为bootstrap网络,因为下一个网络的输入太多,不能被FlowNetC的Siamese结构正确地处理。通过在网络中的每个层获取部分通道来创建较小尺寸规模的网络版本。下图显示了单个FlowNetS的不同网络规模的网络的准确性和运行时间。当想要更快的网络时,在3/8处速度和准确度之间产生良好的折衷。

注释:我们表示由第3小节得到的Chairs→Things3D方案训练FlowNet2.0。堆叠中的网络将按照此计划逐个进行训练。对于堆叠网络的结构,我们附加大写或小写字母以指示原始FlowNet或具有3/8个通道的小规模版本。例如:FlowNet2-CSS代表由一个FlowNetC和两个FlowNetS组成的网络。 FlowNet2-css网络相同但通道较少。

      表3显示了不同网络的性能。最值得注意的是,最终的FlowNet2-CSS结果比第3节中的单个网络FlowNet2-C提高了约30%,比原始FlowNetC提高了约50%。此外,两个小型网络总是优于一个大型网络,尽管速度更快且权重更少:FlowNet2-ss(11M权重)优于FlowNet2-S(38M权重),FlowNet2-cs(11M权重)优于FlowNet2-C (38M权重)。逐步训练较小的单个网络证明是有利的,并使我们能够训练非常深的光流网络。最后,FlowNet2-s提供与原始FlowNet几乎相同的精度,同时以每秒140帧的速度运行。

5、小位移

5.1、数据集

       虽然最初的FlowNet在Sintel基准测试中表现良好,但实际应用中的限制已变得明显。特别是,网络无法可靠地估计小运动,这是违反常理的,因为小运动对于传统方法更容易,并且没有明显的理由说明网络在这种情况下为什么达不到相同的性能。因此,我们检查了训练数据,并将其与UCF101数据集进行了比较。虽然Chairs与Sintel相似,但UCF101根本不同:Sintel是一部动作片,因此包含许多传统方法难以实现的快速动作,而我们在UCF101中看到的位移数据集要小得多,大多小于1个像素。因此,我们在Chairs的视觉风格中创建了一个数据集,但是具有非常小的位移和位移直方图,更像是UCF101。我们还添加了背景是均匀的或只包含颜色渐变的情况。我们将此数据集称为ChairsSDHom,并在发布论文时将其发布。

5.2、小位移网络与融合

       我们通过在Things3D和ChairsSDHom的混合数据集上进一步训练整个堆叠网络并对误差应用非线性(详情见论文附录)来减轻大位移,从而微调我们的FlowNet2-CSS网络以实现更小的位移。我们用FlowNet2-CSS-ft-sd表示这个网络。这增加了小位移的性能,我们发现这种特殊的混合不会牺牲大位移的性能。

       然而,在像素级运动的情况下,噪声仍然是一个问题,并且我们猜测FlowNet结构可能不适合这种运动。因此,我们略微修改了原始的FlowNetS结构并删除了第一层中的步幅2。我们开始通过用多个3×3内核交换交换7×7和5×5内核,使网络更加深入。因为噪声往往是小位移的问题,我们在upconvolutions(反卷积)之间加入卷积以获得更平滑的估计。我们用FlowNet2-SD表示最终的架构,见图2。
       最后,我们创建了一个融合FlowNet2-CSS-ft-sd(图2上 对于大位移的网络)和FlowNet2-SD(图2下 对于小位移的网络)的小型网络(融合两个网络)(参见图2)。融合网络将前两个网络得到的光流,光流大小和warp后的第二张图与第一张图的误差作为输入。它将分辨率缩小两倍,然后再次扩展。与最初的FlowNet架构相反,它扩展到全分辨率。我们发现这会产生清晰的运动边界,并且在小型和大型位移上表现良好。我们将最终网络表示为FlowNet2。

关注点

  • 这个堆叠网络的训练方法值得注意,我们在任意堆叠的过程中,论文中提到的是把FlowNetC作为bootstrap,即第一个子网络,之后再搭建的过程中是一个一个单元单独训练的,即先用Slong训练Chairs这个模型,再用Sfine训练things3D微调子网络。
  • 堆叠结构中的warp操作,以中间光流状态改变第二张图的形态。

 

刚读了论文,准备看代码。

如有错误,请留言更正。

 

 

 

 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值