Ultralytics YOLO27:

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

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

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

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

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

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

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

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

تُقرن كل صورة RGB بصورة عمق PNG من النوع uint16 ومُقاسة، وفق تنسيق مجموعة بيانات العمق في Ultralytics. وتستخدم ملفات PNG المصدرية والمحوّلة السنتيمترات (depth_scale: 100)، مما يحافظ على نطاق التدريب البالغ 80 m.

دور ARKitScenes في YOLO26-Depth#

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

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

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

الاستخدام#

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

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

الأسئلة الشائعة#

  • مجموعة بيانات Virtual KITTI 2 (vKITTI2) هي إعادة إنشاء اصطناعية واقعية للغاية لخمس تسلسلات قيادة لـ KITTI، وتم إعادة تقديمها في ظروف طقس وإضاءة متغيرة. وهي تساهم بـ 42,520 صورة (25,780 للتدريب، 16,740 للتحقق) مع عمق كثيف لكل بكسل يصل إلى حوالي 80 متراً لمزيج تدريب YOLO26-Depth.

  • عمق LiDAR لبيانات KITTI الحقيقية متفرق، حيث يتم تصنيف حوالي 16 إلى 20% فقط من البكسلات، بينما توفر مجموعة بيانات vKITTI2 قيمة عمق كثيفة لكل بكسل من نفس نوع مشهد القيادة. ومعاً، تمنحان النموذج إحصائيات المستشعر الحقيقي والهندسة الخارجية الكاملة.

  • قم بتشغيل yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640، أو استخدم مثال Python في قسم Usage. تستخدم ملفات PNG الخاصة بالعمق سنتيمترات (depth_scale: 100)، وهو ما يقوم ملف YAML المدمج بتعيينه بالفعل.

التعليقات