提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
光流学习
光流是估计视频帧之间每像素运动的任务。这是一个长期存在的尚未解决的愿景问题。最好的系统受到困难的限制,包括快速移动的物体、遮挡、运动模糊和无纹理的表面。
光流传统上被认为是在一对图像[21,51,13]之间的密集位移场空间上的一个手工制作的优化问题。一般来说,优化目标定义了鼓励视觉相似图像区域对齐的数据项和先加于运动合理性的正则化项之间的权衡。这种方法已经取得了相当大的成功,但由于难以手工设计一个对各种角落情况具有稳健性的优化目标,进一步的进展似乎具有挑战性。
最近,深度学习已被证明是一种很有前途的替代传统方法。深度学习可以逐步制定优化问题,训练网络直接预测流程。目前的深度学习方法[25,42,22,49,20]已经取得了可与最佳传统方法相媲美的性能,同时在推理时速度明显更快。进一步研究的一个关键问题是设计有效的性能更好、更容易训练和很好地推广到新场景的架构。
我们介绍了递归全对场变换(RAFT),一种新的光流深度网络结构。RAFT具有以下优点:
RAFT由三个主要组件组成:(1)特征编码器,提取每个像素的特征向量;(2)相关层,为所有像素对产生四维相关卷,随后池产生低分辨率卷;(3)一个基于GPU的循环更新操作运算,从相关卷中检索值,并迭代更新初始化的流场。图1说明了RAFT的设计。
RAFT架构采用了传统的基于优化的方法。该特征编码器提取每个像素的特征。相关层计算像素之间的视觉相似性。该更新操作符模拟了一个迭代优化算法的步骤。但与传统方法不同的是,特征和运动先验不是手工制作的,而是分别由特征编码器和更新运算符学习的。
RAFT的设计从许多现有的作品中汲取灵感,但在本质上是新颖的。首先,RAFT以高分辨率维护和更新单个固定流场。这与之前的工作[42,49,22,23,50]中流行的从粗到细的设计不同,后者首先以低分辨率估计流量,并在高分辨率下进行上采样和细化。通过在单个高分辨率流场上运行,RAFT克服了粗到细级联的几个限制:从粗分辨率的错误中恢复的差异,错过小型快速移动对象的倾向,以及训练多层级联通常需要的许多训练迭代(通常超过1M)。
其次,RAFT的更新操作符是周期性的和轻量级的。[24,42,49,22,25]最近的许多工作都包括了某种形式的迭代细化,但没有绑定跨迭代[42,49,22]的权重,因此被限制在固定数量的迭代中。据我们所知,IRR[24]是唯一一种反复出现的深度学习方法[24]。它使用FlowNetS[15]或PWC-Net[42]作为其循环单元。当使用FlowNetS时,它受到网络大小(38M参数)的限制,并且只应用5次迭代。当使用PWC-Net时,迭代受到金字塔级别数量的限制。相比之下,我们的更新操作算子只有2.7M的参数,在推理过程中可以应用100+次而不发散。
第三,更新操作符有一个新颖的设计,它由一个卷积GRU组成,可以在4D多尺度相关卷上进行查找;相比之下,之前工作中的细化模块通常只使用普通卷积或相关层。
我们对Sintel[11]和KITTI[18]进行了实验。结果表明,RAFT在两个数据集上都取得了最先进的性能。此外,我们通过广泛的消融研究验证了RAFT的各种设计选择。
光流传统上被视为一个能量最小化问题,它在数据项和正则化项之间进行权衡。Horn和Schnuck[21]将光流作为一个使用变分框架的连续优化问题,并能够通过执行梯度步骤来估计一个密集的流场。Black和Anandan[9]通过引入一个鲁棒估计框架来解决过平滑和噪声灵敏度的问题。TV-L1[51]用L1数据项和全变化正则化取代了二次惩罚,这允许运动不连续,并能更好地处理异常值。通过定义更好的匹配成本[45,10]和正则化项[38],已经进行了改进。
这种连续公式保持了光流的单一估计,每次迭代都经过改进。为了保证目标函数的光滑,采用一阶泰勒近似法对数据项进行建模。因此,它们只适用于较小的位移,为了处理大的位移,使用了从粗到细的策略,其中使用图像金字塔来估计低分辨率的大位移,然后细化高分辨率的小位移。但是这种从粗到细的策略可能会错过快速移动的小物体,并且很难从早期的错误中恢复过来。与连续方法一样,我们保持光流的单一估计,每次迭代进行改进。然而,由于我们在高分辨率和低分辨率下为所有对构建相关量,每个局部更新都使用关于小位移和大位移的信息。此外,我们的更新算符没有使用数据项的亚像素泰勒近似,而是学习提出下降方向。
最近,光流也被认为为一个使用全局目标的离散优化问题[35,13,47]。这种方法的一个挑战是搜索空间的巨大大小,因为每个像素都可以合理地与另一帧中的数千个点配对。Menez等人使用特征描述符来修剪搜索空间,并使用消息传递来逼近全局MAP估计。陈等人。[13]表明,利用距离变换,求解整个流场空间上的全局优化问题是易于处理的。DCFlow[47]通过使用神经网络作为特征描述符进行了进一步的改进,并构建了所有特征对的四维代价体积。然后使用半全局匹配(SGM)算法[19]对四维成本量进行处理。与DCFlow一样,我们也在学习到的特性上构建了4D成本卷。然而,我们没有使用SGM来处理成本量,而是使用一个神经网络来估计流量。我们的方法是端到端可微的,这意味着特征编码器可以与网络的其余部分一起进行训练,以直接最小化最终流量估计的误差。相比之下,DCFlow要求使用像素之间的嵌入损失进行训练;它不能直接对光流进行训练,因为它们的损失量处理是不可区分的。
RAFT提取的特征分为两种:第一种是匹配特征,左右影像共享同样的权重,提取的特征主要用于匹配;因此,这个网络最后会更倾向于提取保证稳健匹配的特征。第二种是内容特征,仅仅在左影像上提取,主要用于对光流结果进行优化,其实就是一个导向滤波,最后这个网络会更倾向于判断那些区域的光流更可能是一致的。
针对第二个网路,RAFT也表明,其实也可以用匹配特征来进行优化;但是用两个网络的效果更好。
RAFT直接算所有像素之间的cost,计算公式如下,其中 g θ g_{\theta} gθ 是匹配特征, I 1 I_1 I1 和 I 2 I_2 I2 分别是左右影像。右侧的计算公式中,h是匹配特征的维度, i , j , k , l i , j , k , l i,j,k,l是遍历的索引。
通过以上方式即可获取cost,为了保证有足够的视野,还给cost加上了池化,获取不同分辨率下的cost。
流程步骤:
首先初始化光流结果为 0,然后对第一帧用 Context Encoder 提取 Context 信息,用 Feature Encoder 提取第一帧和第二帧的信息,做矩阵乘法得到 4D Correlation Volumes。有了 Context Encoder 的特征结果,其实就可以估计光流结果了,GRU 直接利用进行光流估计,得到估计结果 Δ f 1 \Delta f_1 Δf1,注意,第 k+1 次迭代估计的结果为 f k + 1 = f k + Δ f k f_{k+1}=f_k+\Delta f_k fk+1=fk+Δfk ,那么第一次估计的结果即 f 1 = Δ f 1 + 0 = Δ f 1 f_{1}=\Delta f_1+0=\Delta f_1 f1=Δf1+0=Δf1 ,这就算完成了光流估计。