YOLO Vision 2026:

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_scale khi ảnh PNG không sử dụng quy ước milimét mặc định. Ví dụ, KITTI sử dụng 256 và Virtual KITTI 2 sử dụng 100.
  • 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.png ghép đôi với scene_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 images bằng depth, ưu tiên .png và 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 ướcdepth_scaleĐộ phân giảiĐộ sâu tối đa
Mặc định / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.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óaMô tả
pathThư 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.
ncSố 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_scaleSố đơn vị PNG tùy chọn trên mỗi mét; mặc định là 1000.
ultralytics/cfg/datasets/nyu-depth.yaml
# 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.zip

Cách sử dụng#

Huấn luyện một model ước tính độ sâu YOLO26 với Python hoặc CLI:

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

  1. Lưu các ảnh RGB trong các thư mục phân tách như images/trainimages/val.
  2. Lưu một PNG hoặc NPY độ sâu cho mỗi ảnh trong các thư mục depth/traindepth/val khớp nhau bằng cách sử dụng cùng phần gốc tệp với ảnh. Sử dụng save_depth_png() để chuyển đổi các mảng mét thành các tệp PNG milimét gọn nhẹ.
  3. Đả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 0 hoặc các giá trị âm.
  4. 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: 1000

Câ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_scale trong 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 .png hoặc .npy phả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ục images bằng depth, ư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.

Người đóng góp

Bình luận