Ultralytics YOLO26-Depth 伪标注 ImageNet 深度数据集:用 Depth Anything 3 教师蒸馏出 128 万张深度监督
本文解析 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 V2 与 KITTI)。
该数据源以"内部混合训练配置的一个组成部分"形式存在,随预训练权重一并发挥作用,不作为独立下载分发。
数据集结构
伪标注 ImageNet 源由两部分构成,对应文档中的 Dataset Structure 一节:
- 训练图像:1,281,167 张 ImageNet-1K 训练图像,是约 2.19M 图像预训练混合中最大的单一组件(约 58%);
- 验证:无。该来源没有验证划分;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 不附带深度标注,深度目标是离线预测出来的,而不是测量出来的。文档给出了完整四步管线:
- 双教师前向。每张 ImageNet 训练图像分别过两个 Depth Anything 3 检查点:
depth-anything/DA3MONO-LARGE:预测细节极高的深度图,但只定义在未知逐图尺度/偏移上(仿射歧义);depth-anything/DA3METRIC-LARGE:输出较粗糙,但处于真实米制单位。
- 逐图鲁棒仿射拟合。以单目预测为基础、度量预测为锚,解出逐图两个标量:
label = a * mono + b。于是逐像素细节全部来自单目检查点,度量检查点只负责把深度图放到米制坐标轴上的两个标量。整个过程不涉及相机内参,因此未标定的图像也可以被标注。 - 落盘。结果保存为 16-bit 毫米 PNG,按文件主干名与源图像配对。
- 混入训练。伪标注对作为更大训练混合的一个组件加入,学生模型 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: 1、names: {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训练即可复现同等用法。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00