FlowNet2.0:Evolution of Optical Flow Estimation with Deep Networks

来源:互联网 发布:php 替换字符串 某一段 编辑:程序博客网 时间:2024/05/24 05:48

Abstract

    FlowNet证明了光流提取可以映射为一个学习问题。但是关于光流质量的先进技术依然由传统的方法所定义。特别在小位移和真实世界数据,FlowNet不能使用变分的方法计算。在这篇文章里,我们发展了端对端的光流学习概念并且使得它可以很好的实现。在质量和速度上的巨大提升由以下三个主要的贡献支撑:第一,我们关注训练的数据并且发现在训练过程中给定学习数据的顺序是很重要的。第二,我们开发了一个多层的体系结构,在这个体系结构里,使用中间光流对第二个图像进行变形操作(wrap)。第三,我们引入一个专门处理小运动的子网络,精细处理小位移。FlowNet2.0比FlowNet稍微慢一点,但减少了50%的测量误差。在相同的帧率下,FlowNet2.0的表现可媲美最先进的相关方法。再有,我们展示了更快的变体,允许在精度与FlowNet相仿的情况下以140fps的速度计算光流。

Introduction

   Dosovitskiy等的FlowNet展示了在光流提取中的范式变换。使用CNN结构直接学习来自数据的光流的概念完全区别于所有已有的方法。但是,相比现有的已经调整非常好的方法,新想法的首次实现经历了一段困难的时期,FlowNet也没有脱离这种规则。连续的整合解决负面影响同时帮助我们领会新思路的好处。
    同时,它解决了在提取流场时的小位移问题和噪声伪影问题。这导致FlowNet2.0在现实应用中巨大的性能改进,达到最先进的水平。
    得到FlowNet2.0的过程中经过几次渐进的但起决定性作用的修改,这些修改并非都与观察到的问题相关的。首先,我们评估数据集顺序所带来的影响。有意思的是,由Mayer等提供的越复杂的训练数据,导致越差的结果。但是又多个数据集组成的学习列表,显著地提升结果。在这背景下,我们同时发现了FlowNetC版本比FlowNetS版本有更好的表现。而这与Dosovitskiy等报告的结果相悖。
    作为第二个贡献,我们介绍了一个Warping操作,并且展示了如何使用这种操作堆叠多个网络,达到显著提升结果的效果。通过变化栈的深度和单个组元的大小,我们获得了许多有不同大小和不不同运行时间的网络变体。这允许我们控制在精度和计算资源之间的权衡。我们提供帧率谱在8fps和140fps之间的网络。
    最后,我们关注小的,亚像素的运动和现实数据。为了达到这个目的,我们创造了一个特殊的训练数据集和一个专攻这方面的网络。我们展示出用这数据集训练得到的结构在小位移检测上有很好的表现,现实视频作为一个典型应用场合。为了达到在任何位移情况下优化性能,我们增加一个网络,用于学习使用优化的方法融合之前的多层网络和小位移检测网络。
   最后得到的网络比之前的FlowNet有更好的表现,在Sintel和KITTI标准,达到和最先进方法媲美的表现。它在提取小的和大的位移时有很高水平的细节,在提供交互的帧率时。
这里写图片描述

