【PromptStereo】零样本立体匹配新范式:用结构与运动Prompt驱动迭代优化(CVPR 2026)

立体匹配深度估计零样本泛化Depth AnythingCVPR 2026Transformer## 摘要

零样本(zero-shot)立体匹配的核心瓶颈在于迭代优化阶段:现有方法虽然利用了单目深度基础模型做特征提取和视差初始化,但GRU的有限表征能力无法充分利用这些先验。PromptStereo提出Prompt Recurrent Unit(PRU),直接继承Depth Anything V2的DPT解码器架构作为迭代优化器,并设计Structure Prompt和Motion Prompt两路提示信号引导优化方向。在SceneFlow单一数据集训练下,PromptStereo即在KITTI、Middlebury、ETH3D等多个基准上实现零样本SOTA,同时推理速度与RAFT-Stereo持平(0.36s),比MonSter快近一倍。


论文PromptStereo: Zero-Shot Stereo Matching via Structure and Motion Prompts (CVPR 2026)

代码Windsrain/PromptStereo


一、问题背景:GRU迭代优化的瓶颈

从RAFT-Stereo到IGEV再到MonSter,主流立体匹配管线遵循统一范式:
#mermaid-svg-0DkH4mXmDNssPpzb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0DkH4mXmDNssPpzb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0DkH4mXmDNssPpzb .error-icon{fill:#552222;}#mermaid-svg-0DkH4mXmDNssPpzb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0DkH4mXmDNssPpzb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0DkH4mXmDNssPpzb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0DkH4mXmDNssPpzb .marker.cross{stroke:#333333;}#mermaid-svg-0DkH4mXmDNssPpzb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0DkH4mXmDNssPpzb p{margin:0;}#mermaid-svg-0DkH4mXmDNssPpzb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0DkH4mXmDNssPpzb .cluster-label text{fill:#333;}#mermaid-svg-0DkH4mXmDNssPpzb .cluster-label span{color:#333;}#mermaid-svg-0DkH4mXmDNssPpzb .cluster-label span p{background-color:transparent;}#mermaid-svg-0DkH4mXmDNssPpzb .label text,#mermaid-svg-0DkH4mXmDNssPpzb span{fill:#333;color:#333;}#mermaid-svg-0DkH4mXmDNssPpzb .node rect,#mermaid-svg-0DkH4mXmDNssPpzb .node circle,#mermaid-svg-0DkH4mXmDNssPpzb .node ellipse,#mermaid-svg-0DkH4mXmDNssPpzb .node polygon,#mermaid-svg-0DkH4mXmDNssPpzb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0DkH4mXmDNssPpzb .rough-node .label text,#mermaid-svg-0DkH4mXmDNssPpzb .node .label text,#mermaid-svg-0DkH4mXmDNssPpzb .image-shape .label,#mermaid-svg-0DkH4mXmDNssPpzb .icon-shape .label{text-anchor:middle;}#mermaid-svg-0DkH4mXmDNssPpzb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0DkH4mXmDNssPpzb .rough-node .label,#mermaid-svg-0DkH4mXmDNssPpzb .node .label,#mermaid-svg-0DkH4mXmDNssPpzb .image-shape .label,#mermaid-svg-0DkH4mXmDNssPpzb .icon-shape .label{text-align:center;}#mermaid-svg-0DkH4mXmDNssPpzb .node.clickable{cursor:pointer;}#mermaid-svg-0DkH4mXmDNssPpzb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0DkH4mXmDNssPpzb .arrowheadPath{fill:#333333;}#mermaid-svg-0DkH4mXmDNssPpzb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0DkH4mXmDNssPpzb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0DkH4mXmDNssPpzb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0DkH4mXmDNssPpzb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0DkH4mXmDNssPpzb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0DkH4mXmDNssPpzb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0DkH4mXmDNssPpzb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0DkH4mXmDNssPpzb .cluster text{fill:#333;}#mermaid-svg-0DkH4mXmDNssPpzb .cluster span{color:#333;}#mermaid-svg-0DkH4mXmDNssPpzb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0DkH4mXmDNssPpzb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0DkH4mXmDNssPpzb rect.text{fill:none;stroke-width:0;}#mermaid-svg-0DkH4mXmDNssPpzb .icon-shape,#mermaid-svg-0DkH4mXmDNssPpzb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0DkH4mXmDNssPpzb .icon-shape p,#mermaid-svg-0DkH4mXmDNssPpzb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0DkH4mXmDNssPpzb .icon-shape .label rect,#mermaid-svg-0DkH4mXmDNssPpzb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0DkH4mXmDNssPpzb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0DkH4mXmDNssPpzb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0DkH4mXmDNssPpzb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 特征提取
代价体构建
初始视差
GRU迭代优化

