企业级安全防护: 符合 ISO 27001 + SOC 2 Type I 标准。

Link to this section单目深度估计#

Monocular depth estimation examples

单目深度估计从单张 RGB 图像预测逐像素深度图。每个输出像素包含一个以米为单位的深度值,表示从相机到该表面点的估计距离。

深度模型的输出是一个与输入图像对齐的形状为 (H, W) 的稠密浮点图。这种逐像素表示使得单目深度估计非常适合用于 3D 场景重建、机器人导航、AR/VR 内容创作以及任何需要从单相机获取空间布局的应用。

提示

使用 task=depthyolo depth CLI 任务进行单目深度估计。YOLO26 深度模型文件使用 -depth 后缀,例如 yolo26n-depth.pt

Link to this section模型#

下表显示了在广泛的多数据集混合(室内 + 室外,约 219 万张图像)上预训练的 YOLO26 深度模型。指标列是在 NYU Depth V2 Eigen 测试集上报告的。

模型在首次使用时会自动从最新的 Ultralytics 发布版本下载。

模型尺寸
(像素)
delta1NYUabs_relNYUrmseNYU参数量
(M)
FLOPs
(B)
YOLO26n-depth7680.8820.1090.4146.446.9
YOLO26s-depth7680.8960.1040.39913.267.9
YOLO26m-depth7680.9210.0890.36423.3130.7
YOLO26l-depth7680.9300.0830.35127.7157.2
YOLO26x-depth7680.9330.0800.34457.0302.0
  • delta1NYU 是在 NYU Depth V2 Eigen 测试集(654 张图像)上,使用多尺度 + 水平翻转 TTA 和对数最小二乘对齐后,预测深度与真实值误差在 1.25 倍以内的像素百分比。
  • 不使用 TTA 的单尺度精度可通过 yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0(针对每种尺寸替换 model=)进行重现,该方法使用中位数(仅缩放)对齐,得分较低:delta1 0.785 (n), 0.786 (s), 0.827 (m), 0.839 (l), 0.843 (x)。
  • abs_rel 是预测深度值与真实深度值之间的平均绝对相对误差。
  • rmse 是以米为单位的均方根误差。
  • paramsFLOPs 是在 768×768 分辨率(发布权重时的训练分辨率)下测量的。

Link to this section深度范围和对数深度头 (log-depth head)#

深度头预测 exp(logit) —— 无界 (约 0.02–150 米) —— 并将场景形状与绝对尺度解耦:网络预测相对对数深度场,绝对米数由评估时恢复、轻量级校准或微调时的独立双参数变换 (exp(a·log d + b)) 设置。常见的替代方案,即有界的 sigmoid × max_depth 头,会在架构中强制设置固定上限,因此任何超过 max_depth 的深度都会被截断,这阻碍了对长距离场景的训练和预测。

Link to this section为什么深度头需要无界:跨深度范围的证据#

受控 A/B 测试 — 相同数据、相同计划,仅深度头不同。 在完全相同的室内 (≤10 米) 和室外 (≤80 米) 数据混合上从头开始训练两个深度头:

检测头输出范围混合范围验证 δ1训练表现
sigmoid × max_depth (10 米)有界 0–10 米0.221在第 1 个 epoch 时达到平稳
log (无界)0–约 150 米0.367 (+66%)持续改善

有界头无法表示超过 10 米的大部分室外像素,因此几乎立即停止改进;而 log 头能从全范围中学习。

它修复的故障模式 — 单数据集微调,按范围分层。 在单个数据集上微调有界 (10 米) 头时,当数据符合上限时有效,超出上限时则会崩溃:

数据集深度范围有界头 δ1
SUN RGB-D≤10 米0.78 ✅
Hypersim大部分 ≤10 米0.74 ✅
KITTI约 80 米0.08 ❌ (abs_rel ≈ 7.0 — 80/10 尺度不匹配)
vKITTI280 米0.04 ❌

崩溃准确发生在上限边界处。log 头没有这种边界。

已发布模型 — 跨范围性能。 发布的 log-head 系列模型,在跨越 10 米 (NYU, iBims-1) 到 80 米 (KITTI) 的基准测试上进行了评估,使用尺度对齐的 δ1 指标:

基准测试范围YOLO26x-depth (log)之前的有界版本
NYU Eigen10 米0.9330.934
iBims-110 米0.9610.945
ETH3D约 60 米0.9590.931
Make3D约 70 米0.3020.296
KITTI Eigen80 米0.9420.891
平均值0.8190.799

最大的收益体现在更长范围的室外基准测试(KITTI, ETH3D)中——这正是 10 米固定上限影响最大的地方——同时保持了室内性能。

Link to this section训练#

