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深度データセットは、次の2つのサブセットに分割されています。
- Train: トレーニング用の、高密度な深度マップがペアになった25,780枚の画像です。
- Val: トレーニング中の検証用に、高密度な深度マップがペアになった16,740枚の画像です。
各RGB画像には、Ultralytics深度データセット形式に従った、スケーリング済みのuint16深度PNGが対応付けられています。元のPNGと変換後のPNGではセンチメートル(depth_scale: 100)を使用し、80 mのトレーニング範囲を維持します。
YOLO26-Depthにおける役割#
Virtual KITTI 2は、Ultralytics YOLO26-Depthモデルの事前トレーニングに使用される広範なマルチデータセット混合(~219万枚の画像)におけるトレーニングソースの1つです。この混合データ内で、vKITTI2は実際のKITTI LiDARグラウンドトゥルースの疎なデータに対応する、高密度な合成屋外走行データを提供します。
この構成には、vKITTI2単独のホールドアウトベンチマークはありません。その代わり、生成されたモデルは、標準的な単眼深度ベンチマークであるNYU Depth V2、KITTI、Make3D、ETH3D、iBims-1で評価されます。
データセット YAML#
データセット設定の定義にはYAMLファイルを使用します。YAMLファイルには、データセットのパス、クラス、およびその他の関連情報が含まれます。Virtual KITTI 2の場合、depth-vkitti2.yamlファイルがパスと単一の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")使用方法#
画像サイズ640でVirtual KITTI 2データセット上のYOLO26n-Depthモデルをトレーニングするには、次のコードスニペットを使用できます。利用可能な引数の包括的な一覧については、モデルのトレーニングページを参照してください。
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)事前トレーニング済みモデル#
深度用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の制作者に感謝します。
FAQ#
Virtual KITTI 2 (vKITTI2) は、KITTIの5つの運転シーケンスをフォトリアルに再構築した合成データセットであり、さまざまな天候や照明のもとで再レンダリングされています。約80 mまでの高密度なピクセル単位の深度を持つ42,520枚の画像(トレーニング用25,780枚、検証用16,740枚)を提供し、YOLO26-Depthのトレーニングミックスに貢献します。
実際の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で既に設定されています。