Link to this sectionنصائح للحصول على أفضل نتائج تدريب YOLOv5#
📚 يوضح هذا الدليل كيفية تحقيق أفضل مصفوفة mAP ونتائج تدريب باستخدام YOLOv5 🚀.
في معظم الأوقات يمكن الحصول على نتائج جيدة دون أي تغييرات في النماذج أو إعدادات التدريب، بشرط أن تكون مجموعة بياناتك كبيرة بما يكفي ومصنفة جيداً. إذا لم تحصل على نتائج جيدة في البداية، فهناك خطوات قد تتخذها للتحسين، ولكننا نوصي دائماً المستخدمين بالتدريب أولاً باستخدام جميع الإعدادات الافتراضية قبل التفكير في إجراء أي تغييرات. يساعد هذا في وضع خط أساس للأداء وتحديد مجالات التحسين.
إذا كانت لديك أسئلة حول نتائج تدريبك، نوصي بتقديم أكبر قدر ممكن من المعلومات إذا كنت تتوقع رداً مفيداً، بما في ذلك رسوم بيانية للنتائج (خسائر التدريب، خسائر التحقق، P، R، mAP)، ومنحنى PR، ومصفوفة الارتباك، وفسيفساء التدريب، ونتائج الاختبار، وصور إحصائيات مجموعة البيانات مثل labels.png. توجد كل هذه الملفات في دليل project/name الخاص بك، وعادةً ما يكون yolov5/runs/train/exp.
لقد قمنا بتجميع دليل كامل للمستخدمين الذين يتطلعون للحصول على أفضل النتائج في تدريبات YOLOv5 الخاصة بهم أدناه.
Link to this sectionمجموعة البيانات#
- الصور لكل فئة. يُوصى بـ ≥ 1500 صورة لكل فئة
- الحالات لكل فئة. يُوصى بـ ≥ 10000 حالة (كائنات مصنفة) لكل فئة
- تنوع الصور. يجب أن تكون ممثلة للبيئة التي سيتم النشر فيها. بالنسبة لحالات الاستخدام في العالم الحقيقي، نوصي بصور من أوقات مختلفة من اليوم، ومواسم مختلفة، وطقس مختلف، وإضاءة مختلفة، وزوايا مختلفة، ومصادر مختلفة (تم جمعها عبر الإنترنت، أو جمعها محلياً، أو من كاميرات مختلفة) إلخ.
- اتساق التصنيف. يجب تصنيف جميع حالات جميع الفئات في جميع الصور. التصنيف الجزئي لن ينجح.
- دقة التصنيف. يجب أن تحيط التصنيفات بكل كائن بدقة. لا ينبغي أن توجد مسافة بين كائن وصندوق الإحاطة الخاص به. لا ينبغي أن تكون هناك كائنات تفتقر إلى تصنيف.
- انضباط تقسيم التدريب/التحقق. تأكد من عدم ظهور صور التحقق والاختبار أبداً في مجموعة التدريب لتجنب المقاييس المفرطة في التفاؤل. حافظ على تشابه توزيعات الفئات بين التقسيمات.
- التحقق من التصنيف. اعرض
train_batch*.jpgعند بدء التدريب للتأكد من أن تصنيفاتك تبدو صحيحة، على سبيل المثال انظر فسيفساء المثال. - صور الخلفية. صور الخلفية هي صور لا تحتوي على كائنات تتم إضافتها إلى مجموعة البيانات لتقليل الإيجابيات الكاذبة (FP). نوصي بنسبة 0-10% من صور الخلفية للمساعدة في تقليل الإيجابيات الكاذبة (تحتوي COCO على 1000 صورة خلفية كمرجع، أي 1% من الإجمالي). لا يلزم وجود تصنيفات لصور الخلفية.
Link to this sectionاختيار النموذج#
ستنتج النماذج الأكبر مثل 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
Link to this sectionإعدادات التدريب#
قبل تعديل أي شيء، قم بالتدريب أولاً باستخدام الإعدادات الافتراضية لوضع خط أساس للأداء. يمكن العثور على قائمة كاملة بإعدادات 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لتمكين جدولة معدل التعلم الجيبي (cosine)، والذي يقلل معدل التعلم تدريجياً باتباع منحنى جيبي عبر الحقب. - تعزيز البيانات. يتضمن YOLOv5 تقنيات تعزيز متنوعة مثل الفسيفساء، التي تجمع بين صور تدريب متعددة. اضبط قوة التعزيز عبر المعامل الفائق
mosaicفي ملف--hypالخاص بك للمساعدة في استقرار التدريب. - المعاملات الفائقة. توجد المعاملات الفائقة الافتراضية في hyp.scratch-low.yaml. نوصي بالتدريب باستخدام المعاملات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، سيؤدي زيادة معاملات التعزيز الفائقة إلى تقليل وتأخير فرط التخصيص، مما يسمح بتدريبات أطول وmAP نهائي أعلى. سيساعد تقليل معاملات مكاسب مكون الخسارة مثل
hyp['obj']في تقليل فرط التخصيص في مكونات الخسارة تلك تحديداً. للحصول على طريقة آلية لتحسين هذه المعاملات الفائقة، انظر برنامجنا التعليمي لتطور المعاملات الفائقة. - تدريب الدقة المختلطة. يمكّن YOLOv5 الدقة المختلطة التلقائية (AMP) تلقائياً عند اكتشاف GPU مدعوم، مما يسرع التدريب ويقلل استخدام الذاكرة دون التضحية بدقة النموذج.
- التدريب متعدد وحدات معالجة الرسومات (Multi-GPU). إذا كان لديك عدة وحدات GPU، استخدم
--device 0,1,2,3لتوزيع التدريب عبرها، مما يمكن أن يقلل وقت التدريب بشكل كبير. - التوقف المبكر. استخدم
--patience 50لإيقاف التدريب إذا لم تتحسن مقاييس التحقق لمدة 50 حقبة، مما يوفر الوقت ويمنع فرط التخصيص.
Link to this sectionتقنيات التحسين المتقدمة#
- التعلم بالنقل. بالنسبة لمجموعات البيانات المتخصصة، ابدأ بأوزان مدربة مسبقاً وقم بإلغاء تجميد الطبقات تدريجياً أثناء التدريب لتكييف النموذج مع مهمتك المحددة.
- تقليم النموذج. بعد التدريب، فكر في تقليم نموذجك لإزالة الأوزان الزائدة وتقليل حجم النموذج دون فقدان كبير في الأداء.
- تجميع النماذج. للتطبيقات الحرجة، قم بتدريب نماذج متعددة بتكوينات مختلفة واجمع بين تنبؤاتها لتحسين الدقة.
- تعزيز وقت الاختبار. قم بتمكين TTA أثناء الاستدلال باستخدام
--augmentلتحسين دقة التنبؤ عن طريق حساب متوسط النتائج من الإصدارات المعززة لصورة الإدخال.
Link to this sectionمزيد من القراءة#
إذا كنت ترغب في معرفة المزيد، فمكان جيد للبدء هو مقال Karpathy بعنوان 'وصفة لتدريب الشبكات العصبية'، والذي يحتوي على أفكار رائعة للتدريب تنطبق بشكل واسع عبر جميع مجالات تعلم الآلة: https://karpathy.github.io/2019/04/25/recipe/
لمزيد من المعلومات التفصيلية حول إعدادات وتكوينات التدريب، راجع وثائق إعدادات التدريب في Ultralytics، والتي تقدم تفسيرات شاملة لجميع المعلمات المتاحة.
حظاً موفقاً 🍀 وأخبرنا إذا كان لديك أي أسئلة أخرى!
Link to this sectionالأسئلة الشائعة#
Link to this sectionكيف أعرف ما إذا كان نموذجي يعاني من فرط التخصيص؟#
قد يعاني نموذجك من فرط التخصيص إذا استمرت خسارة التدريب في الانخفاض بينما تبدأ خسارة التحقق في الارتفاع. راقب mAP التحقق - إذا استقر أو انخفض بينما تستمر خسارة التدريب في التحسن، فهذه علامة على فرط التخصيص. تشمل الحلول إضافة المزيد من بيانات التدريب، أو زيادة تعزيز البيانات، أو تنفيذ تقنيات التنظيم.
Link to this sectionما هو حجم الدفعة الأمثل لتدريب YOLOv5؟#
يعتمد حجم الدفعة الأمثل على ذاكرة GPU لديك. توفر أحجام الدفعات الأكبر عموماً إحصائيات أفضل لتطبيع الدفعة واستقراراً في التدريب. استخدم أكبر حجم دفعة يمكن أن تتحمله أجهزتك دون نفاد الذاكرة. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لإعداداتك تلقائياً.
Link to this sectionكيف يمكنني تسريع تدريب YOLOv5؟#
لتسريع التدريب، جرب: استخدام وحدات GPU متعددة مع --device 0,1,2,3، وتخزين مجموعة البيانات مؤقتاً باستخدام --cache، وتحسين حجم الدفعة (يتم تمكين الدقة المختلطة تلقائياً على وحدات GPU المدعومة). فكر أيضاً في استخدام متغير نموذج أصغر مثل YOLOv5s إذا لم تكن الدقة المطلقة أمراً حاسماً.
