首页
/ Ultralytics YOLO26 中的 NYU Depth V2 数据集:单目深度估计标准评测基准完全解析

Ultralytics YOLO26 中的 NYU Depth V2 数据集:单目深度估计标准评测基准完全解析

2026-09-04 23:12:53作者:幸俭卉

本文围绕 Ultralytics 仓库中的 NYU Depth V2 数据集文档 展开,系统讲解这一单目深度估计(monocular depth estimation)室内标准基准的构成、在 YOLO26-Depth 系列中的角色、配套数据集 YAML 的完整字段含义,以及如何用官方 API 在其 Eigen 测试集上完成验证。结合 验证器实现深度指标实现数据加载工具 的源码,你将理解 delta1 等指标的确切计算方式、规模对齐(scale alignment)策略,以及仓库对 uint16 毫米深度 PNG 的解析约定,从而能够独立复现并深入理解 YOLO26-Depth 的官方评测结果。

数据集概述:NYU Depth V2 是什么

NYU Depth V2 是单目深度估计领域最经典的室内基准之一。它由微软 Kinect v1 RGB-D 传感器录制,覆盖家庭、办公室、教室等多种真实室内场景的 RGB-D 视频序列。根据 官方文档 的归纳,其关键特征如下:

  • 使用 Microsoft Kinect v1 RGB-D 传感器采集;
  • 覆盖大量真实室内场景(住宅、办公室、教室等);
  • 深度范围约 10 m 以内,符合消费级室内 RGB-D 采集的典型上限;
  • 评测采用标准的 Eigen 测试划分(654 张图像)
  • 是报告单目深度估计精度的主要基准。

从配套的 数据集配置文件 头部注释可以进一步确认其规模与格式:训练集 795 张、验证集 654 张(Eigen test split),图像分辨率 480×640,深度单位为米,打包下载后约 1.5 GB。

在 YOLO26-Depth 中的角色:零样本评测基准

NYU Depth V2 是 YOLO26-Depth 系列的主要零样本(zero-shot)评测基准深度任务页面 上报告的核心指标即出自该数据集。有几点关键事实需要明确:

  1. 模型未在该数据集上训练。尽管 NYU 包含 train 划分,仓库将其保留未用,只报告 held-out 测试结果——这保证了 delta1 等数字反映的是模型的零样本泛化能力,而非拟合结果;
  2. 官方数字使用测试时增强(TTA)。评测时采用多尺度推理加水平翻转 TTA,并在计算指标前对预测深度图与真实深度图做对数最小二乘(log-least-squares)尺度对齐;
  3. 若用仓库内置的验证流程复现(yolo depth val),由于采用的是中位数尺度对齐且不带 TTA,delta1 会略低。深度任务文档 给出了可直接复现的单尺度数字:delta1 分别为 0.783(n)、0.793(s)、0.840(m)、0.853(l)、0.860(x),命令为 yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0imgsz=768 是发布权重的训练分辨率)。

NYU Depth V2 Eigen 测试集上的官方结果

下表报告各模型规模在 NYU Depth V2 Eigen test split 上的 delta1 精度(预测深度落在 1.25× 阈值内的像素占比,越高越好):

模型 delta1
YOLO26n-depth 0.882
YOLO26s-depth 0.855
YOLO26m-depth 0.919
YOLO26l-depth 0.927
YOLO26x-depth 0.923

可以注意到 m/l/x 三个规格已进入非常接近的区间,其中 l 规格在带 TTA 的官方协议下 delta1 最高(0.927);而 n 规格(0.882)虽体量最小,仍接近 m 规格,体现了该系列在精度-资源权衡上的梯度设计。

数据集 YAML 配置深度解析

Ultralytics 使用 YAML 文件定义数据集配置。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

