Ultralytics YOLO27:
Get Started

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

يُسند تقدير العمق أحادي العين قيمة عمق بالأمتار إلى كل بكسل في الصورة. وتُخزّن قيم العمق المستهدفة إما في ملفات 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

# ⁨تحميل نموذج عمق مُدرّب مسبقًا⁩
model = YOLO("yolo26n-depth.pt")

# ⁨التدريب على مجموعة بيانات NYU Depth V2⁩
results = model.train(data="nyu-depth.yaml", epochs=100, imgsz=640)

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

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

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

  • 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 عند عدم توفرها. تُستبعد الصور التي يكون ملف العمق الخاص بها مفقودًا أو غير قابل للقراءة أثناء فحص مجموعة البيانات المخزّن مؤقتًا، مع إصدار تحذير.

المساهمون

التعليقات