迭代构建代价体
流程范式对比
以下是 GwcNet 和 RAFT-Stereo 的流程范式对比。通过两章流程图,直观的对比“传统 3D 卷积正则化”到“现在循环迭代优化”的架构跃迁。
GwcNet 流程范式:3D 卷积正则化的巅峰
GwcNet 代表了典型的静态前馈网络(Feed-forward Network)架构,核心思想是“构建极其精细的特征代价体,再用重型 3D 卷积去慢慢过滤噪声”。
graph TD
classDef data fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#000;
classDef extract fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000;
classDef cost fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px,color:#000;
classDef regular fill:#fce4ec,stroke:#880e4f,stroke-width:2px,color:#000;
subgraph "第一阶段:特征提取 (2D CNN)"
L[左图 Left Image]:::data
R[右图 Right Image]:::data
CNN1[共享权重 ResNet/UNet]:::extract
CNN2[共享权重 ResNet/UNet]:::extract
L --> CNN1 --> F_L[左视图特征]:::data
R --> CNN2 --> F_R[右视图特征]:::data
end
subgraph "第二阶段:双重代价体构建 (Cost Volume)"
F_L --> GC[Group-wise Correlation\n分组相关计算]:::cost
F_R --> GC
F_L --> CC[Concatenation\n特征直接拼接]:::cost
F_R --> CC
GC --> CV[融合 4D 代价体 \n Disparity x C x H x W]:::data
CC --> CV
end
subgraph "第三阶段:3D 卷积正则化 (重计算区)"
CV --> H1[3D Hourglass 网络 1\n下采样聚合全局上下文]:::regular
H1 --> H2[3D Hourglass 网络 2\n平滑视差维度]:::regular
H2 --> H3[3D Hourglass 网络 3\n输出高精度代价体]:::regular
end
subgraph "第四阶段:视差回归"
H3 --> SA[Soft Argmin 操作\n期望值计算]:::extract
SA --> D[最终视差图 Final Disparity]:::data
end
RAFT-Stereo 流程范式:基于全对相关场的迭代优化
RAFT-Stereo 完全抛弃了 3D 卷积 。它通过计算全局的相关性金字塔,并利用多级 GRU 网络不断查询该金字塔,一步步(迭代)地修正初始视差 。
graph TD
classDef data fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#000;
classDef extract fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000;
classDef cost fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px,color:#000;
classDef gru fill:#f3e5f5,stroke:#4a148c,stroke-width:2px,color:#000;
subgraph "第一阶段:双路特征提取"
L[左图 I_L]:::data
R[右图 I_R]:::data
FE_L[Feature Encoder\n特征编码器]:::extract
FE_R[Feature Encoder\n特征编码器]:::extract
CE[Context Encoder\n上下文编码器]:::extract
L --> FE_L --> FL[左特征图]:::data
R --> FE_R --> FR[右特征图]:::data
L --> CE --> Ctx[上下文特征 & 初始隐藏状态]:::data
end
subgraph "第二阶段:全局 3D 相关金字塔 (轻量化代价体)"
FL --> Dot[极线上像素点积计算]:::cost
FR --> Dot
Dot --> P1[相关体 C1]:::data
P1 -->|1D Pool| P2[相关体 C2]:::data
P2 -->|1D Pool| P3[相关体 C3]:::data
P3 -->|1D Pool| P4[相关体 C4]:::data
end
subgraph "第三阶段:多级 GRU 迭代优化 (循环 N 次)"
InitD[初始视差 d=0]:::data
InitD --> Lookup[Correlation Lookup\n基于当前 d 采样相关特征]:::gru
P1 -.-> Lookup
P2 -.-> Lookup
P3 -.-> Lookup
P4 -.-> Lookup
Lookup --> FeatComb[拼接: 相关特征 + 视差特征 + 上下文]:::gru
Ctx -.-> FeatComb
FeatComb --> MGRU[多分辨率卷积 GRU\n更新隐藏状态]:::gru
MGRU --> Delta[预测视差增量 Δd]:::gru
Delta --> UpdateD[更新视差: d = d + Δd]:::data
UpdateD -->|下一次迭代| Lookup
end
subgraph "第四阶段:上采样输出"
UpdateD -->|最终低分辨率视差| Up[Convex Upsampling\n凸组合上采样]:::extract
Up --> FinalD[高分辨率视差图]:::data
end
核心区别直观对比
代价体的形态与计算:
GwcNet:费尽心机构建一个庞大且信息丰富的 4D 融合代价体(包含了特征拼接和分组相关)。这个代价体本身占用极大显存。
RAFT-Stereo:化繁为简。直接对同行像素的特征向量做内积(点乘),生成轻量级的 3D 相关体 ,并通过在视差维度做 1D 池化构建金字塔(Correlation Pyramid) 。它不提前做复杂的拼接。
正则化/优化的手段(核心差异):
- GwcNet:是一次性推断。数据流过串联的 3D Hourglass 网络(非常耗时耗显存),一次性输出结果。
- RAFT-Stereo:是循环迭代(RNN 的逻辑)。抛弃了 3D 卷积 。网络维护一个起始为 0 的视差场,每次循环时,网络拿着 当前的视差估计 去“查找(Lookup)”金字塔里的匹配度 ,加上左图的上下文特征 ,送入多级卷积 GRU 中计算出一个“视差修正值($\Delta d$)” ,不断叠加逼近真实视差。
工作分辨率:
GwcNet:由于 3D 卷积的限制,通常需要在较低分辨率下运行,对百万像素级图片处理困难。
RAFT-Stereo:由于只使用 2D 卷积和轻量级代价体,可以直接处理高分辨率图像 。预测过程在低分辨率($1/8$ 或 $1/4$)进行,最后通过凸上采样(Convex Upsampling)还原出全分辨率的高精度边缘 。
RAFT-Stereo
综述
这篇论文开启了立体匹配的新范式,主要创新点是:轻量化 3D 相关体、多级卷积 GRU 迭代。
预备知识
GRU
门控循环单元 Gated Recurrent Unit。
是 RNN 循环卷积网络 的变体。传统的 RNN 处理长序列数据时,存在 梯度消失问题(后面节点记不住前面的信息),于是有了 LSTM(长短期记忆网络),但 LSTM 内部复杂,参数复杂。于是有了 GRU,是 LSTM 的轻量优化版。它引入了 Gate 门 的机制来控制信息的流动。
数学原理
graph TD
classDef input fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#000;
classDef gate fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000;
classDef calc fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#000;
classDef output fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#000;
classDef op fill:#eceff1,stroke:#607d8b,stroke-width:2px,shape:circle,color:#000;
%% 输入源
X["当前输入<br>(x<sub>t</sub>)"]:::input
H_prev["上一时刻记忆<br>(h<sub>t-1</sub>)"]:::input
%% 门控机制计算
subgraph step1 ["第一步:门控计算 (计算阀门开度 0~1)"]
R_gate["重置门 (r<sub>t</sub>)<br>决定遗忘多少旧记忆<br>σ(W<sub>r</sub>·x<sub>t</sub> + U<sub>r</sub>·h<sub>t-1</sub>)"]:::gate
Z_gate["更新门 (z<sub>t</sub>)<br>决定新旧记忆的融合比例<br>σ(W<sub>z</sub>·x<sub>t</sub> + U<sub>z</sub>·h<sub>t-1</sub>)"]:::gate
end
X --> R_gate
H_prev --> R_gate
X --> Z_gate
H_prev --> Z_gate
%% 候选记忆生成
subgraph step2 ["第二步:生成候选新记忆"]
Mult1(("×")):::op
R_gate -->|控制流出| Mult1
H_prev -->|原始旧记忆| Mult1
Cand["候选新记忆 (h̃<sub>t</sub>)<br>结合了输入和被过滤的旧记忆<br>tanh(W<sub>h</sub>·x<sub>t</sub> + U<sub>h</sub>·(r<sub>t</sub> × h<sub>t-1</sub>))"]:::calc
X --> Cand
Mult1 -->|被重置门过滤后的旧记忆| Cand
end
%% 最终状态融合
subgraph step3 ["第三步:新旧记忆加权融合"]
OneMinusZ["(1 - z<sub>t</sub>)"]:::calc
Z_gate -->|取反| OneMinusZ
Mult2(("×")):::op
Mult3(("×")):::op
Add(("+")):::op
OneMinusZ -->|决定保留多少| Mult2
H_prev -->|原始旧记忆| Mult2
Z_gate -->|决定采纳多少| Mult3
Cand -->|候选新记忆| Mult3
Mult2 -->|真正保留的旧记忆| Add
Mult3 -->|真正采纳的新记忆| Add
end
Add --> H_next["当前时刻新记忆<br>(h<sub>t</sub>)"]:::output
虽然 Mermaid 不支持原生 LaTeX,但它 完全支持基础的 HTML 标签。你可以使用
<sub>(下标)和<sup>(上标)来手动把公式“撑”起来。
小结:为什么迭代优化更适合精细化视差估计
相比 3D CNN 一次性完成代价体正则化和视差输出,RAFT-Stereo 的循环迭代范式能够在当前估计的基础上不断修正视差,通常更有利于得到锐利、清晰的视差图。
原因一:确定当前视差后,Lookup 可以把 3D 问题转化为 2D 更新
每一次迭代都会维护一个当前视差估计,并根据这个确定的视差在相关性金字塔中进行 Lookup,得到当前位置附近的匹配信息,再预测视差修正量。这样后续更新主要围绕当前视差展开,不需要始终对完整的视差维度使用重型 3D 卷积。
换句话说,计算过程从带有完整视差维度的 3D 正则化,转向基于 Lookup 的 2D 特征更新,减少了视差维度参与计算带来的显存和计算量开销。
原因二:多次修正可以让视差边缘更加锐利
一次性经过多层 3D CNN 的正则化容易把邻近区域过度平滑,尤其是在物体边界、遮挡区域和细小结构处,最终视差图可能出现边缘模糊。迭代方法则可以在每一轮根据当前误差继续修正,逐步收紧物体边界和细节,使视差图更加锐利、边缘更加清晰。
因此,RAFT-Stereo 的优势不只是减少 3D 卷积的计算,更重要的是把“直接输出结果”变成了“根据当前结果反复纠错”的过程。