首页
/ Ultralytics YOLO26-Depth 伪标注 ImageNet 深度数据集:用 Depth Anything 3 教师蒸馏出 128 万张深度监督

Ultralytics YOLO26-Depth 伪标注 ImageNet 深度数据集:用 Depth Anything 3 教师蒸馏出 128 万张深度监督

2026-09-04 13:46:27作者:姚月梅Lane

本文解析 Ultralytics 仓库中 YOLO26-Depth 预训练混合数据里最大的单一来源——伪标注 ImageNet 深度数据集:1,281,167 张 ImageNet-1K 训练图像如何借助 Depth Anything 3 教师模型离线生成伪深度标签,单目结构与度量尺度如何经逐图仿射拟合合并为 label = a * mono + b,以及为什么 SILog 损失与中值对齐验证能让这些"无真值"数据支撑起室内跨域泛化。读完后你将理解这套蒸馏数据的完整生成管线、在预训练混合中的角色,以及如何在自己的多源深度混合(depth mix)上训练 YOLO26-Depth。

数据集概览与定位

Ultralytics 官方文档 ImageNet (Pseudo-Labeled) Depth Dataset 描述的数据集复用了 1,281,167 张 ImageNet-1K 训练图像。这些图像本身没有任何真实深度(ground-truth depth),每一张都配有一张由 Depth Anything 3 教师模型离线生成的伪深度图。它的用途非常明确:

  • **纯粹用于知识蒸馏(knowledge distillation)**与场景/物体多样性补充,而非作为评测基准;
  • 是约 2.19M 图像的 YOLO26-Depth 预训练混合中最大的单一来源(约占 58%)
  • 官方文档指出,加入该来源对室内跨域泛化(indoor cross-domain generalization)起到了决定性作用——模型在真实深度训练分布之外的室内场景上表现更好;
  • 没有验证划分:YOLO26-Depth 的验证只在 NYU Depth V2、KITTI Eigen 等真实真值数据集上进行(参见 NYU Depth V2KITTI)。

该数据源以"内部混合训练配置的一个组成部分"形式存在,随预训练权重一并发挥作用,不作为独立下载分发

数据集结构

伪标注 ImageNet 源由两部分构成,对应文档中的 Dataset Structure 一节:

  1. 训练图像:1,281,167 张 ImageNet-1K 训练图像,是约 2.19M 图像预训练混合中最大的单一组件(约 58%);
  2. 验证:无。该来源没有验证划分;YOLO26-Depth 的验证只使用 NYU Depth V2、KITTI Eigen 等真实真值数据集。

深度文件本身的组织遵循 Ultralytics 统一的 深度数据集格式:每张伪深度图保存为 16-bit 毫米单位 PNG(默认 depth_scale: 1000,即像素值 1500 表示 1.5 米),并与源图像按**文件主干名(file stem)**配对——即 images/train/xxx.jpg 对应 depth/train/xxx.png,加载器通过把路径中的 images 目录替换为 depth 来定位深度文件。

伪标签生成管线:单目细节 + 度量尺度

由于 ImageNet 不附带深度标注,深度目标是离线预测出来的,而不是测量出来的。文档给出了完整四步管线:

  1. 双教师前向。每张 ImageNet 训练图像分别过两个 Depth Anything 3 检查点:
    • depth-anything/DA3MONO-LARGE:预测细节极高的深度图,但只定义在未知逐图尺度/偏移上(仿射歧义);
    • depth-anything/DA3METRIC-LARGE:输出较粗糙,但处于真实米制单位。
  2. 逐图鲁棒仿射拟合。以单目预测为基础、度量预测为锚,解出逐图两个标量:label = a * mono + b。于是逐像素细节全部来自单目检查点,度量检查点只负责把深度图放到米制坐标轴上的两个标量。整个过程不涉及相机内参,因此未标定的图像也可以被标注。
  3. 落盘。结果保存为 16-bit 毫米 PNG,按文件主干名与源图像配对。
  4. 混入训练。伪标注对作为更大训练混合的一个组件加入,学生模型 YOLO26-Depth 一边匹配教师、一边在真实真值源上训练。

为什么伪标签的全局尺度误差可以被吸收

因为尺度来自预测而非测量,每张伪图都可能带有全局尺度误差。文档给出的解释是:YOLO26-Depth 使用尺度不变对数损失(SILog)加梯度匹配训练,并用中值对齐做验证,因此伪标签中的逐图尺度偏移大部分被吸收。仓库源码印证了这一整套机制:

训练侧:DepthLoss26 的 SILog + 多尺度梯度损失

DepthLoss26 的类注释明确写着"采用尺度不变对数损失(SILog)+ 梯度匹配损失,遵循 Depth Anything 思路。SILog 处理尺度歧义,梯度损失保边"。关键实现细节:

  • 有效像素掩码为 valid = gt_depth > 0.001,无效像素(0 值约定)不参与损失;
  • SILog 以中心化方差形式实现:先对 log(pred) - log(gt) 求均值 m,再计算 sqrt(mean((log_diff - m)^2) + (1 - dlam) * m^2 + 1e-6)。其中 dlam = 1.0 即纯尺度不变形式,dlam = 0.0 退化为 log-RMSE——这正是文档中"逐图尺度偏移被吸收"的数学来源:当 dlam = 1.0 时损失对整体平移(即尺度)不敏感;
  • 梯度损失 _grad_l1 计算预测与 GT 对数深度的空间梯度(dx、dy)的 L1,且只在两个参与像素均有效时计值;随后经 avg_pool2d 下采样做最多 4 层多尺度匹配,并在有效像素占比较低的图块上停止,兼顾连续填充与 LiDAR 稀疏场景。

