0. 简介

密集的光流估计在许多机器人视觉任务中起着关键作用。随着深度学习的到来,已经比传统方法以令人满意的精度预测了它。然而,当前的网络经常占用大量参数并且需要沉重的计算成本。这些缺点阻碍了在功率或内存受限的移动设备上的应用。为了应对这些挑战,在本文《FastFlowNet: A Lightweight Network for Fast Optical Flow Estimation》中,我们将深入研究设计有效的结构,以进行快速,准确的光流预测。我们提出的FastFlowNet通过以下创新以众所周知的从粗到细的方式工作。首先,采用了新的头部增强池金字塔(HEPP)特征提取器来增强高分辨率金字塔特征,同时减少参数。第二,我们介绍了一种新颖的中心密集膨胀相关(CDDC)层,用于构造紧凑的成本量,可以保持较大的搜索半径并减少计算负担。第三,将高效的混洗块解码器(SBD)植入每个金字塔级别,以使流量估计准确度略有下降。FastFlowNet仅包含1.37 M参数,并在Sintel分辨率图像上在NVIDIA GTX 1080 Ti和嵌入式Jetson TX2 GPU分别以90或5.7 fps的速度运行。目前来说,该轻量化网络基本可以应对低速的无人车系统。相应的代码已经在Github上完成了开源。同时在NVIDIA Developer Forums中也有人尝试着完成TensorRT的加速

1. 文章贡献

为了提高光流的准确估计速度,便于实际应用,本文提出了一种轻量级的快速网络,称为FastFlowNet。我们的模型基于广泛使用的由粗到细的残差结构,并从金字塔特征提取、成本体积构造和光流解码三个方面对其进行改进,覆盖了流量估计管道的所有组件。

  1. 首先,提出了一种头部增强池金字塔(HEPP)特征提取方法,该方法在较高层次使用卷积层,而在较低层次采用无参数池。

  2. 其次,最近的研究[13],[19]表明增大相关层的搜索半径可以提高流动精度。而代价体积的特征通道是搜索半径的平方,后续解码器网络的计算复杂度是搜索半径的4次方。在FastFlowNet中,我们保持搜索半径为4,就像在PWC-Net[13]中一样,以感知大型移动。不同的是,为了减少计算量,我们向下挖掘大残差区域的样本特征通道,并提出了一种新的中心密集膨胀相关(CDDC)层来构造紧凑的成本体积。

  3. 第三,我们观察到每个金字塔级的流解码器占整个网络的参数和计算的比例都比较大。为了进一步减少计算量,同时保持良好的性能,我们参照轻量级ShuffleNet[21]构建了一种新的shuffle block decoder (SBD)模块,以满足其低计算成本和高分类精度的要求。不同于shuffle lenet[21]作为骨干网,我们的SBD模块用于光流的回归,它只位于解码器网络的中间部分。

2. 具体算法

首先我们先来看一下本文的整体框架,给定两个时间相邻的输入图像I_1,I_2∈\mathbb{R}^{H×W ×3},我们提出的FastFlowNet利用由粗到细的残差结构来估计逐渐细化的光流F_l∈\mathbb{R}^{H_l×W_l×2},l = 6,5,…,2。但对其进行了广泛的改进,通过适当降低参数和计算成本来加速推理。为此,我们首先将PWC-Net[13]中的双卷积特征金字塔替换为头部增强池化金字塔,以增强高分辨率金字塔特征,减小模型尺寸。在此基础上,提出了一种新的中心密集扩展相关层,在保持大搜索半径的前提下,构造了紧凑的成本体积。最后,在每个金字塔级别上使用新的洗牌块解码器来回归光流,计算成本显著降低。

模型的结构细节如表1所示

2.1 头部增强池金字塔

低分辨率下的大通道数导致大量的参数。此外,由于低水平的金字塔特征只负责估计粗流场,它可以重新适用于粗细结构。因此,我们将高层的特征金字塔与其他低层的池化金字塔相结合,得到如图2所示的两种强度。另一方面,高分辨率的金字塔特征在PWC-Net中相对较浅,因为每个金字塔层只包含两个包含3×3核的卷积,其接受域较小。因此,我们在较高的层次上增加一个卷积,以少量额外的成本强化金字塔特征。通过平衡不同尺度之间的计算,我们提出了一个头增强池化金字塔特征提取器,如表i顶部所示。与FlowNetC、PWC-Net和LiteFlowNet一样,HEPP以2的比例因子生成了从^{1/2}分辨率(级别1)到^{1/64}分辨率(级别6)的6个金字塔级别。