Related Work

  使用卷积神经网络的端对端光流提取由Dosovitskiy等提出。他们称作FlowNet的模型,使用一对图像作为输入,输出光流场。接着FlowNet,几篇文章也使用CNNs学习光流提取:以一个三维卷积网络为核心、一个无监督学习目标、仔细设计旋转不变的体系结构,或者一个基于由粗到精想法的变分方法的金字塔方法。这些方法中没有一个显著胜过原来的FlowNet。
  基于学习的光流提取的一个替换的方法是使用CNNs做图像块匹配。Thewlis等定义Deep Matching为一个卷积网络,然后端对端地优化它。Gadot和Wolf以及Bailer等使用Siamese网络结构学习图像块描述子。这些方法可以达到恨到的精度,但需要详尽的块匹配。因此,在大多数实际应用中他们限制地慢。再者,由于操作的是小图像块,他们缺乏使用全图更大的环境的可能。
  训练用于逐点预测任务的卷积网络通常会产生吵杂或者模糊的结果。作为一个补救方法,Out-of-the-box优化可以作为一个预处理操作,应用于网络预测,比如光流提取可以使用一个变分方法进行精制。在某些场合这精制可以由神经网络近似:Chen和Pock公式化一个反作用传播模型为一个CNN,并且用以图像去噪,去封闭和超分辨率。最近,了解到相似的精制操作可以由堆叠几个卷积网络在相互之上得到。这导致在人动作检测和语义分割实例结果的提升。在这文章中,我们采用堆叠多个网络用于光流提取的想法。
  我们的网络结构包括Warping层,用于补偿在第二图像上一些已经估计好的预备动作。图像Warping的概念常见于所有当代的变分光流方法,并且可以追溯到Lucas和Kanade的工作。在Brox等,这被证明相当于一个数值固定的点迭代方案,外加一个延续方法(continuation method)。
  在一系列渐进增加的任务上训练机器学习方法的策略被誉为课程学习(curriculum learning)。这想法至少可以追溯到Elman,他发现任务的进化和网络结构都在语言处理场景里有一定好处。在这文章里,我们在计算机视觉的背景下重温这个概念,然后展示它如何在一个复杂的现实光流提取任务中产生引人注目的表现提升。

Dataset Schedules

  高质量的训练数据对于监督训练的成功是至关重要的。我们基于当前的训练数据研究提取光流的质量的区别。有趣的是,我们发现不仅数据的种类是重要的,训练过程中给定数据的顺序也一样重要。
  原始的FlowNet是在FlyingChairs数据集上训练的。这个过分简单的数据集包含了大概有22k对椅子图像叠加在来自Flickr的随机背景图像。随机仿射变换应用于椅子和背景,获得第二个图像和真实的流场。数据集仅仅包含平面运动。
  FlyingThings3D数据集由Mayer等提出,可以视为一个三维版本的FlyingChairs。这数据集由22k个随机场景的效果图组成,效果图里有来自ShapeNet数据集3D模版在背景前的运动。与FlyingChairs相比,这些图像展示真正的3D移动和光照影响,以及有更多的目标模型的变化。
我们测试了Dosovitskiy等介绍的两个网络结构:FlowNetS,径直的编码解码结构;和FlowNetC,包含明确的特征映射的相关。我们在FlyingChairs和Things3D数据集以及一个等量的从这两个数据集中挑选样本组成的数据集上使用不同的学习率训练FlowNetS和FlowNetC。忽略某些小的变化,基础的时间安排Sshort(600K迭代)与Dosovitskiy等的相对应。除了这基础的时间安排Sshort,我们研究了一个更长的时间安排Slong有1.2M次迭代,还有一个有更小的学习率的细调时间安排Sfine。训练的结果如下图所示:
这里写图片描述
这里写图片描述
观察结果可以得到以下结论:
  提供不同的培训数据的顺序属性很重要。尽管Things3D是更符合实际的训练集,但是仅仅在Things3D上训练会导致比在FlyingChairs上训练更差的结果。最好的结果始终是在这样的情况下得到的:首先在FlyingCharis训练集上训练然后仅在Things3D训练集上细调。这个顺序得到的结果同时也比训练在一个FlyingCharis和Things3D混合的训练集上要好。我们推测简单的FlyingChairs数据集帮助网络学习普通的颜色匹配的概念,没有太早地发展对3D移动以及真实光照这些可能混淆的先验。这结果表明训练数据的顺序的重要性,可以在训练一般意义上的深度网络中避免短路问题。
   FlowNetC比FlowNetS有更好的表现。我们用FlowNetS和Sshort得到的结果和Dosovitskiy等获得的结果相当。但是,我们在FlowNetC上获得了比他们的更好的结果。我们的结论是Dosovitskiy等没有在精确同等的条件下训练FlowNetC和FlowNetS。当这样做时,FlowNetC结构比FlowNetS结构有更令人喜好的结果。
  更好的结果。仅仅通过修改数据集和训练的顺序。我们提升了25%Dosovitskiy等的FlowNetS的结果和30%FlowNetC的结果。
  在这章节,我们还没在特别的场景使用特别的训练设置。训练好的网络是应该具有通用性的,可以在不同的场景下有很好的工作表现。在数据集顺序上的一个额外的可选元素是对一个一般的网络进行细调满足特别的场景,比如我们在第六章节展示的驾驶场景。

Stacking Networks

