Ultralytics YOLO27:

Virtual-KITTI-2-Tiefendatensatz#

Virtual KITTI 2 (vKITTI2) ist eine fotorealistische synthetische Rekonstruktion der KITTI-Fahrszenen. Der Datensatz übernimmt 5 Sequenzen aus dem ursprünglichen KITTI-Datensatz und rendert sie unter verschiedenen Wetter- und Lichtbedingungen neu, wodurch eine dichte Ground Truth für jedes Pixel entsteht.

Als synthetischer Datensatz für das Fahren im Außenbereich bietet vKITTI2 ein dichtes Gegenstück zu den spärlichen realen KITTI-LiDAR-Messungen und ist damit eine nützliche Quelle für eine unverfälschte Geometrie von Fahrszenen im Außenbereich zum Trainieren monokularer Modelle zur Tiefenschätzung.

Wichtige Funktionen#

  • Fotorealistische synthetische Rekonstruktion von KITTI-Fahrszenen.
  • 5 übernommene Sequenzen, unter verschiedenen Wetter- und Lichtbedingungen gerendert.
  • Umgebungen für das Fahren im Außenbereich.
  • Dichte Ground Truth für jedes Pixel (ein dichtes Gegenstück zum spärlichen realen KITTI-LiDAR).
  • Tiefenbereich ~80 m.
  • Trägt 42.520 Bilder (25.780 Training / 16.740 Validierung) zur Tiefen-Trainingsmischung von Ultralytics bei.

Datensatzstruktur#

Der Virtual-KITTI-2-Tiefendatensatz ist in zwei Teilmengen aufgeteilt:

  1. Training: 25.780 Bilder mit zugehörigen dichten Tiefenkarten zum Trainieren.
  2. Validierung: 16.740 Bilder mit zugehörigen dichten Tiefenkarten zur Validierung während des Trainings.

Jedem RGB-Bild ist eine skalierte uint16-Tiefen-PNG-Datei zugeordnet, entsprechend dem Ultralytics-Format für Tiefendatensätze. Die Quell- und konvertierten PNG-Dateien verwenden Zentimeter (depth_scale: 100), wodurch der Trainingsbereich von 80 m erhalten bleibt.

Rolle in YOLO26-Depth#

Virtual KITTI 2 ist eine der Trainingsquellen in der umfangreichen Mischung aus mehreren Datensätzen (~2,19 Mio. Bilder), die zum Vortrainieren der Ultralytics-YOLO26-Depth-Modelle verwendet wird. In dieser Mischung liefert vKITTI2 ein dichtes synthetisches Gegenstück für das Fahren im Außenbereich zur spärlichen Ground Truth des realen KITTI-LiDAR.

In dieser Konfiguration gibt es keinen eigenständigen vKITTI2-Benchmark mit zurückgehaltenen Daten. Stattdessen werden die resultierenden Modelle anhand der standardmäßigen monokularen Tiefen-Benchmarks NYU Depth V2, KITTI, Make3D, ETH3D und iBims-1 evaluiert.

Dataset-YAML#

Eine YAML-Datei wird verwendet, um die Datensatzkonfiguration zu definieren. Sie enthält Informationen über die Pfade des Datensatzes, die Klassen und andere relevante Informationen. Für Virtual KITTI 2 definiert die Datei depth-vkitti2.yaml die Pfade und die einzelne Klasse 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")

Verwendung#

Um ein YOLO26n-Depth-Modell auf dem Virtual-KITTI-2-Datensatz mit einer Bildgröße von 640 zu trainieren, kannst du die folgenden Codeausschnitte verwenden. Eine umfassende Liste der verfügbaren Argumente findest du auf der Seite zum Training des Modells.

Trainingsbeispiel
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)

Vortrainierte Modelle#

Die YOLO26-Tiefenmodellfamilie (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) wird automatisch aus den Ultralytics-Releases heruntergeladen und auf der umfangreichen Mischung aus mehreren Datensätzen trainiert, zu der auch Virtual KITTI 2 gehört. Entdecke YOLO26x-depth auf der Ultralytics Platform.

Zitate und Danksagungen#

Wenn du den Virtual-KITTI-2-Datensatz für deine Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte die folgende Veröffentlichung:

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

Wir möchten den Erstellern von Virtual KITTI 2 dafür danken, dass sie diesen synthetischen Datensatz für das Fahren der Computer-Vision-Community zur Verfügung gestellt haben.

FAQ#

  • Virtual KITTI 2 (vKITTI2) ist eine fotorealistische synthetische Nachbildung von fünf KITTI-Fahrsequenzen, die unter verschiedenen Wetter- und Lichtverhältnissen neu gerendert wurden. Er trägt 42.520 Bilder (25.780 für das Training, 16.740 für die Validierung) mit dichter Tiefeninformation pro Pixel bis zu ca. 80 m zum YOLO26-Depth-Trainingsmix bei.

  • Die echte KITTI-LiDAR-Tiefe ist dünn besetzt, da nur etwa 16 bis 20 % der Pixel beschriftet sind, während vKITTI 2 für jeden Pixel derselben Art von Fahrszene einen dichten Tiefenwert liefert. Zusammen vermitteln sie dem Modell sowohl reale Sensorstatistiken als auch eine vollständige Geometrie im Außenbereich.

  • Führe yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640 aus oder nutze das Python-Beispiel im Nutzungs-Abschnitt. Tiefen-PNGs verwenden Zentimeter (depth_scale: 100), was in der mitgelieferten YAML bereits eingestellt ist.

Kommentare