K次迭代
最终视差图

近期方法(MonSter、BridgeDepth)引入单目深度基础模型(Depth Anything V2)做特征提取器,显著提升了泛化性能。但关键问题在于:

阶段 利用了基础模型先验? 现状
特征提取 是(ViT encoder) 效果好
视差初始化 部分(单目深度做初始猜测) 有帮助
迭代优化 否(从零训练GRU) 瓶颈

核心矛盾:GRU的sigmoid门控将隐藏状态约束在0,1范围内,表征能力有限;且GRU从零训练,无法利用基础模型已学到的几何先验。

PromptStereo的洞察:为什么不直接用基础模型的解码器替代GRU做迭代优化?

二、核心方法

2.1 整体框架

图 1:PromptStereo整体架构。左侧为特征提取和代价体构建,中间为Affine-Invariant Fusion,右侧为PRU迭代优化模块。来源:PromptStereo GitHub

图 2:PromptStereo完整数据流。红色标注为核心创新点:PRU、Structure Prompt、Motion Prompt、AIF。重绘自 design skill

整体流程:

  1. 共享权重的ViT-L编码器(来自Depth Anything V2)提取左右图特征
  2. 构建Group-wise和All-pair两种相关代价体
  3. Affine-Invariant Fusion融合初始立体视差和单目深度
  4. PRU以Structure Prompt和Motion Prompt为引导,迭代优化视差

2.2 Affine-Invariant Fusion (AIF)

单目深度是相对值(尺度和偏移未知),不能直接与立体视差相加。AIF通过中值归一化对齐两者尺度:

d ^ = d − median ( d ) 1 N ∑ ∣ d − median ( d ) ∣ \hat{d} = \frac{d - \text{median}(d)}{\frac{1}{N}\sum|d - \text{median}(d)|} d^=N1∑∣d−median(d)∣d−median(d)

将单目深度投影到视差空间后,用置信度加权融合:

d F = c ⊙ d 0 + ( 1 − c ) ⊙ d M ′ d_F = c \odot d_0 + (1-c) \odot d'_M dF=c⊙d0+(1−c)⊙dM′

其中 c c c 为学习的置信度图, d 0 d_0 d0 为初始立体视差, d M ′ d'_M dM′ 为尺度对齐后的单目深度。

2.3 Prompt Recurrent Unit (PRU)

PRU是本文核心创新,直接继承DPT解码器的预训练权重替代GRU:

为什么不用GRU?

对比维度 GRU PRU (DPT Decoder)
初始化 随机 Depth Anything V2预训练
隐藏状态范围 sigmoid约束0,1 无约束,自由范围
分辨率 单分辨率 多分辨率(1/8→1/4→1/2→full)
几何先验 丰富的单目深度先验
收敛速度 32次迭代 4次迭代即达高精度

PRU更新机制(多分辨率):

z k = σ ( ConvBlock ( h k i , h k i − 1 ) ) z_k = \sigma(\text{ConvBlock}(h_k\^i, h_k\^{i-1})) zk=σ(ConvBlock(hki,hki−1))

h k + 1 i = ( 1 − z k ) ⊙ h k i + z k ⊙ h ^ k i h_{k+1}^i = (1-z_k) \odot h_k^i + z_k \odot \hat{h}_k^i hk+1i=(1−zk)⊙hki+zk⊙h^ki

