RAFT:用于光流的循环全对场变换

RAFT:用于光流的循环全对场变换

原文链接

摘要

​ 我们介绍了循环全对场变换 (RAFT),这是一种用于光流的新型深度网络架构。 RAFT 提取每个像素的特征,为所有像素对构建多尺度 4D 相关体积,并通过对相关体积执行查找的循环单元迭代更新流场。 RAFT 实现了最先进的性能。 在 KITTI 上,RAFT 实现了 5.10% 的 F1-all 误差,比最佳公布结果 (6.10%) 减少了 16%。 在 Sintel(最终通过)上,RAFT 获得了 2.855 像素的终点误差,比最佳发布结果(4.098 像素)减少了 30% 的误差。 此外,RAFT 具有很强的跨数据集泛化能力以及在推理时间、训练速度和参数计数方面的高效率。 代码可在 https://github.com/princeton-vl/RAFT 获得。

1 介绍

​ 光流是估计视频帧之间的每像素运动的任务。 这是一个长期存在的视力问题,仍未解决。 最好的系统会受到一些困难的限制,包括快速移动的物体、遮挡、运动模糊和无纹理表面。

​ 传统上,光流被视为一对图像之间密集位移场空间上的手工优化问题 [21,51,13]。 通常,优化目标定义了促进视觉相似图像区域对齐的数据项和对运动的合理性施加先验的正则化项之间的权衡。 这种方法取得了相当大的成功,但进一步的进展似乎具有挑战性,因为手动设计一个对各种极端情况都具有鲁棒性的优化目标很困难。

​ 最近,深度学习已被证明是传统方法的有前途的替代品。 深度学习可以回避制定优化问题并训练网络直接预测流量。 当前的深度学习方法 [25,42,22,49,20] 已经实现了与最佳传统方法相当的性能,同时在推理时明显更快。 进一步研究的一个关键问题是设计性能更好、训练更容易并能很好地泛化到新场景的有效架构。

​ 我们介绍了循环全对场变换 (RAFT),这是一种用于光流的新型深度网络架构。 RAFT 具有以下优势:

  • 最先进的准确性:在 KITTI [18] 上,RAFT 实现了 5.10% 的 F1-all 误差,比最佳公布结果 (6.10%) 减少了 16% 的误差。 在 Sintel [11](最终通过)上,RAFT 获得了 2.855 像素的端点误差,比最佳发布结果(4.098 像素)减少了 30% 的误差。
  • 强泛化:仅在合成数据上训练时,RAFT 在 KITTI [18] 上实现了 5.04 像素的终点误差,与在相同数据(8.36 像素)上训练的最佳先验深度网络相比,误差减少了 40%。
  • 高效率:RAFT 在 1080Ti GPU 上以每秒 10 帧的速度处理 1088×436 视频。 它训练的迭代次数比其他架构少 10 倍。 具有 1/5 参数的较小版本的 RAFT 以每秒 20 帧的速度运行,同时仍优于 Sintel 上的所有先前方法。

​ RAFT 由三个主要部分组成:(1)一个特征编码器,为每个像素提取一个特征向量; (2) 相关层,为所有像素对产生 4D 相关量,随后池化以产生较低分辨率的相关量; (3) 一个基于 GRU 的循环更新算子,它从相关量中检索值并迭代更新初始化为零的流场。 图 1 说明了 RAFT 的设计。

图 1:RAFT 由 3 个主要组件组成:(1)从两个输入图像中提取每像素特征的特征编码器,以及仅从 I1 中提取特征的上下文编码器。 (2) 一个相关层,它通过取所有特征向量对的内积构建一个4D W × H × W × H 的相关体积。 4D 体积的最后 2 维在多个尺度上汇集以构建一组多尺度体积。 (3) 一个更新算子,它通过使用当前估计从相关体积集合中查找值来循环更新光流。

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 时,迭代受到金字塔层数的限制。 相比之下,我们的更新算子只有 270 万(2.7M)个参数,并且可以在推理过程中应用 100 多次而不会发散。

