رؤية YOLO 2026:

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

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

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

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

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

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

  • تستخدم ملفات العمق .png (مفضل) أو .npy. يجب أن تكون خرائط PNG صور تدرج رمادي 2D uint16. يجب أن تكون مصفوفات NPY ثنائية الأبعاد (2D) وبنقطة عائمة، مع قيم بالأمتار.
  • قم بتعيين 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الدليل الجذري لمجموعة البيانات.
trainTraining image path relative to path, or an absolute path.
valValidation image path relative to path, or an absolute 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.19 مليون صورة) يمتد من النطاقات الداخلية (≤10 م) إلى الخارجية (حوالي 80 م)، ثم تم تقييمها بدون تدريب مسبق عبر خمسة معايير قياسية. كل مجموعة بيانات لها صفحة مخصصة:

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

  • Depth8 — 8 صور SUN RGB-D في أرشيف ذاتي التنزيل بحجم 1.3 ميجابايت، لاختبار خطوط الأنابيب السريعة

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

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

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

  • 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. Create a dataset YAML with path, train, val, nc: 1, and 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. يتم إسقاط الصور التي يكون ملف عمقها مفقودًا أو غير قابل للقراءة أثناء فحص مجموعة البيانات المخزنة مؤقتًا مع تحذير.

المساهمون

التعليقات