Link to this sectionTập dữ liệu độ sâu Virtual KITTI 2#
Virtual KITTI 2 (vKITTI2) là một bản tái tạo tổng hợp chân thực của các khung cảnh lái xe trong 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 theo 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 dữ liệu LiDAR thưa thớt của KITTI thực tế, biến nó thành một nguồn dữ liệu hình học lái xe ngoài trời sạch hữu ích để huấn luyện các mô hình depth estimation đơn nhãn.
Link to this sectionTí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.
Link to this sectionCấ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 được ghép cặp với một bản đồ độ sâu .npy float32 lưu trữ khoảng cách trên từng pixel theo đơn vị mét, tuân theo định dạng tập dữ liệu độ sâu Ultralytics.
Link to this sectionVai 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.
Link to this sectionYAML tập dữ liệu#
Một tệp YAML (Yet Another Markup Language) được sử dụng để xác định cấu hình tập dữ liệu. Nó chứa thông tin về đường dẫn, các lớp và 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 xác định các đường dẫn và lớp depth đơn lẻ.
# 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")Link to this sectionCách sử dụng#
Để huấn luyện mô hình YOLO26n-Depth trên tập dữ liệu Virtual KITTI 2 với kích thước hình ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để biết danh sách đầy đủ các đối số khả dụng, hãy tham khảo trang Training của mô hình.
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)Link to this sectionCác model đã được tiền huấn luyện#
Họ mô hình YOLO26 depth (yolo26n-depth.pt, yolo26s-depth.pt, yolo26m-depth.pt, yolo26l-depth.pt, yolo26x-depth.pt) tự động tải xuống từ bản phát hành v8.4.0 và được huấn luyện trên hỗn hợp đa tập dữ liệu lớn mà Virtual KITTI 2 là một phần trong đó.
Link to this sectionTrí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.