Depth8 数据集上以 640 图像尺寸训练 YOLO26n-depth 模型 100 个 epoch。有关可用参数的完整列表,请参阅 Configuration 页面。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.yaml")  # build a new model from YAML
model = YOLO("yolo26n-depth.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)

查看关于 train 模式的完整详细信息,请访问 Train 页面。

Link to this section在你的自定义数据上进行微调#

将预训练深度模型适配到自定义数据集时,请降低学习率并使用 AdamW 优化器。默认优化器设置是针对从头开始训练(使用 lr0=0.01 的 SGD)调整的;应用于已收敛的深度模型时,它们可能会覆盖预训练知识并导致结果下降——特别是在单个领域上微调时。

推荐的微调策略
from ultralytics import YOLO

model = YOLO("yolo26s-depth.pt")  # start from pretrained weights

model.train(
    data="path/to/your_dataset.yaml",
    epochs=20,
    imgsz=640,
    optimizer="AdamW",
    lr0=1e-4,  # ~100x below the from-scratch default
    warmup_bias_lr=1e-4,  # keep warmup gentle too
)

额外建议:

  • 数据增强由标准参数控制 (degrees, translate, scale, shear, perspective, flipud, fliplr, hsv_h, hsv_s, hsv_v);几何变换和翻转同样应用于配对的深度图。要查看发布 YOLO26-Depth 权重所使用的确切方案,请检查存储在检查点中的 train_args——参阅 Inspecting YOLO26 Checkpoint Training Args
  • mosaic, mixup, cutmixcopy_paste 未针对深度估计实现。 深度数据集加载器会自动将这些概率设置为 0,因此传递它们不会产生任何影响。不支持这些增强方式是因为它们结合了多个图像,这会产生无效的配对深度图。
  • 任何深度范围都可以直接使用。 log-head 模型预测无界深度,因此无需更改即可适应短距离(微距)或长距离(室外/驾驶)数据。在数据集 YAML 中设置 max_depth:(以米为单位)可限制哪些 GT 像素计入验证指标。
  • 保持通用性能。 如果你需要模型在训练集之外的场景中保持准确,请在训练数据中混入一小部分(约 5–10%)多样化的通用图像;这能显著减少微调过程中的遗忘。
  • 仅当你的领域非常不同且拥有大数据集时,才从头开始训练 (model=yolo26s-depth.yaml) —— 此时默认的 SGD lr0=0.01 是合适的,因为没有预训练权重需要保留。

Link to this section校准深度尺度#

深度头将形状(相对场景结构)与尺度(绝对米数)分离开来。如果模型在你的场景中已经产生了良好的相对深度,但绝对值对于你的相机不准确,你可以通过 model.calibrate() 在几秒钟内校准尺度——这是针对一小部分标注集进行的双参数对数仿射拟合,无需梯度训练,也无需更改网络权重,因此不会破坏相对结构。

尺度校准
from ultralytics import YOLO

model = YOLO("yolo26s-depth.pt")

# Fit scale on a labeled split (~100+ images is enough), then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")

校准需要真实深度来进行拟合,因此它是在标注集上运行的——这不能在盲推理中完成。当相对深度已经很好,仅尺度/范围错误时使用它;如果你的领域需要更改相对结构本身,请改用 微调

训练会自动为你完成此操作:在 model.train(...) 完成后,最佳和最后检查点会在验证集上进行校准,以便它们开箱即用输出具有度量标尺的深度。

已发布的 yolo26*-depth.pt 检查点已经内置了此校准,是基于预训练验证混合集拟合的。这是一个跨所有领域的单一全局尺度,因此为了在特定相机或场景类型上获得最准确的绝对深度,请在你自己的小规模标注集上运行 model.calibrate()——它会替换内置的拟合参数。

Link to this section数据集格式#

深度估计数据集将每个 RGB 图像与相应的深度文件配对。深度目标存储为包含以米为单位的 float32 值的 .npy 数组。数据集 YAML 指向一个 images/ 目录;加载器通过将 images 部分替换为 depth 并将图像扩展名替换为 .npy 来派生深度文件路径。

dataset/
├── images/
│   ├── train/
│   └── val/
└── depth/
    ├── train/
    └── val/

例如,位于 images/train/scene_001.jpg 的图像与位于 depth/train/scene_001.npy 的深度图配对。请参阅 Depth Estimation Dataset Guide 获取完整格式规范。

Link to this section验证#

在深度估计数据集上验证已训练 YOLO26n-depth 模型的 accuracy。请显式传递 data,以便验证使用预期的数据集 YAML。发布的权重是在 imgsz=768 下训练的,因此请在该尺寸下进行验证和预测以获得最佳精度。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1  # percentage of pixels within threshold δ=1.25
metrics.abs_rel  # mean absolute relative error
metrics.rmse  # root mean squared error (meters)
metrics.silog  # scale-invariant logarithmic error

Link to this section预测#

使用已训练的 YOLO26n-depth 模型对图像进行预测。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    depth_map = result.depth.data.cpu().numpy()  # torch.Tensor -> NumPy float32, shape (H, W), meters

See full predict mode details in the Predict page.

Link to this section结果输出#

YOLO 深度估计为每张图像返回一个 Results 对象。每个结果存储一张完整的稠密浮点深度图。

属性类型形状描述
result.depthDepthMap(H,W)逐像素的稠密深度图。
result.depth.datatorch.Tensor(H,W)以米为单位的深度值;调用 .cpu().numpy() 获取 NumPy 数组。
result.boxes--无实例框。
result.masks--无实例掩膜。

关于各项任务中特定于任务的 Results 字段,请参阅按任务划分的预测结果 (Predict Results by Task) 部分。

Link to this section导出#

将 YOLO26n-depth 模型导出为 ONNX、CoreML 等其他格式。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

下表列出了可用的 YOLO26 深度估计导出格式。你可以使用 format 参数导出为任何格式,例如 format='onnx'format='engine'。你可以直接在导出的模型上进行预测或验证,例如 yolo predict model=yolo26n-depth.onnx。导出完成后,将显示模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolo26n-depth.pt-
TorchScripttorchscriptyolo26n-depth.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-depth.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-depth_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-depth.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-depth.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-depth_saved_model/imgsz, keras, quantize, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-depth.pbimgsz, batch, device
TF Edge TPUedgetpuyolo26n-depth_edgetpu.tfliteimgsz, quantize, data, fraction, device
PaddlePaddlepaddleyolo26n-depth_paddle_model/imgsz, batch, device
MNNmnnyolo26n-depth.mnnimgsz, batch, dynamic, quantize, nms, device
NCNNncnnyolo26n-depth_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-depth_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-depth_rknn_model/imgsz, batch, name, quantize, data, fraction, device
ExecuTorchexecutorchyolo26n-depth_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-depth_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-depth_deepx_model/imgsz, quantize, data, optimize, device
Qualcomm QNNqnnyolo26n-depth_qnn.onnximgsz, batch, name, quantize, data, fraction, device
LiteRTlitertyolo26n-depth.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-depth_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou

查看关于 export 的完整详细信息,请访问 Export 页面。

Link to this section常见问题解答#

Link to this section如何训练一个用于自定义数据集的 YOLO26 深度估计模型?#

准备配对的 RGB 图像和 .npy 深度文件,然后创建一个指向你 images/ 目录的数据集 YAML 文件。加载器会自动将路径中的 images 替换为 depth 并将图像扩展名替换为 .npy 来查找深度文件。

从预训练权重开始,并结合 AdamW 使用较小的学习率,以便微调过程能够保留模型已有的知识(查看 在自定义数据上进行微调 了解原因):

示例
from ultralytics import YOLO

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

# Fine-tune on a custom depth dataset
results = model.train(
    data="path/to/your_dataset.yaml",
    epochs=20,
    imgsz=640,
    optimizer="AdamW",
    lr0=1e-4,
    warmup_bias_lr=1e-4,
)

查看配置页面以了解更多可用参数。

Link to this sectionYOLO26 深度估计会报告哪些指标?#

深度估计验证会报告 Depth Anything 及相关单目深度任务所使用的指标集:

  • delta1 / delta2 / delta3 — 预测深度与真实深度(或其倒数)的比值小于 1.25、1.25² 和 1.25³ 的像素百分比。数值越高越好。
  • abs_rel — 平均绝对相对误差。数值越低越好。
  • rmse — 以米为单位的均方根误差。数值越低越好。
  • silog — 尺度不变对数误差。数值越低越好。

每个预测结果在每张图像中都会与其实际真值进行中值对齐,然后统计数据会汇集到验证集中的每一个有效像素点(拥有更多有效深度像素的图像权重占比更高)。如果某些论文选择对每张图像的指标求平均值,那么在相同预测结果下可能会报告略有不同的数值。

Link to this section深度图的输出格式是什么?#

深度图以 torch.Tensor 形式存储,形状为 (H, W),其中每个值代表以米为单位的预测深度(请使用 result.depth.data.cpu().numpy() 获取 NumPy float32 数组)。在运行预测后,可以通过 result.depth.data 访问它。深度图与输入图像的分辨率对齐。

Link to this section深度估计支持哪些数据集?#

Ultralytics YOLO26 为多种深度估计数据集提供了内置的 YAML 配置,包括 NYU Depth V2、KITTI、Hypersim、SUN RGB-D 和 ARKitScenes。有关完整列表和格式详细信息,请参阅 深度估计数据集指南

Link to this section如何验证预训练的 YOLO26 深度估计模型?#

通过提供用于评估的数据集 YAML 文件来验证预训练的 YOLO26 深度模型:

示例
from ultralytics import YOLO

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

# Validate the model
metrics = model.val(data="nyu-depth.yaml")
print("delta1:", metrics.delta1)
print("abs_rel:", metrics.abs_rel)
print("rmse:", metrics.rmse)

Link to this section如何将 YOLO26 深度估计模型导出为 ONNX 格式?#

使用 Python 或 CLI 将 YOLO26 深度模型导出为 ONNX:

示例
from ultralytics import YOLO

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

# Export the model to ONNX format
model.export(format="onnx")

有关导出为各种格式的更多详细信息,请参阅导出页面。

贡献者

评论