​ 第三,更新算子有一个新颖的设计,它由一个卷积 GRU 组成,它在 4D 多尺度相关体上执行查找; 相比之下,先前工作中的细化模块通常仅使用普通卷积或相关层。

​ 我们在 Sintel[11] 和 KITTI[18] 上进行了实验。 结果表明,RAFT 在两个数据集上都达到了最先进的性能。 此外,我们通过广泛的消融研究验证了 RAFT 的各种设计选择。

2 相关工作

作为能量最小化的光流

​ 传统上,光流被视为能量最小化问题,它在数据项和正则化项之间进行权衡。 Horn 和 Schnuck [21] 使用变分框架将光流表述为连续优化问题,并且能够通过执行梯度步骤来估计密集流场。 Black 和 Anandan[9] 通过引入稳健的估计框架解决了过度平滑和噪声敏感性的问题。 TV-L1 [51] 用 L1 数据项和总变异正则化代替了二次惩罚,这允许运动不连续性,并且可以更好地处理异常值。 通过定义更好的匹配成本 [45,10] 和正则化项 [38] 进行了改进。

​ 这种连续的公式保持对光流的单一估计,在每次迭代时都会对其进行细化。 为了确保平滑的目标函数,使用一阶泰勒近似对数据项进行建模。 因此,它们仅适用于小位移。 为了处理大位移,使用了从粗到细的策略,其中图像金字塔用于在低分辨率下估计大位移,然后在高分辨率下细化小位移。 但是这种从粗到细的策略可能会错过快速移动的小物体,并且难以从早期错误中恢复。 与连续方法一样,我们保持对光流的单一估计,每次迭代都会对其进行改进。 然而,由于我们以高分辨率和低分辨率为所有对构建相关体积,每个局部更新都使用关于小位移和大位移的信息。 此外,我们的更新算子没有使用数据项的亚像素泰勒近似,而是学习建议的梯度下降的方向。

​ 最近,光流也被视为使用全局目标的离散优化问题 [35,13,47]。 这种方法的一个挑战是搜索空间的巨大尺寸,因为每个像素都可以与另一帧中的数千个点合理配对。 Menez 等人 [35] 使用特征描述符修剪搜索空间,并使用消息传递近似全局 MAP 估计。 陈等人。 [13]表明,通过使用距离变换,解决整个流场空间上的全局优化问题是容易处理的。 DCFlow [47] 通过使用神经网络作为特征描述符显示了进一步的改进,并在所有特征对上构建了一个 4D 成本量。 然后使用半全局匹配 (SGM) 算法 [19] 处理 4D 成本量。 与 DCFlow 一样,我们也在学习特征上构建了 4D 成本量。 然而,我们没有使用 SGM 处理成本量,而是使用神经网络来估计流量。 我们的方法是端到端的可微分的,这意味着特征编码器可以与网络的其余部分一起训练,以直接最小化最终流量估计的误差。 相比之下,DCFlow 需要使用像素之间的嵌入损失(embedding loss)来训练他们的网络; 它不能直接在光流上训练,因为它们的成本量处理是不可微的。

直接流量估计

​ 神经网络已经训练完成,可以直接预测一对帧之间的光流,完全回避优化问题。 在最近的许多工作中,粗到细加工已成为一种流行的成分 [42,50,22,23,24,49,20,8,52]。 相比之下,我们的方法维护和更新单个高分辨率流场。

光流迭代细化

​ 最近的许多工作都使用迭代细化来改进光流 [25,39,42,22,49] 和相关任务 [29,53,44,28] 的结果。 伊尔格等人。 [25] 通过将多个 FlowNetS 和 FlowNetC 模块串联堆叠,将迭代细化应用于光流。 SpyNet[39]、PWC-Net[42]、LiteFlowNet[22] 和 VCN [49] 使用粗到细金字塔应用迭代细化。 这些方法与我们的主要区别在于它们在迭代之间不共享权重

