背景:
1.光流估计是一个长期存在的计算机视觉问题,对于理解视频内容至关重要。
2.光流估计面临的挑战包括快速移动的物体、遮挡、运动模糊和无纹理表面。
3.传统方法通常将光流估计视为一个手工优化问题,但这些方法在处理各种特殊情况时存在困难。
4.深度学习方法提供了一种替代方案,可以直接预测光流,避免了复杂的优化问题。
创新点:
高分辨率处理:
RAFT是第一个跳出coarse-to-fine(从粗糙到精细)框架的光流匹配算法,它在高分辨率下处理并保持单个固定的光流场,避免低分辨率下预测错误导致后续无法恢复的问题,并且不会损失小物体大位移的信息。
从粗糙到精细:
在光流估计时从低分辨率(粗糙)逐步到高分辨率(精细)进行匹配。
主要思想:先在图像的粗糙版本中获得一个大致的光流估计,然后逐层细化,逐步增加分辨率,使得最终的高分辨率估计能够保留更多的细节和精度。
循环更新算子:
RAFT的更新算子是循环的、轻量级的,并且共享权重。传统方法通常在迭代之间不共享权重,限制了迭代次数。RAFT的更新算子由一个卷积GRU组成,在4D多尺度相关体上进行查找,允许网络进行更多的迭代而不发散。
全对相关性体积:
RAFT引入了全对(all-pairs)相关性体积的概念,通过计算所有像素对之间的相似度来构建4D相关性体积,用迭代方式估计光流。
RAFT架构:
编码器:
特征编码器(Feature Encoder):
从两个输入图像(L1和L2)中为每一帧图像中的每个像素提取特征,特征被用来计算像素之间的相似性。
目的:
提取的特征用于构建4D相关性体积,比较L1和L2中所有像素对之间的视觉相似性,为光流估计提供基础。
构成:
6个残差块,2个分辨率、2个分辨率、2个分辨率
归一化方法:
使用实例归一化,对每个样本独立进行,有助于在特征提取时保持样本间的独立性。
输出:
分辨率,
上下文编码器(Context Encoder):
仅从第一输入图像(L1)中提取特征,提取整个图像的上下文特征。
目的:
提取的特征用于提供额外的上下文信息,帮助网络更好地理解场景内容,辅助光流的估计和细化。
构成:
6个残差块,2个分辨率、2个分辨率、2个分辨率
归一化方法:
使用批归一化,基于小批量数据的统计信息,有助于在训练过程中稳定学习过程。
相关性层:
相关性层构建了一个4D的相关性体积,包含了所有像素对之间的相关性信息。通过计算输入图像特征之间的内积,可以构建出一个高维的相关性体积,捕捉图像中所有像素对之间的视觉相似性。
过程:
对 和 做点积
代表互相关操作,从二维变成四维
Transformer基于点积表示相关性:点积后得到的值越大,表示相关性越强
互相关金字塔(Correlation Pyramid):
原因:
在光流估计中,物体的位移可能很大。
特征金字塔允许RAFT在不同尺度上捕捉这些大位移,从而提高算法的鲁棒性。
构建:
通过在互相关体积的最后两个维度上应用不同大小的池化核(平均池化或最大池化)来实现。通常,这包括四个层级,池化核大小分别为1、2、4和8。
维度:
每个层级的维度为 ,其中从1到4,金字塔的每一层都提供了不同分辨率下的相关性信息。
信息融合:
在更新光流估计时,RAFT会从金字塔的每一层中检索特征,并将其融合到一起,以利用大位移和小位移的信息。
Lookup模块:
利用当前的光流估计来确定每个像素在相关性体积中的位置,并从这些位置检索特征,特征随后被用来更新光流估计,模拟了在传统光流优化方法中的搜索步骤,但是在这里是通过神经网络的方式实现的。
光流的当前估计:
映射每一个像素:
中估计关联的对应像素:
局部网格:
目的:
提供一个参考上下文的邻域信息,在代价体积中提取当前位置光流向量附近的邻域信息,提供局部上下文来辅助光流估计,而并非直接减少像素间的所有内积运算。
定义:
一个半径 内的邻域范围,通常使用L1距离(即曼哈顿距离)来衡量
局部网格,该网格包含了周围的像素
特征检索:
在Lookup模块中,局部网格用于从互相关金字塔的不同层级检索特征。对于金字塔的每一层,使用网格来索引特征,其中 表示在金字塔第k层的对应位置。
高分辨率图像的高效计算方法:
预计算所有对的相关性:复杂度为,为像素数量
基于迭代的计算:,为像素数量,为迭代次数
更新操作符:
使用当前的光流估计来查找相关性体积中的值,并迭代更新光流场。
初始化:
每次迭代产生应用于估计的更新方向
下一次:
输入:
当前光流估计:当前光流场的初始估计值或上一次迭代的更新结果
代价体积的局部上下文:从 lookup 模块获取的邻域代价值
特征金字塔特征:来自图像的初始特征金字塔
卷积操作:
在每次迭代中对光流估计进行细化调整
GRU单元:
更新操作符的核心是基于GRU的门控激活单元,其中全连接层被卷积层替换。
可分离ConvGRU:
用1x5和5x1的卷积替换3x3卷积,以增加感受野而不显著增加模型大小。
估计残差:
在每次迭代中输出一个(残差),表示当前光流估计进一步调整的偏移量,用来逐步逼近真实的光流值。
迭代更新:
每次迭代的光流估计都会加上更新操作符输出的残差,得到一个新的光流估计值。
该值被再次输入到更新操作符中,进入下一次迭代,过程可重复多次,逐步提高光流估计的精度。
流程:
Update Block的工作流程:
1.输入特征融合:
Context:
从上下文编码器中提取的特征,提供了图像的全局上下文信息。
平均分为两份:
①用于生成代价体积
②用于作为光流估计的参考上下文
Corr:
进行4D 体积运算的结果,通过全对特征匹配来生成代价体积(cost volume),计算特征图之间的相似度,即特征的互相关(correlation),来评估每个像素点在目标图像中对应的可能位置。
Flow:
来自前一次迭代的光流估计,或者初始的光流场(通常初始化为0)。
2.特征处理:
将 corr 和 flow 合并:
利用上下文和估计信息:网络在每次迭代中将图像的匹配信息(corr)与当前的光流估计(flow)结合,将新的匹配信息和先前的估计值一起考虑,从而提高模型的精度。
光流迭代更新:光流估计不仅依赖于代价体积中的匹配信息,还依赖于当前的光流场(flow)来进行更新。合并这两者有助于通过迭代优化光流场,逐步逼近真实的光流。
得到一个inp
将 flow 和 corr 以及 context 合并后输入到 ConvGRU:
inp+net
使每次迭代中的光流估计在考虑上下文信息和匹配信息的基础上进行更新。通过ConvGRU的门控机制来实现的,能在时间步之间保持信息并帮助在空间上聚合光流的更新。
3.门控循环单元(GRU):
①综合特征图被送入基于GRU的门控激活单元,该单元包含更新门和重置门:
更新门 :决定多少过去的信息需要被保留。
重置门:决定多少外部信息需要被引入。
候选隐藏状态 :结合当前输入和过去的隐藏状态。
新的隐藏状态 :结合更新门和重置门的输出,更新隐藏状态。
②这些门控机制允许网络动态地调整信息流,从而逐步优化光流估计。
4.更新预测:
ConvGRU 会输出两个重要的量:
光流更新量(2维):
表示向量,初始为“0”
使用预测的光流更新更新当前的光流场:
其中 是当前迭代的光流估计,是下一迭代的光流估计。
运动特征(128维):
对匹配信息和上下文信息的卷积操作,得到与当前像素运动状态相关的特征,通常是128维的向量,包含图像中各个点的位移信息和图像匹配的上下文信息,在空间上表示每个像素的运动状态。
5.上采样:
由于光流场的输出分辨率较低(通常是输入图像的1/8),需要将其上采样到与输入图像相同的分辨率。
RAFT使用一个学习到的上采样模块,通过预测一个掩码并执行softmax操作,将低分辨率光流场与高分辨率特征结合,得到最终的高分辨率光流场。
结论:
效果:
贡献:
RAFT是一个端到端可训练的模型,使用大量轻量级、循环的更新操作符,在单一声望下工作。
优点:
RAFT在多个数据集上实现了最先进的准确性,具有强大的跨数据集泛化能力,并且在推理时间、参数数量和训练迭代方面都很高效。