Dataset di profondità DIODE#
DIODE (Dense Indoor/Outdoor DEpth) è un dataset reale con ground truth di profondità densa di altissima qualità acquisita da un laser scanner di grado topografico FARO Focus. Unicamente, copre scene sia interne che esterne con lo stesso sensore, rendendolo un ponte ad alta precisione tra la profondità indoor a corto raggio e outdoor a lungo raggio per la monocular depth estimation.
Caratteristiche principali#
- Ground truth di profondità densa di altissima qualità proveniente da uno scanner laser di precisione FARO Focus.
- Copre scene sia indoor che outdoor acquisite con lo stesso sensore.
- L'intervallo di profondità spazia da brevi distanze indoor a lunghe distanze outdoor, fino a circa 80 m nel mix Ultralytics.
- Ground truth densa e accurata per pixel allineata ai frame RGB.
- Fornisce ground truth densa ad alta precisione che funge da ponte tra domini indoor e outdoor.
Struttura del dataset#
Il dataset di profondità DIODE è suddiviso in due subset:
- Train: 25.458 immagini con mappe di profondità associate per l'addestramento.
- Val: 771 immagini con mappe di profondità associate per la validazione durante l'addestramento del modello.
Ogni campione è costituito da un'immagine RGB e da una mappa di profondità float32 .npy associata che memorizza le distanze per pixel in metri, seguendo il Ultralytics depth dataset format.
Ruolo in YOLO26-Depth#
DIODE è una fonte di addestramento nel mix di pre-addestramento multi-dataset Ultralytics YOLO26-Depth di circa 2,19 milioni di coppie immagine-profondità. Contribuisce con ground truth densa ad alta precisione che unisce i domini indoor e outdoor all'interno di un unico sensore, aiutando il modello a generalizzare sia su scene a corto raggio che a lungo raggio. I modelli risultanti vengono valutati sui benchmark standard NYU, KITTI, Make3D, ETH3D e iBims-1.
Dataset YAML#
Viene utilizzato un file YAML (Yet Another Markup Language) per definire la configurazione del dataset. Contiene informazioni sui percorsi del dataset, le classi e altre informazioni rilevanti.
# 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")Utilizzo#
Per addestrare un modello YOLO26n-depth sul dataset DIODE con una dimensione dell'immagine di 640, puoi usare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, fai riferimento alla pagina Training del modello.
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)Modelli pre-addestrati#
La famiglia di modelli di profondità YOLO26 è addestrata sull'ampio mix di preaddestramento della profondità multi-dataset di cui fa parte DIODE. Questi modelli si scaricano automaticamente dall'ultima release di Ultralytics, ad esempio YOLO26x-depth da v8.4.0, e coprono una gamma di dimensioni per diverse esigenze di precisione e risorse.
Citazioni e riconoscimenti#
Se utilizzi il dataset DIODE nel tuo lavoro di ricerca o sviluppo, ti preghiamo di citare il seguente documento:
@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}
}Desideriamo ringraziare gli autori per aver creato e mantenuto questa preziosa risorsa per la comunità della computer vision.