WAFT: Warping-Alone Field Transforms for Optical Flow¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=HTqGE0KcuF
代码: https://github.com/princeton-vl/WAFT
领域: 3D视觉 / 光流
关键词: 光流估计, 特征 warping, 代价体, 迭代更新, 元架构
一句话总结¶
WAFT 用高分辨率的特征 warping 彻底替换掉光流方法里被奉为标配的代价体(cost volume),靠一个 DPT/ViT 的迭代更新模块隐式处理大位移,在 Spring、Sintel、KITTI 上拿下第一档精度的同时显存只用同类方法的 1/3、速度快 1.3–4.1 倍。
研究背景与动机¶
领域现状:现代光流主流是「代价体 + 迭代更新」范式(RAFT、SEA-RAFT、FlowFormer 等)。代价体显式计算 frame 1 每个像素与 frame 2 邻域像素的视觉相似度,被认为是比单纯图像特征更强的表征,尤其擅长建模大位移,是绝大多数 SOTA 方法的核心组件。
现有痛点:代价体在时间和显存上都很贵,开销随邻域半径平方增长。即便用 partial cost volume(只在对应像素邻域内查找)规避完整 4D 代价体,显存依然居高不下——论文实测 SEA-RAFT 在 1/2 分辨率下直接 OOM。为了能跑,几乎所有方法都被迫在 1/8 分辨率上构建并查询代价体。
核心矛盾:代价体的高显存逼着方法在低分辨率上索引;而预测出的稠密光流场要降采样到 1/8 才能查代价体,这个降采样不可避免地引入误差,导致物体边界模糊(论文 Figure 3 里现有方法在边界角落明显糊掉)。精度和效率被代价体死死绑住。
本文目标:在不构建代价体的前提下,既要 SOTA 精度,又要高分辨率索引带来的清晰边界,还要低显存高速度。
切入角度:作者重新审视了被冷落约 8 年的 warping 操作。Warping 不算相似度,只是「按当前光流估计去 frame 2 把对应像素的特征向量取回来」,天然便宜、显存友好,因此能直接在高分辨率上索引。它唯一的短板是丢掉了代价体显式建模大位移的能力——而这一点恰好可以交给 ViT 的注意力机制隐式补上。
核心 idea:用「高分辨率特征 warping + ViT 迭代更新」替代「低分辨率代价体 + 迭代更新」,并顺手砍掉 context encoder,得到一个极简、几乎无光流专属设计的元架构。
方法详解¶
整体框架¶
WAFT 整体沿用 RAFT 系的「输入编码 + 循环更新」两段式骨架,但把中间的代价体换成 warping。给定相邻两帧 \(I_1, I_2 \in \mathbb{R}^{H\times W\times 3}\),先用一个输入编码器各自抽取特征 \(F(I_1), F(I_2)\);然后循环更新模块迭代 \(T\) 步(训练/推理都用 \(T=5\))逐步精化光流。每一步的关键动作是:用当前光流估计 \(f_{cur}\) 对 frame 2 的特征做轻量的反向 warping,\(\text{Warp}(f_{cur})_p = F(I_2)_{p+(f_{cur})_p}\),把对应像素的特征「拉回」到 frame 1 的坐标系,再和 \(F(I_1)\)、隐藏状态拼起来喂给更新模块预测残差光流。整条链路没有任何代价体,因而能在 1/2 这种高分辨率上索引。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["相邻两帧<br/>I1, I2"] --> B["简化元架构<br/>输入编码器抽特征<br/>F(I1), F(I2)"]
B --> C["高分辨率特征 warping<br/>按当前光流取回<br/>frame 2 对应特征"]
C --> D["ViT 循环更新模块<br/>拼 F(I1)+Warp+Hidden<br/>预测残差光流"]
D -->|"迭代 T=5 步"| C
D --> E["凸上采样 + MoL 头<br/>稠密光流场"]
关键设计¶
1. 高分辨率特征 warping 替代代价体:用便宜的取特征换掉昂贵的算相似度
这是全文的命门,直击「代价体逼着低分辨率索引、低分辨率索引糊边界」这个核心矛盾。代价体对 frame 1 的每个像素都要和 frame 2 的一片邻域算点积相似度 \(V_{p,p'}=F(I_1)_p\cdot F(I_2)_{p'}\),开销随半径平方膨胀;warping 则只取一个向量——按当前光流 \(f_{cur}\) 直接索引 frame 2 在对应位置的特征 \(\text{Warp}(f_{cur})_p=F(I_2)_{p+(f_{cur})_p}\)。两者的共同点是都用「当前光流估计去索引特征图」,这与经典光流的不动点优化(Brox 等)一脉相承;差别在于 warping 放弃了显式枚举相似度。代价直接换来收益:论文实测 WAFT-Twins-a2 训练显存在 1/2 分辨率仅 9.2 GiB,而 SEA-RAFT 同分辨率直接 OOM;省下的显存正好用来做高分辨率索引,从而拿到更清晰的边界和更低误差。消融里把索引从 1/2 降到 1/8,Spring 的 1px 指标从 1.43 明显变差到 1.82,印证了「高分辨率索引」才是精度来源,而非单纯堆 backbone。
2. ViT/DPT 循环更新模块:用注意力把 warping 丢掉的大位移建模能力补回来
Warping 只看一个对应像素,没法像代价体那样显式覆盖大范围位移,这是它过去打不过代价体的根本原因。WAFT 的答案是把更新模块换成一个改装版 DPT(基于 ViT),靠注意力机制的长程依赖隐式建模大位移。每步把 frame 1 特征 \(F(I_1)\)、warp 后的 frame 2 特征 \(\text{Warp}(f_{cur})\)、以及隐藏状态 \(\text{Hidden}_t\in\mathbb{R}^{h\times w\times d}\) 拼接送入模块,预测残差光流更新。这个 transformer 设计被证明是「让 warping 重新work」的关键:消融里把 DPT 换成纯 CNN(ResNet18)后 Sintel(Clean) 从 1.18 暴涨到 7.23,换成 ConvGRU 也掉到 2.79——这恰好解释了为什么 2017 年前后用 CNN 实现 warping 的早期方法(FlowNet2、SpyNet)干不过代价体方法:不是 warping 不行,是当年缺了能建模长程依赖的架构。
3. 极简元架构:砍掉 context encoder,直接复用现成预训练骨干
去掉代价体之后,作者顺势把另一个光流专属组件——context encoder(给更新模块额外喂特征)也一并删掉,消融显示它只增加计算量、对精度几乎没贡献(论文指出它本质上等价于 WAFT 第一次迭代的直接回归)。这样 WAFT 退化成一个「输入编码器 + 更新单元」的干净元架构,两个子模块都不需要光流专属设计,可以直接换上现成的预训练模型:作者试了 ImageNet 预训练的 Twins、深度预训练的 DAv2、自监督的 DINOv3,并给出两种适配方式——a1 冻结整个 DAv2 只接 DPT head + ResNet18 微调,a2 只冻 backbone、放开 DPT head 并用 3 个 ResNet block 做 side-tuning(更通用也更强)。这种「无定制设计 + 可加载标准预训练权重」的特性既提升了泛化,也让直接法与迭代法第一次能做苹果对苹果的公平对比。
损失函数 / 训练策略¶
预测头沿用 SEA-RAFT 的 Mixture-of-Laplace(MoL)损失:每步用隐藏状态预测 \(M\in\mathbb{R}^{h\times w\times 6}\) 的 MoL 参数,再通过凸上采样(convex upsampling)恢复到原图分辨率。训练遵循 SEA-RAFT 流程:先在 TartanAir 上预训练 300k 步(batch 32,lr \(4\times10^{-4}\)),再在 FlyingChairs(50k)、FlyingThings(200k)上微调,提交各 benchmark 时按数据集分别 fine-tune。
实验关键数据¶
主实验¶
Spring 排行榜(540p 协议,越低越好除 WAUC):
| 方法 | 1px↓ | EPE↓ | Fl↓ | WAUC↑ |
|---|---|---|---|---|
| SEA-RAFT(M) | 3.686 | 0.363 | 1.347 | 94.534 |
| DPFlow | 3.442 | 0.340 | 1.311 | 94.980 |
| WAFT-Twins-a2 | 3.268 | 0.331 | 1.282 | 94.786 |
| WAFT-DINOv3-a2 | 3.182 | 0.325 | 1.246 | 95.051 |
Sintel(EPE)/KITTI(Fl) + 推理开销(RTX3090,540p):
| 方法 | Sintel-Clean↓ | KITTI-All↓ | #MACs(G) | Latency(ms) |
|---|---|---|---|---|
| Flowformer++ | 1.07 | 4.52 | 1713 | 374 |
| CCMR+ | 1.07 | 3.86 | 12653 | 999 |
| DPFlow | 1.04 | 3.56 | 414 | 131 |
| WAFT-DAv2-a2 | 0.95 | 3.31 | 807 | 240 |
| WAFT-DINOv3-a2 | 0.94 | 3.56 | 732 | 212 |
WAFT 在 Spring 三项指标全部第一、KITTI 非遮挡像素第一/全部像素第二、Sintel(Clean) 第一,同 backbone 下精度与效率双双超过代价体 SOTA Flowformer++,比有竞争力的方法快 1.3–4.1×。
零样本跨数据集泛化(在 Chairs+Things 训练后直接测):WAFT-Twins-a2 把 KITTI(train) 的 EPE 从 3.37 降到 2.98、Fl 从 11.1 降到 9.9,取得最佳泛化,误差降低约 11%。
消融实验¶
基于 WAFT-DAv2-a1,零样本测 Sintel(train) / Spring(sub-val):
| 配置 | Sintel-Clean↓ | Spring-1px↓ | 说明 |
|---|---|---|---|
| Full model(DPT-S, 1/2 索引) | 1.18 | 1.43 | 完整模型 |
| 更新模块换 ResNet18 | 7.23 | 2.93 | 失去长程建模,崩 |
| 更新模块换 ConvGRU | 2.79 | 2.71 | 明显变差 |
| 索引降到 1/8 + warp | 1.15 | 1.82 | 边界误差上升 |
| DAv2 不用预训练 | 1.42 | 1.77 | 预训练权重重要 |
| 直接回归(T=1) | 2.36 | 10.5 | 迭代远胜直接法 |
| 图像空间 warp | 1.28 | 1.37 | 比特征空间贵且略差 |
| 不做 warp 直接精化 | 2.04 | 9.44 | warping 不可或缺 |
| 加 Context encoder | 1.22 | 1.70 | 加计算不涨点 |
关键发现¶
- 更新模块的架构比 warping 本身更决定成败:DPT 换 CNN 后 Sintel(Clean) 从 1.18 崩到 7.23,说明 warping 能复活的前提是有注意力来隐式建模大位移;这也回溯解释了早期 CNN-warping 方法为何被代价体方法碾压。
- 高分辨率索引是精度真来源:同样用 warp,1/2 → 1/8 后 Spring 1px 从 1.43 退到 1.82;而 1/8 下 warp 与代价体精度相当,但代价体要 2.2× 训练显存(21.2 vs 9.5 GiB)。
- 特征空间 warp 优于图像空间 warp:后者每次迭代要重抽特征,1902G MACs 远高于前者 858G,精度还略逊——特征空间 warp 复用特征,省算又稍准。
- 迭代远胜直接回归:T=1 的直接变体在 Spring 1px 高达 10.5,迭代 5 步降到 1.43,验证迭代范式在该元架构下的必要性。
亮点与洞察¶
- 「做减法」做到 SOTA:同时砍掉代价体和 context encoder 两个公认标配,反而更快更准更省显存——证明这两个组件并非强性能的必要条件,挑战了领域八年来的共识。
- 复活被遗弃的老 idea:warping 上一次登顶榜单还要追溯到 2017 年,WAFT 让它在 EPE 上比当年 warping 方法降低至少 64%(Sintel)、70%(Spring),是「老技术 + 新骨干」的范例。
- 可迁移的诊断思路:把一个组件的失效归因到「缺了合适的架构」而非「这个组件本身不行」(warping 配 CNN 不行、配 ViT 就行),这种归因方式对任何「某经典操作过时了」的判断都值得复盘。
- 元架构即公平对比平台:去掉光流专属设计后,直接法与迭代法、不同 backbone 能在同一框架下做苹果对苹果比较,方法学上很干净。
局限与展望¶
- 依赖大规模预训练骨干与 ViT:核心增益部分来自 DAv2/DINOv3 等强预训练 + transformer 的长程建模,纯轻量 CNN 路线下 warping 仍会崩,落地到极端算力受限场景不直接。
- 延迟并非全场最优:WAFT 比同精度方法快,但绝对延迟(212–290ms@540p)仍高于 DPFlow(131ms)等,对实时性极敏感的应用要权衡。
- 隐式建模大位移的边界未充分刻画:注意力补位大位移在何种极端位移/遮挡下会失效,论文未给出系统的失败分析(Sintel Final 的 Ambush 1 异常序列已暴露一些脆弱性)。
- 改进方向:探索更轻的更新模块在保住长程建模下降低延迟,或把 warping-only 思路推广到立体匹配、场景流等同样被代价体主导的任务。
相关工作与启发¶
- vs RAFT / SEA-RAFT: 同为迭代范式,但它们用(partial)代价体在 1/8 分辨率索引,WAFT 用高分辨率特征 warping,去掉代价体和 context encoder;结果是同骨干下显存大降、边界更清、精度更高。
- vs FlowFormer / Flowformer++: 它们设计 transformer block 去处理代价体,WAFT 把 transformer 用在更新模块本身、根本不建代价体,同 Twins backbone 下精度效率双超 Flowformer++。
- vs 直接法(CroCoFlow / DDVM): 直接法从大规模预训练 ViT 一把回归光流,WAFT 证明在同一元架构下迭代索引显著优于直接回归(T=1 变体大幅落后),且直接法要么精度差要么算力贵。
- vs 早期 warping 法(FlowNet2 / SpyNet): 同样用 warping,但 WAFT 把更新模块从 CNN 换成 ViT,EPE 在 Sintel/Spring 上降低 60%+,说明决定性差异在更新架构而非 warping 操作本身。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 反主流地证明代价体非必需,复活并重塑 warping 路线。
- 实验充分度: ⭐⭐⭐⭐⭐ 三大 benchmark + 零样本 + 十余项消融,显存/延迟均量化。
- 写作质量: ⭐⭐⭐⭐⭐ 动机—矛盾—方案逻辑清晰,消融针对性强。
- 价值: ⭐⭐⭐⭐⭐ 更简单更省显存的 SOTA 元架构,对光流及相关稠密匹配任务有范式意义。