1. 这不是又一个光流网络——RAFT到底做对了什么?
光学流(optical flow)这个概念,干过计算机视觉的都熟:两张连续帧之间每个像素的运动矢量。它看着简单,实际是CV里最“拧巴”的基础任务之一——既要精度高到能支撑自动驾驶的毫米级位姿估计,又要速度够快能在嵌入式设备上实时跑;既要处理大位移(比如快速旋转的无人机视角),又要扛得住遮挡、光照突变、运动模糊这些现实场景里的“捣蛋鬼”。过去十年,从FlowNet到PWC-Net,模型越堆越深、结构越设计越花哨,但总在精度和效率之间反复横跳。直到2020年ECCV,普林斯顿视觉与学习实验室(Princeton VL)扔出RAFT——不是渐进式改进,而是彻底换了一套解题逻辑。它没用更深的CNN,没加更复杂的注意力机制,甚至没引入任何新奇的损失函数,却在Sintel、KITTI这些硬核benchmark上全面碾压当时所有SOTA模型,推理速度还快了3倍以上。关键在于,RAFT把光流问题从“端到端回归”拉回了“迭代优化”的本质:它不直接猜答案,而是像人类工程师调参一样,先给个粗糙初值,再一步步微调逼近真实运动。这种思路让模型天然具备强鲁棒性——初值错了?没关系,后续迭代能拉回来;局部纹理缺失?迭代过程会自动利用长程上下文补全。我第一次跑通RAFT时,特意拿一段手机拍摄的剧烈抖动视频测试:前几帧因手抖导致大量像素失真,旧模型直接崩出大片噪声斑点,RAFT却稳稳收敛,最终光流场边缘锐利、运动连贯。这不是玄学,是架构设计对物理问题本质的尊重。如果你正卡在光流精度瓶颈上,或者被部署端延迟逼得焦头烂额,RAFT不是“又一个可选方案”,而是你该认真重读的范式说明书。
2. 架构设计背后的物理直觉与工程权衡
2.1 为什么放弃“一步到位”的端到端回归?
传统光流网络(如FlowNetS、SpyNet)本质是监督式回归器:输入两帧图像,输出一张稠密位移图。这种设计隐含一个危险假设——网络能一次性建模所有像素间的复杂对应关系。但现实很骨感:
- 大位移困境 :当物体移动超过卷积感受野(通常<64像素),局部特征匹配必然失效;
- 歧义性爆炸 :重复纹理区域(如砖墙、水面)存在多个几何上合理的匹配点,单次回归无法区分;
- 误差累积不可控 :一个像素预测偏差会通过空间传播污染邻域,形成“雪崩效应”。
RAFT的破局点在于承认: 光流本质是优化问题,不是回归问题 。它把输出从“最终答案”降维成“更新策略”——就像用牛顿法解方程,不直接求根,而是迭代计算梯度方向并步进。这种设计天然规避了单次预测的脆弱性。我实测过,在Sintel训练集上,RAFT初始迭代(第0次)的EPE(End-Point-Error)高达12.7像素,但仅需5次迭代就降至2.1像素,而FlowNet2需要12层堆叠才能勉强达到类似精度。这说明RAFT的“低效初值+高效修正”比“强行一步到位”更符合问题内在规律。
2.2 核心组件拆解:如何让迭代过程既准又快?
RAFT架构由三个模块构成,每个模块都服务于“可控迭代”这一核心目标:
1. 特征编码器(Feature Encoder)
采用双分支CNN(ResNet-50 backbone),分别提取参考帧I₁和目标帧I₂的4层多尺度特征(1/4, 1/8, 1/16, 1/32分辨率)。关键设计在于:
- 所有特征图通道数统一为256,避免跨尺度融合时的维度灾难;
- 在1/16和1/32尺度添加可学习的上采样层,确保深层语义信息能反哺浅层定位精度;
- 特征不经过归一化(No BatchNorm),因为光流对绝对亮度敏感(阴影变化≠运动变化)。
提示:很多复现者栽在特征归一化上。我曾用BN训练的模型在KITTI夜间数据上EPE飙升40%,关掉BN后立刻回归正常——这是光流任务与分类任务的根本差异。
2. 上下文编码器(Context Encoder)
单独处理参考帧I₁,输出一个256维的“上下文向量”C。这个向量不参与特征匹配,而是作为迭代更新的“调控信号”注入每一层GRU中。它的作用类似人类观察运动时的“全局态势感知”:当看到汽车整体向右移动时,即使某扇车窗反光模糊,大脑也会基于车身轮廓推断其运动方向。RAFT用这个向量动态调节GRU门控权重,让迭代过程始终锚定在合理运动模式上。
3. 循环更新模块(Recurrent Update Block)

495

被折叠的 条评论
为什么被折叠?



