Conjunto de datos de profundidad Virtual KITTI 2#
Virtual KITTI 2 (vKITTI2) es una recreación sintética fotorrealista de las escenas de conducción de KITTI. Clona 5 secuencias del conjunto de datos KITTI original y las vuelve a renderizar con distintas condiciones meteorológicas y de iluminación, proporcionando datos de referencia densos para cada píxel.
Como conjunto de datos sintético de conducción en exteriores, vKITTI2 ofrece una alternativa densa a los escasos retornos LiDAR del KITTI real, lo que lo convierte en una fuente útil de geometría limpia de conducción en exteriores para entrenar modelos de estimación de profundidad monocular.
Características principales#
- Recreación fotorrealista sintética de escenas de conducción de KITTI.
- 5 secuencias clonadas renderizadas con distintas condiciones meteorológicas y de iluminación.
- Entornos de conducción en exteriores.
- Datos de referencia densos para cada píxel (una alternativa densa al escaso LiDAR del KITTI real).
- Alcance de profundidad de ~80 m.
- Aporta 42 520 imágenes (25 780 para entrenamiento y 16 740 para validación) a la combinación de entrenamiento de profundidad de Ultralytics.
Estructura del conjunto de datos#
El conjunto de datos de profundidad Virtual KITTI 2 se divide en dos subconjuntos:
- Train: 25 780 imágenes con mapas de profundidad densos asociados para el entrenamiento.
- Val: 16 740 imágenes con mapas de profundidad densos asociados para la validación durante el entrenamiento.
Cada imagen RGB está asociada a un PNG de profundidad uint16 escalado, de acuerdo con el formato de conjuntos de datos de profundidad de Ultralytics. Los PNG de origen y convertidos usan centímetros (depth_scale: 100), lo que permite conservar el alcance de entrenamiento de 80 m. El YAML del conjunto de datos descarga los archivos de origen (~15 GB) y los convierte automáticamente la primera vez que se usa.
Papel de YOLO26-Depth#
Virtual KITTI 2 es una de las fuentes de entrenamiento de la amplia combinación multiconjunto de datos (~2,19 millones de imágenes) que se usa para preentrenar los modelos Ultralytics YOLO26-Depth. En esta combinación, vKITTI2 proporciona una alternativa sintética densa de conducción en exteriores a los datos de referencia LiDAR dispersos del KITTI real.
En esta configuración no hay un benchmark independiente de vKITTI2 con datos reservados. En su lugar, los modelos resultantes se evalúan con los benchmarks estándar de profundidad monocular: NYU Depth V2, KITTI, Make3D, ETH3D e iBims-1.
YAML del conjunto de datos#
Se usa un archivo YAML para definir la configuración del conjunto de datos. Contiene información sobre las rutas, las clases y otros datos relevantes del conjunto. En el caso de Virtual KITTI 2, el archivo depth-vkitti2.yaml define las rutas y la única clase 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")Uso#
Para entrenar un modelo YOLO26n-Depth con el conjunto de datos Virtual KITTI 2 y un tamaño de imagen de 640, puedes usar los siguientes fragmentos de código. Consulta la página de Entrenamiento del modelo para ver la lista completa de argumentos disponibles.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-depth.pt") # Carga un modelo preentrenado (recomendado para el entrenamiento)
# Entrenar el modelo
results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)Modelos preentrenados#
La familia de modelos YOLO26 de profundidad (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) se descarga automáticamente desde las versiones de Ultralytics y se entrena con la amplia combinación multiconjunto de datos de la que forma parte Virtual KITTI 2. Explora YOLO26x-depth en Ultralytics Platform.
Citas y agradecimientos#
Si utilizas el conjunto de datos Virtual KITTI 2 en tus trabajos de investigación o desarrollo, cita el siguiente artículo:
@article{cabon2020vkitti2,
title={Virtual KITTI 2},
author={Yohann Cabon and Naila Murray and Martin Humenberger},
journal={arXiv preprint arXiv:2001.10773},
year={2020}
}Queremos dar las gracias a los creadores de Virtual KITTI 2 por poner este conjunto de datos sintético de conducción a disposición de la comunidad de visión artificial.
Preguntas frecuentes#
Virtual KITTI 2 (vKITTI2) es una recreación sintética fotorrealista de cinco secuencias de conducción de KITTI, renderizadas de nuevo con distintas condiciones meteorológicas y de iluminación. Aporta 42 520 imágenes (25 780 para entrenamiento y 16 740 para validación) con profundidad densa para cada píxel de hasta unos 80 m a la combinación de entrenamiento de YOLO26-Depth.
La profundidad LiDAR de KITTI real es dispersa: solo hay etiquetas para aproximadamente el 16-20 % de los píxeles, mientras que vKITTI2 proporciona un valor de profundidad denso para cada píxel de escenas de conducción similares. Juntos, ofrecen al modelo tanto estadísticas de sensores reales como una geometría exterior completa.
Ejecuta
yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640o usa el ejemplo de Python de la sección Uso. Los PNG de profundidad usan centímetros (depth_scale: 100), ya configurados en el YAML incluido.