DPT (2021):Vision Transformer 革新密集深度预测

DPT (2021):Vision Transformer 革新密集深度预测

导出时间:2025/11/24 09:04:25

1、背景:为什么 CNN 在深度估计里有瓶颈?

你可以把 CNN 编码器 想象成一台相机:
  • 它一边“拍照”,一边不断缩小画面(下采样),试图把大画面总结成一个小小的摘要。
  • 这种方式的好处是节省存储和算力,还能捕捉到一些抽象的高级特征。
但是问题来了:
  1. 越缩越小,细节模糊
    • 就像你把一张照片压缩成缩略图,放大回去的时候,细小的边缘(比如树枝、路灯)已经丢失了,再怎么放大也还原不出来。
    • 在深度估计中,这意味着预测结果常常“糊边”,小目标被抹掉。
  2. 只能“看局部”,缺乏全局眼光
    • CNN 的感受野是通过一层层卷积“拼”出来的,就像你走进森林,眼睛只能看附近几棵树,想知道整个森林有多大,要走很久。
    • 在深度估计里,这导致模型容易犯“局部判断错误”:比如把远处的天空和山搞混。
论文里就强调了:CNN 编码器一旦在早期丢掉了信息,解码器再强也救不回来

2、动机:为什么用 Vision Transformer (ViT)?

这时,研究者们借鉴了 NLP 的 Transformer,提出了一个新思路:
👉 与其让网络像近视眼一样一层层拼上下文,不如一开始就让它拥有“全局视野”。
比喻
  • CNN 像是一个画工,趴在画布前,从左上角一格格描绘,画完才知道全貌。
  • Transformer 更像是一个无人机,直接飞到高空,一眼就能看到整个画布,然后再决定每个局部该怎么处理。
Vision Transformer (ViT) 里:
  • 图像被切成一个个小块(patch),每个小块就像一个“单词”。
  • 通过自注意力机制(self-attention),这些“小块”之间能互相交流,保证全局一致性。
于是,DPT 的动机就是:
  1. 用 ViT 替代 CNN 做编码器,让网络在每一层都能看到整幅图,而不是只看局部。
  2. 保持较高的分辨率处理特征,避免了卷积下采样造成的细节损失。
  3. 再配合卷积解码器,把全局+细节的信息重新组合,生成既细腻又连贯的深度图。
论文里的实验也说明了:
  • 在大规模数据上,DPT 比传统 CNN 提升高达 28%
  • 不仅细节更清楚,预测结果在整体上也更合理(比如远近关系更自然)。


  • Monodepth/2(CNN 系):像个近视眼画工,靠局部堆叠去理解全局,结果边缘模糊、容易犯“整体错误”。
  • DPT(ViT 系):像无人机+画工结合体,既能鸟瞰全局,又能落地补细节,所以生成的深度预测更细腻、更连贯。

3、DPT 的核心创新点

  1. Transformer 编码器取代 CNN 编码器
    • 传统深度估计(比如 Monodepth2)用 CNN 来提取特征,但会丢失细节,且只能逐层扩展感受野。
    • DPT 用 Vision Transformer (ViT) 作为 backbone,利用自注意力机制,每一层都能建模全局关系。
    • 比喻:CNN 像“拿着放大镜看局部”,而 ViT 像“无人机鸟瞰全局”。

  1. 新颖的解码架构(Reassembly Transformer Features)
    • ViT 输出的是一系列“打散”的 patch 特征(没有天然的空间结构),这和 CNN 的特征图不同。
    • DPT 提出了一种 特征重组模块 (reassembly module),把 Transformer 的输出重新拼装成多尺度的空间特征图。
    • 这样解码器就可以像在 CNN 里那样,逐层恢复分辨率,同时结合局部卷积增强细节。
    • 比喻:Transformer 像是“打散成拼图块”的全局信息,而解码器就像“拼图高手”,能把碎片拼成一幅完整的、有细节的图像。

  1. 多任务通用性
    • 论文里,DPT 不仅应用于单目深度预测,还应用到 语义分割人体部件分割
    • 核心原因是:只要是 密集预测任务(dense prediction),都需要 局部细节 + 全局一致性,而 DPT 恰好兼顾了这两点。
    • 比喻:DPT 像是一位“通才选手”,不仅能预测深度,还能胜任其他需要像素级理解的任务。

  1. 更强的大规模训练适应性
    • Transformer 的一个特性是:随着训练数据的增大,性能提升幅度比 CNN 更显著。
    • DPT 在大规模数据(如 MiDaS 数据集)上训练时,性能远超之前的 CNN 模型。
    • 比喻:CNN 像一个“死记硬背型学生”,数据多了也未必能学好;而 Transformer 像“善于举一反三的学生”,学得越多越聪明。

✅ 总结:DPT 的创新点

一句话总结: 👉 DPT 用 Transformer 编码器取代 CNN,并设计了一个特征重组+卷积解码器的结构,使模型既能看到全局,又能还原细节,还能适用于各种密集预测任务。


4、DPT 的整体架构图

image.png

🔎 整体思路

DPT 的流程可以分为三步:
  1. 编码 (Embedding + Transformer):把图像切成小块 → 变成 token → 用 Transformer 提取全局特征。
  2. 重组 (Reassemble):把 token 重新拼成空间特征图,不同层对应不同分辨率。
  3. 融合与预测 (Fusion + Head):多尺度特征逐步融合、上采样,最后输出深度图(或语义分割图)。

