Tập dữ liệu độ sâu Virtual KITTI 2#
Virtual KITTI 2 (vKITTI2) là một mô phỏng tổng hợp chân thực như ảnh chụp của các cảnh lái xe KITTI. Nó sao chép 5 chuỗi từ tập dữ liệu KITTI gốc và kết xuất lại chúng trong các điều kiện thời tiết và ánh sáng khác nhau, cung cấp ground truth dày đặc cho từng pixel.
Là một tập dữ liệu 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 kết quả trả về LiDAR KITTI thực tế thưa thớt, biến nó thành một nguồn hữu ích chứa hình học lái xe ngoài trời sạch để huấn luyện các model depth estimation đơn kính (monocular).
Tính năng chính#
- Bản tái tạo tổng hợp chân thực của các khung cảnh lái xe KITTI.
- 5 chuỗi dữ liệu được sao chép được kết xuất trong các điều kiện thời tiết và ánh sáng đa dạng.
- Môi trường lái xe ngoài trời.
- Ground truth theo từng pixel dày đặc (một đối trọng dày đặc so với dữ liệu LiDAR thưa thớt của KITTI thực tế).
- Phạm vi độ sâu ~80 m.
- Đóng góp 42.520 hình ảnh (25.780 ảnh train / 16.740 ảnh val) vào tập hợp huấn luyện độ sâu của Ultralytics.
Cấu trúc tập dữ liệu#
Tập dữ liệu độ sâu Virtual KITTI 2 được chia thành hai tập con:
- Train: 25.780 hình ảnh với bản đồ độ sâu dày đặc đi kèm để huấn luyện.
- Val: 16.740 hình ảnh với bản đồ độ sâu dày đặc đi kèm để kiểm chứng trong quá trình huấn luyện.
Mỗi hình ảnh RGB đi kèm với một bản đồ độ sâu float32 .npy lưu trữ khoảng cách theo từng pixel tính bằng mét, tuân theo Ultralytics depth dataset format.
Vai trò trong YOLO26-Depth#
Virtual KITTI 2 là một trong những nguồn huấn luyện trong hỗn hợp đa tập dữ liệu lớn (~2,19 triệu hình ảnh) được sử dụng để tiền huấn luyện các mô hình YOLO26-Depth của Ultralytics. Trong hỗn hợp này, vKITTI2 cung cấp một đối trọng lái xe ngoài trời tổng hợp dày đặc cho ground truth LiDAR thưa thớt của KITTI thực tế.
Không có chuẩn đánh giá vKITTI2 riêng biệt nào trong thiết lập này. Thay vào đó, các mô hình thu được sẽ được đánh giá trên các chuẩn độ sâu đơn nhãn tiêu chuẩn: NYU Depth V2, KITTI, Make3D, ETH3D và iBims-1.
YAML tập dữ liệu#
Một tệp YAML (Yet Another Markup Language) được sử dụng để định nghĩa cấu hình tập dữ liệu. Nó chứa thông tin về các đường dẫn, class và các thông tin liên quan khác của tập dữ liệu. Đối với Virtual KITTI 2, tệp depth-vkitti2.yaml định nghĩa các đường dẫn và class đơn lẻ 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 *.npy, float32 meters (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
# Download script/URL (optional)
download: |
import shutil
from pathlib import Path
import cv2
import numpy as np
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)
np.save(dir / "depth" / split / f"{name}.npy", (depth.astype(np.float32) / 100.0).clip(max=80)) # cm -> m
im.replace(dir / "images" / split / f"{name}.jpg")
shutil.rmtree(dir / "source")Cách sử dụng#
Để huấn luyện một model YOLO26n-Depth trên tập dữ liệu Virtual KITTI 2 với kích thước ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để có danh sách toàn diện các đối số có sẵn, hãy tham khảo trang Training của model.
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)Các model đã được tiền huấn luyện#
Họ model chiều sâu 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 hợp đa tập dữ liệu rộng lớn mà Virtual KITTI 2 là một phần trong đó. Khám phá YOLO26x-depth trên Ultralytics Platform.
Trích dẫn và Ghi nhận#
Nếu bạn sử dụng tập dữ liệu Virtual KITTI 2 trong công việc nghiên cứu hoặc phát triển của mình, vui lòng trích dẫn bài báo sau:
@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 muốn ghi nhận các tác giả của Virtual KITTI 2 vì đã cung cấp tập dữ liệu lái xe tổng hợp này cho cộng đồng thị giác máy tính.