原论文标题:FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks
文章是对FlowNet的进一步改进,主要贡献为以下三个方面:算法
PS:光流的数据集都比较小,通常须要几个数据集一块儿train,故如何使用这些数据集是相当重要的。网络
通过这些改进,FlowNet 2.0只比前做慢了一点,却下降了50%的测试偏差。dom
1. 数据集调度性能
最初的FlowNet使用FlyingChairs数据集训练,这个数据集只有二维平面上的运动。而FlyingThings3D是Chairs的增强版,包含了真实的3D运动和光照的影响,且object models的差别也较大。学习
做者做了以下设定:测试
得出的实验结果以下图,图中的数字表明模型在Sintel数据集上的EPE,注意,Sintel是一个新的数据集,不包含在训练数据中。spa
从实验结果中能够得出几个结论:设计
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获得的光流做为输入,效果最好喽!此处再也不赘述。