​ 与我们的方法更密切相关的是 IRR[24],它建立在 FlownetS 和 PWC-Net 架构的基础上,但在细化网络之间共享权重。 使用 FlowNetS 时,受网络规模(38M 参数)限制,最多只能应用 5 次迭代。 使用 PWC-Net 时,迭代受到金字塔层数的限制。 相比之下,我们使用了一个更简单的细化模块(270 万个参数),它可以在推理过程中应用于 100 多次迭代而不会发散。 我们的方法也与 Devon [31] 有相似之处,即成本量的构建没有扭曲和固定分辨率更新。 但是,Devon没有任何循环单元。 在大位移方面,它也与我们的不同。 Devon 使用扩张的成本量处理大位移,而我们的方法在多个分辨率下汇集相关量。

​ 我们的方法还与 TrellisNet [5] 和深度均衡模型 (DEQ) [6] 有关。 Trellis net在大量层上使用深度绑定权重,DEQ 通过直接求解固定点来模拟无限层。 TrellisNet 和 DEQ 是为序列建模任务而设计的,但我们采用了使用大量权重绑定单元的核心思想。 我们的更新算子使用了一个修改过的 GRU 块 [14],它类似于 TrellisNet 中使用的 LSTM 块。 我们发现这种结构使我们的更新算子更容易收敛到固定流场。

学习优化

​ 视觉中的许多问题都可以表述为优化问题。 这促使一些工作将优化问题嵌入到网络架构中 [4,3,43,32,44]。 这些工作通常使用网络来预测优化问题的输入或参数,然后通过求解器反向传播梯度来训练网络权重,或隐式 [4,3] 或展开每个步骤 [32,43]。 但是,这种技术仅限于具有易于定义的目标的问题。

​ 另一种方法是直接从数据中学习迭代更新 [1,2]。 这些方法的动机是一阶优化器,如原始双混合梯度 (Primal

Dual Hybrid Gradient,PDHG) [12] 可以表示为迭代更新步骤的序列。 Adler 等人没有直接使用优化器。 [1] 建议构建一个模拟一阶算法更新的网络。 这种方法已应用于逆问题,例如图像去噪 [26]、断层扫描重建 [2] 和新视图合成 [17]。 TVNet [16] 将 TV-L1 算法实现为计算图,从而能够训练 TV-L1 参数。 然而,TVNet 的操作直接基于强度梯度而不是学习特征,这限制了在具有挑战性的数据集(如 Sintel)上可实现的准确性。

​ 我们的方法可以被视为学习优化:我们的网络使用大量更新块来模拟一阶优化算法的步骤。 然而,与之前的工作不同,我们从未明确定义关于某个优化目标的梯度。 相反,我们的网络从相关量(correlation volumes)中检索特征以提出下降方向。

3 方法

​ 给定一对连续的 RGB 图像 I1, I2,我们估计一个密集位移场 (f 1,f 2 ),它将 I2 中的每个像素 (u, v) 映射到其对应的坐标 (u’ , v’ ) = (u + f 1(u), v + f 2(v)) 在 I2 中。 图 1 给出了我们方法的概述。 我们的方法可以分为三个阶段:(1)特征提取,(2)计算视觉相似性,以及(3)迭代更新,其中所有阶段都是可微分的,组成一个端到端的可训练架构。

3.1 特征提取

​ 使用卷积网络从输入图像中提取特征。特征编码器网络应用于 I1 和 I2,并将输入图像映射到较低分辨率的密集特征图。我们的编码器 gθ 以 1/8 分辨率 gθ 输出特征:RH×W×3 → RH/8×W/8×D,其中我们设置 D = 256。特征编码器由 6 个残差块组成,2 个在 1/2分辨率、2 个 1/4 分辨率和 2 个 1/8 分辨率(更多详细信息在补充材料中)。

​ 我们另外使用上下文网络。上下文网络仅从第一个输入图像 I1 中提取特征。上下文网络的架构 hθ 与特征提取网络相同。特征网络 gθ 和上下文网络 hθ 共同构成了我们方法的第一阶段,只需执行一次。

