Tổng quan về các tập dữ liệu ước tính độ sâu#
Ước tính độ sâu đơn mắt gán một giá trị độ sâu tính bằng mét cho mỗi pixel trong ảnh. Các mục tiêu độ sâu sử dụng ảnh PNG thang xám 16-bit được chia tỷ lệ hoặc mảng NPY dấu phẩy động 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 sử dụng bởi các model ước tính độ sâu Ultralytics YOLO và liệt kê các cấu hình tập dữ liệu tích hợp sẵn có để huấn luyện và kiểm định.
Đị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 bao gồm một ảnh RGB và một tệp độ sâu đi kèm. Các giá trị PNG được chia cho depth_scale cấp độ tập dữ liệu tùy chọn để tạo ra mét. Giá trị mặc định là 1000, vì vậy giá trị 1500 biểu thị 1.5 mét. Mã 0 nghĩa là không hợp lệ; ảnh PNG không cần siêu dữ liệu được nhúng.
- Các tệp độ sâu sử dụng
.png(được ưu tiên) hoặc.npy. Các bản đồ PNG phải là ảnh thang xám uint16 2D. Mảng NPY phải là 2D và có dấu phẩy động, với các giá trị tính bằng mét. - Chỉ đặt
depth_scalekhi ảnh PNG không sử dụng quy ước milimét mặc định. Ví dụ, KITTI sử dụng256và Virtual KITTI 2 sử dụng100. - Mỗi tệp độ sâu phải có phần gốc tên giống với tệp ảnh khớp với nó (ví dụ:
scene_001.pngghép đôi vớiscene_001.jpg). - Bản đồ độ sâu có thể nhỏ hơn ảnh RGB của chúng miễn là tỷ lệ khung hình khớp; quá trình huấn luyện sẽ thay đổi kích thước chúng trong bộ nhớ.
- Trình tải tập dữ liệu tìm các tệp độ sâu bằng cách thay thế thành phần thư mục
imagesbằngdepth, ưu tiên.pngvà dự phòng về.npy. - Các pixel có độ sâu
≤ 0được xử lý là không hợp lệ và bị loại trừ khỏi quá trình tính toán hàm mất mát và chỉ số.
Vì mã 0 được dành riêng cho các pixel không hợp lệ, một ảnh PNG uint16 cung cấp 65.535 giá trị độ sâu dương. Thang đo 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à giới hạn lưu trữ, không phải giới hạn huấn luyện được khuyến nghị. Một tập dữ liệu có thể đặt một max_depth nhỏ hơn một cách độc lập để hiệu chuẩn hoặc đánh giá hàm mất mát.
Bố cục tiêu chuẩn giữ ảnh và bản đồ độ sâu trong các 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 đôi với một bản đồ độ sâu tại depth/train/scene_001.png.
Định dạng YAML cho tập dữ liệu#
Các tập dữ liệu ước tính độ sâu được cấu hình bằng các tệp YAML. Các trường chính là:
| Khóa | Mô tả |
|---|---|
path | Thư mục gốc của tập dữ liệu. |
train | Đường dẫn ảnh huấn luyện tương đối với path, hoặc một đường dẫn tuyệt đối. |
val | Đường dẫn ảnh kiểm tra (validation) tương đối với path, hoặc một đường dẫn tuyệt đối. |
test | Đường dẫn hình ảnh kiểm tra tùy chọn. |
nc | Số lượng lớp — luôn là 1 đối với ước lượng độ sâu. |
names | Ánh xạ tên lớp — luôn là {0: depth}. |
depth_scale | Số đơn vị PNG tùy chọn trên mỗi mét; 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 một model ước tính độ sâu YOLO26 với 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 tập dữ liệu được hỗ trợ#
Các model độ sâu YOLO26 được tiền huấn luyện trên một tập hợp đa dạng các tập dữ liệu (~2,19 triệu ảnh) bao gồm từ trong nhà (≤10 m) đến ngoài trời (~80 m), sau đó được đánh giá zero-shot trên năm bộ benchmark. Mỗi tập dữ liệu có một trang dành riêng:
Gỡ lỗi
- Depth8 — 8 ảnh SUN RGB-D trong một tệp lưu trữ tự động tải xuống kích thước 1.3 MB, dùng để kiểm thử đường ống nhanh chóng
Nguồn tiền huấn luyện
- 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ế, dữ liệu gốc máy quét laser dày đặc
- Hypersim — trong nhà giả lập chân thực quang học
- TartanAir — giả lập, môi trường đa dạng
- Virtual KITTI 2 — lái xe ngoài trời giả lập
- KITTI — lái xe ngoài trời thực tế, Velodyne LiDAR (đồng thời là một chuẩn đánh giá)
- ImageNet (gắn nhãn giả) — tập chưng cất gắn nhãn giả, nguồn đơn lẻ lớn nhất
Bộ benchmark đánh giá
- NYU Depth V2 — chuẩn đánh giá trong nhà chính
- KITTI Eigen — chuẩn đánh giá lái xe ngoài trời
- ETH3D — trong nhà + ngoài trời độ chính xác cao
- Make3D — ngoài trời, ngoài phân phối
- iBims-1 — trong nhà chất lượng cao (các cạnh và bề mặt phẳng)
Độ chính xác của từng model trên các chuẩn đánh giá 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 lượng độ sâu. Một 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 cho quá trình huấn luyện hỗn hợp quy mô lớn.
Thêm tập dữ liệu của riêng bạn#
- Lưu các ảnh RGB trong các thư mục phân tách 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/valkhớp nhau bằng cách sử dụng cùng phần gốc tệp với ảnh. Sử dụngsave_depth_png()để chuyển đổi các mảng mét thành các tệp PNG milimét gọn nhẹ. - Đảm bảo các giá trị độ sâu được giải mã tính bằng mét và các pixel không hợp lệ hoặc bị thiếu sử dụng
0hoặc các giá trị âm. - Tạo một tệp YAML tập dữ liệu với
path,train,val,nc: 1, và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#
Sử dụng ảnh PNG thang xám 16-bit được chia tỷ lệ cho các tập dữ liệu gọn nhẹ. Theo mặc định, mỗi bước số nguyên là một milimét; hãy đặt
depth_scaletrong tệp YAML của tập dữ liệu cho một tỷ lệ khác.ultralytics.data.utils.save_depth_png()chuyển đổi các mả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 hoạt động trực tiếp.Các pixel có giá trị độ sâu
≤ 0được xử lý là không hợp lệ và được che đi (mask out) khỏi cả quá trình tính toán hàm mất mát và đánh giá chỉ số. Điều này bao gồm nhiễu cảm biến, vùng trời, và bề mặt phản chiếu nơi không thể đo độ sâu đáng tin cậy.Việc kiểm định ước tính độ sâu báo cáo tập hợp chỉ số Depth Anything tiêu chuẩn:
- delta1 / delta2 / delta3 — tỷ lệ phần trăm các pixel nằm trong ngưỡng 1,25×, 1,25²×, 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.
Có. Mỗi tệp độ sâu
.pnghoặc.npyphải có chung phần gốc với ảnh tương ứng. Trình tải suy ra đường dẫn độ sâu bằng cách thay thế thành phần thư mụcimagesbằngdepth, ưu tiên PNG và dự phòng về NPY. Các ảnh có tệp độ sâu bị thiếu hoặc không đọc được sẽ bị loại bỏ trong quá trình quét tập dữ liệu được lưu vào bộ nhớ đệm kèm theo cảnh báo.