Ultralytics YOLO27:

Dataset Depth Virtual KITTI 2#

Virtual KITTI 2 (vKITTI2) là bản tái tạo tổng hợp chân thực như ảnh chụp của các cảnh lái xe trong KITTI. Dataset sao chép 5 sequence từ dataset KITTI gốc và kết xuất lại chúng trong các điều kiện thời tiết, ánh sáng khác nhau, cung cấp ground truth dày đặc cho từng pixel.

Là dataset lái xe ngoài trời tổng hợp, vKITTI2 cung cấp một đối trọng dày đặc cho các điểm LiDAR KITTI thực vốn thưa thớt, trở thành nguồn hình học lái xe ngoài trời rõ nét hữu ích để huấn luyện các model ước lượng depth đơn ảnh.

Tính năng chính#

  • Bản tái tạo tổng hợp chân thực như ảnh chụp của các cảnh lái xe trong KITTI.
  • 5 sequence được sao chép, kết xuất trong các điều kiện thời tiết và ánh sáng khác nhau.
  • Môi trường lái xe ngoài trời.
  • Ground truth dày đặc cho từng pixel (đối trọng dày đặc cho dữ liệu LiDAR KITTI thực vốn thưa thớt).
  • Phạm vi depth ~80 m.
  • Đóng góp 42.520 ảnh (25.780 train / 16.740 val) vào tập dữ liệu trộn huấn luyện depth của Ultralytics.

Cấu trúc dataset#

Dataset depth Virtual KITTI 2 được chia thành hai tập con:

  1. Train: 25.780 ảnh cùng các depth map dày đặc tương ứng để huấn luyện.
  2. Val: 16.740 ảnh cùng các depth map dày đặc tương ứng để validation trong quá trình huấn luyện.

Mỗi ảnh RGB được ghép với một PNG depth uint16 đã scale theo định dạng dataset depth của Ultralytics. Ảnh PNG nguồn và ảnh PNG đã chuyển đổi sử dụng đơn vị centimeter (depth_scale: 100), giúp bảo toàn phạm vi huấn luyện 80 m. YAML của dataset tải các archive nguồn (~15 GB) và tự động chuyển đổi trong lần sử dụng đầu tiên.

Vai trò trong YOLO26-Depth#

Virtual KITTI 2 là một trong các nguồn huấn luyện trong tập dữ liệu trộn đa dataset rộng (~2.19M ảnh) dùng để pretrain các model YOLO26-Depth của Ultralytics. Trong tập dữ liệu trộn này, vKITTI2 cung cấp đối trọng tổng hợp lái xe ngoài trời dày đặc cho ground truth LiDAR KITTI thực vốn thưa thớt.

Thiết lập này không có benchmark vKITTI2 riêng với dữ liệu giữ lại để đánh giá. Thay vào đó, các model thu được được đánh giá trên những benchmark depth đơn ảnh tiêu chuẩn: NYU Depth V2, KITTI, Make3D, ETH3D và iBims-1.

YAML của dataset#

Tệp YAML được dùng để xác định cấu hình dataset. Tệp chứa thông tin về đường dẫn, class và các thông tin liên quan khác của dataset. Đối với Virtual KITTI 2, tệp depth-vkitti2.yaml xác định đường dẫn và class depth duy nhất.

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")

Cách sử dụng#

Để huấn luyện model YOLO26n-Depth trên dataset Virtual KITTI 2 với kích thước ảnh 640, bạn có thể sử dụng các đoạn code sau. Để xem danh sách đầy đủ các tham số hiện có, hãy tham khảo trang Huấn luyện model.

Ví dụ huấn luyện
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-depth.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)

# Huấn luyện model
results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)

Model được tiền huấn luyện#

Họ model depth YOLO26 (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) tự động tải xuống từ các bản phát hành của Ultralytics và được huấn luyện trên tập dữ liệu trộn đa dataset rộng có Virtual KITTI 2. Khám phá YOLO26x-depth trên Ultralytics Platform.

Trích dẫn và lời cảm ơn#

Nếu sử dụng dataset Virtual KITTI 2 trong nghiên cứu hoặc công việc phát triển, vui lòng trích dẫn bài báo sau:

Trích dẫn
@article{cabon2020vkitti2,
      title={Virtual KITTI 2},
      author={Yohann Cabon and Naila Murray and Martin Humenberger},
      journal={arXiv preprint arXiv:2001.10773},
      year={2020}
}

Chúng tôi xin ghi nhận công lao của những người tạo ra Virtual KITTI 2 vì đã cung cấp dataset lái xe tổng hợp này cho cộng đồng thị giác máy tính.

Câu hỏi thường gặp#

  • Virtual KITTI 2 (vKITTI2) là bản tái tạo tổng hợp chân thực như ảnh chụp của năm sequence lái xe trong KITTI, được kết xuất lại trong các điều kiện thời tiết và ánh sáng khác nhau. Dataset đóng góp 42.520 ảnh (25.780 train, 16.740 val) với depth dày đặc cho từng pixel đến khoảng 80 m vào tập dữ liệu trộn huấn luyện YOLO26-Depth.

  • Depth LiDAR của KITTI thực rất thưa thớt, chỉ khoảng 16 đến 20% pixel được gán nhãn, trong khi vKITTI2 cung cấp giá trị depth dày đặc cho mọi pixel trong cùng loại cảnh lái xe. Kết hợp lại, hai dataset cung cấp cho model cả thống kê cảm biến thực lẫn hình học ngoài trời đầy đủ.

  • Chạy yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640 hoặc sử dụng ví dụ Python trong phần Cách sử dụng. PNG depth sử dụng đơn vị centimeter (depth_scale: 100), được thiết lập sẵn trong YAML đi kèm.

Bình luận