YOLO Vision 2026:

Ước tính độ sâu đơn thị (Monocular Depth Estimation)#

Monocular depth estimation examples

Ước tính độ sâu đơn thị dự đoán bản đồ độ sâu trên từng pixel từ một ảnh RGB duy nhất. Mỗi pixel đầu ra chứa một giá trị độ sâu tính bằng mét, thể hiện khoảng cách ước tính từ camera đến điểm bề mặt đó.

Đầu ra của một model ước tính độ sâu là một bản đồ float dày đặc có shape (H, W) được căn chỉnh với ảnh đầu vào. Biểu diễn theo từng pixel này giúp tác vụ ước tính độ sâu đơn mắt rất phù hợp cho việc tái tạo cảnh 3D, điều hướng robot, tạo nội dung AR/VR và mọi ứng dụng đòi hỏi bố cục không gian từ một camera đơn.

Mẹo

Sử dụng task=depth hoặc tác vụ CLI yolo depth để ước tính độ sâu đơn mắt. Các tệp model độ sâu YOLO26 sử dụng hậu tố -depth, chẳng hạn như yolo26n-depth.pt.



Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀

Models#

Các model độ sâu YOLO26 được huấn luyện trước trên một tập dữ liệu hỗn hợp rộng (trong nhà + ngoài trời, ~2,19 triệu ảnh) được hiển thị bên dưới. Các cột chỉ số được báo cáo trên tập kiểm thử Eigen của NYU Depth V2.

Models được tải xuống tự động từ bản release Ultralytics mới nhất trong lần sử dụng đầu tiên.

Mô hìnhkích thước
(pixel)
delta1NYUabs_relNYUrmseNYUTốc độ
CPU ONNX
(ms)
Tốc độ
T4 TensorRT10
(ms)
params
(M)
FLOPs
(B)
YOLO26n-depth7680.8820.1090.414272.0 ± 27.22.7 ± 0.16.446.9
YOLO26s-depth7680.8960.1040.399393.7 ± 13.13.8 ± 0.013.267.9
YOLO26m-depth7680.9210.0890.364621.5 ± 49.76.0 ± 0.123.3130.7
YOLO26l-depth7680.9300.0830.351821.9 ± 50.77.7 ± 0.127.7157.2
YOLO26x-depth7680.9330.0800.3441240.9 ± 73.313.6 ± 0.257.0302.0
  • delta1NYU là tỷ lệ phần trăm các pixel mà độ sâu dự đoán nằm trong khoảng hệ số 1,25 so với ground truth, trên tập kiểm thử Eigen của NYU Depth V2 (654 ảnh) với TTA đa quy mô + lật ngang và căn chỉnh log-least-squares.
  • Độ chính xác đơn tỷ lệ không dùng TTA có thể tái tạo được bằng yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0 (thay thế bằng model= cho từng kích thước), sử dụng phương pháp căn chỉnh trung vị (chỉ theo tỷ lệ) và có điểm số thấp hơn: delta1 0.783 (n), 0.793 (s), 0.840 (m), 0.853 (l), 0.860 (x).
  • abs_rel là sai số tương đối tuyệt đối trung bình giữa giá trị độ sâu dự đoán và ground-truth.
  • rmse là sai số căn bậc hai trung bình tính bằng mét.
  • Speed là độ trễ chỉ tính riêng suy luận (chưa bao gồm tiền/hậu xử lý) tại imgsz=768, batch=1, được báo cáo dưới dạng trung bình ± độ lệch chuẩn qua các lần chạy có đo thời gian sau khi khởi động. CPU ONNX là ONNX Runtime fp32 trên CPU Intel Xeon 32 nhân (Skylake); T4 TensorRT10 là TensorRT fp16 trên GPU Tesla T4.
  • paramsFLOPs được đo ở độ phân giải 768×768, độ phân giải huấn luyện của các trọng số đã phát hành.

Tốc độ so với Depth Anything V2#

Depth Anything V2 là một baseline mở được sử dụng rộng rãi cho độ sâu đơn mắt. Phần thân vision transformer DINOv2 và bộ giải mã DPT của nó đòi hỏi lượng tính toán lớn, do đó trên cùng một Tesla T4 chạy TensorRT fp16, model Depth Anything V2 nhỏ nhất được phát hành lại chậm hơn mọi model độ sâu YOLO26 — bao gồm cả YOLO26x-depth vốn có số lượng tham số lớn gấp đôi.

