Tổng quan về các tập dữ liệu ước tính độ sâu#
Ước tính độ sâu đơn ảnh gán giá trị độ sâu tính bằng mét cho từng pixel trong ảnh. Target độ sâu sử dụng PNG thang xám 16-bit đã scale hoặc mảng NPY dấu phẩy động, với giá trị tính bằng mét.
Hướng dẫn này giải thích định dạng tập dữ liệu được các model ước tính độ sâu Ultralytics YOLO sử dụng và liệt kê các cấu hình tập dữ liệu tích hợp sẵn để huấn luyện và validation.
Định dạng tập dữ liệu được hỗ trợ#
Định dạng bản đồ độ sâu#
Mỗi mẫu huấn luyện gồm một ảnh RGB và một tệp độ sâu tương ứng. Giá trị PNG được chia cho depth_scale tùy chọn ở cấp tập dữ liệu để chuyển thành mét. Giá trị mặc định là 1000, vì vậy giá trị 1500 biểu thị 1.5 mét. Mã 0 biểu thị giá trị không hợp lệ; PNG không cần metadata nhúng.
- Tệp độ sâu dùng định dạng
.png(ưu tiên) hoặc.npy. Bản đồ PNG phải là ảnh thang xám uint16 2D. Mảng NPY phải là mảng dấu phẩy động 2D, với giá trị tính bằng mét. - Chỉ đặt
depth_scalekhi PNG không sử dụng quy ước mặc định tính bằng milimét. Ví dụ: KITTI dùng256, còn Virtual KITTI 2 dùng100. - Mỗi tệp độ sâu nên có cùng tên gốc với tệp ảnh tương ứng (ví dụ:
scene_001.pngghép vớiscene_001.jpg). - Bản đồ độ sâu có thể nhỏ hơn ảnh RGB miễn là tỷ lệ khung hình khớp; quá trình huấn luyện sẽ resize chúng trong bộ nhớ.
- Trình tải tập dữ liệu tìm tệp độ sâu bằng cách thay thành phần thư mục
imagesbằngdepth, ưu tiên.pngvà dùng.npynếu không tìm thấy. - 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ì mã 0 được dành riêng cho pixel không hợp lệ, PNG uint16 cung cấp 65,535 giá trị độ sâu dương. Hệ số scale kiểm soát cả độ chính xác lẫn 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à giới hạn lưu trữ, không phải giới hạn huấn luyện được khuyến nghị. Tập dữ liệu có thể đặt riêng max_depth ở mức thấp hơn để hiệu chỉnh loss hoặc đánh giá.
Bố cục tiêu chuẩn lưu ảnh và bản đồ độ sâu trong các thư mục song song:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Ví dụ: ảnh tại images/train/scene_001.jpg được ghép với bản đồ độ sâu tại depth/train/scene_001.png.
Định dạng YAML của dataset#
Các tập dữ liệu ước tính độ sâu được cấu hình bằng tệp YAML. Các trường chính gồm:
| Khóa | Mô tả |
|---|---|
path | Thư mục gốc của dataset. |
train | Đường dẫn ảnh huấn luyện tương đối so với path hoặc đường dẫn tuyệt đối. |
val | Đường dẫn ảnh xác thực tương đối so với path hoặc đường dẫn tuyệt đối. |
test | Đường dẫn ảnh kiểm tra không bắt buộc. |
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#
Huấn luyện model ước tính độ sâu YOLO26 bằng Python hoặc CLI:
from ultralytics import YOLO
# Tải model độ sâu đã huấn luyện trước
model = YOLO("yolo26n-depth.pt")
# Huấn luyện trên tập dữ liệu NYU Depth V2
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Dataset được hỗ trợ#
Các model độ sâu YOLO26 được huấn luyện trước trên tập hợp nhiều bộ dữ liệu đa dạng (~2.19M ảnh), trải từ môi trường trong nhà (≤10 m) đến ngoài trời (~80 m), sau đó được đánh giá trên năm benchmark theo phương thức zero-shot, ngoại trừ KITTI Eigen. Mỗi tập dữ liệu có trang riêng; một số tập được lưu trữ trên Ultralytics Platform để duyệt và huấn luyện trên cloud.
Gỡ lỗi
- Depth8 — 8 ảnh SUN RGB-D trong tệp lưu trữ 1.3 MB tự động tải xuống, dùng để kiểm thử nhanh pipeline
Nguồn dữ liệu huấn luyện trước
- ARKitScenes — dữ liệu thực trong nhà, LiDAR Apple ARKit (nguồn dữ liệu thực lớn nhất)
- SUN RGB-D — dữ liệu thực trong nhà, RGB-D đa cảm biến
- DIODE — dữ liệu thực trong nhà và ngoài trời, ground truth dày đặc từ máy quét laser
- Hypersim — dữ liệu tổng hợp trong nhà, chân thực như ảnh chụp
- TartanAir — dữ liệu tổng hợp, môi trường đa dạng
- Virtual KITTI 2 — dữ liệu tổng hợp về lái xe ngoài trời
- KITTI — dữ liệu thực về lái xe ngoài trời, LiDAR Velodyne (cũng là benchmark đánh giá)
- ImageNet (gán nhãn giả) — tập dữ liệu chưng cất được gán nhãn giả, nguồn đơn lẻ lớn nhất
Benchmark đánh giá
- NYU Depth V2 — benchmark trong nhà chính
- KITTI Eigen — benchmark lái xe ngoài trời
- ETH3D — độ chính xác cao trong nhà và ngoài trời
- Make3D — ngoài trời, ngoài phân phối
- iBims-1 — dữ liệu 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à trọng số đã huấn luyện trước có thể tải xuống được liệt kê trên trang tác vụ Ước tính độ sâu. Tệp YAML tập dữ liệu có trường train liệt kê nhiều thư mục ảnh sẽ kết hợp các nguồn này để huấn luyện hỗn hợp quy mô lớn.
Thêm dataset của riêng bạn#
- Lưu ảnh RGB trong các thư mục phân tách như
images/trainvàimages/val. - Lưu một tệp độ sâu PNG hoặc NPY cho mỗi ảnh trong các thư mục
depth/trainvàdepth/valtương ứng, dùng cùng tên gốc với ảnh. Dùngsave_depth_png()để chuyển mảng tính bằng mét thành PNG milimét gọn nhẹ. - Đảm bảo các giá trị độ sâu sau khi giải mã được tính bằng mét và pixel không hợp lệ hoặc bị thiếu sử dụng
0hoặc giá trị âm. - Tạo YAML dataset 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: 1000Câu hỏi thường gặp#
Dùng PNG thang xám 16-bit đã scale để lưu trữ tập dữ liệu gọn nhẹ. Theo mặc định, mỗi bước số nguyên tương ứng một milimét; đặt
depth_scaletrong YAML tập dữ liệu để dùng thang đo khác.ultralytics.data.utils.save_depth_png()chuyển mảng tính bằng mét sang định dạng mặc định. Bản đồ NPY dấu phẩy động tính bằng mét cũng có thể dùng trực tiếp.Các pixel có giá trị độ sâu
≤ 0được xem là không hợp lệ và bị loại khỏi cả quá trình tính loss lẫn đánh giá metric. Cách xử lý này áp dụng cho nhiễu cảm biến, vùng trời và các bề mặt phản chiếu—những 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 tiêu chuẩn của Depth Anything:
- delta1 / delta2 / delta3 — tỷ lệ pixel nằm trong các ngưỡng 1.25×, 1.25²×, 1.25³×. Giá trị cao hơn là tốt hơn.
- abs_rel — sai số tương đối tuyệt đối trung bình. Giá trị càng thấp càng tốt.
- rmse — căn bậc hai của sai số bình phương trung bình, đơn vị mét. Giá trị càng thấp càng tốt.
- silog — sai số logarit bất biến theo scale. Giá trị càng thấp càng tốt.
Có. Mỗi tệp độ sâu
.pnghoặc.npyphải có cùng tên gốc với ảnh tương ứng. Trình tải xác định đường dẫn độ sâu bằng cách thay thành phần thư mụcimagesbằngdepth, ưu tiên PNG và dùng NPY nếu không tìm thấy. Ảnh thiếu tệp độ sâu hoặc có tệp không đọc được sẽ bị loại trong quá trình quét tập dữ liệu đã lưu cache, kèm theo cảnh báo.