Depth Anything

v1

Depth Anything 沿用典型的 encoder–decoder 结构,通过两阶段训练(Teacher → Student)打造一个通用且高性能的单目深度估计基础模型

  • Teacher 阶段
    • 在 1.5M 张标注深度图像上训练,使用仿射不变损失对齐多数据集的尺度漂移
    • 编码器加载 DINOv2 预训练权重,解码器采用 DPT 结构
  • Student 阶段
    • 用训练好的 Teacher 模型对 62M 张未标注图像生成稠密伪标签
    • 在每个 batch 中按 1:2 比例混合标注与伪标注样本,对后者施加强扰动(色彩抖动、模糊 + CutMix)并加入语义对齐约束,令网络学到更鲁棒的深度表征

Encoder

Backbone:DINOv2 预训练的 Vision Transformer

  • 输入预处理
    • 训练时将短边 resize 至 518 px、中心裁剪为 518×518 px
    • 推理时保持原始长宽,保证二者均为 14 (DINOv2)的整数倍

Decoder

结构:Dense Prediction Transformer(DPT)

  • 特征融合
    • 从 ViT 的多个 stage(patch 分辨率不同)抽取特征图
    • 用 1×1 卷积降维后,逐级上采样并与浅层特征做 skip-connection
    • 最终输出 H×W 的 disparity map
  • 深度转换
    • 训练时将真实深度 d 转为 disparity d′=1/d ,归一化到 [0,1]
    • 推理输出后再反向映射为实际深度

语义辅助特征对齐

冻结一个 DINOv2 Encoder(不更新权重)作为语义教师

  • 提取两套特征:
    • f: Depth Anything Student Encoder 的中间特征
    • f′: 冻结 DINOv2 Encoder 输出的语义特征
  • 对齐损失
    • 只对余弦相似度低于阈值 α (默认 0.85)的像素施加,兼顾深度判别与语义一致性

损失与训练

总损失 \(L = L_{labeled} + L_{unlabeled} + L_{feat}\)

  • 仿射不变 MAE:忽略不同数据集的尺度和平移漂移
  • 强扰动目标:在伪标注样本上加色彩抖动、高斯模糊 + 50% 概率 CutMix
  • 语义保留:特征对齐避免将深度模型导向离散分割标签

Pipeline

1. 数据引擎构建

  • 标注数据:使用公开深度数据集(如 NYU, KITTI)训练高性能教师模型;
  • 未标注数据:从 LAION-400M 等图像集合中筛选高质量图像,作为伪标签训练的输入;
  • 多模态处理:数据预处理包括尺度对齐、图像增强、遮挡模拟等。

2. 教师模型(Teacher)训练

  • 构建基础深度估计器(如 DPT)并在带标签数据上训练;
  • 生成伪标签:对未标注图像推理,输出伪深度图;
  • 此步骤是 V1 的核心创新之一:利用模型生成标签,扩大训练集规模。

3. 学生模型(Student)训练

  • 学生模型采用 Transformer 编码器(ViT-b/l/g 等) + DPT 解码头;
  • 在未标注图像 + 教师伪标签组合上进行训练;
  • 优化目标是提高对真实图像的泛化能力。

模型架构

  • 编码器 ViT:从 DINOv2 或 BEiT 初始化,可选 base/large/giant
  • 解码器 DPT:Transformer 解码架构,包括多层特征融合模块
  • 上采样结构:RefineNet风格结构,用于恢复高分辨率深度图

v2

相比v1:

  • 用合成图像替代标注的真实图像
  • 扩大教师模型容量(使用更强编码器)
  • 利用大规模真实图像构建伪标签桥梁训练学生模型

Pipeline

1. 数据引擎:构建训练数据集

  • 使用合成图像(如 Blender 或 Unity 渲染)制作高质量深度图
  • 收集大规模真实世界图像(如来自 LAION 数据集),用于伪标签生成

2. 教师模型训练(Teacher)

  • 教师模型结构:DINOv2-G 编码器 + DPTHead 解码器
  • 在合成图像上进行监督训练,得到高精度深度预测能力

3. 自动标注(伪标签生成)

  • 用教师模型推理大规模真实图像,生成伪深度标签
  • 构建出跨模态学习的“桥梁数据集”,弥合 domain gap

4. 学生模型训练(Student)

  • 用真实图像 + 伪标签进行训练,提升模型对真实世界的泛化能力
  • 可根据需求选用轻量版本(ViTs、ViTb)或大型版本(ViTl、ViTg)

模型架构

  • 编码器:DINOv2 系列 ViT 模型,使用 ViTl(或 ViTg)进行高质量特征提取,提取多层特征(例如第4、11、17、23层),用于构建深度图
  • DPTHead + RefineNet: 包括四个投射层 + 上采样层,使用一系列 FeatureFusionBlock 进行多层级融合,