Ở độ phân giải ~768 px — imgsz=768 đối với YOLO26, độ phân giải mà trọng số phát hành của nó được huấn luyện, và 770 px đối với Depth Anything V2 (với phần thân DINOv2 yêu cầu bội số của kích thước patch là 14):

Mô hìnhtham số (M)FLOPs (B)T4 TensorRT10 (ms)FPSTốc độ tăng so với V2 SmallTốc độ tăng so với V2 Base
Depth Anything V2 Base97.51025.555.4018.1
Depth Anything V2 Small24.8346.920.9947.6
YOLO26x-depth57.0302.013.5773.71.5×4.1×
YOLO26l-depth27.7157.27.68130.22.7×7.2×
YOLO26m-depth23.3130.76.00166.73.5×9.2×
YOLO26s-depth13.267.93.82261.65.5×14.5×
YOLO26n-depth6.446.92.73365.87.7×20.3×

Ở độ phân giải ~640 px — lần lượt là imgsz=640 và 644 px — thứ tự không thay đổi và YOLO26n-depth nhanh hơn 5.9 lần so với Depth Anything V2 Small:

Mô hìnhT4 TensorRT10 (ms)FPS
Depth Anything V2 Base35.1028.5
Depth Anything V2 Small13.6273.4
YOLO26x-depth10.2697.5
YOLO26l-depth6.14162.8
YOLO26m-depth4.71212.1
YOLO26s-depth3.08324.4
YOLO26n-depth2.29436.9
  • Độ trễ chỉ tính riêng suy luận, batch=1, TensorRT fp16 trên Tesla T4 — cùng một môi trường thử nghiệm như bảng model ở trên, hiển thị ở đây với hai chữ số thập phân; FPS là nghịch đảo của độ trễ chưa làm tròn. Các cột Speedup chia độ trễ của Depth Anything V2 Small (20.99 ms) và Base (55.40 ms) cho độ trễ của YOLO26.
  • Depth Anything V2 Small và Base là các checkpoint ViT-S và ViT-B đã được phát hành.
  • Phép so sánh này chỉ bao gồm độ trễ — hai họ mô hình không được đánh giá ở đây theo một giao thức độ chính xác chung.

Phạm vi độ sâu và phần đầu log-depth#

Phần đầu (head) ước tính độ sâu dự đoán exp(logit)không giới hạn (~0.02–150 m) — và tách biệt hình dạng cảnh khỏi tỷ lệ tuyệt đối: mạng dự đoán một trường log-depth tương đối, và các mét tuyệt đối được thiết lập bằng một phép biến đổi hai tham số riêng biệt (exp(a·log d + b)) được khôi phục khi đánh giá, bằng cách hiệu chuẩn nhẹ, hoặc bằng tinh chỉnh (fine-tuning). Giải pháp thay thế phổ biến, một đầu sigmoid × max_depth bị giới hạn, thay vào đó sẽ ấn định một mức trần cố định vào kiến trúc, do đó bất kỳ độ sâu nào vượt quá max_depth đều bị cắt bớt — điều này cản trở việc huấn luyện và dự đoán các cảnh ở cự ly xa hơn.

Tại sao phần đầu lại không bị giới hạn: bằng chứng qua các phạm vi độ sâu#

A/B có kiểm soát — cùng dữ liệu, cùng lịch trình, chỉ khác phần đầu. Huấn luyện cả hai phần đầu từ đầu trên cùng một hỗn hợp dữ liệu trong nhà (≤10 m) và ngoài trời (≤80 m):

HeadPhạm vi đầu raVal δ1 phạm vi hỗn hợpHành vi huấn luyện
sigmoid × max_depth (10 m)bị giới hạn 0–10 m0.221bão hòa ở epoch 1
log (không giới hạn)0–~150 m0.367 (+66%)cải thiện xuyên suốt

Phần đầu bị giới hạn không thể biểu diễn phần lớn các pixel ngoài trời >10 m, do đó nó ngừng cải thiện gần như ngay lập tức; phần đầu log học hỏi từ toàn bộ phạm vi.

