YOLO Vision 2026:

مجموعة بيانات العمق Virtual KITTI 2#

Virtual KITTI 2 (vKITTI2) هو إعادة إنتاج اصطناعية واقعية للغاية لمشاهد القيادة في KITTI. يقوم بنسخ 5 تسلسلات من مجموعة بيانات KITTI الأصلية ويعيد تقديمها في ظل ظروف طقس وإضاءة متنوعة، مما يوفر حقيقة أرضية كثيفة لكل بكسل.

باعتبارها مجموعة بيانات قيادة خارجية اصطناعية، توفر vKITTI2 نظيراً كثيفاً لبيانات LiDAR الحقيقية والمتفرقة في KITTI، مما يجعلها مصدراً مفيداً لهندسة القيادة الخارجية النظيفة لتدريب نماذج depth estimation الأحادية.

الميزات الرئيسية#

  • إعادة إنشاء اصطناعية واقعية لمشاهد القيادة في KITTI.
  • 5 تسلسلات مستنسخة تم عرضها في ظل ظروف طقس وإضاءة متنوعة.
  • بيئات القيادة الخارجية.
  • حقيقة أرضية كثيفة لكل بكسل (نظير كثيف لبيانات LiDAR المتفرقة في KITTI الحقيقية).
  • نطاق العمق ~80 متراً.
  • تساهم بـ 42,520 صورة (25,780 للتدريب / 16,740 للتحقق) في مجموعة تدريب العمق الخاصة بـ Ultralytics.

هيكل مجموعة البيانات#

تم تقسيم مجموعة بيانات العمق Virtual KITTI 2 إلى مجموعتين فرعيتين:

  1. Train (التدريب): 25,780 صورة مع خرائط عمق كثيفة مقترنة للتدريب.
  2. Val (التحقق): 16,740 صورة مع خرائط عمق كثيفة مقترنة للتحقق أثناء التدريب.

يتم إقران كل صورة RGB بخريطة عمق float32 .npy تخزن مسافات لكل بكسل بالأمتار، وفقًا لـ تنسيق مجموعة بيانات عمق Ultralytics.

الدور في YOLO26-Depth#

تعد Virtual KITTI 2 واحدة من مصادر التدريب في مزيج متعدد مجموعات البيانات الموسع (~2.19 مليون صورة) المستخدم لتدريب نماذج Ultralytics YOLO26-Depth مسبقاً. ضمن هذا المزيج، توفر vKITTI2 نظيراً اصطناعياً كثيفاً للقيادة الخارجية مقابل حقيقة أرضية KITTI LiDAR الحقيقية المتفرقة.

لا يوجد معيار vKITTI2 مستقل في هذا الإعداد. بدلاً من ذلك، يتم تقييم النماذج الناتجة وفقاً لمعايير العمق أحادية العين القياسية: NYU Depth V2 و KITTI و Make3D و ETH3D و iBims-1.

YAML مجموعة البيانات#

يُستخدم ملف YAML (Yet Another Markup Language) لتحديد تكوين مجموعة البيانات. وهو يحتوي على معلومات حول مسارات مجموعة البيانات، والفئات، وغيرها من المعلومات ذات الصلة. بالنسبة إلى 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 *.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")

الاستخدام#

لتدريب نموذج YOLO26n-Depth على مجموعة بيانات Virtual KITTI 2 بحجم صورة 640، يمكنك استخدام مقتطفات الرموز البرمجية التالية. للحصول على قائمة شاملة بالوسائط المتاحة، راجع صفحة Training الخاصة بالنموذج.

مثال على التدريب
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 جزءاً منه. استكشف YOLO26x-depth على منصة Ultralytics.

الاقتباسات والشكر#

إذا كنت تستخدم مجموعة بيانات 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 على إتاحة مجموعة بيانات القيادة الاصطناعية هذه لمجتمع رؤية الكمبيوتر.

المساهمون

التعليقات