Tổng quan về các dataset ước tính độ sâu#
Ước tính độ sâu đơn ảnh gán một giá trị độ sâu theo mét cho mọi pixel trong ảnh. Các target độ sâu sử dụng PNG grayscale 16-bit được scale hoặc mảng NPY dấu phẩy động theo mét.
Hướng dẫn này giải thích format dataset được các model ước tính độ sâu Ultralytics YOLO sử dụng và liệt kê các cấu hình dataset tích hợp sẵn cho việc training và validation.
Format Dataset được hỗ trợ#
Format bản đồ độ sâu#
Mỗi sample training gồm một ảnh RGB và một file độ sâu đi kèm. Các giá trị PNG được chia cho depth_scale ở cấp dataset tùy chọn để tạo ra đơn vị mét. Giá trị mặc định là 1000, vì vậy giá trị 1500 biểu thị 1.5 mét. Code 0 biểu thị giá trị không hợp lệ; PNG không cần metadata nhúng.
- Các file độ sâu sử dụng
.png(ưu tiên) hoặc.npy. Các map PNG phải là ảnh grayscale uint16 2D. Các mảng NPY phải là mảng 2D dấu phẩy động, với giá trị theo mét. - Chỉ đặt
depth_scalekhi PNG không sử dụng quy ước mặc định tính theo millimeter. Ví dụ, KITTI sử dụng256và Virtual KITTI 2 sử dụng100. - Mỗi file độ sâu phải có cùng stem với file ảnh tương ứng (ví dụ:
scene_001.pngđi kèm vớiscene_001.jpg). - Các map độ sâu có thể nhỏ hơn ảnh RGB tương ứng miễn là giữ nguyên aspect ratio; quá trình training sẽ resize chúng trong memory.
- Dataset loader tìm các file độ sâu bằng cách thay thế component directory
imagesbằngdepth, ưu tiên.pngvà fallback về.npy. - Các pixel có độ sâu
≤ 0được xem là không hợp lệ và bị loại khỏi quá trình tính loss và metric.
Vì code 0 được dành riêng cho các pixel không hợp lệ, PNG uint16 cung cấp 65.535 giá trị độ sâu dương. Scale kiểm soát cả độ chính xác và phạm vi:
| Quy ước | depth_scale | Độ phân giải | Độ sâu tối đa |
|---|---|---|---|
| Mặc định / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
Đây là các giới hạn lưu trữ, không phải giới hạn training được khuyến nghị. Dataset có thể thiết lập max_depth nhỏ hơn một cách độc lập để calibration loss hoặc evaluation.
Layout tiêu chuẩn giữ ảnh và các map độ sâu trong những thư mục song song:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Ví dụ, một ảnh tại images/train/scene_001.jpg được ghép với một map độ sâu tại depth/train/scene_001.png.
Định dạng YAML của dataset#
Các dataset ước tính độ sâu được cấu hình bằng file YAML. Các field chính là:
| Key | Mô tả |
|---|---|
path | Thư mục gốc của bộ dữ liệu. |
train | Đường dẫn ảnh huấn luyện tương đối so với path, hoặc một đường dẫn tuyệt đối. |
val | Đường dẫn ảnh validation tương đối so với path, hoặc một đường dẫn tuyệt đối. |
test | Đường dẫn ảnh test tùy chọn. |
nc | Số lớp — luôn là 1 đối với ước tính độ sâu. |
names | Ánh xạ tên lớp — luôn là {0: depth}. |
depth_scale | Số đơn vị PNG trên mỗi mét, tùy chọn; mặc định là 1000. |
# 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.zipCách sử dụng#
Train model ước tính độ sâu YOLO26 bằng Python hoặc CLI:
from ultralytics import YOLO
# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")
# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Các dataset được hỗ trợ#
Các model ước lượng độ sâu YOLO26 được huấn luyện trước trên một tập hợp đa dạng gồm nhiều dataset (khoảng 2,19 triệu ảnh) bao gồm phạm vi trong nhà (≤10 m) đến ngoài trời (khoảng 80 m), sau đó được đánh giá trên năm benchmark, theo phương pháp zero-shot trên tất cả ngoại trừ KITTI Eigen. Mỗi dataset có một trang chuyên biệt và một số dataset được lưu trữ trên Ultralytics Platform để duyệt và huấn luyện trên đám mây.
Debugging
- Depth8 — 8 ảnh SUN RGB-D trong archive 1.3 MB tự động download, phục vụ kiểm thử pipeline nhanh
Nguồn pretraining
- ARKitScenes — trong nhà thực tế, Apple ARKit LiDAR (nguồn thực tế lớn nhất)
- SUN RGB-D — trong nhà thực tế, RGB-D đa cảm biến
- DIODE — trong nhà + ngoài trời thực tế, ground truth dày đặc từ máy quét laser
- Hypersim — trong nhà tổng hợp với độ chân thực quang học
- TartanAir — tổng hợp, môi trường đa dạng
- Virtual KITTI 2 — lái xe ngoài trời tổng hợp
- KITTI — lái xe ngoài trời thực tế, Velodyne LiDAR (đồng thời là benchmark evaluation)
- ImageNet (gán nhãn giả) — tập distillation được gán nhãn giả, là nguồn đơn lẻ lớn nhất
Benchmark evaluation
- NYU Depth V2 — benchmark trong nhà chính
- KITTI Eigen — benchmark lái xe ngoài trời
- ETH3D — trong nhà + ngoài trời với độ chính xác cao
- Make3D — ngoài trời, out-of-distribution
- iBims-1 — trong nhà chất lượng cao (cạnh và bề mặt phẳng)
Độ chính xác của từng model trên các benchmark này và các pretrained weight có thể download được liệt kê trên trang tác vụ Ước tính độ sâu. Một YAML dataset có field train liệt kê nhiều thư mục ảnh sẽ kết hợp các nguồn này để training hỗn hợp quy mô lớn.
Thêm bộ dữ liệu của riêng bạn#
- Lưu ảnh RGB trong các thư mục split như
images/trainvàimages/val. - Lưu một PNG hoặc NPY độ sâu cho mỗi ảnh trong các thư mục
depth/trainvàdepth/valtương ứng, sử dụng cùng file stem với ảnh. Sử dụngsave_depth_png()để chuyển các mảng theo mét thành PNG millimeter compact. - Đảm bảo các giá trị độ sâu sau khi decode được tính theo mét và các pixel không hợp lệ hoặc bị thiếu sử dụng
0hoặc giá trị âm. - Tạo YAML bộ dữ liệu với
path,train,val,nc: 1vànames: {0: depth}.
path: path/to/my-depth-dataset
train: images/train
val: images/val
nc: 1
names:
0: depth
# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000FAQ#
Sử dụng PNG grayscale 16-bit được scale cho các dataset compact. Theo mặc định, mỗi bước số nguyên tương ứng với một millimeter; đặt
depth_scaletrong YAML dataset để sử dụng scale khác.ultralytics.data.utils.save_depth_png()chuyển các mảng theo mét sang format mặc định. Các map NPY dấu phẩy động theo mét cũng hoạt động trực tiếp.Các pixel có giá trị độ sâu
≤ 0được xem là không hợp lệ và bị mask khỏi cả quá trình tính loss lẫn evaluation metric. Điều này bao gồm nhiễu cảm biến, vùng bầu trời và các bề mặt phản chiếu nơi không thể đo độ sâu một cách đáng tin cậy.Validation ước tính độ sâu báo cáo bộ metric Depth Anything tiêu chuẩn:
- delta1 / delta2 / delta3 — phần trăm pixel nằm trong các ngưỡng 1.25×, 1.25²×, 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.
Có. Mỗi file độ sâu
.pnghoặc.npyphải có cùng stem với ảnh tương ứng. Loader suy ra path độ sâu bằng cách thay thế component directoryimagesbằngdepth, ưu tiên PNG và fallback về NPY. Các ảnh bị thiếu file độ sâu hoặc có file không thể đọc sẽ bị loại trong quá trình quét dataset được cache, kèm cảnh báo.