STTR算法详解:用Transformer重新定义立体匹配

引言:立体匹配的范式转变

立体匹配是计算机视觉中的经典问题:给定两张从不同视角拍摄的图像,找出像素对应关系,恢复场景深度。几十年来,这个领域的发展主线可以概括为一条清晰的轨迹:

  • 1980s-2000s:基于手工设计特征和动态规划的经典方法
  • 2010s-2018:基于CNN和3D卷积的深度学习时代(GCNet、PSMNet等)
  • 2020s至今:Transformer引领的新范式

而STTR(STereo TRansformer)正是这场范式转变的标志性工作。它由约翰霍普金斯大学的研究团队在2021年提出,发表于ICCV,首次将Transformer架构完整地应用于立体匹配任务,用序列到序列的视角重新审视这个经典问题。

一、传统方法的三大困境

1.1 固定视差范围的限制

传统深度学习方法(如PSMNet、GwcNet)依赖**代价体(Cost Volume)**来存储匹配信息。代价体的尺寸为H×W×DH \times W \times DH×W×D,其中DDD是预设的最大视差。为了保证计算可行性,DDD通常被限制在192像素以内。

这意味着:如果视差超过192,模型根本无法预测。在自动驾驶中,近处物体的视差可能高达300-400,这是一个致命缺陷。

1.2 遮挡区域的盲区

在双目图像中,有些区域只能被一侧相机看到(如物体边缘)。这些遮挡区域理论上没有有效的视差值。但大多数深度学习方法仍然会"强行"输出一个视差,导致错误估计。

1.3 唯一性约束的缺失

一个基本几何事实:左侧图像中的像素最多只能匹配右侧图像中的一个像素。这种唯一性约束在传统动态规划方法中是被严格遵循的,但在基于深度学习的匹配中往往被忽略,导致匹配歧义。

二、STTR的核心思想:序列到序列匹配

STTR的核心洞察是:将立体匹配问题重新定义为序列到序列的对应问题

复制代码
传统视角:构建代价体 → 3D卷积正则化 → 回归视差
STTR视角:特征序列 → 注意力匹配 → 直接输出对应关系

这个转变带来了三个根本性优势:

  1. 不预设视差范围 :匹配是全局的,不受DDD限制
  2. 天然处理遮挡:匹配概率低的区域自然被视为遮挡
  3. 强制唯一性约束:通过最优传输理论实现

三、网络架构详解

STTR的整体架构包含三个主要模块:特征提取网络、Transformer匹配模块、上下文调整层。

3.1 特征提取网络

STTR使用一个沙漏形(Hourglass)的CNN作为特征提取器:

  • 编码路径:残差网络 + 空间金字塔池化(SPP),用于捕获多尺度上下文
  • 解码路径:转置卷积 + Dense Block,恢复空间分辨率

最终输出特征图与输入图像分辨率相同。记左、右图像的特征描述子为FL,FR∈RH×W×CeF_L, F_R \in \mathbb{R}^{H \times W \times C_e}FL,FR∈RH×W×Ce,其中CeC_eCe是特征通道数。

3.2 Transformer匹配模块

这是STTR的核心创新。模块结构采用交替的**自注意力(Self-Attention)交叉注意力(Cross-Attention)**层:

  • 自注意力:在同一图像内建立像素间的长程依赖,帮助理解结构上下文
  • 交叉注意力:在左右图像之间建立对应关系,是匹配的核心
3.2.1 多头注意力机制

STTR使用标准的Transformer注意力机制。设每个像素的特征描述子被分到NhN_hNh个头,每个头的维度为Ch=Ce/NhC_h = C_e / N_hCh=Ce/Nh。对于每个头hhh:

Qh=FhQ(e),Kh=FhK(e),Vh=FhV(e) \mathcal{Q}_h = \mathcal{F}_h^Q(e), \quad \mathcal{K}_h = \mathcal{F}_h^K(e), \quad \mathcal{V}_h = \mathcal{F}_h^V(e) Qh=FhQ(e),Kh=FhK(e),Vh=FhV(e)

其中FQ,FK,FV\mathcal{F}^Q, \mathcal{F}^K, \mathcal{F}^VFQ,FK,FV是可学习的线性映射。

注意力权重计算为:

αh=softmax(QhT⋅KhCh) \alpha_h = \text{softmax}\left( \frac{\mathcal{Q}_h^T \cdot \mathcal{K}_h}{\sqrt{C_h}} \right) αh=softmax(Ch QhT⋅Kh)

输出值为:

Vo=∑hαh⋅Vh \mathcal{V}_o = \sum_h \alpha_h \cdot \mathcal{V}_h Vo=h∑αh⋅Vh

