Ultralytics YOLO27:

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_scale solo quando i PNG non usano la convenzione predefinita dei millimetri. Ad esempio, KITTI usa 256, mentre Virtual KITTI 2 usa 100.
  • Ogni file di profondità deve avere lo stesso stem del file immagine corrispondente (ad esempio, scene_001.png è associato a scene_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 images con depth, preferendo .png e usando .npy come fallback.
  • I pixel con profondità ≤ 0 vengono 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:

Convenzionedepth_scaleRisoluzioneProfondità massima
Predefinita / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.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:

ChiaveDescrizione
pathDirectory root del dataset.
trainPercorso delle immagini di addestramento relativo a path oppure percorso assoluto.
valPercorso delle immagini di validazione relativo a path oppure percorso assoluto.
testPercorso opzionale delle immagini di test.
ncNumero di classi — sempre 1 per la stima della profondità.
namesMappatura dei nomi delle classi — sempre {0: depth}.
depth_scaleUnità PNG opzionali per metro; il valore predefinito è 1000.
ultralytics/cfg/datasets/nyu-depth.yaml
# 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.zip

Utilizzo#

Addestra un modello YOLO26 per la stima della profondità con Python o CLI:

Esempio
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#

  1. Salva le immagini RGB in cartelle delle suddivisioni, come images/train e images/val.
  2. Salva un PNG o NPY di profondità per ogni immagine nelle cartelle corrispondenti depth/train e depth/val, usando lo stesso stem del file immagine. Usa save_depth_png() per convertire gli array in metri in PNG compatti in millimetri.
  3. Assicurati che i valori di profondità decodificati siano espressi in metri e che i pixel non validi o mancanti usino 0 o valori negativi.
  4. Crea uno YAML del dataset con path, train, val, nc: 1 e names: {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: 1000

FAQ#

  • 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_scale nel 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à ≤ 0 vengono 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à .png o .npy deve condividere lo stesso stem dell'immagine corrispondente. Il caricatore ricava il percorso della profondità sostituendo il componente della directory images con depth, 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.

Commenti