Ultralytics YOLO27:
Get Started

Dataset di profondità Virtual KITTI 2#

Virtual KITTI 2 (vKITTI2) è una ricostruzione sintetica fotorealistica delle scene di guida di KITTI. Riproduce 5 sequenze del dataset KITTI originale e le renderizza nuovamente in diverse condizioni meteorologiche e di illuminazione, fornendo una ground truth densa per ogni pixel.

In quanto dataset sintetico per la guida in ambienti esterni, vKITTI2 offre una controparte densa ai dati LiDAR reali e sparsi di KITTI, diventando una valida fonte di geometria pulita della guida outdoor per l'addestramento di modelli di stima della profondità monoculare.

Funzionalità principali#

  • Ricostruzione sintetica fotorealistica delle scene di guida di KITTI.
  • 5 sequenze replicate, renderizzate con condizioni meteorologiche e di illuminazione variabili.
  • Ambienti di guida outdoor.
  • Ground truth densa per ogni pixel (una controparte densa dei dati LiDAR reali e sparsi di KITTI).
  • Intervallo di profondità ~80 m.
  • Aggiunge 42,520 immagini (25,780 per l'addestramento / 16,740 per la validazione) al mix di addestramento della profondità di Ultralytics.

Struttura del dataset#

Il dataset di profondità Virtual KITTI 2 è suddiviso in due sottoinsiemi:

  1. Train: 25,780 immagini con mappe dense di profondità abbinate per l'addestramento.
  2. Val: 16,740 immagini con mappe dense di profondità abbinate per la validazione durante l'addestramento.

Ogni immagine RGB è abbinata a una PNG di profondità uint16 scalata, secondo il formato dei dataset di profondità Ultralytics. I file PNG sorgenti e convertiti usano i centimetri (depth_scale: 100), preservando così l'intervallo di addestramento di 80 m. Il file YAML del dataset scarica gli archivi sorgente (~15 GB) e li converte automaticamente al primo utilizzo.

Ruolo in YOLO26-Depth#

Virtual KITTI 2 è una delle fonti di addestramento nel vasto mix composto da più dataset (~2.19M immagini) usato per il pretraining dei modelli Ultralytics YOLO26-Depth. In questo mix, vKITTI2 fornisce una controparte sintetica e densa della guida outdoor alla ground truth LiDAR reale e sparsa di KITTI.

In questa configurazione non esiste un benchmark vKITTI2 autonomo con dati esclusi dall'addestramento. I modelli risultanti vengono invece valutati sui benchmark standard per la profondità monoculare: NYU Depth V2, KITTI, Make3D, ETH3D e iBims-1.

YAML del dataset#

Per definire la configurazione del dataset si usa un file YAML. Contiene informazioni sui percorsi del dataset, sulle classi e su altri elementi pertinenti. Per Virtual KITTI 2, il file depth-vkitti2.yaml definisce i percorsi e l'unica classe depth.

ultralytics/cfg/datasets/depth-vkitti2.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Virtual KITTI 2 dataset for monocular depth estimation — photorealistic synthetic outdoor driving, dense per-pixel depth
# Documentation: https://docs.ultralytics.com/datasets/depth/vkitti2
# Example usage: yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
#     └── depth-vkitti2  ← downloads here (15 GB archives, ~85 GB converted)
#         ├── images/{train,val}  # RGB images
#         └── depth/{train,val}   # paired 16-bit *.png depth maps (images/ -> depth/)
# If an interrupted download leaves a partial dataset, delete the depth-vkitti2 dir and re-run to rebuild it.

path: depth-vkitti2 # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 25780 images
val: images/val # val images (relative to 'path') 16740 images
max_depth: 80 # (m) maximum valid depth; GT beyond this is excluded from val metrics

nc: 1
names:
  0: depth

channels: 3
depth_scale: 100 # source PNG value 100 = 1 meter (centimeters)

# Download script/URL (optional)
download: |
  import shutil
  from pathlib import Path

  import cv2
  import numpy as np

  from ultralytics.data.utils import save_depth_png
  from ultralytics.utils import TQDM
  from ultralytics.utils.downloads import download

  # Download and extract the official RGB + depth tars (~15 GB), then convert: Scene20 -> val, all
  # other scenes -> train; depth PNGs are uint16 centimeters (sky = 655.35 m), clipped at 80 m
  dir = Path(yaml["path"])  # dataset root dir
  urls = [f"https://download.europe.naverlabs.com/virtual_kitti_2.0.3/vkitti_2.0.3_{s}.tar" for s in ("rgb", "depth")]
  download(urls, dir=dir / "source", delete=True)
  for split in ("train", "val"):
      (dir / "images" / split).mkdir(parents=True, exist_ok=True)
      (dir / "depth" / split).mkdir(parents=True, exist_ok=True)
  for im in TQDM(sorted((dir / "source").rglob("rgb_*.jpg")), desc="Converting"):
      scene, variation, camera = im.parts[-6], im.parts[-5], im.parts[-2]  # Scene01/clone/frames/rgb/Camera_0/rgb_00000.jpg
      split = "val" if scene == "Scene20" else "train"
      name = f"{scene}_{variation}_{camera}_{im.stem[4:]}"
      depth = cv2.imread(str(im.parents[2] / "depth" / camera / f"depth_{im.stem[4:]}.png"), cv2.IMREAD_ANYDEPTH)
      save_depth_png(dir / "depth" / split / f"{name}.png", (depth.astype(np.float32) / 100.0).clip(max=80), scale=100)  # cm -> m -> cm PNG
      im.replace(dir / "images" / split / f"{name}.jpg")
  shutil.rmtree(dir / "source")

Utilizzo#

Per addestrare un modello YOLO26n-Depth sul dataset Virtual KITTI 2 con una dimensione dell'immagine di 640, puoi usare i seguenti frammenti di codice. Per un elenco completo degli argomenti disponibili, consulta la pagina Addestramento del modello.

Esempio di addestramento
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n-depth.pt")  # carica un modello preaddestrato (consigliato per l'addestramento)

# Addestra il modello
results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)

