1. 前言
FlowNet2是最先进的光流估计卷积神经网络(CNN),需要超过160M的参数来实现精确的流量估计。在本文中,我们提出了一种替代网络,它在Sintel和KITTI基准测试上优于FlowNet2,同时在模型尺寸上要小30倍,在运行速度上要快1.36倍。这是通过深入研究当前框架中可能被遗漏的架构细节而实现的:(1)我们通过轻量级级联网络在每个金字塔级提出了一种更有效的流推理方法。它不仅通过早期校正提高了流量估计的精度,而且还允许在我们的网络中无缝地合并描述符匹配。(2)我们提出了一种新的流正则化层,利用特征驱动的局部卷积来改善异常值和模糊流边界的问题。(3)我们的网络拥有一个有效的金字塔特征提取结构,并包含特征扭曲,而不是像FlowNet2中所实践的图像扭曲。
2. 模型
2.1 encoder
encode是多层的不同尺度的卷积,输出6个尺度。直接看配置
encoder=dict(
type='NetC',
in_channels=3,
pyramid_levels=[
'level1', 'level2', 'level3', 'level4', 'level5', 'level6'
],
out_channels=(32, 32, 64, 96, 128, 192),
strides=(1, 2, 2, 2, 2, 2),
num_convs=(1, 3, 2, 2, 1, 1),
conv_cfg=None,
norm_cfg=None,
act_cfg=dict(type='LeakyReLU', negative_slope=0.1),
init_cfg=None),
2.2 decoder
decoder中的核心模块有:
- Correlation:计算两个特征的相关性
- warp:光流修正模块
整体流程
- netM部分,计算cost volume
- netS部分,光流warp,然后feature concat之后做预测
netM
if upflow is None:
warp_feat = feat2
upflow = torch.zeros_like(feat1)
else:
warp_feat = self.warp_op(feat2, upflow * multiplier)
corr_feat = self.corr(feat1, warp_feat)
corr_feat = self.corr_up(corr_feat)
feat = self.layers(corr_feat)
res_flow = self.pred_flow(feat)
return upflow[:, :2, ...] + res_flow
netS
warp_feat = self.warp_op(feat2, flow * multiplier)
feat = torch.cat((feat1, warp_feat, flow), dim=1)
feat = self.layers(feat)
res_flow = self.pred_flow(feat)
return flow + res_flow
3. 训练
- level6至4、3和2级的学习率最初分别设置为1e-4、5e-5和4e-5,从120k、160k、200k和240k迭代开始,我们将其减少了2倍
- 用L2训练损失
- Adam训练器
- 数据增强,和schedule采用和flownet2一样