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博客,欢迎转发讨论。如果觉得有帮助,请点赞支持!

相关推荐
tankeven4 小时前
动态规划专题(03):区间动态规划从原理到实践(未完待续)
c++·算法·动态规划
田梓燊5 小时前
2026/4/11 leetcode 3741
数据结构·算法·leetcode
清空mega5 小时前
动手学深度学习——SSD
人工智能·深度学习
斯内科5 小时前
FFT快速傅里叶变换
算法·fft
2301_822703205 小时前
开源鸿蒙跨平台Flutter开发:幼儿疫苗全生命周期追踪系统:基于 Flutter 的免疫接种档案与状态机设计
算法·flutter·华为·开源·harmonyos·鸿蒙
贵慜_Derek5 小时前
Managed Agents 里,Harness 到底升级了什么?
人工智能·算法·架构
2301_822703205 小时前
鸿蒙flutter三方库实战——教育与学习平台:Flutter Markdown
学习·算法·flutter·华为·harmonyos·鸿蒙
Jia ming6 小时前
C语言实现日期天数计算
c语言·开发语言·算法
无限进步_6 小时前
【C++&string】大数相乘算法详解:从字符串加法到乘法实现
java·开发语言·c++·git·算法·github·visual studio
苏纪云6 小时前
蓝桥杯考前突击
c++·算法·蓝桥杯