Jeu de données de profondeur Virtual KITTI 2#
Virtual KITTI 2 (vKITTI2) est une reconstitution synthétique photoréaliste des scènes de conduite de KITTI. Il reproduit 5 séquences du jeu de données KITTI original et les rend de nouveau dans diverses conditions météorologiques et d’éclairage, en fournissant une vérité terrain dense pour chaque pixel.
En tant que jeu de données synthétique de conduite en extérieur, vKITTI2 complète utilement les mesures LiDAR réelles et éparses de KITTI par une géométrie de conduite extérieure propre, pour entraîner des modèles d’estimation monoculaire de la profondeur.
Fonctionnalités clés#
- Reconstitution synthétique photoréaliste de scènes de conduite KITTI.
- 5 séquences reproduites et rendues dans diverses conditions météorologiques et d’éclairage.
- Environnements de conduite en extérieur.
- Vérité terrain dense pour chaque pixel (complément dense aux données LiDAR réelles et éparses de KITTI).
- Portée de profondeur ~80 m.
- Apporte 42 520 images (25 780 pour l’entraînement / 16 740 pour la validation) au mélange d’entraînement en profondeur d’Ultralytics.
Structure du jeu de données#
Le jeu de données de profondeur Virtual KITTI 2 est divisé en deux sous-ensembles :
- Entraînement : 25 780 images accompagnées de cartes de profondeur denses pour l’entraînement.
- Validation : 16 740 images accompagnées de cartes de profondeur denses pour la validation pendant l’entraînement.
Chaque image RGB est associée à une image PNG de profondeur uint16 mise à l’échelle, conformément au format de jeu de données de profondeur Ultralytics. Les images PNG sources et converties utilisent les centimètres (depth_scale: 100), ce qui préserve la portée d’entraînement de 80 m. Le fichier YAML du jeu de données télécharge les archives sources (~15 Go) et les convertit automatiquement lors de la première utilisation.
Rôle dans YOLO26-Depth#
Virtual KITTI 2 est l’une des sources d’entraînement du vaste mélange multis jeux de données (~2,19 M d’images) utilisé pour préentraîner les modèles YOLO26-Depth d’Ultralytics. Dans ce mélange, vKITTI2 apporte un complément synthétique dense de conduite en extérieur à la vérité terrain LiDAR réelle et éparse de KITTI.
Cette configuration ne comporte pas de benchmark vKITTI2 autonome avec données réservées. Les modèles obtenus sont plutôt évalués sur les benchmarks standard d’estimation monoculaire de la profondeur : NYU Depth V2, KITTI, Make3D, ETH3D et iBims-1.
Fichier YAML du jeu de données#
Un fichier YAML sert à définir la configuration du jeu de données. Il contient des informations sur les chemins, les classes et d’autres éléments pertinents. Pour Virtual KITTI 2, le fichier depth-vkitti2.yaml définit les chemins et l’unique classe depth.
# 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")Utilisation#
Pour entraîner un modèle YOLO26n-Depth sur le jeu de données Virtual KITTI 2 avec une taille d’image de 640, tu peux utiliser les extraits de code suivants. Pour consulter la liste complète des arguments disponibles, reporte-toi à la page Entraînement du modèle.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n-depth.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
# Entraîner le modèle
results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)Modèles préentraînés#
La famille de modèles YOLO26 de profondeur (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) se télécharge automatiquement depuis les versions d’Ultralytics et est entraînée sur le vaste mélange multis jeux de données auquel Virtual KITTI 2 contribue. Découvre YOLO26x-depth sur Ultralytics Platform.
Citations et remerciements#
Si tu utilises le jeu de données Virtual KITTI 2 dans tes travaux de recherche ou de développement, cite l’article suivant :
@article{cabon2020vkitti2,
title={Virtual KITTI 2},
author={Yohann Cabon and Naila Murray and Martin Humenberger},
journal={arXiv preprint arXiv:2001.10773},
year={2020}
}Nous remercions les créateurs de Virtual KITTI 2 d’avoir mis ce jeu de données synthétique de conduite à la disposition de la communauté de la vision par ordinateur.
FAQ#
Virtual KITTI 2 (vKITTI2) est une reconstitution synthétique photoréaliste de cinq séquences de conduite KITTI, rendues de nouveau dans diverses conditions météorologiques et d’éclairage. Il contribue au mélange d’entraînement YOLO26-Depth avec 42 520 images (25 780 pour l’entraînement, 16 740 pour la validation), dotées d’une profondeur dense pour chaque pixel jusqu’à environ 80 m.
La profondeur LiDAR de KITTI réel est éparse : seulement 16 à 20 % environ des pixels sont étiquetés, tandis que vKITTI2 fournit une valeur de profondeur dense pour chaque pixel de scènes de conduite similaires. Ensemble, ces données apportent au modèle à la fois les statistiques réelles des capteurs et une géométrie extérieure complète.
Exécute
yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640, ou utilise l’exemple Python de la section Utilisation. Les images PNG de profondeur utilisent les centimètres (depth_scale: 100), une unité déjà définie dans le fichier YAML fourni.