Chế độ lỗi mà nó khắc phục — tinh chỉnh trên một tập dữ liệu, phân tầng theo phạm vi. Tinh chỉnh một phần đầu bị giới hạn (10 m) trên các tập dữ liệu riêng lẻ hoạt động khi dữ liệu phù hợp với giới hạn và bị sụp đổ khi vượt quá nó:

Tập dữ liệu (Dataset)Phạm vi độ sâuδ1 phần đầu bị giới hạn
SUN RGB-D≤10 m0.78 ✅
Hypersimhầu hết ≤10 m0.74 ✅
KITTI~80 m0,08 ❌ (abs_rel ≈ 7,0 — sự sai lệch thang đo 80/10)
vKITTI280 m0.04 ❌

Sự sụt giảm nằm chính xác tại ranh giới mức trần. Phần đầu log không có ranh giới như vậy.

Các model đã phát hành — hiệu suất trên nhiều dải khoảng cách. Nhóm model sử dụng đầu log được xuất xưởng, được đánh giá trên các benchmark trải dài từ 10 m (NYU, iBims-1) đến 80 m (KITTI), với δ1 được căn chỉnh theo tỷ lệ:

Đánh giá hiệu năng (Benchmark)Phạm viYOLO26x-depth (log)bản phát hành bị giới hạn trước đó
NYU Eigen10 m0.9330.934
iBims-110 m0.9610.945
ETH3D~60 m0.9590.931
Make3D~70 m0.3020.296
KITTI Eigen80 m0.9420.891
Trung bình0.8190.799

Cả hai cột đều được giữ nguyên như công bố. Các hàng còn lại được chấm điểm theo giao thức TTA và log-least-squares được mô tả trên các trang tập dữ liệu của chúng, điều mà trình xác thực trong repo này không thực hiện, vì vậy hàng KITTI không thể được đo lường lại trên cùng một cơ sở; trang KITTI chứa các con số được đo lường trên phần chia Eigen 652 khung hình chuẩn.

Những cải thiện lớn nhất nằm ở các tiêu chuẩn ngoài trời phạm vi dài (KITTI, ETH3D) — chính xác nơi giới hạn 10 m cố định gây hại nhiều nhất — trong khi hiệu suất trong nhà vẫn được duy trì.

Huấn luyện (Train)#

Huấn luyện YOLO26n-depth trên tập dữ liệu Depth8 trong 100 epochs với kích thước ảnh 640. Để có danh sách đầy đủ các đối số khả dụng, hãy xem trang Configuration.

Ví dụ
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)

Xem chi tiết đầy đủ về chế độ train tại trang Train.

Tinh chỉnh trên dữ liệu của riêng bạn#

Khi thích ứng một model độ sâu đã được huấn luyện trước sang một tập dữ liệu tùy chỉnh, hãy giảm learning rate và sử dụng trình tối ưu hóa AdamW. Các cài đặt mặc định của trình tối ưu hóa được tinh chỉnh để huấn luyện từ đầu (SGD với lr0=0.01); nếu áp dụng cho một model độ sâu đã hội tụ, chúng có thể ghi đè kiến thức đã huấn luyện trước và làm giảm kết quả — đặc biệt là khi fine-tuning trên một miền đơn lẻ.

Công thức tinh chỉnh được đề xuất
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
)

