深度估计数据集概览#
单目深度估计为图像中的每个像素分配一个以米为单位的深度值。深度目标使用缩放后的 16 位灰度 PNG 或以米为单位的浮点 NPY 数组。
本指南介绍 Ultralytics YOLO 深度估计模型使用的数据集格式,并列出可用于训练和验证的内置数据集配置。
支持的数据集格式#
深度图格式#
每个训练样本由一张 RGB 图像和一个配对的深度文件组成。PNG 值会除以可选的数据集级 depth_scale,以转换为米为单位的数值。默认值为 1000,因此值为 1500 代表 1.5 米。代码 0 表示无效;PNG 无需嵌入元数据。
- 深度文件使用
.png(首选)或.npy。PNG 图必须是二维 uint16 灰度图像。NPY 数组必须是二维浮点数组,且数值以米为单位。 - 只有当 PNG 不使用默认的毫米约定时,才设置
depth_scale。例如,KITTI 使用256,Virtual KITTI 2 使用100。 - 每个深度文件的文件名主体应与对应图像文件相同(例如,
scene_001.png与scene_001.jpg配对)。 - 只要宽高比相同,深度图可以小于 RGB 图像;训练时会在内存中调整其尺寸。
- 数据集加载器通过将
images目录部分替换为depth来查找深度文件,优先使用.png,找不到时则回退到.npy。 - 深度值为
≤ 0的像素会被视为无效,并从损失和指标计算中排除。
由于代码 0 专用于无效像素,uint16 PNG 可提供 65,535 个正深度值。缩放比例会同时影响精度和范围:
| 约定 | depth_scale | 分辨率 | 最大深度 |
|---|---|---|---|
| 默认值 / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
这些是存储限制,并非建议的训练上限。数据集可以单独设置较小的 max_depth,用于损失校准或评估。
标准目录结构将图像和深度图分别存放在对应的文件夹中:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/例如,位于 images/train/scene_001.jpg 的图像与位于 depth/train/scene_001.png 的深度图配对。
数据集 YAML 格式#
深度估计数据集通过 YAML 文件进行配置。主要字段包括:
| 键 | 说明 |
|---|---|
path | 数据集根目录。 |
train | 相对于 path 的训练图像路径,或绝对路径。 |
val | 相对于 path 的验证图像路径,或绝对路径。 |
test | 可选的测试图像路径。 |
nc | 类别数量——深度估计始终设为 1。 |
names | 类别名称映射——始终设为 {0: depth}。 |
depth_scale | 可选的每米 PNG 单位数;默认值为 1000。 |
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# NYU Depth V2 dataset for monocular depth estimation
# Documentation: https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html
# 795 train + 654 val (Eigen test split) images, 480x640, indoor scenes, depth in meters
# Example usage: yolo depth train data=nyu-depth.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
# └── nyu-depth-png ← downloads here (≈1.5 GB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: nyu-depth-png # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 795 images
val: images/val # val images (relative to 'path') 654 images
# Depth maps are paired uint16 millimeter PNGs under depth/<split>/, resolved by
# swapping '/images/' -> '/depth/' on each image path.
# Classes
nc: 1
names:
0: depth
channels: 3
depth_scale: 1000
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/nyu-depth-png.zip用法#
使用 Python 或 CLI 训练 YOLO26 深度估计模型:
from ultralytics import YOLO
# 加载预训练的深度模型
model = YOLO("yolo26n-depth.pt")
# 在 NYU Depth V2 数据集上训练
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)支持的数据集#
YOLO26 深度模型先使用涵盖室内(≤10 m)到室外(约 80 m)范围的多数据集混合数据(约 219 万张图像)进行预训练,然后在五个基准上进行评估;除 KITTI Eigen 外,均采用零样本评估。每个数据集都有专属页面,其中一些托管在 Ultralytics Platform 上,可供浏览和云端训练。
调试
- Depth8 — 包含 8 张 SUN RGB-D 图像的 1.3 MB 自动下载压缩包,可用于快速测试流程
预训练数据来源
- ARKitScenes — 真实室内场景,Apple ARKit LiDAR(规模最大的真实数据来源)
- SUN RGB-D — 真实室内场景,多传感器 RGB-D
- DIODE — 真实室内和室外场景,密集激光扫描器真值
- Hypersim — 合成的照片级真实感室内场景
- TartanAir — 合成数据,多样化环境
- Virtual KITTI 2 — 合成室外驾驶场景
- KITTI — 真实室外驾驶场景,Velodyne LiDAR(也是评估基准)
- ImageNet(伪标注) — 伪标注蒸馏数据集,也是最大的单一数据来源
评估基准
- NYU Depth V2 — 主要的室内基准
- KITTI Eigen — 室外驾驶基准
- ETH3D — 高精度室内和室外场景
- Make3D — 室外场景,分布外数据
- iBims-1 — 高质量室内场景(边缘和平面表面)
这些基准上的各模型准确率以及可下载的预训练权重列于深度估计任务页面。train 字段列出多个图像目录的数据集 YAML,可将这些来源合并用于大规模混合训练。
添加你自己的数据集#
- 将 RGB 图像保存在拆分文件夹中,例如
images/train和images/val。 - 在对应的
depth/train和depth/val文件夹中,为每张图像保存一个深度 PNG 或 NPY 文件,并确保文件名主体与图像相同。使用save_depth_png()将以米为单位的数组转换为紧凑的毫米 PNG。 - 确保解码后的深度值以米为单位,并使用
0或负值表示无效或缺失的像素。 - 使用
path、train、val、nc: 1和names: {0: depth}创建数据集 YAML。
path: path/to/my-depth-dataset
train: images/train
val: images/val
nc: 1
names:
0: depth
# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000常见问题#
对于紧凑型数据集,请使用经过缩放的 16 位灰度 PNG。默认情况下,每个整数步长为 1 毫米;如需使用其他缩放比例,请在数据集 YAML 中设置
depth_scale。ultralytics.data.utils.save_depth_png()可将以米为单位的数组转换为默认格式。也可以直接使用以米为单位的浮点 NPY 深度图。深度值为
≤ 0的像素会被视为无效,并在损失计算和指标评估中屏蔽。这适用于传感器噪声、天空区域以及无法可靠测量深度的反光表面。深度估计验证会报告 Depth Anything 标准指标集:
- delta1 / delta2 / delta3 — 深度误差在 1.25×、1.25²×、1.25³× 阈值内的像素比例。数值越高越好。
- abs_rel — 平均绝对相对误差。数值越低越好。
- rmse — 以米为单位的均方根误差。数值越低越好。
- silog — 尺度不变对数误差。数值越低越好。
需要。每个深度
.png或.npy文件的文件名主体必须与对应图像相同。加载器通过将images目录部分替换为depth来推导深度文件路径,优先使用 PNG,找不到时则回退到 NPY。在缓存数据集扫描期间,深度文件缺失或无法读取的图像会被丢弃,并显示警告。