3.2 计算视觉相似度

​ 我们通过在所有对之间构建一个完整的相关体积来计算视觉相似度。给定图像特征 gθ(I1) ∈ RH×W×D 和 gθ(I2) ∈ RH×W×D,通过取所有特征向量对之间的点积形成相关量。相关量 C 可以有效地计算为单个矩阵乘法。

相关金字塔:

​ 我们通过将相关量的最后两个维度与内核大小为 1、2、4 和 8 以及等效步长进行池化来构建一个 4 层金字塔 {C1、C2、C3、C4}(图 2)。 因此,体积 Ck 具有尺寸 H × W × H/2k × W/2k 。 这组体积给出了关于大位移和小位移的信息; 然而,通过保持前 2 维(I1 的维度),我们保持了高分辨率信息,使我们的方法能够恢复小型快速移动物体的运动。

图 2:构建相关量。 在这里,我们描绘了完整 4D 体积的 2D 切片。 对于 I1 中的特征向量,我们取 I2 中所有对的内积,生成 4D W ×H ×W ×H 体积(I2 中的每个像素产生一个 2D 响应图)。 该量使用平均池化,内核大小为 {1, 2, 4, 8}。

相关查找:

​ 我们定义了一个查找算子 LC,它通过相关金字塔中的索引来生成特征图。 给定光流的当前估计值 (f 1,f 2 ),我们将 I1 中的每个像素 x = (u, v) 映射到其在 I2 中的估计对应关系: x‘= (u + f 1(u), v + f 2 (v))。 然后我们在 x’ 周围定义一个局部网格

作为使用 L1 距离在 x‘ 的 r 个单位的半径内的整数偏移量的集合。我们使用局部邻域 N (x’)r 从相关量中索引。由于 N (x‘)r 是实数网格,我们使用双线性采样。

​ 我们在金字塔的所有级别上执行查找,以便使用网格 N (x’/2k)r 对 k 级的相关量 Ck 进行索引。跨级别的恒定半径意味着较低级别的更大上下文:对于最低级别,k = 4 使用半径 4 对应于原始分辨率下 256 像素的范围。然后将每个级别的值连接到单个特征映射中。

高分辨率图像的高效计算:

​ 所有对相关尺度 O(N2 ),其中 N 是像素数,但只需要计算一次并且迭代次数 M 是恒定的。但是,我们的方法存在一个等效的实现,利用内积和平均池化的线性来缩放 O(NM)。考虑第 m 级的成本量 Cm ijkl ,和特征图 g (1) = gθ(I1)、g (2) = gθ(I2):

这是 2m × 2m 网格中相关响应的平均值。 这意味着 Cm ijkl 处的值可以计算为特征向量 gθ(I1)ij 和 gθ(I2) 之间的内积,内核大小2m × 2m 进行池化。

​ 在这个替代实现中,我们不预先计算相关性,而是预先计算池化图像特征图。 在每次迭代中,我们根据需要计算每个相关值——仅当它被查找时。 这给出了 O(NM) 的复杂度。

​ 我们凭经验发现,由于 GPU 上高度优化的矩阵例程,预计算所有对很容易实现而不困难——即使对于 1088x1920 的视频,它也只需要总推理时间的 17%。 请注意,如果它成为瓶颈,我们总是可以切换到替代实现。

3.3迭代更新

​ 我们的更新运算符估计一系列流程估计{f1,…,fn}从初始起始点f0 = 0。在每个迭代中,它产生了应用于当前估计的更新方向Δf:fk+1 =Δf+ fk + 1。

​ 更新运算符采用流量,相关性和潜在的隐藏状态作为输入,并输出更新ΔF和更新的隐藏状态。我们更新运算符的架构旨在模拟优化算法的步骤。因此,我们在深度上捆绑权重(权重共享),并使用有界激活来促使收敛到一个固定点。训练更新运算符以执行更新,使得序列会聚到固定点FK→F *。

初始化:

