Dataset di profondità DIODE#
DIODE (profondità dense indoor/outdoor) è un dataset del mondo reale con ground truth della profondità densa di qualità elevatissima, acquisita con uno scanner laser FARO Focus di livello topografico. In modo unico, copre sia scene indoor che outdoor con lo stesso sensore, creando un ponte ad alta precisione tra la profondità indoor a corto raggio e quella outdoor a lungo raggio per la stima monoculare della profondità.
Funzionalità principali#
- Ground truth della profondità densa di qualità elevatissima, ottenuta con uno scanner laser FARO Focus di livello topografico.
- Copre scene sia indoor che outdoor acquisite con lo stesso sensore.
- L'intervallo di profondità va dalle brevi distanze indoor alle lunghe distanze outdoor, fino a circa 80 m nel mix Ultralytics.
- Ground truth densa e accurata per ogni pixel, allineata ai fotogrammi RGB.
- Fornisce ground truth densa ad alta precisione, creando un ponte tra i domini indoor e outdoor.
Struttura del dataset#
Il dataset di profondità DIODE è suddiviso in due sottoinsiemi:
- Train: 25.458 immagini con mappe di profondità abbinate per l'addestramento.
- Val: 771 immagini con mappe di profondità abbinate per la validazione durante l'addestramento del modello.
Ogni campione è composto da un'immagine RGB e da un PNG di profondità uint16 abbinato, con 256 unità per metro (depth_scale: 256), secondo il formato dei dataset di profondità Ultralytics. Ciò offre una risoluzione di 3,90625 mm, rappresentando al contempo l'intero intervallo outdoor di 80 m.
Ruolo in YOLO26-Depth#
DIODE è una fonte di addestramento nel mix di preaddestramento multi-dataset Ultralytics YOLO26-Depth, composto da circa 2,19 milioni di coppie immagine–profondità. Contribuisce con ground truth densa ad alta precisione, creando un ponte tra i domini indoor e outdoor tramite un singolo sensore e aiutando il modello a generalizzare sia nelle scene a corto raggio che in quelle a lungo raggio. I modelli risultanti vengono valutati sui benchmark standard NYU, KITTI, Make3D, ETH3D e iBims-1.
YAML del dataset#
Un file YAML viene utilizzato per definire la configurazione del dataset. Contiene informazioni sui percorsi del dataset, sulle classi e altre informazioni pertinenti.
# 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")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, consulta la pagina di addestramento 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 YOLO26 per la profondità viene addestrata sull'ampio mix di preaddestramento multi-dataset per la profondità, di cui DIODE fa parte. Questi modelli vengono scaricati automaticamente dall'ultima release di Ultralytics, ad esempio YOLO26x-depth dalla v8.4.0, e comprendono diverse dimensioni per soddisfare requisiti differenti in termini di accuratezza e risorse.
Citazioni e ringraziamenti#
Se utilizzi il dataset DIODE nel tuo lavoro di ricerca o sviluppo, cita il seguente articolo:
@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.
FAQ#
DIODE cattura scene sia interne che esterne con lo stesso scanner laser di grado geodetico FARO Focus, producendo una verità di terra di profondità molto densa e accurata su brevi intervalli interni e lunghi intervalli esterni. Questa copertura a sensore singolo lo rende un ponte ad alta precisione tra i domini interni ed esterni nel mix di addestramento di YOLO26-Depth.
La configurazione di Ultralytics fornisce 25.458 coppie di immagini e profondità di addestramento e 771 di convalida. La profondità è archiviata come PNG uint16 con 256 unità per metro (
depth_scale: 256), il che mantiene una risoluzione di 3,9 mm coprendo al contempo l'intero intervallo esterno di 80 m descritto nel formato del set di dati di profondità di Ultralytics.Carica un checkpoint di profondità preaddestrato e punta
dataal file YAML incluso, ad esempioyolo depth train data=depth-diode.yaml model=yolo26n-depth.pt epochs=100 imgsz=640. Consulta la sezione Utilizzo per l'equivalente in Python e la pagina Addestramento per tutti gli argomenti.