Mẹo bổ sung:

  • Quá trình tăng cường dữ liệu được kiểm soát bởi các tham số tiêu chuẩn (degrees, translate, scale, shear, perspective, flipud, fliplr, hsv_h, hsv_s, hsv_v); các phép biến dạng hình học và lật được áp dụng giống hệt nhau cho bản đồ độ sâu đi kèm. Để xem công thức chính xác được sử dụng cho trọng số YOLO26-Depth đã phát hành, hãy kiểm tra train_args được lưu trong checkpoint — xem Inspecting YOLO26 Checkpoint Training Args.
  • mosaic, mixup, cutmixcopy_paste không được hỗ trợ cho tác vụ độ sâu. Trình tải tập dữ liệu độ sâu sẽ tự động đặt các xác suất này thành 0, do đó việc truyền chúng sẽ không có hiệu lực. Các phép tăng cường này không được hỗ trợ vì chúng kết hợp nhiều ảnh với nhau, điều này sẽ tạo ra các bản đồ độ sâu cặp không hợp lệ.
  • Mọi dải khoảng cách độ sâu đều hoạt động ngay khi thiết lập. Các model sử dụng đầu log dự đoán độ sâu không giới hạn, do đó chúng thích ứng với dữ liệu khoảng cách ngắn (macro) hoặc khoảng cách dài (ngoài trời/lái xe) mà không cần thay đổi. Việc thiết lập max_depth: trong tệp YAML tập dữ liệu của bạn (tính bằng mét) sẽ giới hạn các pixel GT nào được tính vào các chỉ số đánh giá (validation metrics).
  • Duy trì hiệu suất chung. Nếu bạn cần model giữ độ chính xác trên các cảnh ngoài tập huấn luyện của bạn, hãy trộn một phần nhỏ (~5–10%) ảnh đa mục đích vào dữ liệu huấn luyện của bạn; điều này làm giảm đáng kể sự quên lãng trong quá trình tinh chỉnh.
  • Huấn luyện từ đầu (model=yolo26s-depth.yaml) chỉ khi miền dữ liệu của bạn rất khác biệt và bạn có một tập dữ liệu lớn — khi đó SGD mặc định lr0=0.01 là phù hợp, vì không có trọng số huấn luyện trước nào cần được giữ lại.

Hiệu chuẩn thang đo độ sâu#

Phần đầu độ sâu tách biệt hình dạng (cấu trúc cảnh tương đối) khỏi tỷ lệ (mét tuyệt đối). Nếu một model đã tạo ra độ sâu tương đối tốt trên các cảnh của bạn nhưng các giá trị tuyệt đối bị lệch đối với camera của bạn, bạn có thể hiệu chỉnh tỷ lệ trong vài giây với model.calibrate() — một phép khớp dạng đóng của hàm log-affine hai tham số dựa trên một tập nhãn nhỏ, không cần huấn luyện gradient và không thay đổi trọng số mạng, do đó nó không thể làm giảm cấu trúc tương đối.

Hiệu chuẩn thang đo
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")

Hiệu chuẩn cần độ sâu ground-truth để khớp, vì vậy nó chạy trên một tập dữ liệu có nhãn — đây không phải là việc có thể diễn ra ở bước suy luận mù. Nó khớp và chấm điểm trên chính các pixel mà các chỉ số val đánh giá: GT nằm tại hoặc vượt quá max_depth của tệp YAML tập dữ liệu (mặc định 100 m) sẽ bị loại trừ. Hãy sử dụng nó khi độ sâu tương đối đã tốt và chỉ có tỷ lệ/khoảng cách bị sai; nếu bản thân cấu trúc tương đối cần thay đổi cho miền dữ liệu của bạn, hãy thay thế bằng fine-tune.

Quá trình huấn luyện thực hiện việc này tự động cho bạn: sau khi model.train(...) hoàn tất, các checkpoint tốt nhất và gần nhất sẽ được hiệu chuẩn trên tập validation để chúng xuất ra độ sâu theo tỷ lệ mét ngay lập tức.

Các checkpoint yolo26*-depth.pt được phát hành đi kèm với quá trình hiệu chuẩn này đã được tích hợp sẵn, được khớp trên tập dữ liệu hỗn hợp validation tiền huấn luyện. Đây là một tỷ lệ toàn cục duy nhất trên tất cả các miền, do đó để có độ sâu tuyệt đối chính xác nhất trên một camera hoặc loại cảnh cụ thể, hãy chạy model.calibrate() trên một tập có nhãn nhỏ từ dữ liệu của chính bạn — nó sẽ thay thế cho phần khớp được tích hợp sẵn.

Định dạng tập dữ liệu#

Các tập dữ liệu ước tính độ sâu ghép nối từng ảnh RGB với một tệp độ sâu tương ứng. Các mục tiêu độ sâu được lưu trữ dưới dạng các mảng .npy chứa các giá trị float32 tính bằng mét. Tệp YAML tập dữ liệu trỏ đến một thư mục images/; trình tải sẽ suy ra đường dẫn tệp độ sâu bằng cách thay thế thành phần images bằng depth và thay phần mở rộng của ảnh bằng .npy.

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

