Ultralytics YOLO27:

Dataset di profondità Virtual KITTI 2#

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

In quanto dataset sintetico per la guida all'aperto, vKITTI2 offre una controparte densa alle restituzioni LiDAR sparse del KITTI reale, rappresentando una fonte utile di geometria pulita della guida all'aperto per l'addestramento di modelli di stima della profondità monoculare.

Funzionalità principali#

  • Ricostruzione sintetica fotorealistica delle scene di guida di KITTI.
  • 5 sequenze clonate renderizzate in condizioni meteorologiche e di illuminazione variabili.
  • Ambienti di guida all'aperto.
  • Ground truth densa per ogni pixel (una controparte densa del LiDAR sparso del KITTI reale).
  • Intervallo di profondità ~80 m.
  • Contribuisce con 42.520 immagini (25.780 per il training / 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 di profondità dense associate per l'addestramento.
  2. Val: 16.740 immagini con mappe di profondità dense associate per la validazione durante l'addestramento.

Ogni immagine RGB è associata a un PNG di profondità uint16 scalato, in conformità con il formato dei dataset di profondità di Ultralytics. I PNG originali e convertiti usano i centimetri (depth_scale: 100), preservando l'intervallo di addestramento di 80 m.

Ruolo in YOLO26-Depth#

Virtual KITTI 2 è una delle fonti di addestramento nel vasto mix multi-dataset (~2,19 milioni di immagini) utilizzato per il preaddestramento dei modelli YOLO26-Depth di Ultralytics. All'interno di questo mix, vKITTI2 fornisce una controparte sintetica densa della guida all'aperto rispetto alla ground truth LiDAR sparsa del KITTI reale.

In questa configurazione non esiste un benchmark vKITTI2 autonomo con dati tenuti da parte. 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#

Un file YAML viene utilizzato per definire la configurazione del dataset. Contiene informazioni sui percorsi del dataset, sulle classi e altre informazioni pertinenti. Per Virtual KITTI 2, il file depth-vkitti2.yaml definisce i percorsi e la singola 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 delle immagini di 640, puoi utilizzare 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

# Load a model
model = YOLO("yolo26n-depth.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)

Modelli pre-addestrati#

La famiglia di modelli per la profondità YOLO26 (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) viene scaricata automaticamente dai rilasci di Ultralytics ed è addestrata sul vasto mix multi-dataset di cui fa parte Virtual KITTI 2. Esplora YOLO26x-depth su Ultralytics Platform.

Citazioni e ringraziamenti#

Se utilizzi il dataset Virtual KITTI 2 nelle tue 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 reso disponibile questo dataset sintetico per la guida alla comunità della computer vision.

FAQ#

  • Virtual KITTI 2 (vKITTI2) è una ricreazione sintetica e fotororealistica di cinque sequenze di guida di KITTI, ri-renderizzate con condizioni meteorologiche e di illuminazione variabili. Contribuisce con 42.520 immagini (25.780 per l'addestramento, 16.740 per la validazione) con profondità densa per pixel fino a circa 80 m al mix di addestramento di YOLO26-Depth.

  • La profondità LiDAR del KITTI reale è sparsa, con solo circa il 16-20% dei pixel etichettati, mentre vKITTI2 fornisce un valore di profondità denso per ogni pixel dello stesso tipo di scena di guida. Insieme offrono al modello sia le statistiche dei sensori reali che la geometria esterna completa.

  • Esegui yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640, oppure usa l'esempio Python nella sezione Usage. I PNG di profondità utilizzano i centimetri (depth_scale: 100), che il file YAML in dotazione imposta già.

Commenti