نصائح للحصول على أفضل نتائج تدريب لـ YOLOv5
📚 يشرح هذا الدليل كيفية الحصول على أفضل نتائج mAP وأفضل نتائج تدريب باستخدام YOLOv5 🚀.
في معظم الأوقات، يمكن الحصول على نتائج جيدة دون أي تغييرات في النماذج أو إعدادات التدريب، بشرط أن تكون مجموعة البيانات الخاصة بك كبيرة بما يكفي ومصنفة جيداً. إذا لم تحصل على نتائج جيدة في البداية، فهناك خطوات قد تتمكن من اتخاذها للتحسين، ولكننا ننصح المستخدمين دائماً بالتدريب أولاً باستخدام جميع الإعدادات الافتراضية قبل التفكير في أي تغييرات. يساعد هذا في وضع خط أساس للأداء وتحديد مجالات التحسين.
إذا كانت لديك أسئلة حول نتائج التدريب الخاصة بك، فنحن نوصي بتقديم أكبر قدر ممكن من المعلومات إذا كنت تتوقع رداً مفيداً، بما في ذلك رسوم بيانية للنتائج (خسائر التدريب، خسائر التحقق، P، R، mAP)، منحنى PR، مصفوفة الارتباك، فسيفساء التدريب، نتائج الاختبار، وصور إحصائيات مجموعة البيانات مثل labels.png. توجد كل هذه الملفات في دليل project/name الخاص بك، وعادةً ما تكون في yolov5/runs/train/exp.
لقد جمعنا دليلاً كاملاً أدناه للمستخدمين الذين يتطلعون للحصول على أفضل النتائج في تدريباتهم لنموذج YOLOv5.
مجموعة البيانات
- الصور لكل فئة. يوصى بـ ≥ 1500 صورة لكل فئة
- الحالات لكل فئة. يوصى بـ ≥ 10000 حالة (كائنات مصنفة) لكل فئة
- تنوع الصور. يجب أن تكون ممثلة للبيئة المنشورة. بالنسبة لحالات الاستخدام الواقعية، نوصي بصور من أوقات مختلفة من اليوم، وفصول مختلفة، وطقس مختلف، وإضاءة مختلفة، وزوايا مختلفة، ومصادر مختلفة (مأخوذة من الإنترنت، مجمعة محلياً، كاميرات مختلفة)، وما إلى ذلك.
- اتساق التصنيف. يجب تصنيف جميع حالات جميع الفئات في جميع الصور. التصنيف الجزئي لن يعمل.
- دقة التصنيف. يجب أن تحيط التصنيفات بكل كائن بدقة. لا ينبغي أن توجد مساحة بين الكائن وصندوق التحديد الخاص به. لا ينبغي أن تفقد أي كائنات تصنيفاً.
- نظام تقسيم التدريب/التحقق. تأكد من أن صور التحقق والاختبار لا تظهر أبداً في مجموعة التدريب لتجنب مقاييس متفائلة بشكل مفرط. حافظ على توزيعات الفئات متشابهة بين الانقسامات.
- التحقق من التصنيف. اعرض
train_batch*.jpgعند بدء التدريب للتأكد من أن تصنيفاتك تبدو صحيحة، أي شاهد فسيفساء مثال. - صور الخلفية. صور الخلفية هي صور لا تحتوي على كائنات تتم إضافتها إلى مجموعة البيانات لتقليل الإيجابيات الكاذبة (FP). نوصي بحوالي 0-10% من صور الخلفية للمساعدة في تقليل الإيجابيات الكاذبة (تحتوي COCO على 1000 صورة خلفية كمرجع، أي 1% من الإجمالي). لا توجد حاجة إلى تصنيفات لصور الخلفية.
اختيار النموذج
ستنتج النماذج الأكبر مثل YOLOv5x وYOLOv5x6 نتائج أفضل في جميع الحالات تقريباً، ولكنها تحتوي على معاملات أكثر، وتتطلب ذاكرة CUDA أكبر للتدريب، وهي أبطأ في التشغيل. بالنسبة لنشر تطبيقات الهاتف المحمول نوصي بـ YOLOv5s/m، وبالنسبة لنشر تطبيقات السحابة نوصي بـ YOLOv5l/x. راجع جدول ملف README الخاص بنا للحصول على مقارنة كاملة لجميع النماذج.