最后使用残差连接:

eout=ein+Vo e_{\text{out}} = e_{\text{in}} + \mathcal{V}_o eout=ein+Vo

3.2.2 相对位置编码

这是STTR解决弱纹理区域匹配的关键创新。

在标准Transformer中,位置编码通常是绝对位置的函数。但这在立体匹配中存在问题:匹配应该依赖于像素间的相对位置关系,而非绝对坐标

STTR提出的相对位置编码 方案:对于像素iii和jjj,相似度计算为:

αij=softmax((ei+ep,i)T(ej+ep,j)Ch) \alpha_{ij} = \text{softmax}\left( \frac{(e_i + e_{p,i})^T (e_j + e_{p,j})}{\sqrt{C_h}} \right) αij=softmax(Ch (ei+ep,i)T(ej+ep,j))

其中ep,ie_{p,i}ep,i是位置编码。展开后得到四项:

eiTej+eiTep,j+ep,iTej+ep,iTep,j e_i^T e_j + e_i^T e_{p,j} + e_{p,i}^T e_j + e_{p,i}^T e_{p,j} eiTej+eiTep,j+ep,iTej+ep,iTep,j

STTR的关键创新是只保留前三项,去掉第四项 ,因为第四项完全依赖于绝对位置,与像素相似性无关。进一步地,将绝对位置编码替换为相对位置编码ep,i−je_{p,i-j}ep,i−j,使匹配真正依赖于像素间的相对关系。

3.3 最优传输与唯一性约束

这是STTR最具数学深度的地方。

传统方法中,匹配是"硬"的:每个左图像素选择最相似的右图像素。但这不可微分,且不满足唯一性约束。

STTR采用**熵正则化的最优传输(Optimal Transport)**来解决。对于代价矩阵M∈RH×WM \in \mathbb{R}^{H \times W}M∈RH×W(由交叉注意力输出),目标是找到最优的匹配矩阵τ\tauτ:

min⁡τ⟨M,τ⟩−ϵ⋅E(τ) \min_{\tau} \langle M, \tau \rangle - \epsilon \cdot E(\tau) τmin⟨M,τ⟩−ϵ⋅E(τ)

其中E(τ)E(\tau)E(τ)是熵正则化项,ϵ\epsilonϵ控制正则化强度。这个优化问题可以通过Sinkhorn算法高效求解。

最终得到的τ\tauτ满足:

  • 每行和为1(左图每个像素有匹配)
  • 每列和≤1(右图每个像素最多匹配一个左图像素)

这正是唯一性约束的数学表达

3.4 视差与遮挡回归

得到匹配矩阵τ\tauτ后,STTR采用"软"的赢家通吃策略估计视差:

  1. 在τ\tauτ中找到匹配概率最大的位置,索引记为kkk
  2. 取kkk周围的3×33 \times 33×3窗口N3(k)\mathcal{N}_3(k)N3(k)
  3. 计算原始视差:

dˉraw=∑j∈N3(k)τi,j⋅dj∑j∈N3(k)τi,j \bar{d}{\text{raw}} = \frac{\sum{j \in \mathcal{N}3(k)} \tau{i,j} \cdot d_j}{\sum_{j \in \mathcal{N}3(k)} \tau{i,j}} dˉraw=∑j∈N3(k)τi,j∑j∈N3(k)τi,j⋅dj

其中djd_jdj是视差候选值。

遮挡概率则自然定义为:

pocc=1−∑j∈N3(k)τi,j p_{\text{occ}} = 1 - \sum_{j \in \mathcal{N}3(k)} \tau{i,j} pocc=1−j∈N3(k)∑τi,j

窗口内的匹配概率和越高,被遮挡的可能性越小。

3.5 上下文调整层

上述匹配过程是逐极线独立进行的,缺乏不同极线之间的上下文信息。STTR使用一个轻量级CNN(称为Context Adjustment Layer)对初始视差图和遮挡图进行精化。

四、损失函数

STTR的损失函数包含三项:

L=λ1Ld1,r+λ2Ld1,f+λ3Lbe,f \mathcal{L} = \lambda_1 \mathcal{L}{d1,r} + \lambda_2 \mathcal{L}{d1,f} + \lambda_3 \mathcal{L}_{be,f} L=λ1Ld1,r+λ2Ld1,f+λ3Lbe,f

其中:

  • Ld1,r\mathcal{L}_{d1,r}Ld1,r:原始视差图的L1损失
  • Ld1,f\mathcal{L}_{d1,f}Ld1,f:精化后视差图的L1损失
  • Lbe,f\mathcal{L}_{be,f}Lbe,f:精化后遮挡图的二值交叉熵损失

