YOLO Vision 2026:

نظرة عامة على مجموعات بيانات تقدير العمق#

يُسنِد تقدير العمق أحادي العين قيمة عمق بالمتر إلى كل بكسل في الصورة. وتستخدم أهداف العمق ملفات PNG بتدرج رمادي 16-بت مُقاسة أو مصفوفات NPY بالفاصلة العائمة بالمتر.

يشرح هذا الدليل تنسيق مجموعة البيانات الذي تستخدمه نماذج Ultralytics YOLO لتقدير العمق، ويسرد إعدادات مجموعات البيانات المضمنة المتاحة للتدريب والتحقق.

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

تنسيق خريطة العمق#

تتكون كل عينة تدريب من صورة RGB واحدة وملف عمق مقترن واحد. تُقسَم قيم PNG على depth_scale الاختياري على مستوى مجموعة البيانات لإنتاج قيم بالمتر. القيمة الافتراضية هي 1000، لذا تمثل قيمة 1500 مقدار 1.5 متر. ويعني الرمز 0 أن القيمة غير صالحة؛ ولا تحتاج ملفات PNG إلى بيانات وصفية مضمنة.

  • تستخدم ملفات العمق .png (المفضّل) أو .npy. يجب أن تكون خرائط PNG صورًا بتدرج رمادي ثنائية الأبعاد من نوع uint16. ويجب أن تكون مصفوفات NPY ثنائية الأبعاد وبالفاصلة العائمة، مع قيم بالمتر.
  • عيّن depth_scale فقط عندما لا تستخدم ملفات PNG اصطلاح المليمتر الافتراضي. فعلى سبيل المثال، تستخدم KITTI القيمة 256، بينما تستخدم Virtual KITTI 2 القيمة 100.
  • يجب أن يكون لكل ملف عمق نفس الجذر الذي يحمله ملف الصورة المطابق له (مثلًا، يقترن scene_001.png بـ scene_001.jpg).
  • قد تكون خرائط العمق أصغر من صور RGB الخاصة بها ما دام معدل الأبعاد متطابقًا؛ إذ يعيد التدريب تحجيمها في الذاكرة.
  • يعثر محمّل مجموعة البيانات على ملفات العمق باستبدال مكوّن الدليل images بـ depth، مع تفضيل .png والرجوع إلى .npy عند عدم توفره.
  • تُعامل وحدات البكسل ذات العمق ≤ 0 على أنها غير صالحة وتُستبعد من حساب الخسارة والمقاييس.

نظرًا إلى أن الرمز 0 محجوز لوحدات البكسل غير الصالحة، توفر صورة PNG من نوع uint16 عدد 65,535 قيمة عمق موجبة. ويتحكم المقياس في كل من الدقة والنطاق:

الاصطلاحdepth_scaleالدقةالعمق الأقصى
الافتراضي / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.99609375 m
Virtual KITTI 21001 cm655.35 m

هذه حدود التخزين وليست حدودًا قصوى موصى بها للتدريب. ويمكن لمجموعة البيانات تعيين max_depth أصغر بشكل مستقل لمعايرة الخسارة أو التقييم.

يحافظ التخطيط القياسي على الصور وخرائط العمق في مجلدات متوازية:

dataset/
├── images/
│   ├── train/
│   └── val/
└── depth/
    ├── train/
    └── val/

على سبيل المثال، تقترن صورة موجودة في images/train/scene_001.jpg بخريطة عمق موجودة في depth/train/scene_001.png.

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

تُهيّأ مجموعات بيانات تقدير العمق باستخدام ملفات YAML. والحقول الرئيسية هي:

المفتاحالوصف
pathدليل جذر مجموعة البيانات.
trainمسار صور التدريب بالنسبة إلى path، أو مسار مطلق.
valمسار صور التحقق بالنسبة إلى path، أو مسار مطلق.
testمسار اختياري لصور الاختبار.
ncعدد الفئات — يكون دائمًا 1 لتقدير العمق.
namesتعيين أسماء الفئات — يكون دائمًا {0: depth}.
depth_scaleعدد وحدات PNG الاختيارية لكل متر؛ والقيمة الافتراضية هي 1000.
ultralytics/cfg/datasets/nyu-depth.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# NYU Depth V2 dataset for monocular depth estimation
# Documentation: https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html
# 795 train + 654 val (Eigen test split) images, 480x640, indoor scenes, depth in meters
# Example usage: yolo depth train data=nyu-depth.yaml model=yolo26n-depth.pt
# parent
# ├── ultralytics
# └── datasets
#     └── nyu-depth-png  ← downloads here (≈1.5 GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: nyu-depth-png # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 795 images
val: images/val # val images (relative to 'path') 654 images

# Depth maps are paired uint16 millimeter PNGs under depth/<split>/, resolved by
# swapping '/images/' -> '/depth/' on each image path.

# Classes
nc: 1
names:
  0: depth

channels: 3
depth_scale: 1000

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/nyu-depth-png.zip

الاستخدام#

درّب نموذج YOLO26 لتقدير العمق باستخدام Python أو CLI:

مثال
from ultralytics import YOLO

# Load a pretrained depth model
model = YOLO("yolo26n-depth.pt")

# Train on the NYU Depth V2 dataset
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

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

