Jeu de données de profondeur Virtual KITTI 2#
Virtual KITTI 2 (vKITTI2) est une reconstitution synthétique et photoréaliste des scènes de conduite de KITTI. Il clone 5 séquences du jeu de données KITTI d'origine et les re-rend sous des conditions météorologiques et d'éclairage variées, fournissant une vérité terrain dense par pixel.
En tant que jeu de données de conduite extérieure synthétique, vKITTI2 offre un pendant dense aux retours clairsemés du LiDAR réel de KITTI, ce qui en fait une source utile de géométrie de conduite extérieure propre pour entraîner des modèles d'estimation de profondeur monoculaire.
Fonctionnalités clés#
- Recréation synthétique photoréaliste des scènes de conduite de KITTI.
- 5 séquences clonées rendues sous diverses conditions météorologiques et d'éclairage.
- Environnements de conduite en extérieur.
- Vérité terrain par pixel dense (un pendant dense aux données LiDAR éparses du KITTI réel).
- Plage de profondeur ~80 m.
- Contribue à hauteur de 42 520 images (25 780 pour l'entraînement / 16 740 pour la validation) au mix d'entraînement de profondeur Ultralytics.
Structure du jeu de données#
Le jeu de données de profondeur Virtual KITTI 2 est divisé en deux sous-ensembles :
- Train : 25 780 images avec cartes de profondeur denses appariées pour l'entraînement.
- Val : 16 740 images avec cartes de profondeur denses appariées pour la validation pendant l'entraînement.
Chaque image RGB est associée à une carte de profondeur float32 .npy stockant les distances par pixel en mètres, conformément au format de jeu de données de profondeur Ultralytics.
Rôle dans YOLO26-Depth#
Virtual KITTI 2 est l'une des sources d'entraînement au sein du vaste mélange de jeux de données (~2,19 millions d'images) utilisé pour pré-entraîner les modèles Ultralytics YOLO26-Depth. Au sein de ce mélange, vKITTI2 fournit un pendant de conduite en extérieur synthétique et dense à la vérité terrain LiDAR du KITTI réel, qui est, elle, éparse.
Il n'existe pas de benchmark vKITTI2 autonome dans cette configuration. Au lieu de cela, les modèles obtenus sont évalués sur les benchmarks de profondeur monoculaire standards : NYU Depth V2, KITTI, Make3D, ETH3D et iBims-1.
YAML du jeu de données#
Un fichier YAML (Yet Another Markup Language) est utilisé pour définir la configuration du jeu de données. Il contient des informations sur les chemins, les classes et d'autres données pertinentes du jeu de données. 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 *.npy, float32 meters (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
# Download script/URL (optional)
download: |
import shutil
from pathlib import Path
import cv2
import numpy as np
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)
np.save(dir / "depth" / split / f"{name}.npy", (depth.astype(np.float32) / 100.0).clip(max=80)) # cm -> m
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 une liste complète des arguments disponibles, consulte la page Entraînement du modèle.
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)Modèles pré-entraînés#
La famille de profondeur YOLO26 (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 multi-jeux de données dont Virtual KITTI 2 fait partie. Découvre YOLO26x-depth sur la plateforme Ultralytics.
Citations et remerciements#
Si tu utilises le jeu de données Virtual KITTI 2 dans tes travaux de recherche ou de développement, merci de citer 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 tenons à remercier les créateurs de Virtual KITTI 2 pour avoir mis ce jeu de données de conduite synthétique à la disposition de la communauté de la vision par ordinateur.