Ultralytics YOLO27:

Dataset độ sâu DIODE#

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

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 FARO Focus cấp khảo sát.
  • Bao phủ cả cảnh trong nhà lẫn ngoài trời được thu bằng cùng một cảm biến.
  • Khoảng độ sâu trải dài từ cự ly ngắn trong nhà đến cự ly xa ngoài trời, lên đến khoảng 80 m trong hỗn hợp của Ultralytics.
  • Ground truth dày đặc, chính xác ở từng pixel, được căn chỉnh với các khung hình RGB.
  • Cung cấp ground truth dày đặc có độ chính xác cao, kết nối miền trong nhà và ngoài trời.

Cấu trúc dataset#

Dataset độ sâu DIODE được chia thành hai tập con:

  1. Train: 25,458 ảnh đi kèm bản đồ độ sâu để huấn luyện.
  2. Val: 771 ảnh đi kèm bản đồ độ sâu để xác thực trong quá trình huấn luyện model.

Mỗi mẫu gồm một ảnh RGB và một ảnh PNG độ sâu uint16 đi kèm, với 256 đơn vị trên mỗi mét (depth_scale: 256), theo định dạng dataset độ sâu của Ultralytics. Định dạng này cho độ phân giải 3.90625 mm đồng thời biểu diễn toàn bộ phạm vi ngoài trời 80 m. YAML của dataset tự động tải các archive DIODE chính thức (~84 GB) và chuyển đổi sang bố cục này trong lần sử dụng đầu tiên.

Vai trò trong YOLO26-Depth#

DIODE là nguồn huấn luyện trong hỗn hợp pretraining đa dataset YOLO26-Depth của Ultralytics, gồm khoảng 2.19M cặp ảnh–độ sâu. Dataset đóng góp ground truth dày đặc có độ chính xác cao, kết nối miền trong nhà và ngoài trời bằng một cảm biến duy nhất, giúp model khái quát hóa trên cả cảnh tầm ngắn lẫn tầm xa. Các model thu được được đánh giá trên những benchmark tiêu chuẩn NYU, KITTI, Make3D, ETH3D và iBims-1.

YAML của dataset#

Tệp YAML được dùng để xác định cấu hình dataset. Tệp này chứa thông tin về đường dẫn, class và các thông tin liên quan khác của dataset.

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 16-bit *.png depth maps (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
depth_scale: 256 # PNG value 256 = 1 meter; represents the 80 m outdoor range

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

  import numpy as np

  from ultralytics.data.utils import save_depth_png
  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>/*.png
  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
          save_depth_png(dir / "depth" / split / f"{name[:-4]}.png", depth.clip(max=80), scale=256)
          im.replace(dir / "images" / split / name)
  shutil.rmtree(dir / "source")

Cách sử dụng#

Để huấn luyện model YOLO26n-depth trên dataset DIODE với kích thước ảnh 640, bạn có thể dùng các đoạn code sau. Để xem danh sách đầy đủ các tham số hiện có, hãy tham khảo trang Huấn luyện của model.

Ví dụ huấn luyện
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-depth.pt")  # tải model độ sâu đã pretrained (được khuyến nghị khi huấn luyện)

# Huấn luyện model
results = model.train(data="depth-diode.yaml", epochs=100, imgsz=640)

Model được tiền huấn luyện#

Họ model YOLO26 depth được huấn luyện trên hỗn hợp pretraining độ sâu đa dataset quy mô lớn, trong đó có DIODE. Các model này tự động tải xuống trong lần sử dụng đầu tiên từ bản phát hành assets v8.4.0 của Ultralytics, chẳng hạn như YOLO26x-depth, và có nhiều kích cỡ phù hợp với các yêu cầu khác nhau về độ chính xác và tài nguyên.

Trích dẫn và lời cảm ơn#

Nếu sử dụng dataset DIODE trong nghiên cứu hoặc phát triển, 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ông lao của các tác giả trong việc tạo và duy trì tài nguyên quý giá này cho cộng đồng thị giác máy tính.

Câu hỏi thường gặp#

  • DIODE thu thập cả cảnh trong nhà lẫn ngoài trời bằng cùng một máy quét laser FARO Focus cấp khảo sát, tạo ground truth độ sâu rất dày đặc và chính xác trên phạm vi từ trong nhà tầm ngắn đến ngoài trời tầm xa. Khả năng bao phủ bằng một cảm biến duy nhất này tạo cầu nối độ chính xác cao giữa miền trong nhà và ngoài trời trong hỗn hợp huấn luyện YOLO26-Depth.

  • Cấu hình Ultralytics cung cấp 25,458 cặp ảnh-độ sâu cho huấn luyện và 771 cặp cho xác thực. Độ sâu được lưu dưới dạng ảnh PNG uint16 với 256 đơn vị trên mỗi mét (depth_scale: 256), duy trì độ phân giải 3.9 mm đồng thời bao phủ toàn bộ phạm vi ngoài trời 80 m được mô tả trong định dạng dataset độ sâu của Ultralytics.

  • Nạp checkpoint độ sâu pretrained và trỏ data đến YAML đi kèm, chẳng hạn yolo depth train data=depth-diode.yaml model=yolo26n-depth.pt epochs=100 imgsz=640. Xem mục Cách sử dụng để biết cách thực hiện tương đương bằng Python và trang Huấn luyện để xem tất cả tham số.

Người đóng góp

Bình luận