
💡💡💡我的建议:
model.calibrate()做一次快速校准,几秒钟就能适配。

💡💡💡研究意义
在自动驾驶、机器人导航、AR/VR和3D重建中扮演着不可替代的角色——单目深度估计(Monocular Depth Estimation)。
原理:单目深度估计就是仅凭一张RGB图像,预测出每个像素点到相机的距离(单位:米) 。输出是一张与输入图像对齐的密集深度图,每个像素值代表该点的空间深度。这项能力让机器从“看见”升级到“理解空间”,是智能体感知3D世界的核心技术之一。
过去,单目深度估计领域长期被一类模型统治——Depth Anything V2。它确实准,但代价是计算量巨大,在边缘设备上几乎跑不动。直到YOLO26 Depth的出现,局面被彻底改写。

Ultralytics官方为YOLO26推出了专门的深度估计模型系列——YOLO26n/s/m/l/x-depth。这些模型在涵盖室内外约219万张图像的大规模混合数据集上完成预训练,在NYU Depth V2基准上表现优异。
更重要的是,它在保持高精度的同时,把推理速度做到了极致。
官方实测数据(NYU Depth V2,768×768分辨率,T4 TensorRT FP16):
模型 | delta1 | abs_rel | rmse | 参数量(M) | T4延迟(ms) |
|---|---|---|---|---|---|
YOLO26n-depth | 0.882 | 0.109 | 0.414 | 6.4 | 2.7 |
YOLO26s-depth | 0.896 | 0.104 | 0.399 | 13.2 | 3.8 |
YOLO26m-depth | 0.921 | 0.089 | 0.364 | 23.3 | 6.0 |
YOLO26l-depth | 0.930 | 0.083 | 0.351 | 27.7 | 7.7 |
YOLO26x-depth | 0.933 | 0.080 | 0.344 | 57.0 | 13.6 |
delta1:预测深度与真实值误差在1.25倍以内的像素占比 abs_rel:平均绝对相对误差 rmse:均方根误差(米)
这套数据意味着什么?最小的YOLO26n-depth只有6.4M参数,在T4上推理仅需2.7ms——而Depth Anything V2 Small需要21ms。
直接上对比数据:
模型 | 参数量(M) | T4 TensorRT10 (ms) | FPS | 比V2 Small快 | 比V2 Base快 |
|---|---|---|---|---|---|
Depth Anything V2 Base | 97.5 | 55.40 | 18.1 | — | — |
Depth Anything V2 Small | 24.8 | 20.99 | 47.6 | — | — |
YOLO26n-depth | 6.4 | 2.73 | 365.8 | 7.7× | 20.3× |
YOLO26s-depth | 13.2 | 3.82 | 261.6 | 5.5× | 14.5× |
YOLO26m-depth | 23.3 | 6.00 | 166.7 | 3.5× | 9.2× |
YOLO26l-depth | 27.7 | 7.68 | 130.2 | 2.7× | 7.2× |
YOLO26x-depth | 57.0 | 13.57 | 73.7 | 1.5× | 4.1× |
YOLO26n-depth在参数量仅为Depth Anything V2 Small的1/4的情况下,速度是其7.7倍,FPS高达365.8。即使在640×640分辨率下,YOLO26n-depth的FPS依然能达到436.9。
这意味着什么?你可以在树莓派、Jetson等边缘设备上实时运行单目深度估计了。以前只能在服务器上跑的任务,现在可以下沉到端侧。
我实验后得出的结论:YOLO26 Depth将深度估计从“实验室玩具”变成了“产线工具”——速度足够快、体积足够小,真正具备了工业级部署的条件。
YOLO26 Depth之所以能在速度和精度之间取得如此出色的平衡,关键设计之一就是无界对数深度头(Unbounded Log-depth Head)。
传统深度估计模型通常采用有界Sigmoid × max_depth设计,即人为设定一个最大深度(如10米),超过该范围的深度全部被截断。这种设计在室内场景(≤10米)表现尚可,但一旦遇到户外场景(如KITTI数据集,深度达80米),模型直接崩溃——准确率从78%暴跌到8%。
YOLO26 Depth采用无界对数深度头,预测exp(logit),输出范围约为0.02~150米,不受固定上限约束。模型先预测相对对数深度场,再通过一个独立的双参数变换(exp(a·log d + b))将其映射到绝对米制单位。
这种设计的优势非常明显:
基准 | 深度范围 | YOLO26x-depth(无界) | 有界模型 |
|---|---|---|---|
NYU Eigen | 10米 | 0.933 | 0.934 |
iBims-1 | 10米 | 0.961 | 0.945 |
ETH3D | ~60米 | 0.959 | 0.931 |
KITTI Eigen | 80米 | 0.942 | 0.891 |
最大的提升恰恰出现在户外长距离基准上——这正是固定深度天花板伤害最大的地方。
我的总结:无界对数深度头让YOLO26 Depth可以无缝适配室内短距和户外长距两种场景,一套权重通吃,无需为不同场景更换模型。
from ultralytics import YOLO
# 加载预训练模型
model = YOLO("yolo26n-depth.pt")
# 推理
results = model("data\nyu-depth\images\val\nyu_0008.jpg")
# 获取深度图
for result in results:
depth_map = result.depth.data.cpu().numpy() # shape (H, W),单位:米
print(depth_map.shape)测距结果:
image 1/1 data\nyu-depth\images\val\nyu_0008.jpg: 576x768 depth 1.57-7.28m, 85.8ms
Speed: 65.6ms preprocess, 85.8ms inference, 0.6ms postprocess per image at shape (1, 3, 576, 768)
(480, 640)from ultralytics import YOLO
model = YOLO("yolo26n-depth.pt")
results = model.train(
data="nyu-depth.yaml",
epochs=100,
imgsz=640
)
官方提供了详细的微调建议:
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt")
model.train(
data="path/to/your_dataset.yaml",
epochs=20,
imgsz=640,
optimizer="AdamW",
lr0=1e-4, # 比从头训练低约100倍
warmup_bias_lr=1e-4
)关键注意事项:
如果模型输出的绝对深度值在特定相机上存在偏差,可以通过model.calibrate()快速校准——无需重新训练,几秒即可完成:
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt")
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")校准只需要约100张带真实深度标注的样本,通过闭式拟合一个双参数对数仿射变换完成,不改变网络权重,因此不会破坏相对结构。
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth
model = YOLO("yolo26n-depth.pt")
result = model("data/nyu-depth/images/val/nyu_0008.jpg")[0]
depth = result.depth.data.cpu().numpy() # (H, W) float32, meters
# Colorize with near = warm and save
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral")) # (H, W, 3) BGR uint8
# Fix the range to 0-20 m so the same color means the same distance across frames
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))
# Blended overlay straight from the Results object (uses cmap="jet", mode="disparity")
result.save("depth_overlay.png")



YOLO Depth的数据集格式非常直观:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/每张RGB图像对应一个同名的.npy文件(float32格式,单位:米)。例如images/train/scene_001.jpg对应depth/train/scene_001.npy。
我的总结:YOLO26 Depth的出现,标志着单目深度估计正式从“实验室专用”走向“工业级可用”。它用6.4M参数、2.7ms推理延迟、365 FPS的极致性能,把深度估计的成本和门槛降到了前所未有的低点。
我的建议:
model.calibrate()做一次快速校准,几秒钟就能适配。
让每一行代码都有温度,我们下期见!🚀
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。