-
البدء من الأوزان المدربة مسبقاً. يوصى به لمجموعات البيانات الصغيرة إلى متوسطة الحجم (مثل VOC، وVisDrone، وGlobalWheat). مرر اسم النموذج إلى وسيط
--weights. يتم تنزيل النماذج تلقائياً من أحدث إصدار YOLOv5.python train.py --data custom.yaml --weights yolov5s.pt python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt -
البدء من الصفر. يوصى به لمجموعات البيانات الكبيرة (مثل COCO، وObjects365، وOIv6). مرر ملف YAML الخاص ببنية النموذج الذي تهتم به، جنباً إلى جنب مع وسيط فارغ
--weights '':python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
إعدادات التدريب
قبل تعديل أي شيء، درب أولاً باستخدام الإعدادات الافتراضية لإنشاء خط أساس للأداء. يمكن العثور على قائمة كاملة بإعدادات train.py في محلل الوسائط train.py.
- الحقب. ابدأ بـ 300 حقبة. إذا حدث فرط تخصيص (overfitting) في وقت مبكر، يمكنك تقليل عدد الحقب. إذا لم يحدث فرط تخصيص بعد 300 حقبة، فتدرب لفترة أطول، أي 600، 1200، وما إلى ذلك من الحقب.
- حجم الصورة. يتدرب COCO بدقة أصلية تبلغ
--img 640، وعلى الرغم من ذلك، نظراً للكم الكبير من الكائنات الصغيرة في مجموعة البيانات، يمكن أن يستفيد التدريب من دقة أعلى مثل--img 1280. إذا كان هناك العديد من الكائنات الصغيرة، فستستفيد مجموعات البيانات المخصصة من التدريب بدقة أصلية أو أعلى. يتم الحصول على أفضل نتائج الاستدلال عند استخدام نفس--imgالذي تم إجراء التدريب به، أي إذا تدربت عند--img 1280فيجب عليك أيضاً الاختبار والكشف عند--img 1280. - حجم الدفعة. استخدم أكبر
--batch-sizeتسمح به أجهزتك. تؤدي أحجام الدفعات الصغيرة إلى إحصائيات تسوية الدفعات ضعيفة ويجب تجنبها. يمكنك استخدام--batch-size -1لتحديد حجم الدفعة الأمثل لـ GPU الخاص بك تلقائياً. - معدل التعلم. يعمل جدول معدل التعلم الافتراضي بشكل جيد في معظم الحالات. للتقارب بشكل أسرع، يمكنك محاولة استخدام العلم
--cos-lrلتمكين جدولة معدل التعلم الجيبي، الذي يقلل تدريجياً معدل التعلم متبعاً منحنى جيبياً عبر الحقب. - زيادة البيانات. يتضمن YOLOv5 تقنيات زيادة مختلفة مثل الفسيفساء، التي تجمع بين صور تدريب متعددة. بالنسبة للحقب القليلة الأخيرة، فكر في استخدام
--close-mosaic 10لتعطيل زيادة الفسيفساء، مما قد يساعد في استقرار التدريب. - المعلمات الفائقة. المعلمات الفائقة الافتراضية موجودة في hyp.scratch-low.yaml. نوصي بالتدريب باستخدام المعلمات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، ستؤدي زيادة المعلمات الفائقة للزيادة إلى تقليل وتأخير فرط التخصيص، مما يسمح بتدريبات أطول وmAP نهائي أعلى. سيساعد تقليل معلمات كسب مكون الخسارة مثل
hyp['obj']في تقليل فرط التخصيص في مكونات الخسارة المحددة تلك. للحصول على طريقة آلية لتحسين هذه المعلمات الفائقة، راجع دليل تطور المعلمات الفائقة. - التدريب بـ دقة مختلطة. قم بتمكين التدريب بدقة مختلطة باستخدام
--ampلتسريع التدريب وتقليل استخدام الذاكرة دون التضحية بدقة النموذج. - التدريب متعدد وحدات GPU. إذا كان لديك عدة وحدات GPU، فاستخدم
--device 0,1,2,3لتوزيع التدريب عبرها، مما قد يقلل وقت التدريب بشكل كبير. - التوقف المبكر. استخدم
--patience 50لإيقاف التدريب إذا لم تتحسن مقاييس التحقق لمدة 50 حقبة، مما يوفر الوقت ويمنع فرط التخصيص.
تقنيات التحسين المتقدمة
- التعلم بالنقل. بالنسبة لمجموعات البيانات المتخصصة، ابدأ بأوزان مدربة مسبقاً وقم بإلغاء تجميد الطبقات تدريجياً أثناء التدريب لتكييف النموذج مع مهمتك المحددة.
- تقليم النموذج. بعد التدريب، فكر في تقليم نموذجك لإزالة الأوزان الزائدة وتقليل حجم النموذج دون فقدان كبير في الأداء.
- تجميع النماذج. بالنسبة للتطبيقات الحرجة، قم بتدريب نماذج متعددة بتكوينات مختلفة واجمع توقعاتها لتحسين الدقة.
- زيادة وقت الاختبار. قم بتمكين TTA أثناء الاستدلال باستخدام
--augmentلتحسين دقة التنبؤ من خلال حساب متوسط النتائج من الإصدارات المعززة لصورة الإدخال.
قراءة إضافية
إذا كنت ترغب في معرفة المزيد، فمكان جيد للبدء هو 'وصفة كارباثي لتدريب الشبكات العصبية'، والتي تحتوي على أفكار رائعة للتدريب تنطبق على نطاق واسع عبر جميع مجالات تعلم الآلة: https://karpathy.github.io/2019/04/25/recipe/
لمزيد من المعلومات التفصيلية حول إعدادات وتكوينات التدريب، راجع وثائق إعدادات تدريب Ultralytics، التي تقدم تفسيرات شاملة لجميع المعلمات المتاحة.
حظاً موفقاً 🍀 وأخبرنا إذا كان لديك أي أسئلة أخرى!
الأسئلة الشائعة
كيف أعرف ما إذا كان نموذجي يعاني من فرط التخصيص؟
قد يعاني نموذجك من فرط التخصيص إذا استمرت خسارة التدريب في الانخفاض بينما تبدأ خسارة التحقق في الزيادة. راقب mAP التحقق - إذا استقر أو انخفض بينما تستمر خسارة التدريب في التحسن، فهذه علامة على فرط التخصيص. تشمل الحلول إضافة المزيد من بيانات التدريب، أو زيادة زيادة البيانات، أو تنفيذ تقنيات التنظيم.
ما هو حجم الدفعة الأمثل لتدريب YOLOv5؟
يعتمد حجم الدفعة الأمثل على ذاكرة GPU لديك. توفر أحجام الدفعات الأكبر عادةً إحصائيات تسوية دفعات أفضل واستقراراً أكبر في التدريب. استخدم أكبر حجم دفعة يمكن لأجهزتك التعامل معه دون نفاد الذاكرة. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لإعدادك تلقائياً.
كيف يمكنني تسريع تدريب YOLOv5؟
لتسريع التدريب، حاول: تمكين التدريب بدقة مختلطة باستخدام --amp، واستخدام عدة وحدات GPU باستخدام --device 0,1,2,3، وتخزين مجموعة البيانات الخاصة بك مؤقتاً باستخدام --cache، وتحسين حجم الدفعة الخاص بك. فكر أيضاً في استخدام متغير نموذج أصغر مثل YOLOv5s إذا لم تكن الدقة المطلقة أمراً بالغ الأهمية.
