Ước tính chiều sâu đơn mắt với Ultralytics YOLO#
Ước lượng độ sâu đơn ảnh dự đoán bản đồ độ sâu theo 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, biểu thị khoảng cách ước tính từ camera đến điểm bề mặt đó.
Đầu ra của model độ sâu là một bản đồ float dày đặc có hình dạng (H, W), được căn chỉnh với ảnh đầu vào. Biểu diễn theo từng pixel này khiến ước lượng độ sâu đơn ảnh phù hợp cho 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 cần bố cục không gian từ một camera duy nhất.
Sử dụng task=depth hoặc tác vụ CLI yolo depth để ước lượng độ sâu đơn ảnh. 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 pretrained trên một tập trộn đa dataset quy mô lớn (trong nhà + ngoài trời, ~2.19M ảnh) được hiển thị bên dưới. Các cột chỉ số được báo cáo trên phần tách kiểm thử Eigen của NYU Depth V2.
Models được tự động tải xuống từ bản phát hành mới nhất của Ultralytics trong lần sử dụng đầu tiên.
| Model | kích thước (pixel) | delta1NYU | abs_relNYU | rmseNYU | Tốc độ CPU ONNX (ms) | Tốc độ T4 TensorRT10 (ms) | tham số (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 272.0 ± 27.2 | 2.7 ± 0.1 | 6.3 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 393.7 ± 13.1 | 3.8 ± 0.0 | 13.2 | 68.0 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 621.5 ± 49.7 | 6.0 ± 0.1 | 23.3 | 130.4 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 821.9 ± 50.7 | 7.7 ± 0.1 | 27.7 | 157.0 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 1240.9 ± 73.3 | 13.6 ± 0.2 | 57.0 | 301.7 |
- delta1NYU là tỷ lệ phần trăm pixel trong đó độ sâu dự đoán nằm trong hệ số 1.25 so với ground truth, trên phần tách kiểm thử Eigen của NYU Depth V2 (654 ảnh) với TTA đa tỷ lệ + lật ngang và căn chỉnh bình phương tối thiểu theo log.
- Độ chính xác một tỷ lệ không có TTA có thể tái lập bằng
yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0(thaymodel=cho từng kích thước), sử dụng căn chỉnh median (chỉ theo scale) và cho điểm 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 các giá trị độ sâu dự đoán và ground truth.
- rmse là căn bậc hai của sai số bình phương trung bình, tính bằng mét.
- Tốc độ là độ trễ chỉ khi inference (không 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 sau warmup. CPU ONNX là ONNX Runtime fp32 trên Intel Xeon 32 lõi (Skylake); T4 TensorRT10 là TensorRT fp16 trên Tesla T4. - params và FLOPs được đo ở 768×768, độ phân giải huấn luyện của các weight được phát hành.
Xem bản xem trước YOLO27 chưa phát hành để biết kết quả sơ bộ về NYU Depth V2.
So sánh tốc độ 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 ảnh. Backbone DINOv2 vision transformer và decoder DPT của model này đòi hỏi nhiều compute, vì vậy trên cùng Tesla T4 với TensorRT fp16, model Depth Anything V2 nhỏ nhất được phát hành chậm hơn mọi model độ sâu YOLO26 — bao gồm YOLO26x-depth, vốn có số tham số nhiều hơn gấp đôi.
Ở mức ~768 px — imgsz=768 đối với YOLO26, là độ phân giải mà weight được phát hành của model này được huấn luyện, và 770 px đối với Depth Anything V2, có backbone DINOv2 yêu cầu bội số của kích thước patch là 14:
| Model | params (M) | FLOPs (B) | T4 TensorRT10 (ms) | FPS | Tăng tốc so với V2 Small | Tăng tốc so với V2 Base |
|---|---|---|---|---|---|---|
| Depth Anything V2 Base | 97.5 | 1025.5 | 55.40 | 18.1 | — | — |
| Depth Anything V2 Small | 24.8 | 346.9 | 20.99 | 47.6 | — | — |
| YOLO26x-depth | 57.0 | 301.7 | 13.57 | 73.7 | 1.5× | 4.1× |
| YOLO26l-depth | 27.7 | 157.0 | 7.68 | 130.2 | 2.7× | 7.2× |
| YOLO26m-depth | 23.3 | 130.4 | 6.00 | 166.7 | 3.5× | 9.2× |
| YOLO26s-depth | 13.2 | 68.0 | 3.82 | 261.6 | 5.5× | 14.5× |
| YOLO26n-depth | 6.3 | 46.9 | 2.73 | 365.8 | 7.7× | 20.3× |
Ở mức ~640 px — lần lượt là imgsz=640 và 644 px — thứ tự không thay đổi, và YOLO26n-depth nhanh hơn Depth Anything V2 Small 5.9×:
| Model | T4 TensorRT10 (ms) | FPS |
|---|---|---|
| Depth Anything V2 Base | 35.10 | 28.5 |
| Depth Anything V2 Small | 13.62 | 73.4 |
| YOLO26x-depth | 10.26 | 97.5 |
| YOLO26l-depth | 6.14 | 162.8 |
| YOLO26m-depth | 4.71 | 212.1 |
| YOLO26s-depth | 3.08 | 324.4 |
| YOLO26n-depth | 2.29 | 436.9 |
- Độ trễ chỉ tính inference,
batch=1, TensorRT fp16 trên Tesla T4 — cùng harness với bảng model ở trên, được 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 Tăng tốc 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 chỉ bao quát độ trễ — hai họ model không được đánh giá ở đây theo một protocol độ chính xác chung.
Phạm vi độ sâu và head log-depth#
Head độ sâu dự đoán exp(logit) — không giới hạn (~0.02–150 m) — và tách hình dạng cảnh khỏi scale tuyệt đối: network dự đoán một trường log-depth tương đối, còn 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 calibration nhẹ hoặc fine-tuning. Phương án phổ biến khác, head sigmoid × max_depth có giới hạn, đưa một ngưỡng trần cố định vào architecture, vì vậy mọi độ sâu vượt quá max_depth đều bị cắt — khiến việc huấn luyện và dự đoán các cảnh ở khoảng cách xa hơn không thể thực hiện.
Vì sao head không bị giới hạn: bằng chứng trên các phạm vi độ sâu#
A/B có kiểm soát — cùng dữ liệu, cùng lịch huấn luyện, chỉ khác head. Huấn luyện cả hai head từ đầu trên cùng một tập trộn dữ liệu trong nhà (≤10 m) và ngoài trời (≤80 m):
| Head | Phạm vi đầu ra | δ1 validation trên phạm vi trộn | Hành vi huấn luyện |
|---|---|---|---|
sigmoid × max_depth (10 m) | giới hạn 0–10 m | 0.221 | bão hòa ở epoch 1 |
log (không giới hạn) | 0–~150 m | 0.367 (+66%) | cải thiện xuyên suốt |
Head có giới hạn không thể biểu diễn phần lớn pixel ngoài trời ở >10 m, nên gần như lập tức dừng cải thiện; head log học từ toàn bộ phạm vi.
Chế độ lỗi được khắc phục — fine-tuning trên từng dataset, phân tầng theo phạm vi. Fine-tuning head có giới hạn (10 m) trên từng dataset hoạt động khi dữ liệu nằm trong giới hạn và sụp đổ khi vượt quá giới hạn đó:
| Dataset | Phạm vi độ sâu | δ1 của head có giới hạn |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | chủ yếu ≤10 m | 0.74 ✅ |
| KITTI | ~80 m | 0.08 ❌ (abs_rel ≈ 7.0 — sai lệch scale 80/10) |
| vKITTI2 | 80 m | 0.04 ❌ |
Sự sụp đổ xảy ra chính xác tại ranh giới giới hạn. Head log không có ranh giới như vậy.
Các model được phát hành — hiệu năng trên nhiều phạm vi. Họ model sử dụng head log được phát hành, đá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 scale:
| Benchmark | Phạm vi | YOLO26x-depth (log) | bản phát hành trước có giới hạn |
|---|---|---|---|
| NYU Eigen | 10 m | 0.933 | 0.934 |
| iBims-1 | 10 m | 0.961 | 0.945 |
| ETH3D | ~60 m | 0.959 | 0.931 |
| Make3D | ~70 m | 0.302 | 0.296 |
| KITTI Eigen | 80 m | 0.942 | 0.891 |
| Trung bình | — | 0.819 | 0.799 |
Cả hai cột đều giữ nguyên như đã công bố. Các hàng khác được chấm điểm bằng protocol TTA và bình phương tối thiểu theo log được mô tả trên các trang dataset tương ứng, nhưng validator trong repo này không triển khai protocol đó, vì vậy hàng KITTI không thể được đo lại trên cùng cơ sở; trang KITTI cung cấp các số liệu được đo trên phần tách Eigen chuẩn gồm 652 frame.
Mức tăng lớn nhất xuất hiện trên các benchmark ngoài trời có phạm vi xa hơn (KITTI, ETH3D) — chính là nơi ngưỡng trần cố định 10 m gây ảnh hưởng nghiêm trọng nhất — trong khi hiệu năng trong nhà vẫn được duy trì.
Huấn luyện#
Huấn luyện YOLO26n-depth trên dataset Depth8 trong 100 epoch với kích thước ảnh 640. Xem danh sách đầy đủ các tham số khả dụng trên trang 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)Xem chi tiết đầy đủ về mode train trên trang Train.
Fine-tuning trên dữ liệu riêng#
Khi điều chỉnh một model độ sâu pretrained cho dataset tùy chỉnh, hãy giảm learning rate và sử dụng optimizer AdamW. Các thiết lập optimizer mặc định được tinh chỉnh cho việc huấn luyện từ đầu (SGD với lr0=0.01); khi áp dụng cho model độ sâu đã hội tụ, chúng có thể ghi đè kiến thức pretrained và làm giảm kết quả — đặc biệt khi fine-tuning trên một domain duy nhấ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:
- Augmentation được kiểm soát bằng các args chuẩn (
degrees,translate,scale,shear,perspective,flipud,fliplr,hsv_h,hsv_s,hsv_v); phép biến dạng hình học và các thao tác lật được áp dụng giống hệt cho bản đồ độ sâu đi kèm. Để xem công thức chính xác được sử dụng cho weight YOLO26-Depth đã phát hành, hãy kiểm tratrain_argsđược lưu trong checkpoint — xem Inspecting YOLO26 Checkpoint Training Args. mosaic,mixup,cutmixvàcopy_pastechưa được triển khai cho độ sâu. Data loader độ sâu tự động đặt các xác suất này về 0, vì vậy việc truyền chúng không có tác dụng. Các augmentation này không được hỗ trợ vì chúng kết hợp nhiều ảnh, dẫn đến các bản đồ độ sâu đi kèm không hợp lệ.- Mọi phạm vi độ sâu đều hoạt động ngay lập tức. Các model sử dụng head
logdự đoán độ sâu không giới hạn, nên thích ứng với dữ liệu phạm vi gần (macro) hoặc phạm vi xa (ngoài trời/lái xe) mà không cần thay đổi. Việc thiết lậpmax_depth:trong YAML của dataset (tính bằng mét) sẽ giới hạn những pixel GT được tính vào các metric validation. - Duy trì hiệu năng tổng quát. Nếu cần model tiếp tục chính xác trên các cảnh nằm ngoài tập huấn luyện, hãy trộn một phần nhỏ (~5–10%) ảnh đa dạng, phục vụ mục đích chung, vào dữ liệu huấn luyện; điều này giúp giảm đáng kể hiện tượng quên trong quá trình fine-tuning.
- Huấn luyện từ đầu (
model=yolo26s-depth.yaml) chỉ khi domain của bạn rất khác biệt và bạn có một dataset lớn — khi đó SGD mặc địnhlr0=0.01là phù hợp, vì không có pretrained weights nào cần được bảo toàn.
Hiệu chỉnh scale độ sâu#
Head độ sâu tách hình dạng (cấu trúc cảnh tương đối) khỏi scale (mét tuyệt đối). Nếu 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 không phù hợp với camera, bạn có thể hiệu chỉnh scale trong vài giây bằng model.calibrate() — một phép khớp dạng đóng log-affine hai tham số trên một tập nhỏ có nhãn, không cần huấn luyện gradient và không thay đổi weight của network, nên không thể làm suy giảm cấu trúc tương đối.
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 depth ground truth để khớp, vì vậy quy trình chạy trên một split đã gán nhãn — không thể thực hiện trong quá trình suy luận mù. Quy trình khớp và tính điểm trên cùng các pixel mà các metric val đánh giá: GT tại hoặc vượt quá max_depth của dataset YAML (mặc định 100 m) sẽ bị loại trừ. Sử dụng khi relative depth đã tốt và chỉ scale/range bị sai; nếu chính cấu trúc tương đối cần thay đổi cho domain của bạn, hãy fine-tune thay thế.
Training tự động thực hiện việc này: sau khi model.train(...) hoàn tất, các checkpoint tốt nhất và cuối cùng được hiệu chuẩn trên validation set để xuất depth đã scale theo metric ngay từ đầu.
Các checkpoint yolo26*-depth.pt được phát hành đã tích hợp sẵn hiệu chuẩn này, được khớp trên pretraining validation mix. Đây là một scale toàn cục duy nhất trên tất cả domain, vì vậy để có absolute depth 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 split nhỏ đã gán nhãn từ dữ liệu của riêng bạn — thao tác này thay thế phép khớp tích hợp sẵn.
Định dạng dataset#
Các dataset depth estimation ghép mỗi ảnh RGB với một depth PNG uint16 đã scale hoặc depth map NPY floating-point tính bằng mét. Theo mặc định, các giá trị PNG sử dụng millimeter; dataset dùng quy ước khác sẽ thiết lập depth_scale trong YAML. Loader suy ra path của depth bằng cách thay thế component images bằng depth, ưu tiên .png và fallback về .npy.
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Ví dụ, ảnh tại images/train/scene_001.jpg được ghép với depth map tại depth/train/scene_001.png. Xem Depth Estimation Dataset Guide để biết đầy đủ đặc tả định dạng.
Val#
Xác thực accuracy của model YOLO26n-depth đã train trên một dataset depth estimation. Truyền tường minh data để validation sử dụng đúng dataset YAML. Các weight được phát hành được train ở imgsz=768, vì vậy hãy validate và predict ở size đó để đạt accuracy tốt nhất.
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 errorPredict#
Sử dụng model YOLO26n-depth đã train để chạy prediction trên các ảnh.
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), metersXem đầy đủ chi tiết về mode predict trên trang Predict.
Output kết quả#
YOLO depth estimation trả về một object Results cho mỗi ảnh. Mỗi result lưu một depth map float dense cho toàn bộ ảnh.
| Thuộc tính | Kiểu | Shape | Mô tả |
|---|---|---|---|
result.depth | DepthMap | (H,W) | Depth map dense theo từng pixel. |
result.depth.data | torch.Tensor | (H,W) | Các giá trị depth tính bằng mét; gọi .cpu().numpy() để lấy NumPy. |
result.boxes | - | - | Không có bounding box của instance. |
result.masks | - | - | Không có mask của instance. |
Để xem các field Results dành riêng cho từng task trên mọi task, hãy xem phần Predict Results by Task.
Tô màu depth map#
Depth map thô là một mảng float một kênh tính bằng mét — hữu ích cho tính toán nhưng khó đọc trực tiếp. Để chuyển nó thành ảnh màu, hãy sử dụng helper colorize_depth trong ultralytics.utils.plotting, helper này ánh xạ mảng depth (H, W) thành ảnh BGR (H, W, 3) uint8 (các pixel không hợp lệ <= 0 được hiển thị màu đen).
result.plot() đã blend phần tô màu này lên ảnh đầu vào bằng các giá trị mặc định (cmap="jet", mode="disparity"); gọi trực tiếp colorize_depth khi bạn muốn một ảnh depth đã tô màu độc lập hoặc muốn colormap hay normalization khác.
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 colormap đều chạy từ lạnh/tối → ấm/sáng. mode quyết định đầu nào biểu thị vùng gần, còn vmin/vmax cố định range giữa các frame để một màu luôn biểu thị cùng một khoảng cách.
| Đối số | Giá trị | Mô tả |
|---|---|---|
cmap | jet (mặc định) | Xanh dương → xanh lá → đỏ có độ tương phản cao, là palette mà result.plot() sử dụng. |
cmap | inferno | Đen → tím → cam → vàng. Đồng đều về cảm nhận, thân thiện với người mù màu và dễ đọc ở thang xám. |
cmap | spectral | Đỏ → vàng → xanh lá → xanh dương (matplotlib Spectral_r). |
mode | disparity (mặc định) | Chuẩn hóa inverse depth (1/d) giữa percentile thứ 2 và 98; các outlier gần và xa được đánh dấu bằng màu ấm sẽ được hấp thụ. |
mode | metric | Chuẩn hóa depth tính bằng mét theo tuyến tính giữa vmin và vmax; màu ấm biểu thị vùng xa, vì vậy màu sắc bám sát khoảng cách thực. |
Export#
Export model YOLO26n-depth sang định dạng khác như ONNX, CoreML, v.v.
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 export depth estimation khả dụng của YOLO26 được liệt kê trong bảng dưới đây. Bạn có thể export sang bất kỳ định dạng nào bằng argument format, chẳng hạn format='onnx' hoặc format='engine'. Bạn có thể predict hoặc validate trực tiếp trên model đã export, chẳng hạn yolo predict model=yolo26n-depth.onnx. Các ví dụ sử dụng cho model của bạn sẽ được hiển thị sau khi export hoàn tất.
| Định dạng | Argument format | Model | Metadata | Arguments |
|---|---|---|---|---|
| PyTorch | - | yolo26n-depth.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-depth.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-depth.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-depth_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-depth.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-depth.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-depth_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-depth_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-depth_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-depth_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-depth_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-depth_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-depth_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-depth.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-depth_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-depth_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-depth.aimodel | ✅ | imgsz, batch, quantize |
nms=None mặc định sử dụng đầu ra thô cho NMS bên ngoài. Thiết lập nms=False để chọn phần đầu không có NMS khả dụng; các định dạng không được hỗ trợ sẽ quay lại đường dẫn đầu ra gốc của chúng. Các mục nms ở trên xác định các định dạng có thể nhúng NMS bằng nms=True.
Xem đầy đủ chi tiết về export trên trang Export.
FAQ#
Chuẩn bị các ảnh RGB đi kèm với PNG depth 16-bit hoặc depth map NPY floating-point tính bằng mét, sau đó tạo dataset YAML trỏ đến thư mục
images/. Loader tự động tìm các file depth bằng cách thay thếimagesbằngdepthtrong path, ưu tiên.pngvà fallback về.npy.Bắt đầu từ pretrained weights và sử dụng learning rate thấp với AdamW để fine-tune vẫn giữ lại những gì model đã học (xem Fine-tuning on your own data để biết lý do):
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, )Xem trang Configuration để biết thêm các argument khả dụng.
Validation depth estimation báo cáo bộ metric được Depth Anything và các công trình monocular depth liên quan sử dụng:
- delta1 / delta2 / delta3 — phần trăm pixel có tỷ lệ giữa depth dự đoán và ground-truth depth (hoặc nghịch đảo của tỷ lệ này) nhỏ hơn lần lượt 1.25, 1.25² và 1.25³. Giá trị cao hơn tốt hơn.
- abs_rel — lỗi tương đối tuyệt đối trung bình. Giá trị thấp hơn tốt hơn.
- rmse — căn bậc hai của sai số bình phương trung bình, tính bằng mét. Giá trị thấp hơn tốt hơn.
- silog — lỗi logarithmic bất biến theo scale. Giá trị thấp hơn tốt hơn.
Mỗi prediction được median-align với ground truth tương ứng theo từng ảnh, mỗi metric được hoàn tất trên ảnh đó, rồi các kết quả theo từng ảnh được lấy trung bình trên validation set, vì vậy mọi ảnh có trọng số như nhau bất kể chứa bao nhiêu pixel depth 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 đưa vào giá trị trung bình đó, vì việc căn chỉnh median của một vài pixel là vô nghĩa; thay vào đó, các prediction không hữu hạn được tính điểm tại các depth bound. Điều này khớp với cách lấy trung bình theo từng sample và ngưỡng 10 pixel được Depth Anything V2 sử dụng.
Depth map được lưu dưới dạng
torch.Tensorcó shape(H, W), trong đó mỗi giá trị là depth dự đoán tính bằng mét (sử dụngresult.depth.data.cpu().numpy()để lấy mảngfloat32của NumPy). Truy cập depth map quaresult.depth.datasau khi chạy prediction. Map được căn chỉnh theo resolution của ảnh đầu vào.Ultralytics YOLO26 cung cấp các cấu hình dataset YAML tích hợp sẵn cho một số dataset depth estimation, 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.
Validate pretrained model depth YOLO26 bằng cách cung cấp dataset YAML đượ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)Export model depth 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 export sang nhiều định dạng khác nhau, hãy tham khảo trang Export.