Stacking Two Networks for Flow Refinement

  所有最先进的光流提取方法都依赖于迭代方法。那么深度网络也可以从迭代优化中获得好处吗?为了回答这个问题,我们用堆叠多层的FlowNetS 和 FlowNetC的结构进行实验。
  在堆栈中第一个网络一般用图像I1I2作为输入。后来的网络使用I1I2和之前的光流估计wi=(ui,vi)Ti指该层网络在堆栈中的索引。
  为了给以前的误差做评估和计算对于网络来说更简单的增量更新,我们也随意地通过wi流对第二个图像I2(x,y)进行Warp操作以及双线性差值得到I˜2,i(x,y)=I2(x+ui,y+vi)。通过这种方式,堆栈中下一层网络可以集中注意力于I1I˜2之间剩余的增量。当使用Wraping操作时,我们额外地提供I˜2,i和误差ei=||I˜2,iI1||作为下一层网络的输入。得益于双线性差值,Wraping操作的衍生物可以被计算得到。这使得堆栈网络可以以端对端的方式进行训练。
这里写图片描述
  上表展示了堆叠两个网络的影响、Warping操作的影响以及端对端训练的影响。我们采用第三章节里最好的FlowNetS,并且增加另外一个FlowNetS在最上方。第二个网络是随机初始化的然后堆栈是在FlyingChairs训练集上以Slong的时间安排训练的。我们用两个场景进行实验:固定第一个网络的权重或者和第二个网络权重一起更新他们。在后来的实例中,第一个网络的权重在前400K迭代中是固定的,为了首先提供一个好的第二层网络的初始化。我们报告了在SIntel train clean 和在FlyingCharis测试集上的误差。由于FlyingChairs测试集是比Sintel更接近训练集,比较在两个数据集上的结果允许我们检测过拟合的趋势。
  我们作出以下的观察:(1)仅仅堆叠两个网络没有Warping时提高了在FlyingChairs上的结果但降低了在Sintel上的表现,堆栈网络过拟合了。(2)有warping时,堆叠通常可以提高结果。(3)当端对端地训练堆栈网络时,在Net1之后增加一个中间的损失是有利的。(4)最好的结果是在warping操作之后保持第一个网络固定,只训练第二个网络的情况下取得。

Stacking Multiple Diverse Networks

  不堆叠单一种网络,可以堆叠不同种类网络(FlowNetC和FlowNetS)。减小单个网络的大小也是另外一种有效的选择。我们现在研究ubutong的组合同时也变化网络的大小。
  我们称第一个网络为Bootstrap网络(自举),因为它的输入是和第二个网络不同的。第二个网络可以是以循环的样式重复任意数量次数。我们进行这个实验发现多次应用有同样权重的网络并且细调好这一循环部分,并没有提高结果。因此我们选择在堆栈中增加权重不同的网络。与单一的权重相比,堆叠不同权重的网络会增加内存占用,但并不会提高运行时间。在这方面,顶端网络没有约束为他们输入的一个一般提升,但可以在不同阶段执行不同的任务,并且堆栈可以通过固定已有的网络以更小的块进行训练和一个接一个地增加新网络。我们通过使用FlyingChairs到Things3D的顺序和在上一小节中带有wraping的最好的配置对每一个新的网络进行训练。另外,我们用不同的网络大小和选择性使用FlowNetS 或者FlowNetC作为自举网络进行实验。我们使用FlowNetC只在这样的情况下:自举网络作为下一网络的输入变化太多样以致不能被恰当得被FlowNetC的星罗结构所处理。更小的网络版本通过移除网络里每一层的一小部分数量的通道获得。下图展示了不同的FlowNetS网络大小时,网络的精度和运行时间。因子3/8产生了一个在追求更快的网络时,速度和精度之间好的权衡。

注意:我们用FlowNet2表示使用FlyingChairs到Things3D顺序训练的网络。网络在堆栈中按照这顺序一个一个训练。对于堆栈配置,我们在后面接大写或者小写字母来表示最初的FlowNet或者只有3/8通道的小版本。比如:FlowNet2-CSS表示一个网络堆栈又一个FlowNetC和两个FlowNetS组成,FlowNet2-css是同样的版本但通道数更少(3/8)。

这里写图片描述
上表列出了各种配置的运行时间和错误率。

阅读全文
0 0