تدريب YOLOv5 على بيانات مخصّصة#
📚 يوضّح هذا الدليل كيفية تدريب مجموعة بيانات مخصّصة باستخدام نموذج YOLOv5 🚀. يُعدّ تدريب النماذج المخصّصة خطوة أساسية لتكييف حلول الرؤية الحاسوبية مع تطبيقات واقعية محددة تتجاوز اكتشاف الأجسام العام.
قبل البدء#
أولًا، تأكّد من إعداد البيئة اللازمة. استنسخ مستودع YOLOv5 وثبّت التبعيات المطلوبة من requirements.txt. تُعدّ بيئة Python>=3.8.0 مع PyTorch>=1.8 ضرورية. تُنزَّل النماذج ومجموعات البيانات تلقائيًا من أحدث إصدار لـ YOLOv5 إذا لم تكن موجودة محليًا.
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependenciesالتدريب على بيانات مخصّصة#
يُعدّ تطوير نموذج مخصّص لـ اكتشاف الأجسام عملية تكرارية:
- جمع الصور وتنظيمها: اجمع صورًا مرتبطة بمهمتك المحددة. تُعدّ البيانات عالية الجودة والمتنوعة أمرًا بالغ الأهمية. راجع دليلنا حول جمع البيانات ووضع التعليقات التوضيحية.
- وضع تسميات للكائنات: أضف تعليقات توضيحية دقيقة إلى الكائنات محل الاهتمام داخل صورك.
- تدريب نموذج: استخدم البيانات الموسومة لـتدريب نموذج YOLOv5. استفد من التعلّم بالنقل من خلال البدء بأوزان مدرَّبة مسبقًا.
- النشر والتنبؤ: استخدم النموذج المدرَّب لإجراء الاستدلال على بيانات جديدة لم يرها النموذج من قبل.
- جمع الحالات الحدّية: حدّد السيناريوهات التي يكون فيها أداء النموذج ضعيفًا (الحالات الحدّية)، وأضف بيانات مشابهة إلى مجموعة بياناتك لتحسين المتانة. كرّر الدورة.
توفّر منصة Ultralytics حلًا مبسّطًا بلا برمجة لهذه الدورة الكاملة من عمليات تعلّم الآلة (MLOps)، بما في ذلك إدارة مجموعات البيانات وتدريب النماذج ونشرها.
توفّر Ultralytics خيارين للترخيص لاستيعاب سيناريوهات الاستخدام المتنوعة:
- ترخيص AGPL-3.0: هذا الترخيص مفتوح المصدر المعتمد من OSI مثالي للطلاب والباحثين والمهتمين المتحمسين للتعاون المفتوح ومشاركة المعرفة. ويشترط مشاركة الأعمال المشتقة بموجب الترخيص نفسه. راجع ملف LICENSE للاطلاع على التفاصيل الكاملة.
- ترخيص المؤسسات: يتيح هذا الترخيص، للاستخدام في التطوير والإنتاج، دمج برامج Ultralytics ونماذج الذكاء الاصطناعي بسلاسة في منتجات وخدمات الأعمال، بما في ذلك الأدوات الداخلية وسير العمل المؤتمت وعمليات النشر الإنتاجية، مع تجاوز متطلبات المصدر المفتوح الخاصة بـ AGPL-3.0. للبدء، يُرجى التواصل معنا عبر ترخيص Ultralytics.
استكشف خيارات الترخيص المتاحة لدينا بمزيد من التفصيل في صفحة تراخيص Ultralytics.
قبل بدء التدريب، يُعدّ إعداد مجموعة البيانات أمرًا أساسيًا.
1. إنشاء مجموعة بيانات#
تتطلب نماذج YOLOv5 بيانات موسومة لتعلّم الخصائص المرئية لفئات الكائنات. ويُعدّ تنظيم مجموعة البيانات بشكل صحيح أمرًا أساسيًا.
1.1 إنشاء dataset.yaml#
يحدّد ملف إعداد مجموعة البيانات (مثل coco128.yaml) بنية مجموعة البيانات وأسماء الفئات والمسارات إلى أدلة الصور. وتُعدّ COCO128 مجموعة بيانات نموذجية صغيرة تتكوّن من أول 128 صورة من مجموعة بيانات COCO الكبيرة. وهي مفيدة لاختبار مسار التدريب بسرعة وتشخيص مشكلات محتملة مثل فرط التكيّف.
تتضمن بنية ملف dataset.yaml ما يلي:
path: الدليل الجذري الذي يحتوي على مجموعة البيانات.trainوvalوtest: مسارات نسبية منpathإلى الأدلة التي تحتوي على الصور أو الملفات النصية التي تسرد مسارات الصور لمجموعات التدريب والتحقق والاختبار.names: قاموس يربط فهارس الفئات، بدءًا من 0، بأسماء الفئات المقابلة لها.
يمكنك تعيين path إلى دليل مطلق (مثل /home/user/datasets/coco128) أو إلى مسار نسبي مثل ../datasets/coco128 عند بدء التدريب من الجذر الخاص بمستودع YOLOv5.
فيما يلي بنية coco128.yaml (عرض على GitHub):
# Dataset root directory relative to the yolov5 directory
path: coco128
# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images
# Classes (example using 80 COCO classes)
names:
0: person
1: bicycle
2: car
# ... (remaining COCO classes)
77: teddy bear
78: hair drier
79: toothbrush1.2 الاستفادة من النماذج لوضع التسميات تلقائيًا#
يُعدّ وضع التسميات يدويًا النهج الشائع، لكنه يستغرق وقتًا طويلًا. ويمكن للنماذج الأساسية أتمتة التعليقات التوضيحية أو تنفيذها شبه تلقائيًا وتسريع إنشاء مجموعة البيانات. ومن أمثلة النماذج التي يمكنها المساعدة في إنشاء التسميات:
- Google Gemini: تمتلك النماذج الكبيرة متعددة الوسائط مثل Gemini قدرات قوية على فهم الصور. ويمكن توجيهها لتحديد الكائنات داخل الصور وتحديد مواقعها، وإنشاء مربعات إحاطة أو أوصاف يمكن تحويلها إلى تسميات بتنسيق YOLO. استكشف إمكاناتها في دفتر البرنامج التعليمي المتاح.
- SAM2 (نموذج تقسيم أي شيء 2): يمكن للنماذج الأساسية التي تركز على التقسيم، مثل SAM2، تحديد الكائنات وتعيين حدودها بدقة عالية. وعلى الرغم من أنها مخصصة أساسًا للتقسيم، يمكن غالبًا تحويل الأقنعة الناتجة إلى تعليقات توضيحية لمربعات الإحاطة مناسبة لمهام اكتشاف الأجسام.
- YOLOWorld: يوفّر هذا النموذج إمكانات اكتشاف ذات مفردات مفتوحة. ويمكنك تقديم أوصاف نصية للكائنات التي تهمك، ليتمكن YOLOWorld من تحديد مواقعها في الصور من دون تدريب سابق على تلك الفئات المحددة. ويمكن استخدامه نقطةَ انطلاق لإنشاء تسميات أولية، ثم تحسينها لاحقًا.
يمكن أن يوفّر استخدام هذه النماذج خطوة «وضع تسميات مسبقًا»، مما يقلل الجهد اليدوي المطلوب. ومع ذلك، من الضروري مراجعة التسميات المنشأة تلقائيًا وتحسينها لضمان الدقة والاتساق، إذ تؤثر جودتها مباشرةً في أداء نموذج YOLOv5 المدرَّب. بعد إنشاء تسمياتك (وربما تحسينها)، تأكّد من التزامها بتنسيق YOLO: ملف *.txt واحد لكل صورة، بحيث يمثّل كل سطر كائنًا بالتنسيق class_index x_center y_center width height (إحداثيات مطبّعة وفئة مفهرسة بدءًا من الصفر). إذا لم تحتوِ الصورة على كائنات محل اهتمام، فلا حاجة إلى ملف *.txt مقابل لها.
تتسم مواصفات ملف *.txt بتنسيق YOLO بالدقة:
- صف واحد لكل مربع إحاطة.
- يجب أن يحتوي كل صف على:
class_index x_center y_center width height. - يجب تطبيع الإحداثيات إلى نطاق يتراوح بين 0 و1. ولتحقيق ذلك، اقسم قيم البكسل لـ
x_centerوwidthعلى العرض الكلي للصورة، واقسمy_centerوheightعلى الارتفاع الكلي للصورة. - تُفهرس فهارس الفئات بدءًا من الصفر (أي إن الفئة الأولى يمثّلها
0، والثانية1، وهكذا).