2.2 中心密集扩张相关

现代光流架构的一个关键步骤是通过基于内积的相关层来计算特征对应关系[10]。 给定l级的两个金字塔特征f^l_1,f^l_2,与许多粗到细的残差方法一样,我们首先采用基于双线性插值的warp扭曲操作[12],[11],根据上采样的先前时刻的光流场up_2(F^{l+1})对第二个特征f^l_2进行warp扭曲。 翘曲后的目标特征f^l_{warp}可以明显减少大运动引起的位移,这有助于缩小搜索区域,简化估计相对较小的剩余流量的任务。 最近的模型[13][14]通过在局部方形区域内将源特征与相应的翘曲目标特征相关联来构建成本量,可以表述为

其中xd表示空间坐标和偏移坐标。N是输入特征的长度。R为搜索半径;·代表内积。

如图3a所示,许多流网络[13],[18],[15],[16]集合r = 4,由此产生的巨大计算负担阻碍了低功耗应用。减少计算成本的一个简单方法是减小r,如图3b中设置r = 3。它可以将体积特征的成本从81降低到49,但这种方法是以牺牲感知范围和准确性为代价的.

不同于ASPP使用并行atrous卷积来获取多尺度上下文信息,我们提出的CDDC在构建大半径成本体积时减少了计算量。在FastFlowNet中,它输出53个特征通道,与传统的r = 3设置具有相似的计算预算。我们的动机是残流分布更关注于小运动。实验结果表明,CDDC算法的性能优于单纯压缩算法。

2.3 Shuffle块解码器

在构建成本量之后,从粗到细的模型通常将上下文特征、成本量和上采样的前一个流连接起来,作为后续解码器网络的输入。由于金字塔级的存在,解码器部分占用了整个网络的大部分参数和计算量。因此,更好的速度-精度权衡是至关重要的。

PWC-Net[13]实验表明,密集连接流译码器在对FlyingThings3D[24]数据集进行微调后,以增加模型尺寸和计算量为代价提高了译码精度。LiteFlowNet[14]使用顺序连接流量估计器,也显示出改进的性能。FD- FlowNet[18]采用部分全连接结构,实现了两种方案之间更好的权衡。然而,这些方法都不能很好地支持嵌入式系统的实时推理。

由于CDDC所构建的紧凑的成本体积,我们可以直接将解码器网络的最大特征通道从128个减少到目前的96个,没有任何问题。为了进一步减少计算量和模型大小,我们将中间三个96通道卷积改革为组卷积,然后进行信道洗牌操作,我们称之为“洗牌块”。不同于shuffle lenet[21]作为骨干网络,我们的shuffle block解码器用于光流的回归。如表I底部所示,每个解码器网络包含三个group = 3的shuffle block,可以有效地减少计算,但精度有边际下降。

2.4 损失函数

由于FastFlowNet与FlowNet[10]和PWC-Net[13]具有相同的金字塔尺度,因此我们采用相同的多尺度L2损耗进行训练

其中|·|_2计算预测流场和真实流场之间的L2范数。当对具有真实场景结构的数据集(如KITTI)进行微调时,我们使用以下鲁棒损失

其中|·|为L1范数,c = 0.01为小常数,q <1使得损失对于较大的异常值更加稳健。为了与之前的方法[10],[11],[13],[14]进行比较,将Eq.(2)和Eq.(3)中的权重设为α6 = 0.32,α5 = 0.08,α4 = 0.02,α3 = 0.01, α2 = 0.005

3. 参考链接

https://mp.weixin.qq.com/s?__biz=MzI5MTM1MTQwMw

https://vingtdylan.github.io/p/a2c4.html

https://forums.developer.nvidia.com/t/fastflownet-in-tensorrt-api/210852

https://cloud.tencent.com/developer/article/2104741