Ultralytics YOLO27:
Get Started

Virtual KITTI 2 深度数据集#

Virtual KITTI 2(vKITTI2)是对 KITTI 驾驶场景进行的逼真合成重建。它克隆了原始 KITTI 数据集中的 5 个序列,并在不同天气和光照条件下重新渲染,提供稠密的逐像素真值。

作为合成室外驾驶数据集,vKITTI2 为真实 KITTI LiDAR 的稀疏回波提供了稠密对应数据,因此是训练单目深度估计模型、获取干净室外驾驶几何信息的有用来源。

主要功能#

  • 对 KITTI 驾驶场景进行的逼真合成重建。
  • 克隆的 5 个序列,在不同天气和光照条件下渲染。
  • 室外驾驶环境。
  • 稠密的逐像素真值(为真实 KITTI LiDAR 的稀疏数据提供稠密对应数据)。
  • 深度范围约为 ~80 m。
  • 为 Ultralytics 深度训练混合贡献 42,520 张图像(25,780 张训练图像 / 16,740 张验证图像)。

数据集结构#

Virtual KITTI 2 深度数据集分为两个子集:

  1. Train:25,780 张图像及其配对的稠密深度图,用于训练。
  2. Val:16,740 张图像及其配对的稠密深度图,用于训练期间的验证。

每张 RGB 图像都配有一张缩放后的 uint16 深度 PNG,并遵循 Ultralytics 深度数据集格式。源数据和转换后的 PNG 均使用厘米(depth_scale: 100),可保留 80 m 的训练范围。数据集 YAML 会下载源存档(~15 GB),并在首次使用时自动转换。

在 YOLO26-Depth 中的作用#

Virtual KITTI 2 是用于预训练 Ultralytics YOLO26-Depth 模型的广泛多数据集混合(约 ~2.19M 张图像)中的一个训练来源。在这一混合数据集中,vKITTI2 为真实 KITTI LiDAR 稀疏真值提供了稠密的合成室外驾驶对应数据。

此配置中没有单独留出的 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")

用法#

要使用 Virtual KITTI 2 数据集训练图像尺寸为 640 的 YOLO26n-Depth 模型,可以使用以下代码片段。有关可用参数的完整列表,请参阅模型的训练页面。

训练示例
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 就是其中的一部分。你可以在 Ultralytics Platform 上探索 YOLO26x-depth。

引用与致谢#

如果你在研究或开发工作中使用 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 m。

  • 真实 KITTI LiDAR 深度数据较为稀疏,只有约 16% 至 20% 的像素带有标签;而 vKITTI2 为同类驾驶场景中的每个像素都提供稠密深度值。两者结合,既能让模型学习真实传感器统计特征,也能获得完整的室外几何信息。

  • 运行 yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640,或使用 Usage 部分中的 Python 示例。深度 PNG 使用厘米(depth_scale: 100),随附的 YAML 已设置好该单位。

评论