FlowNet2.0论文笔记

原论文标题:FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks
文章是对FlowNet的进一步改进,主要贡献为以下三个方面:
算法

  • 训练数据集的调度对于模型的性能有较大的影响。

PS:光流的数据集都比较小,通常须要几个数据集一块儿train,故如何使用这些数据集是相当重要的。网络

  • 使用中间光流warp图片,并以此做为一个监督信号辅助训练。
  • 用一个子网络处理小位移。

通过这些改进,FlowNet 2.0只比前做慢了一点,却下降了50%的测试偏差。dom

 

1. 数据集调度性能

最初的FlowNet使用FlyingChairs数据集训练,这个数据集只有二维平面上的运动。而FlyingThings3D是Chairs的增强版,包含了真实的3D运动和光照的影响,且object models的差别也较大。学习

做者做了以下设定:测试

  • 使用前做中提出的两种网络结构:FlowNetS和FlowNetC,S表明simple,C表明complex,具体细节可参阅前做。
  • 分别使用Chairs(22k)、Things3D(22k)、二者混合(从44k中sample出22k)以及用Chairs预训练再用Things3D finetune这四种数据集调度方案。
  • 学习率调度策略使用Sshort和Slong+Sfine两种策略,以下图。

得出的实验结果以下图,图中的数字表明模型在Sintel数据集上的EPE,注意,Sintel是一个新的数据集,不包含在训练数据中。spa

从实验结果中能够得出几个结论:设计

  • 训练集的使用顺序很重要。即便Thins3D包含了更复杂的运动,但得出的结果却不如Chairs。(PS:根据笔者的经验,若是要在C数据集上测试的话,A和B数据集训练的模型哪一个效果更好是比较玄学的,不是说哪一个数据集更复杂,效果就越好。本质上仍是取决于A与C和B与C之间的domain shift哪一个更小。)最好的策略是如今Charis上预训练,再用Things3D fientune,这在笔者以前作过的一个Kaggle比赛中证明过,虽然任务不同,但两种数据mixed同时训练确实效果极差。做者对此做出了猜想,Chairs帮助网络学习到颜色匹配这样的通常概念,而更复杂的3D和真实光照等信息不宜过早地强加给网络。这对于其余基于深度学习的任务也有必定的参考价值。
  • FlowNetC比FlowNetS更好。
  • 结果的提高。

2. Stacking Networksblog

传统的光流算法都依赖于迭代过程。做者尝试也使用多个模型stacking,逐步refine的手法来获得更好的结果。首先,stack两个模型。图片

第一个网络使用两张图片做为输入,第二个网络使用两张图片以及第一个网络预测出的光流场做为输入。

此外,做者尝试了另外一种方法,如Figure 2所示,第二个网络除了上述的三个输入以外,又使用Image 2和Flow进行warp,这样,第二个网络就能够集中学习warped image和Image 1的差异,这是一种增量学习的思想。注意,做者将warped image和Image 1的偏差图也显式地输入给了第二个网络。实验结果如Table 2所示。须要说明的是,warp的过程是用双线性插值,是可微的,故整个网络能够e2e训练。

从表中能够看出,(1)仅stacking模型而不使用wrap后的图片在Chairs上有更好的结果,但在Sintel则否则;(2)Stacking with warping老是能提升结果;(3)e2e训练时,在Net1以后加中间loss是比较好的;(4)产生最好结果的作法是固定Net1,只训练Net2,固然,要加入warp操做。

出现这样的结果是符合直觉的,若e2e训练,参数量成倍增长,很容易overfitting,但分开train,参数量就没有那么大,能产生比较好的结果。

下面,做者尝试堆叠多个不一样模型,即FlowNetC和FlowNetS混合使用,综合考虑速度和性能,CSS最为合理。另外,做者做了一些实验,尝试共享stacking先后模型的参数,发现没什么提高。

3. Small Displacements

上文中所用到的数据集所包含的运动每每比较快,而真实数据集如UCF101,帧间的运动每每比较小,大多在1px左右。因此,基于Chairs,做者按照UCF101的位移直方图构建了一个小位移数据集,称之为ChairsSDHom。

做者用FlowNet2-CSS网络在小位移数据上进一步训练。具体的,做者在Things3D和ChairsSDHom中分别采样了一些数据,具体的采样方法参见文章的补充材料,这里我就不去看了。通过这一轮训练,网络对于小位移的效果有了提升,并且并无伤害大位移的效果。这个网络命名为FlowNet2-CSS-ft-sd。可是,对于subpixel motion(讲道理我不知道这是指什么,姑且理解为小于1px的运动吧),噪声仍然是个问题,做者猜想FlowNet的网络结构仍是不适应这种运动。因此,做者对FlowNetS作了轻微的修改,第一层的步长2改成1,7*7改为5*5,使得网络可以更好地捕捉小位移,这个网络结构称为FlowNet2-SD。

最后,做者又设计了一个小网络来fuse FlowNet2-CSS-ft-sd以及FlowNet2-SD的结果,具体的结构没有说的太清楚,有须要的话能够去看代码。总的来看,结构仍是很是复杂的,训练过程也颇有讲究,改进的余地应该挺大的。

4. Experiments

 这部分没有太多好说的,总之就是各类SOTA了。值得一提的是,做者还用了Motion Segmentation和Action Recognition两个任务来衡量光流的好坏,前者我了解不太多,后者就是用很常见的Two Stream模型,两个任务都须要光流做为输入。最后的结论固然是以FlowNet2获得的光流做为输入,效果最好喽!此处再也不赘述。

相关文章
相关标签/搜索