​ 默认情况下,我们将所有位置的流场初始化为0,但我们的迭代方法使我们能够灵活地尝试替代方案。当应用于视频时,我们测试热启动(warm-start)初始化,其中来自之前帧的光流量向前投影到之后帧,其中使用最近邻插入填充遮挡间隙。

输入:

​ 给定当前流估计fK,我们使用它来检索来自相关金字塔的相关特征,如sec 3.2中所述。然后由2个卷积层处理相关特征。另外,我们将2个卷积层应用于流动估计自身以产生流动特征。最后,我们直接从上下文网络注入输入。然后将输入特征映射作为相关性,流动和上下文特征的串联。

更新:

更新运算符的核心组件是基于GRU单元格的门控激活单元,使用卷积替换全连接层:

其中Xt是先前定义的流量,相关性和上下文功能的串联。我们还尝试了一个可分离的ConvGRU单元,在那里我们用两种GRUs取代3×3卷积:一个带有1×5卷积,一个带有5×1卷积,以增加接收领域,而不会显着增加模型的大小。

流动预测:

​ 由GRU输出的隐藏状态通过两个卷积层以预测流动更新ΔF。输出流量为输入图像的1/8分辨率。在 training和评估期间,我们将预测的流场上采样,以匹配地面真值的分辨率。

上采样:

​ 网络输出1/8分辨率的光流。通过将每个像素处的全分辨率流动以粗糙分辨率近邻的3×3网格的凸组合来使光流向全分辨率转换。我们使用两个卷积层来预测H / 8×W / 8×(8×8×9)掩模,并在9个邻居的权重上执行softmax。通过使用掩模在邻域中采取加权组合,然后置换和重塑到H×W×2维流场来找到最终的高分辨率流场。该层可以使用unfold功能在Pytorch中直接实现。详情见补充材料。

3.4监督

​ 我们在预测和地面真相之间的L1距离上监督我们的网络,通过预测的完整序列,{f1,…,fn},具有指数增加的权重。给定实际流量 fgt,损失定义为

在我们的实验中,我们在其中设置r= 0.8。

4 实验

​ 我们评估RAFT在Sintel[11]和KITTI[18]上。在以前的工作之后,我们将我们的网络预训练在FlyingChairs [15]和 FlyingThings[33],然后是数据集特定的微调。我们的方法在Sintel(both clean and final passes)和Kitti上实现了最先进的性能。此外,我们从Davis DataSet [37]上测试我们的方法,以证明我们的方法缩放到非常高分辨率的视频也性能卓越。

实现的详细信息:

