Ultralytics YOLO27:
Get Started

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_scale solo se i PNG non usano la convenzione predefinita in millimetri. Ad esempio, KITTI usa 256 e Virtual KITTI 2 usa 100.
  • Ogni file di profondità dovrebbe avere lo stesso nome base 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é 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 images con depth, preferendo .png e ripiegando su .npy.
  • I pixel con profondità ≤ 0 sono 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:

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

ChiaveDescrizione
pathDirectory radice del dataset.
trainPercorso delle immagini di addestramento relativo a path oppure percorso assoluto.
valPercorso delle immagini di convalida relativo a path oppure percorso assoluto.
testPercorso facoltativo delle immagini di test.
ncNumero di classi — per la stima della profondità è sempre 1.
namesMappatura dei nomi delle classi — è sempre {0: depth}.
depth_scaleUnità PNG per metro, facoltative; 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

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

  1. Salva le immagini RGB in cartelle separate per ogni suddivisione, ad esempio 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 nome base del file immagine. Usa save_depth_png() per convertire gli array espressi in metri in PNG compatti in millimetri.
  3. Assicurati che i valori di profondità decodificati siano in metri e che i pixel non validi o mancanti usino 0 o valori negativi.
  4. Crea un file 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

Domande 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_scale nel 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à ≤ 0 sono 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à .png o .npy deve avere lo stesso nome base dell'immagine corrispondente. Il caricatore ricava il percorso della profondità sostituendo il componente di directory images con depth, 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.

Commenti