YOLO Vision 2026:

深度估计数据集概述#

单目深度估计为图像中的每个像素分配一个以米为单位的深度值。深度目标使用以米为单位的缩放 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.pngscene_001.jpg 配对)。
  • 只要宽高比匹配,深度图可以比其 RGB 图像小;训练会在内存中调整它们的大小。
  • 数据集加载器通过将 images 目录组件替换为 depth 来查找深度文件,优先选择 .png 并回退到 .npy
  • 深度为 ≤ 0 的像素被视为无效像素,并在损失和指标计算中被排除。

由于代码 0 保留给无效像素,uint16 PNG 提供 65,535 个正深度值。比例控制精度和范围:

惯例depth_scale分辨率最大深度
默认 / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.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/cfg/datasets/nyu-depth.yaml
# 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

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

# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

支持的数据集#

YOLO26 深度模型是在广泛的多数据集组合(约 219 万张图像)上预训练的,涵盖了室内(≤10 米)到室外(约 80 米)的范围,然后在五个基准测试上进行了零样本评估。每个数据集都有一个专门的页面:

调试

  • 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 (pseudo-labeled) — 伪标签蒸馏集,最大的单一数据源

评估基准

这些基准上的各模型准确率以及可下载的预训练权重列在 Depth Estimation 任务页面上。其 train 字段列出多个图像目录的数据集 YAML 将这些源组合起来用于大规模混合训练。

添加你自己的数据集#

  1. 将 RGB 图像保存在诸如 images/trainimages/val 的拆分文件夹下。
  2. 在匹配的 depth/traindepth/val 文件夹下,为每张图像保存一个深度 PNG 或 NPY,并使用与图像相同的文件主干名。使用 save_depth_png() 将米数组转换为紧凑的毫米 PNG。
  3. 确保解码后的深度值以米为单位,且无效或缺失的像素使用 0 或负值。
  4. 创建一个包含 pathtrainvalnc: 1names: {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。默认情况下,每个整数步长为一毫米;在数据集 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。在缓存的数据集扫描过程中,深度文件缺失或不可读的图像将被丢弃并发出警告。

评论