Link to this sectionTậ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 độ chính xác cao về ground truth độ sâu dày đặc được thu thập bởi máy quét laser cấp độ khảo sát FARO Focus. Điểm độc đáo là nó bao phủ cả các cảnh trong nhà và ngoài trời bằng cùng một cảm biến, tạo ra cầu nối có độ chính xác cao giữa độ sâu trong nhà tầm gần và ngoài trời tầm xa cho ước tính độ sâu đơn thị.
Link to this sectionTí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.
Link to this sectionCấu trúc tập dữ liệu#
Tập dữ liệu độ sâu DIODE được chia thành hai tập con:
- Train: 25.458 hình ảnh với các bản đồ độ sâu đi kèm để huấn luyện.
- 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 hình ảnh RGB và một bản đồ độ sâu float32 .npy đi kèm, lưu trữ khoảng cách trên mỗi pixel theo đơn vị mét, tuân theo định dạng tập dữ liệu độ sâu Ultralytics.
Link to this sectionVai 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.
Link to this sectionYAML 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 (classes) và các thông tin liên quan khác của tập dữ liệu.
# 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")Link to this sectionCách sử dụng#
Để huấn luyện một model YOLO26n-depth trên tập dữ liệu DIODE với kích thước hình ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để có danh sách đầy đủ các đối số khả dụng, hãy tham khảo trang Huấn luyện model.
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)Link to this sectionCác model đã được tiền huấn luyện#
Họ model YOLO26 depth được huấn luyện trên hỗn hợp tiền huấn luyện độ 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ụ YOLO26x-depth từ v8.4.0, và trải dài trên nhiều kích thước khác nhau cho các yêu cầu về độ chính xác và tài nguyên khác nhau.
Link to this sectionTrí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:
@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 gửi lời cảm ơn đến các tác giả vì đã tạo ra và duy trì nguồn tài nguyên quý giá này cho cộng đồng thị giác máy tính.