🟨 Step 1: 输入和 Transformer 编码

(看图左下角到中间)
  • 原始图像被切成一个个小块(patch),就像把照片切成小方块。
  • 每个小块通过 Embed 模块,变成一个向量(黄色小条)。
  • 这些向量加上位置编码,送进一层层 Transformer(蓝色方块)。


🟩 Step 2: 特征重组 (Reassemble)

(看图中间绿色方块 + 中央示意图)
  • Transformer 输出的还是一堆“token”,不像 CNN 那样天然带有空间结构。
  • Reassemble 模块就是把这些 token “拼回去”,恢复成类似图像的特征图。
  • 而且,作者设计了多个 Reassemble₄, Reassemble₈, Reassemble₁₆, Reassemble₃₂,对应不同分辨率(1/4, 1/8, 1/16, 1/32 尺度)。
👉 比喻: Transformer 把图像信息“打散”了,就像一盒拼图碎片;Reassemble 模块就是拼图高手,把碎片拼成不同大小的拼图,既有高清的小拼图(细节),也有粗糙的大拼图(全局)。

🟪 Step 3: 融合与解码 (Fusion + Head)

(看图右边紫色 Fusion 块 + 输出 Head)
  • 每个 Reassemble 输出的特征图被送到 Fusion 模块
  • Fusion 用 卷积残差单元 (Residual Conv Unit) 来结合不同尺度的特征,并逐步 上采样,恢复到接近原图的分辨率。
  • 最后经过 Head,生成密集预测结果(如深度图)。
👉 比喻: Fusion 就像一位画师,把“拼图高手”提供的不同大小拼图合在一起:
  • 大拼图提供全局结构;
  • 小拼图提供细节; 最后画师把它们融合成一幅完整、细致的作品(深度图)。

🎯 总结:DPT 架构的关键点

  1. 输入 → Transformer:用自注意力机制提取全局特征。
  2. Reassemble:把 token 重新变成多尺度特征图,弥补 Transformer 缺乏空间结构的不足。
  3. Fusion:多尺度特征逐步融合和上采样,既保证全局一致性,又保留细节。
  4. Head:输出任务结果(深度估计 / 分割等)。

✅ 一句话概括: DPT 架构像是 无人机(Transformer)鸟瞰全局 → 拼图高手(Reassemble)重建局部特征图 → 画师(Fusion + Head)整合全局与细节 → 输出精美深度图


⚠️ DPT 的主要缺陷

  1. 计算量大,效率低
    • Transformer 的自注意力机制是 O(N²) 的复杂度(N = patch 数量)。
    • 当输入图像分辨率较高时,token 数量暴涨,显存和计算量都会非常大。
    • 这导致 DPT 很难在移动端、实时场景中使用。 👉 比喻:就像开会时,所有人必须互相讨论一遍,参与人数一多,会议效率立刻崩掉。

  1. 空间结构弱
    • CNN 天生保留空间邻域关系(卷积核就是局部感知),但 ViT 把图像切成 patch 后,原始的空间关系被打散,需要 Reassemble 模块再拼回来。
    • 这种“先打散再拼回”的方式并不是最优,导致 DPT 在边缘细节小目标处理上仍有不足。 👉 比喻:拼图高手虽然能拼回画面,但有时边角的碎片拼得不够精细。

  1. 训练依赖大规模数据
    • Transformer 本身不具备 CNN 的归纳偏置(比如平移不变性),需要非常大的数据集来学会这些特性。
    • DPT 在 MiDaS 这样的大数据集上表现优异,但在小数据集(比如 KITTI)上效果未必能完全发挥。 👉 比喻:Transformer 更像“天才型学生”,需要大量见世面(数据)才能开窍,否则发挥不稳定。

  1. 解码器相对简单
    • DPT 的解码部分主要靠 Fusion 模块逐步融合+上采样,相比一些专门设计的解码器(比如带有注意力机制、多尺度金字塔结构),表达能力有限。
    • 在语义分割等需要精确边界的任务中,DPT 的结果可能没有后续方法细腻。


🔧 后续模型的创新改进方向

  1. 高效 Transformer 结构
    • Swin Transformer:引入滑动窗口注意力机制,把全局注意力变成局部注意力 + 跨窗口通信,大幅降低计算量。
    • SegFormer / BEiT / MAE:通过结构改造或自监督预训练,让 Transformer 更高效、更适合下游任务。 👉 这些模型解决了 计算效率 问题,让 Transformer 在高分辨率输入下也能跑得动。

  1. 更强的空间建模
    • 一些后续方法把 CNN 和 Transformer 结合(Hybrid 模型),利用 CNN 保留局部空间关系,Transformer 负责全局建模。
    • 例如 LeViT, CvT (Convolutional Vision Transformer),把卷积嵌入进 ViT,增强局部特征提取能力。 👉 这相当于“无人机鸟瞰 + 放大镜检查”,既看全局又不丢细节。

  1. 解码器增强
    • 后续很多方法引入 注意力机制的解码器(比如 Transformer-based U-Net),在上采样阶段动态选择重要特征。
    • 有些方法用 多尺度特征融合策略(如 Feature Pyramid Transformer),进一步提升边界和小目标预测能力。

  1. 小数据集适应性
    • 引入 自监督预训练(如 MAE, DINO, DeiT),在大数据上先学通用特征,再迁移到小数据集任务。
    • 这样能显著缓解 DPT 对大规模标注数据的依赖问题。