Modelli preaddestrati#

La famiglia YOLO26 depth (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) viene scaricata automaticamente dalle release di Ultralytics ed è addestrata sul vasto mix composto da più dataset, di cui Virtual KITTI 2 fa parte. Esplora YOLO26x-depth su Ultralytics Platform.

Citazioni e ringraziamenti#

Se usi il dataset Virtual KITTI 2 nella tua attività di ricerca o sviluppo, cita il seguente articolo:

Citazione
@article{cabon2020vkitti2,
      title={Virtual KITTI 2},
      author={Yohann Cabon and Naila Murray and Martin Humenberger},
      journal={arXiv preprint arXiv:2001.10773},
      year={2020}
}

Desideriamo ringraziare i creatori di Virtual KITTI 2 per aver messo questo dataset sintetico di guida a disposizione della comunità della computer vision.

Domande frequenti#

  • Virtual KITTI 2 (vKITTI2) è una ricostruzione sintetica fotorealistica di cinque sequenze di guida di KITTI, renderizzate nuovamente in diverse condizioni meteorologiche e di illuminazione. Aggiunge al mix di addestramento YOLO26-Depth 42,520 immagini (25,780 per l'addestramento, 16,740 per la validazione) con profondità densa per ogni pixel fino a circa 80 m.

  • La profondità LiDAR di KITTI reale è sparsa: solo circa il 16-20% dei pixel è etichettato, mentre vKITTI2 fornisce un valore di profondità denso per ogni pixel in scene di guida analoghe. Insieme, offrono al modello sia le statistiche dei sensori reali sia una geometria outdoor completa.

  • Esegui yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640 oppure usa l'esempio Python nella sezione Utilizzo. Le PNG di profondità usano i centimetri (depth_scale: 100), già impostati nel file YAML incluso.

Commenti