论文
PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume
Models Matter, So Does Training: An Empirical Study of CNNs for Optical Flow Estimation
摘要
PWCNet是Nvidia提出的光流估计方法,在网络模型和训练方法上都进行比较深入的讨论。这个组还复现了FlowNet2,比原作者的FlowNet2影响还大,可见这篇论文的作者对光流的理解之深刻。因此个人感觉,如果要做光流匹配的研究,本篇论文必不可少。
模型
FlowNet2证明了串联多个网络可以提高光流估计的质量,但是这样的后果是训练复杂和参数量成倍增加。针对此问题,PWCNet利用多尺度特征来替换网络串联,其大致网络结构如下。PWCNet首先通过CNN卷积得到多层的特征,然后从低分辨率开始估计光流,并将低分辨率的光流上采样到高分辨率,同时构建cost volume和预测当前分辨率的光流,最后逐步得到最终分辨率的光流结果。
针对其中光流的coarse-to-fine过程,有一个更详细的示意图如下,接下来就具体介绍各个模块的事情。
1. 多尺度特征提取
多尺度特征提取直接使用CNN网络即可,没有什么特别的地方。不过不同尺度,可以认为具有不同感受野,就和传统方法里的金字塔一个意思。
2. 多尺度光流估计
对于最低尺度,直接用cnn估计即可,类似于FlowNetS。
然后将其上采样一次,同时光流大小乘2(为什么要乘2,原因自己想);得到光流后,参照FlowNet的方法对右特征图(注意是特征图,不是原始影像)进行warp;最后参照FlowNetC的方法,直接对左特征图和warp后的右特征图进行关联计算,构建出cost volumn,并回归出当前尺度的光流。
3. 光流优化
完成最终尺度的光流估计后,还需要一步进行光流优化。这个也是一堆CNN网络,只是不需要降低分辨率。在本文里直接用了7个3*3的空洞卷积,在保证计算量的前提下提高视野,保证优化时能够提高光流质量。
训练
PWCNet的作者也意识到训练非常的麻烦,所以也进行了非常细致的讨论。为此,本文将训练分成两个阶段,预训练阶段和优化训练阶段
1. loss函数
PWCNet在预训练阶段使用了2范数,加快收敛速度,公式如下
在优化训练阶段使用了1范数,并在一定程度上去除外点,提升光流质量,公式如下
2. learning rate调整
在预训练阶段的learning rate,PWCNet和FlowNet2的方式一样,此处不展开。
在优化训练阶段,其learning rate有特殊的变化模式,如下图所示,即先逐步减小,然后再增大减小。不过我还没看到作者解释为啥这么做,不过估计是为了防止陷入局部解。
3. 数据增强
在数据增强方面,作者强调没有添加高斯噪声,但是增加了水平翻转。具体原因,论文里我似乎也没有看到,以后看代码在想想。
结果
相比FlowNet2,PWCNet实现的更加优雅,结果也是非常不错的。