五、实验结果与性能分析

5.1 主要结果

STTR在多个基准数据集上取得了优异表现:

数据集 指标 STTR结果
Scene Flow EPE 0.48
Scene Flow 3px错误率 1.55%
KITTI 2015 D1-bg 3.37%

5.2 关键优势验证

泛化能力:STTR在纯合成数据(Scene Flow)上训练后,直接测试真实场景(KITTI),无需微调即可取得competitive结果。这证明了基于注意力的匹配策略具有良好的域泛化能力。

视差范围适应性:由于不构建固定范围的代价体,STTR可以处理任意大小的视差,这是传统方法无法做到的。

遮挡估计:STTR输出的遮挡概率与真实遮挡区域高度相关,为下游任务提供了有价值的置信度信息。

六、STTR的影响与后续发展

STTR的提出开创了基于Transformer的立体匹配新方向,后续工作从多个维度进行了改进:

6.1 效率优化

标准Transformer的计算复杂度为O(N2)O(N^2)O(N2),在图像上直接应用成本较高。后续工作如"引入轻量级Transformer的自适应窗口立体匹配算法"将STTR的效率提升了4.7倍

6.2 特征提取改进

FET(Feature Extraction Transformer)将STTR的特征提取部分也替换为Transformer,进一步提升了性能,在Scene Flow上将EPE从0.48降至0.32 ,相对提升30.95%

6.3 与Swin Transformer融合

STransMNet将Swin Transformer引入特征提取,更好地捕获全局上下文信息。

七、总结与展望

STTR的价值不仅在于其性能,更在于它开创的新范式

维度 传统方法 STTR
匹配方式 代价体 + 3D卷积 注意力 + 序列匹配
视差范围 固定,≤192 无限制
遮挡处理 后处理启发式 模型内生
唯一性约束 通常忽略 最优传输强制
可解释性 较低 注意力可视化

STTR的核心公式值得记住:

Match=Sinkhorn(Softmax((FL+P)T(FR+P)C)) \text{Match} = \text{Sinkhorn}\left( \text{Softmax}\left( \frac{(F_L + P)^T (F_R + P)}{\sqrt{C}} \right) \right) Match=Sinkhorn(Softmax(C (FL+P)T(FR+P)))

它用优雅的数学形式,统一解决了匹配、唯一性约束、遮挡估计三个核心问题。

未来,随着高效Transformer架构的发展,基于注意力的立体匹配方法有望在实时性上取得突破,真正走向实际应用。

参考文献

  1. Li, Z., Liu, X., Drenkow, N., et al. "Revisiting Stereo Depth Estimation From a Sequence-to-Sequence Perspective with Transformers." ICCV 2021.
  2. 双目立体视觉论文阅读(1)STTR. CSDN博客.
  3. Jia, D. et al. "A Transformer-Based Architecture for High-Resolution Stereo Matching." IEEE TCI 2024.
  4. 深度估计-双目-STTR. CSDN博客.
  5. 王正家等. "引入轻量级Transformer的自适应窗口立体匹配算法." 计算机工程, 2024.
  6. Li, Z. et al. "Revisiting Stereo Depth Estimation From a Sequence-to-Sequence Perspective with Transformers." arXiv:2011.02910.
  7. STTR:基于Transformers的立体深度估计网络,代码已开源! 知乎专栏.
  8. 引入轻量级Transformer的自适应窗口立体匹配算法. 计算机工程.
  9. 从序列视角思考双目深度估计: STereo TRansformers. 知乎专栏.
  10. 融合Swin Transformer的立体匹配方法STransMNet. 光电工程, 2023.

本文首发于CSDN博客,欢迎转发讨论。如果觉得有帮助,请点赞支持!

相关推荐
海石21 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石21 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry1 天前
LeetCode 151. 反转字符串中的单词
算法
a1117761 天前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜1 天前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry1 天前
LeetCode 541. 反转字符串 II
算法
Jerry1 天前
LeetCode 344. 反转字符串
算法
搞科研的小刘选手1 天前
【香港大学主办&IEEE出版】第六届计算机视觉、应用与算法国际学术会议(CVAA 2026)
算法·计算机视觉·应用·学术会议
Java小白笔记1 天前
Codex config.toml配置实战指南
人工智能·算法·chatgpt·ai编程·集成学习
王老师青少年编程1 天前
2026年6月GESP真题及题解(C++七级):消消乐
数据结构·c++·算法·真题·gesp·2026年6月