YOLO Vision 2026:

Tập dữ liệu độ sâu DIODE#

DIODE (Dense Indoor/Outdoor DEpth) là một tập dữ liệu thực tế với ground truth độ sâu dày đặc chất lượng rất cao được thu thập bằng máy quét laser cấp khảo sát FARO Focus. Điểm độc đáo là nó bao phủ cả cảnh trong nhà và ngoài trời bằng cùng một cảm biến, tạo thành cầu nối độ chính xác cao giữa độ sâu trong nhà tầm ngắn và ngoài trời tầm xa cho monocular depth estimation.

Tính năng chính#

  • Ground truth độ sâu dày đặc chất lượng rất cao từ máy quét laser cấp độ khảo sát FARO Focus.
  • Bao phủ cả các cảnh trong nhà và ngoài trời được thu thập bằng cùng một cảm biến.
  • Phạm vi độ sâu trải dài từ khoảng cách ngắn trong nhà đến khoảng cách xa ngoài trời, lên đến khoảng 80 m trong hỗn hợp Ultralytics.
  • Ground truth dày đặc, chính xác trên mỗi pixel được căn chỉnh với các khung hình RGB.
  • Cung cấp ground truth dày đặc với độ chính xác cao giúp kết nối các miền trong nhà và ngoài trời.

Cấu trúc tập dữ liệu#

Tập dữ liệu độ sâu DIODE được chia thành hai tập con:

  1. Train: 25.458 hình ảnh với các bản đồ độ sâu đi kèm để huấn luyện.
  2. Val: 771 hình ảnh với các bản đồ độ sâu đi kèm để kiểm chứng trong quá trình huấn luyện model.

Mỗi mẫu bao gồm một ảnh RGB và một bản đồ độ sâu float32 .npy có cặp lưu khoảng cách trên mỗi pixel tính bằng mét, tuân theo định dạng tập dữ liệu độ sâu Ultralytics.

Vai trò trong YOLO26-Depth#

DIODE là một nguồn huấn luyện trong hỗn hợp tiền huấn luyện đa tập dữ liệu YOLO26-Depth của Ultralytics với khoảng 2,19 triệu cặp hình ảnh–độ sâu. Nó đóng góp ground truth dày đặc độ chính xác cao giúp kết nối các miền trong nhà và ngoài trời trong cùng một cảm biến, giúp model tổng quát hóa tốt hơn trên các cảnh tầm gần và tầm xa. Các model kết quả được đánh giá trên các chuẩn NYU, KITTI, Make3D, ETH3D, và iBims-1 tiêu chuẩn.

YAML tập dữ liệu#

Một tệp YAML (Yet Another Markup Language) được sử dụng để xác định cấu hình tập dữ liệu. Nó chứa thông tin về đường dẫn, các lớp và các thông tin liên quan khác của tập dữ liệu.

ultralytics/cfg/datasets/depth-diode.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# DIODE dataset for monocular depth estimation — real indoor + outdoor, FARO Focus survey-grade laser, depth up to ~80 m
# Documentation: https://docs.ultralytics.com/datasets/depth/diode
# Example usage: yolo depth train data=depth-diode.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
#     └── depth-diode  ← downloads here (84 GB archives, ~90 GB converted)
#         ├── images/{train,val}  # RGB images
#         └── depth/{train,val}   # paired *.npy, float32 meters (images/ -> depth/)
# If an interrupted download leaves a partial dataset, delete the depth-diode dir and re-run to rebuild it.

path: depth-diode # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 25458 images
val: images/val # val images (relative to 'path') 771 images
max_depth: 80 # (m) maximum valid depth; GT beyond this is excluded from val metrics

nc: 1
names:
  0: depth

channels: 3

# Download script/URL (optional)
download: |
  import shutil
  from pathlib import Path

  import numpy as np

  from ultralytics.utils import TQDM
  from ultralytics.utils.downloads import download

  # Download and extract the official archives (train ~81 GB, val ~2.6 GB), then convert:
  # flatten <split>/<scene>/<scan>/*.png into images/<split>/ and save the paired *_depth.npy
  # (masked invalid -> 0, clipped at 80 m) as depth/<split>/*.npy
  dir = Path(yaml["path"])  # dataset root dir
  download([f"https://diode-dataset.s3.amazonaws.com/{s}.tar.gz" for s in ("train", "val")], dir=dir / "source", delete=True)
  for split in ("train", "val"):
      (dir / "images" / split).mkdir(parents=True, exist_ok=True)
      (dir / "depth" / split).mkdir(parents=True, exist_ok=True)
      for im in TQDM(sorted((dir / "source" / split).rglob("*.png")), desc=f"Converting {split}"):
          name = "_".join(im.relative_to(dir / "source").parts)  # train/indoors/scene/scan/x.png -> train_indoors_scene_scan_x.png
          depth = np.load(im.with_name(f"{im.stem}_depth.npy")).squeeze().astype(np.float32)
          depth[np.load(im.with_name(f"{im.stem}_depth_mask.npy")) == 0] = 0.0  # zero out invalid pixels
          np.save(dir / "depth" / split / f"{name[:-4]}.npy", depth.clip(max=80))
          im.replace(dir / "images" / split / name)
  shutil.rmtree(dir / "source")

Cách sử dụng#

Để train model YOLO26n-depth trên tập dữ liệu DIODE với kích thước ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để có danh sách đầy đủ các tham số có sẵn, hãy tham khảo trang Training của model.

Ví dụ về Training
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-depth.pt")  # load a pretrained depth model (recommended for training)

# Train the model
results = model.train(data="depth-diode.yaml", epochs=100, imgsz=640)

Các model đã được tiền huấn luyện#

Họ model YOLO26 depth được train trên tập hợp pretraining độ sâu đa tập dữ liệu rộng lớn mà DIODE là một phần trong đó. Các model này tự động tải xuống từ bản phát hành Ultralytics mới nhất, ví dụ như YOLO26x-depth từ v8.4.0, và bao phủ dải kích thước khác nhau cho các yêu cầu về độ chính xác và tài nguyên.

Trích dẫn và Ghi nhận#

Nếu bạn sử dụng tập dữ liệu DIODE trong công việc nghiên cứu hoặc phát triển của mình, vui lòng trích dẫn bài báo sau:

Trích dẫn
@article{vasiljevic2019diode,
      title={DIODE: A Dense Indoor and Outdoor DEpth Dataset},
      author={Vasiljevic, Igor and Kolkin, Nick and Zhang, Shanyi and Luo, Ruotian and Wang, Haochen and Dai, Falcon Z. and Daniele, Andrea F. and Mostajabi, Mohammadreza and Basart, Steven and Walter, Matthew R. and Shakhnarovich, Gregory},
      journal={arXiv preprint arXiv:1908.00463},
      year={2019}
}

Chúng tôi xin ghi nhận các tác giả đã tạo ra và duy trì tài nguyên giá trị này cho cộng đồng computer vision.

Những người đóng góp

Bình luận