كتابة ملف YAML لمجموعة البيانات
اكتب ملف data.yaml لتحديد مجلداتك لـ Ultralytics وتسمية فئاتك، واجعل مساراته صالحة من أي مكان، واختبره سريعًا باستخدام yolo val.
ملف YAML لمجموعة البيانات هو العقد الذي يربط مجلداتك بكل أمر من أوامر Ultralytics. إذا أخطأت في مسار، فلن يعمل شيء؛ وإذا أخطأت في ترتيب الفئات، فسيعمل كل شيء، لكن كل تنبؤ سيحمل اسمًا خاطئًا دون أي تحذير.
في هذا الدرس، ستكتب data.yaml لمجموعة بيانات الحبوب، وستتعلم بالتحديد كيف يحل Ultralytics مساراتها كي تعمل على جهاز زميلك أيضًا، وستتحقق من ذلك بتشغيل التحقق من الصحة في سطر واحد يمنحك كذلك خط الأساس الذي ينبغي لتدريبك تجاوزه.
عملي
كتابة الملف#

تحتوي مجموعات البيانات في منصة Ultralytics على فئاتها وتقسيماتها الخاصة، ويشير التدريب إليها بمعرّف URI مثل data=ul://username/datasets/name. أما على جهازك، فيؤدي ملف YAML دور هذا العقد. احفظ الملف باسم my_dataset/data.yaml:
path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test # optional held-out split
names:
0: pill| المفتاح | مطلوب | المعنى |
|---|---|---|
path | لا | جذر مجموعة البيانات؛ ويكون كل من train وval وtest مسارات نسبية إليه. إذا حُذف، فيُستخدم المجلد الذي يحتوي ملف YAML نفسه. |
train, val | نعم | مجلد صور، أو ملف .txt يسرد مسارات الصور، أو قائمة بأي منهما |
test | لا | صور الاختبار المحجوبة عن التدريب، ويُقيَّم النموذج عليها باستخدام split=test فقط |
names | نعم | فهرس الفئة ← الاسم؛ ويحدد عدد عناصر القائمة عدد الفئات |
download | لا | عنوان URL أو نص برمجي يجلب مجموعة البيانات عند غياب صورها |
يشير train وval إلى مجلدي الصور؛ ويُعثر على التسميات باستبدال images بـ labels. يُعد ملف YAML لمجموعة coco8 مرجعًا أدنى صالحًا للعمل، ويوضح ملف YAML لمجموعة VOC مثالًا أكبر.
مثال تطبيقي: اختبره سريعًا#
يُعد التحقق من الصحة باستخدام النموذج المدرّب مسبقًا أسرع اختبار شامل. فهو يقرأ كل صورة وتسمية، ويبلغ عن المشكلات، ويحسب المقاييس:
yolo val model=yolo26n.pt data=my_dataset/data.yamlval: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.0256 0.00251 0.001 0.0002اقرأ النتائج بالترتيب:
Scanning my_dataset/labels/val: المجلد الذي حدده Ultralytics فعليًا. تحقق من أنه المجلد الذي قصدته.23 images, 0 backgrounds, 0 corrupt: لكل صورة تحقق من الصحة ملف تسمية صالح. إذا ظهرت صور خلفية لم تقصدها أو كان أي عدد غير صحيح، فارجع إلى الدرس السابق.399عنصرًا: تحتوي ملفات التسميات على 399 حبّة.- mAP50-95 بقيمة 0.0002: النتيجة صحيحة وليست مؤشرًا على عطل. لا تتضمن COCO فئة للحبوب، لذا لا يستطيع النموذج المدرّب مسبقًا العثور عليها. وهذه النتيجة القريبة من الصفر هي خط الأساس. عندما تكون فئاتك موجودة في COCO، مثل الأشخاص أو السيارات، يعطي الأمر نفسه خط أساس ذا دلالة.
اجعل المسارات صالحة من أي مكان#
ترجع معظم أخطاء «لم يُعثر على الصور» إلى المسارات. يحل Ultralytics المسار path على النحو التالي:
datasets_dir إعداد في Ultralytics؛ ويعرضه yolo settings، ويوضح دليل الإعدادات كيفية تغييره. تعتمد مجموعات البيانات المضمنة على هذا الخيار الاحتياطي: يعيّن coco8.yaml قيمة path: coco8 إضافةً إلى عنوان URL لـ download:، ولذلك يعمل data=coco8.yaml من أي مجلد.
قواعد اتخاذ القرار:
- هل تعمل وحدك ودائمًا من مجلد المشروع؟ يكفي حينها استخدام مسار نسبي
path. - زملاء الفريق أو الخوادم أو CI أو دفاتر الملاحظات في مجلدات أخرى؟ استخدم مسارًا مطلقًا
path. - هل البيانات موجودة في مكان آخر وينبغي جلبها تلقائيًا؟ أضف
download:مع رابط ZIP.
تعامل مع فهارس الفئات على أنها ثابتة ملزمة#
العدد الصحيح في بداية كل سطر تسمية هو فهرس في names. تتحقق Ultralytics من النطاق — Label class 1 exceeds dataset class count 1 — لكنها لا تستطيع التحقق من المعنى. إذا صدّرت أداة التوسيم لديك 0: forklift, 1: person بينما يذكر ملف YAML لديك 0: person, 1: forklift، فسينجح التدريب، وستبدو mAP في التحقق جيدة، لكن كل تنبؤ سيحمل اسمًا خاطئًا. اجعل لقائمة الفئات مصدرًا موحدًا للحقيقة، تتشاركه أداة التوسيم ونص التحويل وملف YAML وشيفرة النشر.
تجنّب هذه الأخطاء#
العَرَض: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val'، مع ملاحظة عن مجلد تنزيل مجموعة البيانات. السبب: شغّلت الأمر من مجلد آخر، لذا لم يكن path النسبي موجودًا، وبحث Ultralytics بدلًا من ذلك ضمن datasets_dir. الحل: شغّل الأمر من مجلد المشروع، أو اجعل path مسارًا مطلقًا.
يؤدي تبديل الإدخالات أو حذفها من names دون إعادة وضع التسميات إلى تغيير معنى كل تسمية بصمت. يتدرّب النموذج ويتنبأ بالفئات الخاطئة دون أي خطأ. أضف الفئات الجديدة في النهاية باستخدام الفهرس التالي المتاح، ولا تُعد ترقيم الفئات الحالية مطلقًا.
يدمج val: [images/val_day, images/val_night] كلا المجلدين في مجموعة تحقق واحدة ويعرض قيمة واحدة. لرؤية نتائج النهار والليل كلٌّ على حدة — أو مجموعة انحدار منتقاة إلى جانب عينة إنتاج حديثة — احتفظ بملف YAML لكل مجموعة وتحقق من كل واحدة. يتناول تقسيم مجموعة البيانات على النحو الصحيح تقسيم test الذي تقيّمه مرة واحدة فقط باستخدام split=test.
إعدادات التدريب مثل زيادة البيانات والتخزين المؤقت هي وسيطات لـ train وليست مفاتيح YAML؛ وتجدها جميعًا في مرجع الإعدادات.
عرض الحل
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
all 23 399 0.0256 0.00251 0.001 0.0002من مجلد آخر، فشل الإصدار النسبي مع Dataset ... images not found لأن my_dataset لم يكن موجودًا هناك، كما لم توجد نسخة في المسار البديل datasets_dir. يزيل المسار المطلق path هذا البحث. تبلغ قيمة mAP50-95 الأساسية نحو 0: فالنموذج المُسبق التدريب لا يتضمن فئة للأقراص.