Panoramica dei dataset per la stima della profondità#
La stima monoculare della profondità assegna a ogni pixel di un'immagine un valore di profondità in metri. I valori di profondità utilizzano PNG in scala di grigi a 16 bit scalati oppure array NPY in virgola mobile espressi in metri.
Questa guida illustra 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 supportati#
Formato delle mappe di profondità#
Ogni campione di addestramento è composto da un'immagine RGB e dal relativo file di profondità. 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 pari a 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) o.npy. Le mappe PNG devono essere immagini in scala di grigi uint16 2D. Gli array NPY devono essere 2D e in virgola mobile, con valori espressi in metri. - Imposta
depth_scalesolo se i PNG non usano la convenzione predefinita in millimetri. Ad esempio, KITTI usa256e Virtual KITTI 2 usa100. - Ogni file di profondità dovrebbe avere lo stesso nome base 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é abbiano lo stesso rapporto d'aspetto; durante l'addestramento vengono ridimensionate in memoria.
- Il caricatore del dataset individua i file di profondità sostituendo il componente di directory
imagescondepth, preferendo.pnge ripiegando su.npy. - I pixel con profondità
≤ 0sono considerati non validi ed esclusi dal calcolo della loss e delle metriche.
Poiché il codice 0 è riservato ai pixel non validi, un PNG uint16 offre 65,535 valori di profondità positivi. La scala determina sia la precisione sia l'intervallo:
| Convenzione | depth_scale | Risoluzione | Profondità massima |
|---|---|---|---|
| Predefinito / 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 memorizzazione, non valori massimi consigliati per l'addestramento. Un dataset può impostare un valore max_depth inferiore, indipendentemente, per calibrare la loss o la valutazione.
Il layout standard organizza immagini e mappe di profondità in cartelle parallele:
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Ad esempio, a un'immagine in images/train/scene_001.jpg corrisponde una mappa di profondità in depth/train/scene_001.png.
Formato YAML del dataset#
I dataset per la stima della profondità si configurano con file YAML. I campi principali sono:
| Chiave | Descrizione |
|---|---|
path | Directory radice del dataset. |
train | Percorso delle immagini di addestramento relativo a path oppure percorso assoluto. |
val | Percorso delle immagini di convalida relativo a path oppure percorso assoluto. |
test | Percorso facoltativo delle immagini di test. |
nc | Numero di classi — per la stima della profondità è sempre 1. |
names | Mappatura dei nomi delle classi — è sempre {0: depth}. |
depth_scale | Unità PNG per metro, facoltative; 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
# Carica un modello di profondità preaddestrato
model = YOLO("yolo26n-depth.pt")
# Addestra sul dataset NYU Depth V2
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)Dataset supportati#
I modelli YOLO26 per la stima della profondità sono preaddestrati su un'ampia combinazione di dataset (~2.19M immagini), con intervalli che vanno dagli ambienti interni (≤10 m) a quelli esterni (~80 m); vengono poi valutati su cinque benchmark, in modalità zero-shot su tutti tranne KITTI Eigen. Ogni dataset ha una pagina dedicata e diversi sono disponibili sulla piattaforma Ultralytics per la consultazione e l'addestramento nel cloud.
Debug
- Depth8 — 8 immagini SUN RGB-D in un archivio da 1.3 MB scaricato automaticamente, per testare rapidamente la pipeline
Fonti per il preaddestramento
- ARKitScenes — interni reali, LiDAR Apple ARKit (la maggiore fonte reale)
- SUN RGB-D — interni reali, RGB-D multisensore
- DIODE — interni ed esterni reali, ground truth denso acquisito con scanner laser
- Hypersim — interni sintetici fotorealistici
- TartanAir — ambienti sintetici e diversificati
- Virtual KITTI 2 — guida in ambienti esterni sintetici
- KITTI — guida in ambienti esterni reali, LiDAR Velodyne (anche benchmark di valutazione)
- ImageNet (con etichette pseudo) — set di distillazione con etichette pseudo, la più grande fonte singola
Benchmark di valutazione
- NYU Depth V2 — benchmark principale per gli ambienti interni
- KITTI Eigen — benchmark per la guida in ambienti esterni
- ETH3D — alta precisione, interni ed esterni
- Make3D — ambienti esterni, fuori distribuzione
- iBims-1 — 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 file YAML del dataset il cui campo train elenca più directory di immagini combina queste fonti per un addestramento misto su larga scala.
Aggiungere il proprio dataset#
- Salva le immagini RGB in cartelle separate per ogni suddivisione, ad esempio
images/traineimages/val. - Salva un PNG o NPY di profondità per ogni immagine nelle cartelle corrispondenti
depth/trainedepth/val, usando lo stesso nome base del file immagine. Usasave_depth_png()per convertire gli array espressi in metri in PNG compatti in millimetri. - Assicurati che i valori di profondità decodificati siano in metri e che i pixel non validi o mancanti usino
0o valori negativi. - Crea un file 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: 1000Domande frequenti#
Per dataset compatti, usa PNG in scala di grigi a 16 bit scalati. Per impostazione predefinita, ogni unità intera corrisponde a un millimetro; imposta
depth_scalenel file YAML del dataset per usare un'altra scala.ultralytics.data.utils.save_depth_png()converte gli array espressi in metri nel formato predefinito. Puoi usare anche mappe NPY in virgola mobile espresse in metri.I pixel con valori di profondità
≤ 0sono considerati non validi ed esclusi sia dal calcolo della loss sia dalla valutazione delle metriche. Ciò riguarda il rumore dei sensori, le regioni di cielo e le superfici riflettenti, dove la profondità non può essere misurata in modo affidabile.La validazione della stima della profondità riporta il set standard di metriche Depth Anything:
- delta1 / delta2 / delta3 — frazione di pixel entro soglie di 1.25×, 1.25²× e 1.25³×. Valori più alti sono migliori.
- abs_rel — errore relativo assoluto medio. Più basso è meglio.
- rmse — radice dell'errore quadratico medio in metri. Più basso è meglio.
- silog — errore logaritmico invariante rispetto alla scala. Più basso è meglio.
Sì. Ogni file di profondità
.pngo.npydeve avere lo stesso nome base dell'immagine corrispondente. Il caricatore ricava il percorso della profondità sostituendo il componente di directoryimagescondepth, preferendo PNG e ripiegando su NPY. Le immagini il cui file di profondità è mancante o illeggibile vengono scartate durante la scansione del dataset in cache, con un avviso.