Ultralytics YOLO27:

Датасет глубины Virtual KITTI 2#

Virtual KITTI 2 (vKITTI2) — фотореалистичная синтетическая реконструкция сцен вождения из KITTI. В нём воссозданы 5 последовательностей исходного датасета KITTI, повторно отрисованных при разных погодных условиях и освещении; для каждого пикселя доступны плотные эталонные данные.

Как синтетический датасет для вождения на открытом воздухе, vKITTI2 дополняет разреженные реальные данные LiDAR из KITTI плотными данными о глубине. Это полезный источник точных геометрических данных об условиях вождения на открытом воздухе для обучения моделей оценки глубины по одному изображению.

Основные особенности#

  • Фотореалистичная синтетическая реконструкция сцен вождения из KITTI.
  • 5 воссозданных последовательностей, отрисованных при разных погодных условиях и освещении.
  • Среды для вождения на открытом воздухе.
  • Плотные эталонные данные для каждого пикселя (плотное дополнение к разреженным реальным данным LiDAR из KITTI).
  • Диапазон глубины — ~80 м.
  • Добавляет 42 520 изображений (25 780 для обучения / 16 740 для валидации) в набор данных Ultralytics для обучения моделей глубины.

Структура набора данных#

Датасет глубины Virtual KITTI 2 разделён на две подвыборки:

  1. Train: 25 780 изображений с соответствующими плотными картами глубины для обучения.
  2. Val: 16 740 изображений с соответствующими плотными картами глубины для валидации во время обучения.

Каждому RGB-изображению соответствует PNG-файл глубины в формате uint16 с масштабированными значениями, как предусмотрено в формате датасетов глубины Ultralytics. В исходных и преобразованных PNG-файлах значения хранятся в сантиметрах (depth_scale: 100), что позволяет сохранить диапазон обучения до 80 м. YAML-файл датасета скачивает исходные архивы (~15 GB) и автоматически преобразует их при первом использовании.

Роль в YOLO26-Depth#

Virtual KITTI 2 — один из источников обучающих данных в составе обширного набора из нескольких датасетов (~2.19M изображений), используемого для предобучения моделей Ultralytics YOLO26-Depth. В этом наборе vKITTI2 предоставляет плотные синтетические данные о вождении на открытом воздухе, дополняющие разреженные реальные эталонные данные LiDAR из KITTI.

В этой конфигурации нет отдельного бенчмарка vKITTI2 с отложенной выборкой. Вместо этого полученные модели оцениваются на стандартных бенчмарках глубины по одному изображению: NYU Depth V2, KITTI, Make3D, ETH3D и iBims-1.

Файл YAML набора данных#

Для задания конфигурации датасета используется YAML-файл. В нём указаны пути к данным, классы и другая важная информация. Для Virtual KITTI 2 файл depth-vkitti2.yaml задаёт пути и единственный класс 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")

Использование#

Чтобы обучить модель YOLO26n-Depth на датасете Virtual KITTI 2 с размером изображения 640, воспользуйся следующими фрагментами кода. Полный список доступных аргументов смотри на странице обучения модели.

Пример обучения
from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n-depth.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)

# Обучить модель
results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)

Предварительно обученные модели#

Семейство моделей глубины YOLO26 (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) автоматически скачивается из релизов Ultralytics и обучается на обширном наборе данных из нескольких датасетов, в который входит Virtual KITTI 2. Изучи YOLO26x-depth на Ultralytics Platform.

Цитирование и благодарности#

Если ты используешь датасет Virtual KITTI 2 в исследовательской или разработческой работе, укажи следующую статью в списке источников:

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

Благодарим создателей Virtual KITTI 2 за то, что сделали этот синтетический датасет для вождения доступным сообществу компьютерного зрения.

Часто задаваемые вопросы#

  • Virtual KITTI 2 (vKITTI2) — фотореалистичная синтетическая реконструкция пяти последовательностей вождения из KITTI, повторно отрисованных при разных погодных условиях и освещении. Датасет добавляет в набор для обучения YOLO26-Depth 42 520 изображений (25 780 для обучения, 16 740 для валидации) с плотными данными о глубине для каждого пикселя на расстоянии примерно до 80 м.

  • Данные LiDAR о глубине в реальном датасете KITTI разрежены: размечено лишь около 16–20% пикселей, тогда как vKITTI2 содержит значение глубины для каждого пикселя в похожих сценах вождения. Вместе они дают модели статистику реальных сенсоров и полную геометрию внешней среды.

  • Запусти yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640 или воспользуйся примером на Python в разделе Использование. В PNG-файлах глубина задана в сантиметрах (depth_scale: 100); это уже учтено в прилагаемом YAML-файле.

Комментарии