سيبدو ملف التسمية المقابل للصورة أعلاه، والذي يحتوي على كائنين من نوع «person» (فهرس الفئة 0) وكائن واحد من نوع «tie» (فهرس الفئة 27)، كما يلي:

1.3 تنظيم الأدلة#
نظّم دليل مجموعات البيانات كما هو موضح أدناه. يتوقع YOLOv5 افتراضيًا أن يكون دليل مجموعة البيانات (مثل /coco128) داخل مجلد /datasets يقع بجوار دليل مستودع /yolov5.
يحدد YOLOv5 تلقائيًا تسميات كل صورة باستبدال آخر ظهور لـ/images/ في مسار الصورة بـ/labels/. مثال:
../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label fileبنية الأدلة الموصى بها هي:
/datasets/
└── coco128/ # Dataset root
├── images/
│ ├── train2017/ # Training images
│ │ ├── 000000000009.jpg
│ │ └── ...
│ └── val2017/ # Validation images (optional if using same set for train/val)
│ └── ...
└── labels/
├── train2017/ # Training labels
│ ├── 000000000009.txt
│ └── ...
└── val2017/ # Validation labels (optional if using same set for train/val)
└── ...
2. اختيار نموذج#
اختر نموذجًا مدرَّبًا مسبقًا لبدء عملية التدريب. يؤدي البدء بأوزان مدرَّبة مسبقًا إلى تسريع التعلّم بدرجة كبيرة وتحسين الأداء مقارنةً بالتدريب من الصفر. يوفّر YOLOv5 أحجامًا مختلفة من النماذج، يوازن كل منها بين السرعة والدقة بطريقة مختلفة. فعلى سبيل المثال، يُعدّ YOLOv5s ثاني أصغر النماذج وأسرعها، وهو مناسب للبيئات محدودة الموارد. راجع جدول README للمقارنة التفصيلية بين جميع النماذج المتاحة.