d k + 1 = d k + ConvBlock ( h k + 1 0 ) d_{k+1} = d_k + \text{ConvBlock}(h_{k+1}^0) dk+1=dk+ConvBlock(hk+10)

关键设计:Prompt仅注入到最高分辨率层 h k 0 h_k^0 hk0,低分辨率层保持DPT原始行为。

2.4 Structure Prompt (SP)

捕捉立体视差和单目深度之间的几何差异:

D = ∣ d ^ k − d ^ M ∣ D = |\hat{d}_k - \hat{d}_M| D=∣d^k−d^M∣

P S = Encoder ( F M , D ) , h = h + ConvBlock ( P S ) P_S = \text{Encoder}(F_M, D), \quad h = h + \text{ConvBlock}(P_S) PS=Encoder(FM,D),h=h+ConvBlock(PS)

直觉:哪里立体和单目"意见不一致",哪里就是优化需要重点关注的区域(如透明物体、反射表面)。使用仿射不变归一化确保比较不受尺度影响。

2.5 Motion Prompt (MP)

编码立体特有的运动信息(GRU方法也有类似输入,但PRU以Prompt方式注入):

P M k = Encoder ( V k , d k ) , h = h + ConvBlock ( P M k ) P_M^k = \text{Encoder}(V_k, d_k), \quad h = h + \text{ConvBlock}(P_M^k) PMk=Encoder(Vk,dk),h=h+ConvBlock(PMk)

其中 V k V_k Vk 为以当前视差为中心的局部代价体。

关键设计选择 :两个Prompt都通过残差加法注入(而非拼接或替换),不破坏DPT解码器继承的先验。
渲染错误: Mermaid 渲染失败: Parse error on line 3: ...Structure Prompt
|d_k - d_M| 几何差异] -----------------------^ Expecting 'SQE', 'TAGEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PIPE'

2.6 训练损失

L = ∥ d 0 − d g t ∥ smooth + ∑ k = 1 K γ K − k ∥ d k − d g t ∥ 1 \mathcal{L} = \|d_0 - d_{gt}\|{\text{smooth}} + \sum{k=1}^{K} \gamma^{K-k} \|d_k - d_{gt}\|_1 L=∥d0−dgt∥smooth+k=1∑KγK−k∥dk−dgt∥1

初始视差用Smooth L1损失,迭代输出用L1损失加指数衰减权重( γ = 0.9 \gamma=0.9 γ=0.9),越后面的迭代权重越大。

三、工程实现

组件 技术细节
编码器 ViT-Large (Depth Anything V2, frozen)
解码器 DPT decoder (pre-trained, 可训练)
训练数据 SceneFlow (基础) / +FoundationStereo+TartanAir+CREStereo (Unlimited)
输入分辨率 192 或 576 高度
推理速度 0.36s (与RAFT-Stereo持平)
框架 PyTorch + xformers
代码仓库 Windsrain/PromptStereo

四、实验分析

零样本泛化性能(SceneFlow训练)

方法 KITTI'12 Bad3 KITTI'15 Bad3 Midd-T Bad2 Midd-2021 Bad2 ETH3D Bad1 速度
RAFT-Stereo 4.34 5.68 11.07 11.11 2.61 0.36s
IGEV-Stereo 5.13 6.03 9.95 10.00 4.05 0.37s
MonSter 4.62 5.52 8.97 15.55 3.20 0.64s
DEFOM-Stereo 3.90 4.99 6.77 8.62 2.40 -
PromptStereo 3.77 4.59 6.03 8.26 1.56 0.36s

PromptStereo在仅用SceneFlow训练的条件下,全面超越所有同条件方法,尤其在ETH3D上(1.56 vs 2.40)和Middlebury-T上(6.03 vs 6.77)优势明显。

Unlimited训练数据对比

方法 Midd-2021 Bad2 Booster-Sunny Bad2 速度
FoundationStereo 7.14 5.15 0.65s
MonSter 12.43 11.55 0.64s
BridgeDepth 13.66 11.25 -
PromptStereo 5.97 3.67 0.36s

