YOLO Vision 2026:

Panoramica dei dataset di stima della profondità#

La stima della profondità monoculare assegna un valore di profondità in metri a ogni pixel di un'immagine. Gli obiettivi di profondità utilizzano PNG in scala di grigi a 16 bit scalati o array NPY in virgola mobile in metri.

Questa guida spiega il formato del dataset utilizzato dai modelli di stima della profondità Ultralytics YOLO ed elenca le configurazioni di dataset integrate disponibili per l'addestramento e la validazione.

Formato del dataset supportato#

Formato della mappa di profondità#

Ciascun campione di addestramento è costituito da un'immagine RGB e da un file di profondità associato. I valori PNG vengono divisi per il parametro opzionale a livello di dataset depth_scale per produrre i metri. Il valore predefinito è 1000, quindi un valore di 1500 rappresenta 1.5 metri. Il codice 0 indica un valore non valido; i file PNG non richiedono metadati incorporati.

  • I file di profondità utilizzano .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 quando i file PNG non utilizzano la convenzione predefinita in millimetri. Ad esempio, KITTI utilizza 256 e Virtual KITTI 2 utilizza 100.
  • Ogni file di profondità deve avere lo stesso nome radice (stem) del file di immagine corrispondente (ad es., scene_001.png si associa a scene_001.jpg).
  • Le mappe di profondità possono essere più piccole delle rispettive immagini RGB purché le proporzioni corrispondano; l'addestramento le ridimensiona in memoria.
  • Il caricatore del dataset individua i file di profondità sostituendo il componente di directory images con depth, privilegiando .png e ricorrendo a .npy come alternativa.
  • 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 controlla sia la precisione che 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 archiviazione, non limiti di addestramento consigliati. Un dataset può impostare un valore inferiore di max_depth in modo indipendente per la calibrazione della perdita o la valutazione.

Il layout standard mantiene le immagini e le 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 di stima della profondità sono configurati con file YAML. I campi principali sono:

ChiaveDescrizione
pathDirectory radice del dataset.
trainPercorso dell'immagine di addestramento relativo a path, o percorso assoluto.
valPercorso dell'immagine di validazione relativo a path, o 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 di stima della profondità YOLO26 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,19M di immagini) che spaziano da intervalli interni (≤10 m) a esterni (~80 m), quindi valutati zero-shot su cinque benchmark. Ogni dataset ha una pagina dedicata:

Debug

  • Depth8 — 8 immagini SUN RGB-D in un archivio da 1,3 MB con download automatico, per il test rapido della pipeline

Fonti di preaddestramento

  • ARKitScenes — interni reali, Apple ARKit LiDAR (la più grande fonte reale)
  • SUN RGB-D — interni reali, RGB-D a sensori multipli
  • DIODE — interni ed esterni reali, ground truth densa con scanner laser
  • Hypersim — interni fotorealistici sintetici
  • TartanAir — ambienti sintetici e diversificati
  • Virtual KITTI 2 — guida all'aperto sintetica
  • KITTI — guida all'aperto reale, Velodyne LiDAR (anche un benchmark di valutazione)
  • ImageNet (pseudo-labeled) — set di distillazione con pseudo-etichette, la singola fonte più grande

Benchmark di valutazione

  • NYU Depth V2 — principale benchmark per interni
  • KITTI Eigen — benchmark di guida all'aperto
  • ETH3D — interni ed esterni ad alta precisione
  • Make3D — all'aperto, fuori distribuzione (out-of-distribution)
  • iBims-1 — interni di alta qualità (bordi e superfici planari)

L'accuratezza per modello su questi benchmark e i pesi preaddestrati scaricabili sono elencati nella pagina del task Depth Estimation. Un YAML di 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 sotto cartelle di suddivisione (split) come images/train e images/val.
  2. Salva un file PNG o NPY di profondità per immagine nelle cartelle corrispondenti depth/train e depth/val utilizzando lo stesso nome base del file dell'immagine. Utilizza save_depth_png() per convertire gli array 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 utilizzino 0 o valori negativi.
  4. Crea un file YAML per il 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 scalati per dataset compatti. Per impostazione predefinita, ogni incremento intero corrisponde a un millimetro; imposta depth_scale nel file YAML del dataset per un'altra scala. ultralytics.data.utils.save_depth_png() converte gli array in metri nel formato predefinito. Anche le mappe NPY in virgola mobile in metri funzionano direttamente.

  • I pixel con valori di profondità ≤ 0 sono trattati come non validi ed esclusi sia dal calcolo della loss che dalla valutazione delle metriche. Questo copre il rumore del sensore, le regioni del cielo e le superfici riflettenti in cui la profondità non può essere misurata in modo affidabile.

  • La validazione della stima della profondità riporta il set di metriche standard Depth Anything:

    • delta1 / delta2 / delta3 — percentuale di pixel entro soglie di 1,25×, 1,25²×, 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 alla scala. Più basso è, meglio è.
  • Sì. Ciascun file di profondità .png o .npy deve condividere lo stesso nome base dell'immagine corrispondente. Il caricatore ricava il percorso di profondità sostituendo il componente di directory images con depth, privilegiando il formato PNG e ricorrendo a NPY in caso contrario. Le immagini il cui file di profondità risulta mancante o illeggibile vengono scartate durante la scansione del dataset memorizzato nella cache, generando un avviso.

Commenti