Virtual KITTI 2 깊이 데이터셋#
Virtual KITTI 2(vKITTI2)는 KITTI 주행 장면을 사실적으로 재현한 합성 데이터셋입니다. 원본 KITTI 데이터셋의 5개 시퀀스를 복제하고 다양한 날씨와 조명 조건에서 다시 렌더링하여 픽셀 단위의 밀집 ground truth를 제공합니다.
합성 실외 주행 데이터셋인 vKITTI2는 희소한 실제 KITTI LiDAR 반환값에 대응하는 밀집 데이터를 제공하므로, 단안 깊이 추정 모델을 학습하기 위한 깨끗한 실외 주행 기하 정보의 유용한 소스입니다.
주요 기능#
- KITTI 주행 장면을 사실적으로 재현한 합성 데이터셋입니다.
- 다양한 날씨와 조명 조건에서 렌더링된 5개의 복제 시퀀스입니다.
- 실외 주행 환경입니다.
- 밀집 픽셀 단위 ground truth입니다(희소한 실제 KITTI LiDAR에 대응하는 밀집 데이터).
- 깊이 범위 ~80 m입니다.
- Ultralytics 깊이 학습 혼합 데이터에 42,520개의 이미지(학습 25,780개 / 검증 16,740개)를 제공합니다.
데이터셋 구조#
Virtual KITTI 2 깊이 데이터셋은 두 개의 하위 집합으로 분할됩니다.
- Train: 학습을 위한 쌍을 이루는 밀집 깊이 맵이 포함된 이미지 25,780개입니다.
- Val: 학습 중 검증을 위한 쌍을 이루는 밀집 깊이 맵이 포함된 이미지 16,740개입니다.
각 RGB 이미지는 스케일이 조정된 uint16 깊이 PNG와 쌍을 이루며, Ultralytics 깊이 데이터셋 형식을 따릅니다. 원본 PNG와 변환된 PNG는 센티미터(depth_scale: 100)를 사용하므로 80 m 학습 범위를 유지합니다.
YOLO26-Depth에서의 역할#
Virtual KITTI 2는 Ultralytics YOLO26-Depth 모델을 사전 학습하는 데 사용되는 광범위한 다중 데이터셋 혼합 데이터(~2.19M 이미지)의 학습 소스 중 하나입니다. 이 혼합 데이터에서 vKITTI2는 희소한 실제 KITTI LiDAR ground truth에 대응하는 밀집 합성 실외 주행 데이터를 제공합니다.
이 설정에는 별도의 vKITTI2 홀드아웃 벤치마크가 없습니다. 대신 결과 모델은 표준 단안 깊이 벤치마크인 NYU Depth V2, KITTI, Make3D, ETH3D 및 iBims-1에서 평가됩니다.
데이터셋 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)는 5가지 KITTI 주행 시퀀스를 광실사적으로 합성 재현한 것으로, 다양한 날씨와 조명 조건에서 다시 렌더링되었습니다. 이 데이터셋은 약 80m까지의 픽셀 단위 고밀도 심도를 갖춘 42,520장의 이미지(학습용 25,780장, 검증용 16,740장)를 YOLO26-Depth 학습 조합에 제공합니다.
실제 KITTI 라이다 심도는 약 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에 이미 설정되어 있습니다.