Ví dụ, một ảnh tại images/train/scene_001.jpg được ghép nối với một bản đồ độ sâu tại depth/train/scene_001.npy. Xem Depth Estimation Dataset Guide để biết thông tin đặc tả định dạng đầy đủ.

Val#

Đánh giá độ chính xác của một model YOLO26n-depth đã được huấn luyện trên một tập dữ liệu ước tính độ sâu. Truyền rõ ràng data để quá trình validation sử dụng tệp YAML tập dữ liệu dự định. Các trọng số được phát hành được huấn luyện tại imgsz=768, vì vậy hãy validate và predict tại kích thước đó để có độ chính xác tốt nhất.

Ví dụ
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

Dự đoán (Predict)#

Sử dụng model YOLO26n-depth đã huấn luyện để chạy dự đoán trên các ảnh.

Ví dụ
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

Xem chi tiết đầy đủ về chế độ predict tại trang Predict.

Đầu ra kết quả#

Tác vụ ước tính độ sâu YOLO trả về một đối tượng Results cho mỗi ảnh. Mỗi kết quả lưu trữ một bản đồ độ sâu float dày đặc cho toàn bộ ảnh.

Thuộc tínhLoạiKích thướcMô tả
result.depthDepthMap(H,W)Bản đồ độ sâu dày đặc trên từng pixel.
result.depth.datatorch.Tensor(H,W)Các giá trị độ sâu tính bằng mét; gọi .cpu().numpy() để lấy mảng NumPy.
result.boxes--Không có hộp instance.
result.masks--Không có mask thực thể.

Đối với các trường Results dành riêng cho từng tác vụ trên mọi tác vụ, hãy xem phần Predict Results by Task.

Tô màu bản đồ chiều sâu#

Bản đồ chiều sâu thô là một mảng float đơn kênh tính bằng mét — hữu ích cho việc tính toán nhưng khó đọc trực tiếp. Để chuyển đổi thành ảnh màu, hãy sử dụng trình trợ giúp colorize_depth trong ultralytics.utils.plotting, hàm này ánh xạ mảng chiều sâu (H, W) sang ảnh BGR uint8 (H, W, 3) (các pixel không hợp lệ <= 0 được hiển thị màu đen).

result.plot() đã pha trộn việc tô màu này lên ảnh đầu vào sử dụng các giá trị mặc định (cmap="jet", mode="disparity"); hãy gọi trực tiếp colorize_depth khi bạn muốn có một ảnh độ sâu có màu độc lập hoặc một bảng màu (colormap) hoặc chuẩn hóa khác.

Tô màu bản đồ chiều sâu được dự đoán
import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth

model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.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")

Mọi bảng màu đều chạy theo chiều mát/tối → ấm/sáng. mode quyết định đầu nào là gần, và vmin/vmax khóa khoảng cách qua các khung hình để một màu sắc luôn biểu thị cùng một khoảng cách.

Đối sốGiá trịMô tả
cmapjet (mặc định)Xanh dương → xanh lá → đỏ có độ tương phản cao, bảng màu mà result.plot() sử dụng.
cmapinfernoĐen → tím → cam → vàng. Đồng nhất về mặc nhận thức, thân thiện với người mù màu, dễ đọc ở dạng thang độ xám.
cmapspectralĐỏ → vàng → xanh lá → xanh dương (matplotlib Spectral_r).
modedisparity (mặc định)Chuẩn hóa độ sâu nghịch đảo (1/d) giữa phân vị thứ 2 và 98; các giá trị ngoại lai ở vùng ấm gần và xa được hấp thụ.
modemetricChuẩn hóa độ sâu tính bằng mét một cách tuyến tính giữa vminvmax; vùng ấm đánh dấu khoảng cách xa, giúp màu sắc bám sát khoảng cách thực tế.

Xuất (Export)#

Xuất model YOLO26n-depth sang một định dạng khác như ONNX, CoreML, v.v.

Ví dụ
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")

Các định dạng xuất ước tính độ sâu YOLO26 khả dụng được trình bày trong bảng dưới đây. Bạn có thể xuất sang bất kỳ định dạng nào bằng cách sử dụng đối số format, tức là format='onnx' hoặc format='engine'. Bạn có thể predict hoặc validate trực tiếp trên các model đã xuất, tức là yolo predict model=yolo26n-depth.onnx. Các ví dụ sử dụng được hiển thị cho model của bạn sau khi quá trình xuất hoàn tất.