Middlebury-2021上比FoundationStereo低16%错误率;Booster-Sunny上低29%------透明/反射表面处优势巨大。

消融实验

配置 MP SP AIF Midd-T Bad2 ETH3D Bad1 速度
Baseline (MonSter) - - - 7.27 2.86 0.64s
PRU + MP - - 4.18 1.38 0.35s
PRU + MP + SP - 3.90 1.35 0.36s
PromptStereo 3.76 1.30 0.36s

PRU本身带来最大提升(7.27→4.18),SP和AIF各贡献增量改进。

PRU通用性验证

PRU不仅适用于MonSter,也能提升RAFT-Stereo和IGEV:

方法 KITTI'15 Bad3 Midd-T Bad2 ETH3D Bad1
RAFT-Stereo 5.68 8.41 2.29
Prompt-RAFT 4.78 6.39 1.49
IGEV-Stereo 6.03 7.04 3.61
Prompt-IGEV 4.84 6.50 2.21

作为即插即用模块,PRU对所有GRU-based方法都有显著提升。

收敛速度对比

图 3:PRU vs GRU收敛曲线。PRU在4次迭代时已达到GRU 32次迭代才能达到的精度水平,最终精度差距达67%。重绘自 design skill

迭代次数 MonSter (Midd-2021) PromptStereo (Midd-2021)
4 10.75 4.35
8 10.64 3.28
16 9.61 2.79
32 8.46 2.78

PRU在4次迭代(4.35)即优于MonSter 32次迭代(8.46)。

小结

核心贡献

  1. PRU:用基础模型解码器替代GRU做迭代优化,这个思路简洁而有效------不是设计更复杂的模块,而是直接"继承"已有知识
  2. 双Prompt机制:Structure Prompt抓单目-立体差异区域,Motion Prompt编码立体运动信息,两者通过残差注入不破坏继承先验
  3. AIF:仿射不变融合解决了单目深度的尺度模糊问题

局限性

  • 依赖Depth Anything V2的ViT-L,参数量和显存需求大
  • 在KITTI等小视差场景上优势不如大视差场景明显
  • Unlimited训练需要多个大规模合成数据集

个人判断:PromptStereo的PRU思路代表了一个重要趋势------将基础模型的知识从"特征提取"扩展到"迭代优化"。传统方法把GRU当作黑盒优化器从零训练,浪费了大量基础模型已学到的几何理解。PRU证明了"站在巨人肩膀上做优化"比"自己重新学优化"高效得多。这一范式有望推广到光流估计、场景流等其他稠密匹配任务。

相关推荐
Rocky Ding*2 小时前
Latent Consistency Models:一篇读懂扩散模型的少步生成核心基础知识
人工智能·深度学习·机器学习·ai作画·stable diffusion·aigc·ai-native
戴西软件3 小时前
戴西 DLM 许可授权管理系统:破解无网络环境下工业软件授权难题,助力制造企业降本增效
网络·人工智能·python·深度学习·程序人生·算法·制造
Black蜡笔小新3 小时前
制造业AI质检工作站/企业AI算力工作站DLTM助力制造业质检智能化升级
人工智能·深度学习·机器学习
智海深蓝4 小时前
海上平行战场:态势模拟三维可视化平台
3d·ue5
渡之5 小时前
GRiM-Net 深度解析 | 无人机 GNSS 拒止场景下两阶段跨视角视觉定位框架
深度学习·算法·动态规划·无人机
苏州邦恩精密5 小时前
2026江苏GOM三维扫描仪定制厂家找哪家?企业数字化转型视角
人工智能·机器学习·3d·自动化·制造
Zldaisy3d6 小时前
面向LPBF过程监测的物理引导多源数据融合模型:从数据生成到熔化状态识别
3d
code_pgf7 小时前
mllm训练过程中有效地利用辅助监督信号来减少幻觉的方法
人工智能·深度学习·计算机视觉