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 이미지는 Ultralytics 깊이 데이터셋 형식을 따르는 스케일 조정된 uint16 깊이 PNG와 쌍을 이룹니다. 원본과 변환된 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 파일을 사용합니다. 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")

사용법#

이미지 크기 640으로 Virtual KITTI 2 데이터셋에서 YOLO26n-Depth 모델을 학습하려면 다음 코드 예제를 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 Training 페이지를 참조하세요.

학습 예제
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 주행 시퀀스 5개를 사실적으로 합성해 재현하고, 다양한 날씨와 조명 조건에서 다시 렌더링한 데이터셋입니다. YOLO26-Depth 학습 데이터 구성에 약 80 m 범위의 픽셀 단위 조밀한 깊이 정보가 포함된 이미지 42,520개(학습 25,780개, 검증 16,740개)를 제공합니다.

  • 실제 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에 이미 설정되어 있습니다.

댓글