3. التدريب#
ابدأ تدريب النموذج باستخدام البرنامج النصي train.py. وتشمل الوسائط الأساسية ما يلي:
--img: يحدّد حجم الصورة المُدخل (مثل--img 640). تؤدي الأحجام الأكبر عمومًا إلى دقة أفضل، لكنها تتطلب قدرًا أكبر من ذاكرة GPU.--batch: يحدّد حجم الدفعة (مثل--batch 16). اختر أكبر حجم يمكن لـ GPU التعامل معه.--epochs: يحدّد العدد الإجمالي لـعصور التدريب (مثل--epochs 100). ويمثّل العصر الواحد مرورًا كاملًا على مجموعة بيانات التدريب بأكملها.--data: مسار ملفdataset.yamlالخاص بك (مثل--data coco128.yaml).--weights: مسار ملف الأوزان الأولية. يُنصح بشدة باستخدام أوزان مدرَّبة مسبقًا (مثل--weights yolov5s.pt) لتحقيق تقارب أسرع ونتائج أفضل. وللتدريب من الصفر (وهو غير مستحسن إلا إذا كانت لديك مجموعة بيانات كبيرة جدًا واحتياجات محددة)، استخدم--weights '' --cfg yolov5s.yaml.
تُنزَّل الأوزان المدرَّبة مسبقًا تلقائيًا من أحدث إصدار لـ YOLOv5 إذا لم تكن موجودة محليًا.
# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt💡 استخدم --cache ram أو --cache disk لتخزين صور مجموعة البيانات مؤقتًا في RAM أو على القرص المحلي، على التوالي. يؤدي ذلك إلى تسريع التدريب بدرجة كبيرة، لا سيما عندما تكون عمليات الإدخال/الإخراج (Input/Output) لمجموعة البيانات عنق زجاجة. لاحظ أن هذا يتطلب مساحة كبيرة في RAM أو على القرص.
💡 احرص دائمًا على التدريب باستخدام مجموعات بيانات مخزنة محليًا. قد يكون الوصول إلى البيانات من محركات أقراص الشبكة (مثل Google Drive) أو وحدات التخزين البعيدة أبطأ بكثير ويعيق أداء التدريب. وغالبًا ما يُعدّ نسخ مجموعة البيانات إلى SSD محلي أفضل ممارسة.
تُحفَظ جميع مخرجات التدريب، بما في ذلك الأوزان والسجلات، في الدليل runs/train/. تنشئ كل جلسة تدريب دليلًا فرعيًا جديدًا (مثل runs/train/exp وruns/train/exp2 وغيرهما). وللاستفادة من تجربة تفاعلية وعملية، استكشف قسم التدريب في دفاترنا التعليمية الرسمية:
4. التصور المرئي#
يتكامل YOLOv5 بسلاسة مع أدوات متنوعة لتصوير تقدّم التدريب وتقييم النتائج ومراقبة الأداء في الوقت الفعلي.
التسجيل والتصور المرئي باستخدام Comet#
يتكامل Comet بالكامل لتتبّع التجارب بصورة شاملة. صوّر المقاييس مباشرةً، واحفظ المعلمات الفائقة، وأدر مجموعات البيانات ونقاط فحص النماذج، وحلّل تنبؤات النموذج باستخدام لوحات Comet المخصّصة التفاعلية.
البدء سهل ومباشر:
pip install comet_ml # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!تعمّق في الميزات المدعومة في دليل تكامل Comet. تعرّف على المزيد حول إمكانات Comet من خلال وثائقها الرسمية. جرّب دفتر Comet على Colab للحصول على عرض توضيحي مباشر:
التسجيل والأتمتة باستخدام ClearML#
يتيح تكامل ClearML تتبّعًا تفصيليًا للتجارب وإدارة إصدارات مجموعات البيانات، بل وتنفيذًا عن بُعد لعمليات التدريب. فعّل ClearML باتباع الخطوات البسيطة التالية:
- ثبّت الحزمة:
pip install clearml - هيّئ ClearML: شغّل
clearml-initمرة واحدة للاتصال بخادم ClearML الخاص بك (سواء كان مستضافًا ذاتيًا أو ضمن الخطة المجانية).
يلتقط ClearML تلقائيًا تفاصيل التجارب وعمليات رفع النماذج والمقارنات وتغييرات التعليمات البرمجية غير المُرسلة والحزم المثبّتة، مما يضمن قابلية إعادة الإنتاج بالكامل. ويمكنك بسهولة جدولة مهام التدريب على وكلاء بعيدين وإدارة إصدارات مجموعات البيانات باستخدام ClearML Data. استكشف دليل تكامل ClearML للاطلاع على التفاصيل الشاملة.
التسجيل المحلي#
تُسجّل نتائج التدريب تلقائيًا باستخدام TensorBoard، وتُحفظ كملفات CSV داخل دليل التجربة المحدد (مثل runs/train/exp). وتتضمن البيانات المسجّلة ما يلي:
- خسارة التدريب والتحقق ومقاييس الأداء.
- صور نموذجية توضّح عمليات زيادة البيانات المطبّقة (مثل الفسيفساء).
- تسميات الحقيقة الأساسية إلى جانب تنبؤات النموذج للفحص المرئي.
- مقاييس تقييم رئيسية مثل منحنيات Precision-Recall (PR).
- مصفوفات الالتباس لتحليل الأداء التفصيلي حسب الفئة.
يُحدَّث ملف results.csv بعد كل عصر، ويُرسَم على شكل results.png عند اكتمال التدريب. ويمكنك أيضًا رسم أي ملف results.csv يدويًا باستخدام دالة الأداة المساعدة المتاحة:
from utils.plots import plot_results
# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv") # This will generate 'results.png' in the same directory
5. الخطوات التالية#
بعد اكتمال التدريب بنجاح، تُحفظ أفضل نقطة فحص للنموذج أداءً (best.pt) وتصبح جاهزة للنشر أو لمزيد من التحسين. وتشمل الخطوات التالية المحتملة:
- إجراء الاستدلال على صور أو مقاطع فيديو جديدة باستخدام النموذج المدرَّب عبر CLI أو Python.
- إجراء التحقق لتقييم دقة النموذج وقدراته على التعميم على تقسيمات مختلفة للبيانات (مثل مجموعة اختبار محجوزة).
- صدّر النموذج إلى تنسيقات نشر متنوعة مثل ONNX أو TensorFlow SavedModel أو TensorRT لإجراء استدلال محسّن على منصات متنوعة.
- استخدم تقنيات ضبط المعلمات الفائقة لتحقيق مكاسب إضافية محتملة في الأداء.
- واصل تحسين نموذجك باتباع نصائح الحصول على أفضل نتائج التدريب، وإضافة المزيد من البيانات المتنوعة والصعبة بصورة تكرارية استنادًا إلى تحليل الأداء.
البيئات المدعومة#
توفّر Ultralytics بيئات جاهزة للاستخدام ومزوّدة بالتبعيات الأساسية مثل CUDA وcuDNN وPython وPyTorch، مما يسهّل البدء بسلاسة.
- دفاتر GPU المجانية:
- المنصات السحابية:
- Google Cloud: دليل البدء السريع لـ GCP
- Amazon AWS: دليل البدء السريع لـ AWS
- Microsoft Azure: دليل البدء السريع لـ AzureML
- الإعداد المحلي:
- Docker: دليل البدء السريع لـ Docker
- Docker: دليل البدء السريع لـ Docker
حالة المشروع#
تشير هذه الشارة إلى نجاح جميع اختبارات GitHub Actions الخاصة بـ YOLOv5 والتكامل المستمر (CI). وتغطي اختبارات CI الصارمة هذه الوظائف الأساسية، بما في ذلك التدريب والتحقق والاستدلال والتصدير والمعايير، عبر أنظمة تشغيل macOS وWindows وUbuntu. تُنفَّذ الاختبارات تلقائيًا كل 24 ساعة وعند كل إرسال للتعليمات البرمجية، مما يضمن استقرارًا متسقًا وأداءً مثاليًا.
الأسئلة الشائعة#
يتضمن تدريب YOLOv5 على مجموعة بيانات مخصّصة عدة خطوات أساسية:
- إعداد مجموعة البيانات: اجمع الصور وأضف التعليقات التوضيحية إليها. تأكّد من أن التعليقات التوضيحية بتنسيق YOLO المطلوب. نظّم الصور والتسميات في دليلي
train/وval/(واختياريًا دليلtest/). فكّر في استخدام نماذج مثل Google Gemini أو SAM2 أو YOLOWorld للمساعدة في عملية وضع التسميات أو أتمتتها (راجع القسم 1.2). - إعداد البيئة: استنسخ مستودع YOLOv5 وثبّت التبعيات باستخدام
pip install -r requirements.txt.git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt - إنشاء إعداد مجموعة البيانات: حدّد مسارات مجموعة البيانات وعدد الفئات وأسماء الفئات في ملف
dataset.yaml. - بدء التدريب: نفّذ البرنامج النصي
train.py، مع توفير مساراتdataset.yamlوأوزان التدريب المسبقة المطلوبة (مثلyolov5s.pt) وحجم الصورة وحجم الدفعة وعدد العصور.python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
- إعداد مجموعة البيانات: اجمع الصور وأضف التعليقات التوضيحية إليها. تأكّد من أن التعليقات التوضيحية بتنسيق YOLO المطلوب. نظّم الصور والتسميات في دليلي
تُعدّ منصة Ultralytics منصة شاملة مصممة لتبسيط دورة حياة تطوير نماذج YOLO بأكملها، وغالبًا من دون الحاجة إلى كتابة أي تعليمات برمجية. تشمل الفوائد الرئيسية ما يلي:
- تدريب مبسّط: درّب النماذج بسهولة باستخدام بيئات مُعدّة مسبقًا وواجهة مستخدم بديهية.
- إدارة متكاملة للبيانات: ارفع مجموعات بياناتك، وتحكّم في إصداراتها، وأدرها بكفاءة داخل المنصة.
- مراقبة آنية: تتبّع تقدّم التدريب وتصور مقاييس الأداء باستخدام أدوات متكاملة مثل Comet أو TensorBoard.
- ميزات التعاون: تيسّر العمل الجماعي من خلال الموارد المشتركة، وأدوات إدارة المشاريع، ومشاركة النماذج بسهولة.
- النشر دون كتابة تعليمات برمجية: انشر النماذج المدرّبة مباشرةً على أهداف متنوعة.
للاطلاع على شرح عملي خطوة بخطوة، راجع منشور مدونتنا: كيفية تدريب نماذجك المخصصة باستخدام منصة Ultralytics.
سواء أكنت تجري الشرح يدويًا أم تستخدم أدوات مؤتمتة (مثل الأدوات المذكورة في القسم 1.2)، يجب أن تكون التسميات النهائية بالتنسيق المحدد لتنسيق YOLO الذي يتطلبه YOLOv5:
- أنشئ ملف
.txtواحدًا لكل صورة. يجب أن يطابق اسم الملف اسم الصورة (مثلًا، يتوافقimage1.jpgمعimage1.txt). ضع هذه الملفات في دليلlabels/موازٍ لدليلimages/الخاص بك (مثلًا:../datasets/mydataset/labels/train/). - يمثل كل سطر داخل ملف
.txtتعليقًا توضيحيًا لكائن واحد، ويتبع التنسيق:class_index center_x center_y width height. - يجب أن تكون الإحداثيات (
center_xوcenter_yوwidthوheight) مطبّعة (أي إن قيمها تتراوح بين 0.0 و1.0) بالنسبة إلى أبعاد الصورة. - تبدأ مؤشرات الفئات من الصفر (الفئة الأولى هي
0، والثانية هي1، وهكذا).
توفر العديد من أدوات الشرح اليدوي إمكانية التصدير المباشر إلى تنسيق YOLO. وإذا كنت تستخدم نماذج مؤتمتة، فستحتاج إلى نصوص برمجية أو عمليات لتحويل مخرجاتها (مثل إحداثيات مربعات الإحاطة وأقنعة التجزئة) إلى تنسيق النصوص المطبّع المحدد هذا. تأكد من أن بنية مجموعة البيانات النهائية تلتزم بالمثال الوارد في الدليل. لمزيد من التفاصيل، راجع دليل جمع البيانات وشرحها.
- أنشئ ملف
توفر Ultralytics تراخيص مرنة مصممة لتلبية الاحتياجات المختلفة:
- ترخيص AGPL-3.0: هذا الترخيص مفتوح المصدر مناسب للبحوث الأكاديمية، والمشاريع الشخصية، والحالات التي يكون فيها الامتثال لمتطلبات المصادر المفتوحة مقبولًا. ويفرض أن تكون التعديلات والأعمال المشتقة مفتوحة المصدر أيضًا بموجب AGPL-3.0. راجع تفاصيل ترخيص AGPL-3.0.
- ترخيص المؤسسات: ترخيص تجاري مصمم للشركات التي تدمج YOLOv5 في منتجات أو خدمات مملوكة لها. يلغي هذا الترخيص التزامات المصادر المفتوحة المفروضة بموجب AGPL-3.0، مما يتيح التوزيع مغلق المصدر. تفضل بزيارة صفحة التراخيص لمزيد من التفاصيل أو لطلب ترخيص المؤسسات.
اختر الترخيص الذي يتوافق بأفضل صورة مع متطلبات مشروعك ونموذج توزيعه.