تُدرَّب نماذج YOLO26 للعمق مسبقًا على مزيج واسع من مجموعات البيانات (~2.19M صورة) يمتد من النطاقات الداخلية (≤10 m) إلى النطاقات الخارجية (~80 m)، ثم تُقيَّم دون تدريب إضافي عبر خمسة معايير مرجعية. ولكل مجموعة بيانات صفحة مخصصة:

تصحيح الأخطاء

  • Depth8 — 8 صور SUN RGB-D في أرشيف حجمه 1.3 MB يُنزَّل تلقائيًا، لاختبار مسار المعالجة بسرعة

مصادر التدريب المسبق

  • ARKitScenes — بيئات داخلية حقيقية، وLiDAR من Apple ARKit (أكبر مصدر حقيقي)
  • SUN RGB-D — بيئات داخلية حقيقية، وبيانات RGB-D متعددة المستشعرات
  • DIODE — بيئات داخلية وخارجية حقيقية، وبيانات حقيقة أرضية كثيفة من ماسح ليزري
  • Hypersim — بيئات داخلية تركيبية واقعية ضوئيًا
  • TartanAir — بيئات تركيبية ومتنوعة
  • Virtual KITTI 2 — قيادة خارجية تركيبية
  • KITTI — قيادة خارجية حقيقية، وLiDAR من Velodyne (وهو أيضًا معيار مرجعي للتقييم)
  • ImageNet (موسوم بتسميات زائفة) — مجموعة تقطير موسومة بتسميات زائفة، وهي أكبر مصدر منفرد

معايير التقييم المرجعية

  • NYU Depth V2 — المعيار المرجعي الأساسي للبيئات الداخلية
  • KITTI Eigen — معيار مرجعي للقيادة الخارجية
  • ETH3D — بيئات داخلية وخارجية عالية الدقة
  • Make3D — بيئات خارجية، وخارج توزيع البيانات
  • iBims-1 — بيئات داخلية عالية الجودة (الحواف والأسطح المستوية)

يُدرج مستوى الدقة لكل نموذج على هذه المعايير المرجعية والأوزان المُدرَّبة مسبقًا القابلة للتنزيل في صفحة مهمة تقدير العمق. ويجمع ملف YAML لمجموعة البيانات، الذي يسرد حقله train أدلة صور متعددة، هذه المصادر للتدريب المختلط واسع النطاق.

إضافة مجموعة البيانات الخاصة بك#

  1. احفظ صور RGB ضمن مجلدات التقسيم مثل images/train وimages/val.
  2. احفظ ملف PNG أو NPY واحدًا للعمق لكل صورة ضمن مجلدي depth/train وdepth/val المطابقين، باستخدام جذر الملف نفسه المستخدم للصورة. استخدم save_depth_png() لتحويل مصفوفات الأمتار إلى ملفات PNG مدمجة بالمليمتر.
  3. تأكد من أن قيم العمق بعد فك الترميز بوحدة المتر، وأن تستخدم وحدات البكسل غير الصالحة أو المفقودة 0 أو قيمًا سالبة.
  4. أنشئ YAML لمجموعة البيانات باستخدام path وtrain وval وnc: 1 وnames: {0: depth}.
path: path/to/my-depth-dataset
train: images/train
val: images/val

nc: 1
names:
    0: depth

# Optional: PNG integer units per meter (default 1000)
depth_scale: 1000

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

  • استخدم ملفات PNG بتدرج رمادي 16-بت مُقاسة لمجموعات البيانات المدمجة. افتراضيًا، تمثل كل خطوة صحيحة مليمترًا واحدًا؛ عيّن depth_scale في ملف YAML لمجموعة البيانات لاستخدام مقياس آخر. ويحوّل ultralytics.data.utils.save_depth_png() مصفوفات الأمتار إلى التنسيق الافتراضي. كما تعمل خرائط NPY بالفاصلة العائمة وبالمتر مباشرةً.

  • تُعامل وحدات البكسل ذات قيم العمق ≤ 0 على أنها غير صالحة، ويُحجب تأثيرها من حساب الخسارة وتقييم المقاييس معًا. ويشمل ذلك تشويش المستشعر، ومناطق السماء، والأسطح العاكسة التي يتعذر قياس العمق فيها بشكل موثوق.

  • يعرض التحقق من تقدير العمق مجموعة المقاييس القياسية لـ Depth Anything:

    • delta1 / delta2 / delta3 — النسبة المئوية لوحدات البكسل الواقعة ضمن عتبات 1.25× و1.25²× و1.25³×. الأعلى أفضل.
    • abs_rel — متوسط الخطأ النسبي المطلق. الأقل أفضل.
    • rmse — الجذر التربيعي لمتوسط مربع الخطأ بالأمتار. الأقل أفضل.
    • silog — الخطأ اللوغاريتمي غير المتأثر بالمقياس. الأقل أفضل.
  • نعم. يجب أن يشترك كل ملف .png أو .npy للعمق في الجذر نفسه مع الصورة المقابلة. ويستنتج المحمّل مسار العمق باستبدال مكوّن الدليل images بـ depth، مع تفضيل PNG والرجوع إلى NPY عند عدم توفره. وتُستبعد الصور التي يكون ملف العمق الخاص بها مفقودًا أو غير قابل للقراءة أثناء فحص مجموعة البيانات المخزنة مؤقتًا، مع إصدار تحذير.

المساهمون

التعليقات