Định dạngĐối số formatMô hìnhMetadataTham số
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, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-depth.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-depth_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-depth_paddle_model/imgsz, batch, device
MNNmnnyolo26n-depth.mnnimgsz, batch, dynamic, quantize, simplify, opset, 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, simplify, opset, 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, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-depth_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-depth.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-depth_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-depth_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

Xem chi tiết đầy đủ về export tại trang Export.

Câu hỏi thường gặp#

  • Chuẩn bị các cặp ảnh RGB và tệp độ sâu .npy, sau đó tạo một tệp YAML tập dữ liệu trỏ đến thư mục images/ của bạn. Trình tải sẽ tìm các tệp độ sâu tự động bằng cách thay thế images bằng depth trong đường dẫn và hoán đổi phần mở rộng ảnh thành .npy.

    Bắt đầu từ trọng số đã huấn luyện trước và sử dụng learning rate thấp với AdamW để quá trình fine-tune giữ lại những gì model đã biết (xem Fine-tuning on your own data để biết lý do tại sao):

    Ví dụ
    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,
    )

    Kiểm tra trang Configuration để biết thêm các đối số khả dụng.

  • Quá trình xác thực (validation) ước tính chiều sâu báo cáo bộ chỉ số được sử dụng bởi Depth Anything và các nghiên cứu về chiều sâu đơn ảnh (monocular-depth) liên quan:

    • delta1 / delta2 / delta3 — tỷ lệ phần trăm pixel mà tỷ lệ giữa chiều sâu dự đoán và chiều sâu thực tế (hoặc nghịch đảo của nó) lần lượt nhỏ hơn 1.25, 1.25², và 1.25³. Chỉ số càng cao càng tốt.
    • abs_rel — sai số tuyệt đối trung bình. Chỉ số càng thấp càng tốt.
    • rmse — sai số bình phương trung bình gốc tính bằng mét. Chỉ số càng thấp càng tốt.
    • silog — sai số logarit bất biến tỷ lệ. Chỉ số càng thấp càng tốt.

    Mỗi dự đoán được căn chỉnh trung vị theo ground truth tương ứng cho mỗi ảnh, mỗi metric được hoàn thiện trên ảnh đó và các kết quả trên từng ảnh đó được lấy trung bình trên tập validation, nhờ đó mọi ảnh có trọng số như nhau bất kể nó chứa bao nhiêu pixel độ sâu hợp lệ. Các ảnh có ít hơn 10 pixel ground truth hợp lệ sẽ bị bỏ qua và không được tính vào mức trung bình đó, vì việc căn chỉnh trung vị của một vài pixel là vô nghĩa; các dự đoán không hữu hạn sẽ được chấm điểm tại các giới hạn độ sâu thay vào đó. Điều này khớp với việc lấy trung bình trên mỗi mẫu và mức tối thiểu 10 pixel được sử dụng bởi Depth Anything V2.

  • Bản đồ độ sâu được lưu trữ dưới dạng một torch.Tensor có shape (H, W) trong đó mỗi giá trị là độ sâu được dự đoán tính bằng mét (sử dụng result.depth.data.cpu().numpy() để lấy mảng float32 NumPy). Truy cập nó thông qua result.depth.data sau khi chạy dự đoán. Bản đồ được căn chỉnh theo độ phân giải ảnh đầu vào.

  • Ultralytics YOLO26 cung cấp các cấu hình YAML tập dữ liệu tích hợp sẵn cho một số tập dữ liệu ước tính độ sâu bao gồm NYU Depth V2, KITTI, Hypersim, SUN RGB-D và ARKitScenes. Xem Depth Estimation Dataset Guide để biết danh sách đầy đủ và chi tiết định dạng.

  • Xác thực một mô hình chiều sâu YOLO26 đã được tiền huấn luyện bằng cách cung cấp tệp YAML tập dữ liệu được sử dụng để đánh giá:

    Ví dụ
    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)
  • Xuất mô hình chiều sâu YOLO26 sang ONNX bằng Python hoặc CLI:

    Ví dụ
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-depth.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    Để biết thêm chi tiết về việc xuất sang các định dạng khác nhau, hãy tham khảo trang Export.

Bình luận