这三个行为由 default.yaml 中的超参数控制,均为深度任务默认值:

dlog: 1.0 # (float) depth log (SILog) loss gain (depth tasks)
dgrad: 0.5 # (float) depth gradient loss gain (depth tasks)
dlam: 1.0 # (float) depth SILog variance focus: 1.0=scale-invariant, 0.0=log-RMSE (depth tasks)

验证侧:逐图像素中值对齐

Depth 指标实现 中的对齐参数 align: str = "median",按 Depth Anything 评测协议在打分前对每张图执行 median(gt) / median(pred) 的尺度重标定,注释说明这是为了让"仿射不变(尺度歧义)输出"可以直接评分——与文档"验证用中值对齐(median alignment)"的表述一致。

训练入口与后处理

DepthTrainer 继承检测训练器,将 batch["depth"] 保持为 float32,并透明支持多源图像路径列表(即混合训练);final_eval 阶段还会在校验集上拟合 scale-only 对数仿射(cal_a/cal_b)写入 best.pt/last.pt,让模型开箱即输出米制深度。学生模型结构见 yolo26-depth.yaml,其中末端 Depth 头在 P3/P4/P5 上输出无界对数深度。

在 YOLO26-Depth 预训练混合中的角色

这个来源贡献了 YOLO26-Depth 预训练数据的大头最广泛的场景/物体多样性。通过在 100 万+ 张图像上蒸馏强 Depth Anything 3 教师,它把广域场景先验转移给学生模型。文档结论是:加入该来源对室内跨域泛化起决定作用,帮助模型在真实真值训练分布之外的室内场景上取得良好表现。各预训练源(ARKitScenes、SUN RGB-D、DIODE、Hypersim、TartanAir、Virtual KITTI 2、KITTI 与本文的伪标注 ImageNet)及五个评测基准的完整清单见 Depth 数据集总览

用法:作为多源深度混合的一个组件

伪标注 ImageNet 数据不单独训练,而是作为组合深度混合的一个组件被消费,由内部/实验性 YAML(而非公开的独立数据集下载)定义。从源码结构看,混合训练即在一个数据集 YAML 的 train 字段中列出多个图像目录,由 BaseDataset 的多源加载机制透明处理(见 DepthTrainer 的类注释)。概念上,在这样一个混合上训练如下:

Python

from ultralytics import YOLO

# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")

# Train on a combined depth mix (your own multi-source dataset YAML)
results = model.train(data="depth-mix.yaml", epochs=100, imgsz=640)

CLI

# Train on a combined depth mix (your own multi-source dataset YAML)
yolo depth train data=depth-mix.yaml model=yolo26n-depth.pt epochs=100 imgsz=640

自定义深度混合 YAML 时遵循 深度数据集格式path/train/val 定位目录,nc: 1names: {0: depth},可选 depth_scale(默认 1000,即毫米 PNG);深度 PNG 建议用 ultralytics.data.utils.save_depth_png() 从米制数组转换(实现位于 ultralytics/data/utils.py)。像素值 ≤ 0 视为无效,会被自动排除出损失与指标计算。

预训练模型

预训练 YOLO26-Depth 模型在首次按名称引用时自动下载(权重来自 Ultralytics 发布的 v8.4.0 assets release),共 5 个规模档:

  • YOLO26n-Depth
  • YOLO26s-Depth
  • YOLO26m-Depth
  • YOLO26l-Depth
  • YOLO26x-Depth

各档位在不同评测基准上的精度与权重下载入口列于 Depth Estimation 任务页

引用与致谢

如果你的研究使用了 ImageNet 数据集或本文描述的伪标注方案,请引用以下文献:

@inproceedings{deng2009imagenet,
      title={ImageNet: A Large-Scale Hierarchical Image Database},
      author={Deng, Jia and Dong, Wei and Socher, Richard and Li, Li-Jia and Li, Kai and Fei-Fei, Li},
      booktitle={2009 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
      year={2009},
      organization={IEEE}
}

@article{depthanything3,
      title={Depth Anything 3: Recovering the visual space from any views},
      author={Lin, Haotong and Chen, Sili and Liew, Jun Hao and Chen, Donny Y. and Li, Zhenyu and Shi, Guang and Feng, Jiashi and Kang, Bingyi},
      journal={arXiv preprint arXiv:2511.10647},
      year={2025}
}

文档同时致谢 ImageNet 团队创建并维护该数据集,以及 Depth Anything 3 作者提供的用于生成伪深度标签的教师模型。

小结

  • 伪标注 ImageNet 是 YOLO26-Depth 约 2.19M 预训练混合中约 58% 的最大来源,只用于蒸馏与多样性,不单独分发、不做评测;
  • 标签由 DA3MONO-LARGE(细节)与 DA3METRIC-LARGE(尺度)双教师经逐图仿射拟合 label = a * mono + b 生成,16-bit 毫米 PNG 落盘;
  • 尺度误差由 DepthLoss26 的 SILog(dlam=1.0)+ 梯度损失与验证侧中值对齐共同吸收,源码与文档表述互相印证;
  • 实践上把它当作多源深度混合中的一个组件,用自建的 depth-mix.yaml 训练即可复现同等用法。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
982
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384