FlowNet Architecture
用CNN从一个图像对来预测光流,不仅需要学习图像特征,而且需要在两张图片的不同位置匹配之。
FlowNet.png
FlowNetS(FlowNetSimple) 直接将两张图像按通道维重叠后输入。
FlowNetC (FlowNetCorr)为了提升网络的匹配性能,人为模仿标准的匹配过程,设计出“互相关层”,即先提取特征,再计算特征的相关性。计算相关性的公式为:
对于两个特征图上的两个图像patches,其中心分别为,累加个位置的特征向量的内积就得到两个patches的相关性,如果按照这种逻辑,实际上两份特征图()将得到的相关性值,计算量将会很大,而实际上对于某一个位置,没必要对特征图上的所有位置都遍历计算相关性,运动的物体在某一个很短的时间间隔内并不能产生很大的位移,因此只需要计算当前位置某一邻域内的点对之间的相关性就行了,同时引入striding对两个特征图进行采样,这样能有效减少计算量。
Refinement
将特征向量上采样到原图大小
refinement.png
Fly Chairs:
鉴于数据量很少,通过将一些3D椅子模型随机的覆盖在一些从Flickr上检索的图片上合成图像,再对椅子和背景分别做随机的仿射变化。图像虽然看上去不是很自然,但是却很容易的获得了约22k带有光流真值的图像对。实验表明,即使是人工合成的非自然图像,依然可以用来训练深度神经网络来预测光流。
FlowNet 2.0
额外增加了具有3维运动的数据库FlyingThings3D。
利用堆叠的结构对预测结果进行多级提升,在FlowNetC的基础上堆叠两个FlowNetS,得到FlowNet2-CSS,当以每个FlowNet为单位逐个进行训练时,得到的结果最优。也就是说在训练当前FlowNet模块时,前面的FlowNet模块参数均为固定状态。
Flownet2.0.png
随着优化模块的堆叠,FlowNet2的计算速度会有所下降,因此可以通过按比例消减FlowNet各层的特征通道数来减少计算量。
针对小位移的情况引入特定的子网络FlowNet2-SD进行处理,针对小位移情况改进了FlowNet模块的结构,首先将编码模块部分中大小为7x7和5x5的卷积核均换为多层3x3卷积核以增加对小位移的分辨率。其次,在解码模块的反卷积层之间,均增加一层卷积层以便对小位移输出更加平滑的光流预测。在训练数据的选择上,针对小位移,又重新合成了以小位移为主的新的数据库ChairsSDHom,并将此前的堆叠网络FlowNet2-CSS在ChairsSDHom和FlyingThings3D的混合数据上继续微调训练,将结果网络表示为FlowNet2-CSS-ft-sd。最后,再利用一个新的小网络对FlowNet2-CSS-ft-sd的结果和FlowNet2-SD的结果进行融合,并将整个网络体系命名为FlowNet2。FlowNet2-CSS与FlowNet2-SD做到了很好地互补,共同保证了FlowNet2在各种情况下的预测质量。
不同的训练策略,baseline:,更多的迭代次数,更小的学习率,实验发现,训练结果不仅与数据种类有关,还与数据训练的顺序有关,先在FlyingChair上按策略,再在FlyingThings3D上按策略训练后,所得结果最好。单独在FlyingThing3D上训练的结果反而下降。文中给出了解释是尽管FlyingThings3D比较真实,包含更丰富的运动信息,但是过早的学习复杂的运动信息反而不易收敛到更好的结果,而先从简单的运动信息学起,由易到难反得到了更好的结果。
网友评论