​ RAFT在Pytorch [36]中实现。所有模块都以random weights从头开始初始化。在training期间,我们使用AdamW [30]优化器和剪辑梯度到范围[[-1,1]。除非另有说明,否则我们会在32次Sintel和24次KITTI流动更新后评估。对于每个更新,Δf+ fk,我们只通过Δf分支反向传播梯度,并通过[20]所建议的fK分支归零梯度。

训练计划:

​ 我们使用两个2080Ti GPUs训练RAFT。我们对FlyingThings进行100k迭代的预训练,批量大小为12,然后对FlyingThings3D进行100k迭代的训练,批量大小为6。我们将来自Sintel[11]、KITTI-2015[34]和HD1K[27]的数据与MaskFlowNet[52]和PWC Net+[41]的数据相结合,对Sintel再进行10万次微调。最后,我们在KITTI-2015上使用Sintel上微调模型的权重进行额外的50k迭代。有关培训和数据扩充的详细信息,请参见补充资料。为了与以前的工作进行比较,我们还包括仅在Sintel和仅在KITTI上进行微调时的模型结果。

4.1 Sintel

​ 我们训练我们的模型 按照FlyingChairs→FlyingThings计划,然后使用train拆分进行验证,在Sintel数据集上进行评估。结果如表1和图3所示,我们根据用于训练的数据分割结果。C+T表示模型在飞椅(C)和飞弦(T)上进行训练,+ft表示模型在Sintel数据上进行了微调。与PWC Net+[41]和MaskFlowNet[52]一样,我们在微调时包含了来自KITTI和HD1K的数据。我们用不同的种子进行了3次训练,并报告了在Sintel(train)clean通道上使用具有中等精度的模型的结果。

图3:Sintel测试集的流预测。

表 1:Sintel 和 KITTI 数据集的结果。 我们在 FlyingChairs© 和 FlyingThing(T) 上训练后测试了 Sintel(train) 上的泛化性能,并在clean和final上优于所有现有方法。 底部的两个部分显示了我们的模型在数据集特定微调后在公共排行榜上的表现。 S/K 包括仅使用 Sintel 数据在 Sintel 上进行微调的方法,以及在 KITTI 上进行微调时仅使用 KITTI 数据的方法。 +S+K+H 包括在 Sintel 上进行微调时组合 KITTI、HD1K 和 Sintel 数据的方法。 我们的(热启动)在 Sintel 干净和最后中排名第一,在 KITTI 的所有流动方法中排名第一。 (1、FlowNet2 最初报告了 Sintel 视差分割的结果,3.54 是在标准数据 [22] 上评估他们的模型时的 EPE。2、 [23] 发现 HD1K 数据在 Sintel 微调期间没有显着帮助,并且报告结果没有 它。 )

​ 当使用 C+T 进行训练时,我们的方法优于所有现有的方法,尽管使用了明显更短的训练时间表。我们的方法在 Sintel(train) clean pass 上实现了 1.43 的平均 EPE(端点误差),比 FlowNet2 的误差低 29%。这些结果证明了良好的跨数据集泛化。更好泛化性的原因之一是我们的网络结构。通过将光流限制为一系列相同更新步骤的产物,我们强制网络学习一个更新算子,该算子模仿一阶下降算法的更新。这限制了搜索空间,降低了过度拟合的风险,并导致更快的训练和更好的泛化。

​ 在对 Sintel(测试)集进行评估时,我们对训练集的组合干净和最终通道以及 KITTI 和 HD1K 数据进行了微调。我们的方法在 Sintel 清洁和最终通道上均排名第一,并且在清洁通道和最终通道中分别比之前的所有工作高 0.9 像素 (36%) 和 1.2 像素 (30%)。我们评估了我们模型的两个版本,Ours(两帧)使用零初始化,而 Ours(warm-start)通过正向投影前一帧的流量估计来初始化流量。由于我们的方法在单一分辨率下运行,我们可以初始化流量估计以利用过去帧的运动平滑度,对于使用从粗到精的模型无法轻松做到。

4.2 KITTI

​ 我们还在 KITTI 上评估 RAFT 并在表 1 和图 4 中提供结果。我们首先通过在对 Chairs© 和 FlyingThings(T) 进行训练后评估 KITTI-15(train)拆分来评估跨数据集泛化。我们的方法大大优于先前的工作,将 EPE(端点误差)从 8.36 提高到 5.04,这表明我们网络的底层结构促进了泛化。在所有光流方法中,我们的方法在 KITTI 排行榜上排名第一。

图4:KITTI测试集上的流量预测。

4.3 消融

​ 我们进行了一组消融实验来显示每个组件的相对重要性。所有消融版本均在 FlyingChairs© + FlyingThings(T) 上进行训练。消融的结果显示在表 2 中。在表的每个部分,我们单独测试我们方法的一个特定组件,我们最终模型中使用的设置带有下划线。下面我们更详细地描述每个实验。

表2:消融实验。最终模型中使用的设置带有下划线。详情见4.3节。

Update Operator 的架构:

​ 我们使用基于 GRU 单元的门控激活单元。我们尝试用一组具有 ReLU 激活的 3 个卷积层替换卷积 GRU。我们通过使用 GRU 块获得了更好的性能,可能是因为门控激活使流估计序列更容易收敛。

权重绑定:

​ 默认情况下,我们将更新运算符的所有实例的权重绑定在一起。在这里,我们测试了我们方法的一个版本,其中每个更新算子学习一组单独的权重。当权重绑定并且参数数量明显更少时,准确性会更好。

上下文:

​ 我们通过在移除上下文网络的情况下训练模型来测试上下文的重要性。没有上下文,我们仍然取得了很好的结果,在 Sintel 和 KITTI 上超越了所有现有的工作。但上下文是有帮助的。将图像特征直接注入更新算子可能允许在运动边界内更好地聚合空间信息。

特征尺度(特征分辨率):

​ 默认情况下,我们以单一分辨率提取特征。我们还尝试通过分别在每个尺度上构建相关量来以多种分辨率提取特征。单分辨率特性简化了网络架构,即使在大位移下也允许细粒度匹配。

查找半径:

​ 查找半径指定查找操作中使用的网格的尺寸。当使用半径 0 时,在单个点检索相关体积。令人惊讶的是,当半径为 0 时,我们仍然可以粗略估计流量,这意味着网络正在学习使用 0 阶信息。但是,随着半径的增加,我们看到了更好的结果。

相关池化:

​ 我们以单一分辨率输出特征,然后执行池化以生成多尺度体积。在这里,我们测试移除此池化时的影响。池化的结果更好,因为大位移和小位移都被捕获。

相关范围:

​ 我们还尝试仅为每个像素周围的局部邻域构建相关量,而不是所有对相关。我们尝试了 32 像素、64 像素和 128 像素的范围。总的来说,当使用所有对时,我们得到了最好的结果,尽管 128px 范围足以在 Sintel 上表现良好,因为大多数位移都在这个范围内。也就是说,所有对仍然是可取的,因为它消除了指定范围的需要。实现起来也更方便:它可以使用矩阵乘法计算,允许我们的方法完全在 PyTorch 中实现。

细化特征:

​ 我们通过在所有像素对之间建立相关体积来计算视觉相似度。在这个实验中,我们尝试用扭曲层替换相关体积,它使用当前的光流估计将特征从 I2 扭曲到 I1,然后估计剩余位移。虽然扭曲仍然与之前在 Sintel 上的工作相比具有竞争力,但相关性的表现要好得多,尤其是在 KITTI 上。

上采样:

​ RAFT 以 1/8 的分辨率输出流场。我们将双线性上采样与我们学习的上采样模块进行比较。上采样模块产生更好的结果,尤其是在运动边界附近。

推理更新:

​ 虽然我们在训练期间展开 12 次更新,但我们可以在推理期间应用任意数量的更新。在表 2 中,我们提供了选定更新次数的数值结果,并测试了 200 的极端情况以表明我们的方法没有发散。我们的方法很快收敛,在 3 次更新后超过 PWC-Net,在 6 次更新后超过 FlowNet2,但随着更多更新而继续改进。

4.4 计时和参数计数

​ 推理时间和参数计数如图 5 所示。精度由 Sintel(train) final pass训练后的,在 FlyingChairs 和 FlyingThings (C+T) 上微调的性能决定。 在这些图中,我们在 10 次迭代后报告准确性和计时,并使用 GTX 1080Ti GPU 为我们的方法计时。 其他方法的参数计数与他们的论文中报告的一样,我们报告在我们的硬件上运行的时间。 RAFT 在参数计数、推理时间和训练迭代方面更高效。 Ours-S 仅使用 100 万个参数,但优于超过6倍参数量的PWC-NET和VCN。 我们在补充材料中提供了一个额外的表格,其中包含参数、时间和训练迭代的数值。

图 5:比较参数量、推理时间和训练迭代与准确性的图。 精度由 C+T 训练后 Sintel(train) final pass的 EPE 测量。 左图:与其他方法相比,参数量与准确度的关系。 RAFT 参数效率更高,同时实现更低的 EPE。 中:使用我们的硬件计时的推理时间与准确度 右:训练迭代与准确度(作为迭代和使用的 GPU 的乘积)。

4.5 非常高分辨率的视频

​ 为了证明我们的方法可以很好地扩展到非常高分辨率的视频,我们将我们的网络应用于来自 DAVIS[37] 数据集的高清视频。 我们使用 1080p (1088x1920) 分辨率视频并应用我们12 次迭代的方法。 对 1080p 视频进行 12 次迭代的推理需要 550 毫秒,所有对相关需要 95 毫秒。 图 6 显示了 DAVIS 上的示例结果。

图6:来自DAVIS的1080p(1088x120)视频的结果(每帧550毫秒)。

5 结论

​ 我们提出了 RAFT——循环全对场变换——一种新的端到端光流可训练模型。 RAFT 的独特之处在于它使用大量轻量级、循环更新操作符以单一分辨率运行。 我们的方法在各种数据集上实现了最先进的准确性、强大的跨数据集泛化能力,并且在推理时间、参数数量和训练迭代方面是高效的。

补充材料:

A 网络架构

图 7:完整 4.8M 参数模型(5.3M 带上采样模块)和 1.0M参数的小模型的网络架构细节。 上下文和特征编码器具有相同的架构,唯一的区别是特征编码器使用实例归一化(instance normalization),而上下文编码器使用批量归一化(batch normalization)。 在 RAFT-S 中,我们用瓶颈残差单元替换残差单元。 更新块采用上下文特征、相关特征和流特征来更新潜在隐藏状态。 更新后的隐藏状态用于预测流量更新。 完整模型使用两个卷积 GRU 更新块,分别带有 1x5 过滤器和 5x1 过滤器,而小模型使用单个过滤器为3x3的GRU 。

B 上采样模块

图 8:上采样模块的图示。 使用网络预测的权重,高分辨率流场(小框)的每个像素都被视为其 9 个粗分辨率邻居的凸组合。

图 9:我们的上采样模块提高了运动边界附近的精度,并且还允许 RAFT 恢复小型快速移动物体的流动,例如图中所示的鸟类。

C 训练细节

表 3:训练计划的详细信息。 数据集缩写:C:FlyingChairs,T:FlyingThings,S:Sintel,K:KITTI-2015,H:HD1K。 在 Sintel 微调阶段,数据集分布为 S(.71)、T(.135)、K(.135)、H(.02)。

**光度增强:**我们通过随机扰动亮度、对比度、饱和度和色调来执行光度增强。 我们使用 Torchvision ColorJitter,亮度为 0.4,对比度为 0.4,饱和度为 0.4,色调为 0.5/π。 在 KITTI 上,我们将增强程度降低到亮度 0.3、对比度 0.3、饱和度 0.3 和色调 0.3/π。 概率为 0.2 时,对每个图像独立执行颜色增强。

**空间增强:**我们通过随机重新缩放和拉伸图像来执行空间增强。 随机缩放的程度取决于数据集。 对于 FlyingChairs,我们在 2[-0.2,1.0]范围内进行空间增强 、其他依次为FlyingThings 2[-0.4,0.8]、Sintel 2[-0.2,0.6] 和 KITTI 2[-0.2,0.4] 。 空间增强的执行概率为 0.8。

**遮挡增强:**在 HSM-Net [48] 之后,我们还以 0.5 的概率随机擦除 I2 中的矩形区域以模拟遮挡。

D 时间,参数和训练迭代

图 10:(左)Sintel 集上的 EPE 作为推理时迭代次数的函数。 (右)每次更新的幅度 ||Δfk||2 在所有像素上取平均值,表明收敛到一个固定点 fk → f *。

表 4:参数数量、推理时间、训练迭代和 Sintel(训练)最终传递的准确性。 我们使用 GTX 1080Ti GPU 在 10 次更新后报告了我们方法的计时和准确性。 如果可能,我们从其他方法下载代码并使用我们的机器重新计时。 如果模型使用多个 GPU 进行训练,我们会在括号中报告用于训练的 GPU 数量。 我们还可以使用混合精度训练 Ours(mixed) 训练 RAFT,并在仅在单个 GPU 上训练时获得类似的结果。 总体而言,与之前的工作相比,RAFT 需要更少的训练迭代和参数。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值