Panoramica dei dataset per la stima della profondità#
La stima monoculare della profondità assegna un valore di profondità in metri a ogni pixel di un'immagine. I target di profondità usano PNG in scala di grigi a 16 bit oppure array NPY in virgola mobile espressi in metri.
Questa guida spiega il formato dei dataset usato dai modelli Ultralytics YOLO per la stima della profondità ed elenca le configurazioni dei dataset integrate disponibili per l'addestramento e la validazione.
Formato dei dataset supportato#
Formato delle mappe di profondità#
Ogni campione di addestramento è composto da un'immagine RGB e da un file di profondità associato. I valori PNG vengono divisi per il fattore opzionale a livello di dataset depth_scale per ottenere i metri. Il valore predefinito è 1000, quindi un valore di 1500 rappresenta 1.5 metri. Il codice 0 indica un valore non valido; i PNG non richiedono metadati incorporati.
- I file di profondità usano
.png(preferito) oppure.npy. Le mappe PNG devono essere immagini in scala di grigi 2D uint16. Gli array NPY devono essere 2D e in virgola mobile, con valori espressi in metri. - Imposta
depth_scalesolo quando i PNG non usano la convenzione predefinita dei millimetri. Ad esempio, KITTI usa256, mentre Virtual KITTI 2 usa100. - Ogni file di profondità deve avere lo stesso stem del file immagine corrispondente (ad esempio,
scene_001.pngè associato ascene_001.jpg). - Le mappe di profondità possono essere più piccole delle immagini RGB, purché mantengano lo stesso rapporto d'aspetto; durante l'addestramento vengono ridimensionate in memoria.
- Il caricatore del dataset individua i file di profondità sostituendo il componente della directory
imagescondepth, preferendo.pnge usando.npycome fallback. - I pixel con profondità
≤ 0vengono considerati non validi ed esclusi dal calcolo della loss e delle metriche.
Poiché il codice 0 è riservato ai pixel non validi, un PNG uint16 fornisce 65.535 valori di profondità positivi. La scala controlla sia la precisione sia l'intervallo:
| Convenzione | depth_scale | Risoluzione | Profondità massima |
|---|---|---|---|
| Predefinita / ARKitScenes | 1000 | 1 mm | 65.535 m |
| KITTI | 256 | 3.90625 mm | 255.99609375 m |
| Virtual KITTI 2 | 100 | 1 cm | 655.35 m |
Questi sono limiti di archiviazione, non limiti consigliati per l'addestramento. Un dataset può impostare indipendentemente un valore max_depth più piccolo per la calibrazione della loss o la valutazione.
La struttura standard mantiene immagini e mappe di profondità in cartelle parallele:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Ad esempio, un'immagine in images/train/scene_001.jpg è associata a una mappa di profondità in depth/train/scene_001.png.
Formato YAML del dataset#
I dataset per la stima della profondità vengono configurati con file YAML. I campi principali sono:
| Chiave | Descrizione |
|---|---|
path | Directory root del dataset. |
train | Percorso delle immagini di addestramento relativo a path oppure percorso assoluto. |
val | Percorso delle immagini di validazione relativo a path oppure percorso assoluto. |
test | Percorso opzionale delle immagini di test. |
nc | Numero di classi — sempre 1 per la stima della profondità. |
names | Mappatura dei nomi delle classi — sempre {0: depth}. |
depth_scale | Unità PNG opzionali per metro; il valore predefinito è 1000. |
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# NYU Depth V2 dataset for monocular depth estimation
# Documentation: https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html
# 795 train + 654 val (Eigen test split) images, 480x640, indoor scenes, depth in meters
# Example usage: yolo depth train data=nyu-depth.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
# └── nyu-depth-png ← downloads here (≈1.5 GB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: nyu-depth-png # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 795 images
val: images/val # val images (relative to 'path') 654 images
# Depth maps are paired uint16 millimeter PNGs under depth/<split>/, resolved by
# swapping '/images/' -> '/depth/' on each image path.
# Classes
nc: 1
names:
0: depth
channels: 3
depth_scale: 1000
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/nyu-depth-png.zipUtilizzo#
Addestra un modello YOLO26 per la stima della profondità con Python o CLI:
from ultralytics import YOLO
# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")
# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Dataset supportati#
I modelli di profondità YOLO26 sono preaddestrati su un ampio mix di dataset (∼2,19 milioni di immagini) che spazia da interni (≤10 m) a esterni (∼80 m), per poi essere valutati su cinque benchmark, zero-shot su tutti tranne KITTI Eigen. Ogni dataset ha una pagina dedicata e diversi sono ospitati su Ultralytics Platform per la consultazione e l'addestramento nel cloud.
Debug
- Depth8 — 8 immagini SUN RGB-D in un archivio da 1,3 MB con download automatico, per testare rapidamente la pipeline
Fonti per il preaddestramento
- ARKitScenes — ambienti interni reali, LiDAR di Apple ARKit (la più grande fonte reale)
- SUN RGB-D — ambienti interni reali, RGB-D multisensore
- DIODE — ambienti interni ed esterni reali, ground truth denso ottenuto da scanner laser
- Hypersim — ambienti interni sintetici fotorealistici
- TartanAir — sintetico, ambienti diversificati
- Virtual KITTI 2 — guida esterna sintetica
- KITTI — guida esterna reale, LiDAR Velodyne (anche benchmark di valutazione)
- ImageNet (con pseudo-etichette) — set di distillazione con pseudo-etichette, la più grande fonte singola
Benchmark di valutazione
- NYU Depth V2 — benchmark principale per ambienti interni
- KITTI Eigen — benchmark per la guida in ambienti esterni
- ETH3D — ambienti interni ed esterni ad alta precisione
- Make3D — ambienti esterni, fuori distribuzione
- iBims-1 — ambienti interni di alta qualità (bordi e superfici planari)
La precisione di ciascun modello su questi benchmark e i pesi preaddestrati scaricabili sono elencati nella pagina dell'attività di stima della profondità. Un YAML del dataset il cui campo train elenca più directory di immagini combina queste fonti per l'addestramento misto su larga scala.
Aggiungere il tuo dataset#
- Salva le immagini RGB in cartelle delle suddivisioni, come
images/traineimages/val. - Salva un PNG o NPY di profondità per ogni immagine nelle cartelle corrispondenti
depth/trainedepth/val, usando lo stesso stem del file immagine. Usasave_depth_png()per convertire gli array in metri in PNG compatti in millimetri. - Assicurati che i valori di profondità decodificati siano espressi in metri e che i pixel non validi o mancanti usino
0o valori negativi. - Crea uno YAML del dataset con
path,train,val,nc: 1enames: {0: depth}.
path: path/to/my-depth-dataset
train: images/train
val: images/val
nc: 1
names:
0: depth
# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000FAQ#
Usa PNG in scala di grigi a 16 bit con scala per i dataset compatti. Per impostazione predefinita, ogni incremento intero corrisponde a un millimetro; imposta
depth_scalenel YAML del dataset per usare un'altra scala.ultralytics.data.utils.save_depth_png()converte gli array in metri nel formato predefinito. Anche le mappe NPY in virgola mobile espresse in metri funzionano direttamente.I pixel con valori di profondità
≤ 0vengono considerati non validi ed esclusi sia dal calcolo della loss sia dalla valutazione delle metriche. Questo include il rumore dei sensori, le regioni del cielo e le superfici riflettenti, dove la profondità non può essere misurata in modo affidabile.La validazione della stima della profondità restituisce il set di metriche standard di Depth Anything:
- delta1 / delta2 / delta3 — percentuale di pixel entro le soglie 1.25×, 1.25²×, 1.25³×. Valori più alti sono migliori.
- abs_rel — errore relativo assoluto medio. Valori più bassi sono migliori.
- rmse — radice dell'errore quadratico medio in metri. Valori più bassi sono migliori.
- silog — errore logaritmico invariante alla scala. Valori più bassi sono migliori.
Sì. Ogni file di profondità
.pngo.npydeve condividere lo stesso stem dell'immagine corrispondente. Il caricatore ricava il percorso della profondità sostituendo il componente della directoryimagescondepth, preferendo PNG e usando NPY come fallback. Le immagini il cui file di profondità manca o non è leggibile vengono rimosse durante la scansione del dataset memorizzata nella cache, con un avviso.