结合仓库源码,各字段的实际作用如下:

  • path: nyu-depth-png:数据集根目录名,相对于 Ultralytics 设置中的 datasets_dir。首次使用时会按 download 字段自动下载并解压到该目录;
  • train / val:图像目录相对于 path 的路径,分别对应 795 张训练图与 654 张验证图(Eigen test split);
  • 深度图路径约定:YAML 注释明确"深度图是与图像配对的 uint16 毫米 PNG,位于 depth/<split>/ 下,通过将每个图像路径中的 /images/ 替换为 /depth/ 解析得到"。从源码结构看,BaseDataset 会为每张图像构建 depth_files_by_image 映射(见 dataset.py#L467-L512),实现与上述路径替换一致;
  • nc: 1names: {0: depth}:深度任务把"深度"视为单一语义通道,沿用检测/语义分割任务同一套类注册结构;
  • channels: 3:输入为 RGB 三通道图像;
  • depth_scale: 1000:深度 PNG 的量化比例。源码中默认常量 DEPTH_PNG_SCALE = 1000(见 utils.py#L63),即 uint16 像素值存储的是毫米,读取时除以 1000 得到米制深度,像素值 0 表示无效深度。load_depth 函数(utils.py#L84)负责该换算,训练与验证的 DataLoader 均通过 depth_scale 参数驱动这一过程;
  • download:可选的自动下载源,指向 Ultralytics assets 仓库打包好的 nyu-depth-png.zip(约 1.5 GB)。

验证与评测:从 API 到指标计算

官方验证命令

在 NYU Depth V2 基准上评估 YOLO26-Depth 模型,官方文档给出两种等价方式:

# Python
from ultralytics import YOLO

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

# Evaluate on the NYU Depth V2 benchmark
results = model.val(data="nyu-depth.yaml")
# CLI
# Evaluate a pretrained *.pt model
yolo depth val data=nyu-depth.yaml model=yolo26x-depth.pt

完整的验证参数列表可参考 Validation 文档

DepthValidator:深度任务的验证器

DepthValidator 继承自 DetectionValidator,但针对稠密预测任务做了三处关键定制:

  1. 无 NMSpostprocess 直接返回预测结果(深度图无需非极大值抑制);
  2. 分辨率对齐update_metrics 中若预测图与真值尺寸不一致,会双线性插值到真值分辨率再计算指标(val.py#L51-L60);
  3. 指标初始化init_metrics 用数据集 YAML 的 max_depth(缺省 100.0 m)构造 DepthMetricsval.py#L36-L39)。

DDP 场景下,gather_stats 会用 all_reduce 把各 rank 的分片累加器汇总到 rank 0,保证多卡验证时指标覆盖完整验证集而非单个分片;print_results 则以检测风格的对齐表格输出 delta1, abs_rel, rmse, silog 四列指标(行标签为 depth_val)。验证过程中的预测结果会以深度热力图叠加形式保存为 val_batch{ni}_pred.jpg

DepthMetrics:Eigen 协议下的六项指标

核心指标实现位于 DepthMetrics。其 update_stats 的逐图流程与文档描述的评测协议严格对应:

  1. 有效像素掩码(Eigen 协议):只统计真值深度落在 (min_depth, max_depth) 开区间内的像素,默认 min_depth=0.001 m、max_depth=100.0 m(可在 YAML 中以 max_depth 覆盖);
  2. 有效像素下限:有效真值像素少于 10 个的图像整张跳过(沿用 Depth Anything V2 的同类下限),避免用极少像素做尺度对齐产生无意义结果;
  3. 尺度对齐align="median" 时用 median(gt)/median(pred) 对每张图做尺度缩放(中位数即"仅尺度"对齐);文档中提到的 log-least-squares 对齐则属于发布指标所用的 TTA 评测协议;
  4. 非有限值处理:NaN/Inf 预测按深度上下界填充并钳制到 [min_depth, max_depth],而不是把整张图从平均中隐藏;
  5. 逐图定稿、按图平均:每张图先算出六项指标,再以 float64 累加、最后除以图像数,使每张图权重相同,与 Depth Anything V2、Monodepth2 的按样本平均口径一致。

六项指标及含义(源码 keys 属性):

指标 定义
delta1 满足 max(p/g, g/p) < 1.25 的像素占比(论文主报指标,也是 fitness
delta2 满足 max(p/g, g/p) < 1.25² 的像素占比
delta3 满足 max(p/g, g/p) < 1.25³ 的像素占比
abs_rel 平均绝对相对误差 `mean(
rmse 根均方误差(米)
silog 尺度不变对数误差(λ=1 方差形式,ZoeDepth/KITTI 口径,×100)

终端输出即为 DepthValidatorprint_results 表格:Class | Images | delta1 | abs_rel | rmse | silog

预训练模型与训练用法

YOLO26 深度家族(yolo26n/s/m/l/x-depth)在 NYU Depth V2 上按零样本方式评测,模型权重从最新的 Ultralytics release 自动下载(例如 YOLO26x-depth 自 v8.4.0 起可用),覆盖从小到大的多种规格以适应不同精度与资源需求。

nyu-depth.yaml 头部注释同时给出了训练示例:yolo depth train data=nyu-depth.yaml model=yolo26n-depth.pt。从源码看,DepthTrainer 在训练结束后会执行一步尺度校准:在验证集上拟合 log-affine 的 scale-only 参数(cal_a/cal_b)并写回 best.pt/last.pt,使模型开箱即输出米制缩放的深度,可选地生成 val_batch{ni}_calibrated.jpg 四联对比图(RGB | GT | raw | calibrated)。此外训练阶段还会绘制训练集真值深度分布直方图 labels.jpg(均值/中位数/标准差标注),用于快速检查深度数据的有效范围。

引用与致谢

若在研究或开发工作中使用了 NYU Depth V2 数据集,请引用以下论文:

@inproceedings{silberman2012indoor,
      title={Indoor Segmentation and Support Inference from RGBD Images},
      author={Silberman, Nathan and Hoiem, Derek and Kohli, Pushmeet and Fergus, Rob},
      booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
      year={2012}
}

小结

  • NYU Depth V2 是 YOLO26-Depth 的主要零样本评测基准:官方模型不在其 train 划分上训练,654 张 Eigen 测试图全程 held-out;
  • 仓库通过 nyu-depth.yaml 将 795 训练 + 654 验证图封装为开箱即用的配置,uint16 毫米 PNG 深度经 depth_scale: 1000 换算为米;
  • 验证链路由 DepthValidatorDepthMetrics 构成,完整实现 Eigen 协议(有效深度区间掩码、逐图中位数对齐、按图平均),输出 delta1/abs_rel/rmse/silog 等标准指标;
  • 复现提示:带 TTA + log-least-squares 对齐的官方 delta1(最高 0.927)与仓库内置验证命令的单尺度数字(最高 0.860)口径不同,对比结果时应先确认所用评测协议。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
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
980
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384