تخطي إلى المحتوى

نصائح للحصول على أفضل نتائج تدريب YOLOv5

📚 يشرح هذا الدليل كيفية إنتاج أفضل النتائج لـ mAP والتدريب باستخدام YOLOv5 🚀.

في معظم الأوقات، يمكن الحصول على نتائج جيدة دون إجراء أي تغييرات على النماذج أو إعدادات التدريب، شريطة أن تكون مجموعة البيانات الخاصة بك كبيرة بما يكفي ومصنفة بشكل جيد. إذا لم تحصل على نتائج جيدة في البداية، فهناك خطوات يمكنك اتخاذها لتحسينها، ولكننا نوصي المستخدمين دائمًا بالتدريب أولاً باستخدام جميع الإعدادات الافتراضية قبل التفكير في إجراء أي تغييرات. يساعد هذا في إنشاء خط أساس للأداء وتحديد مجالات التحسين.

إذا كانت لديك أسئلة حول نتائج التدريب الخاصة بك نوصي بتقديم أكبر قدر ممكن من المعلومات إذا كنت تتوقع استجابة مفيدة، بما في ذلك مخططات النتائج (خسائر التدريب، وخسائر التحقق من الصحة، و P، و R، و mAP)، ومنحنى PR، مصفوفة الالتباس، فسيفساء التدريب، ونتائج الاختبار وصور إحصائيات مجموعة البيانات مثل labels.png. تقع كل هذه في project/name الدليل، عادة yolov5/runs/train/exp.

لقد قمنا بتجميع دليل كامل للمستخدمين الذين يتطلعون إلى الحصول على أفضل النتائج في تدريبات YOLOv5 الخاصة بهم أدناه.

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

  • الصور لكل فئة. يوصى بـ ≥ 1500 صورة لكل فئة
  • عدد المثيلات لكل فئة. يوصى بـ ≥ 10000 مثيل (كائنات مصنفة) لكل فئة
  • تنوع الصور. يجب أن تكون ممثلة للبيئة المنتشرة. بالنسبة لحالات الاستخدام الواقعية، نوصي بصور من أوقات مختلفة من اليوم، وفصول مختلفة، وأحوال طقس مختلفة، وإضاءة مختلفة، وزوايا مختلفة، ومصادر مختلفة (مكشطة عبر الإنترنت، تم جمعها محليًا، وكاميرات مختلفة) إلخ.
  • اتساق التصنيف. يجب تصنيف جميع مثيلات جميع الفئات في جميع الصور. التصنيف الجزئي لن ينجح.
  • دقة التصنيف. يجب أن تُغلق التصنيفات بإحكام على كل كائن. يجب ألا تكون هناك مساحة بين الكائن ومربع الإحاطة (bounding box) الخاص به. يجب ألا يفقد أي كائن تصنيفًا.
  • التحقق من الملصق. عرض train_batch*.jpg عند بدء التدريب للتحقق من ظهور الملصقات الخاصة بك بشكل صحيح، أي انظر مثال فسيفساء.
  • صور الخلفية. صور الخلفية هي صور بدون كائنات تتم إضافتها إلى مجموعة البيانات لتقليل النتائج الإيجابية الكاذبة (FP). نوصي بحوالي 0-10٪ من صور الخلفية للمساعدة في تقليل FPs (يحتوي COCO على 1000 صورة خلفية كمرجع، 1٪ من الإجمالي). لا توجد حاجة إلى تسميات لصور الخلفية.

تحليل COCO

اختيار النموذج

النماذج الأكبر مثل YOLOv5x و YOLOv5x6 ستنتج نتائج أفضل في جميع الحالات تقريبًا، ولكن لديها المزيد من المعلمات، وتتطلب المزيد من ذاكرة CUDA للتدريب، وتعمل بشكل أبطأ. بالنسبة لعمليات النشر المحمولة، نوصي بـ YOLOv5s/m، وبالنسبة لعمليات النشر السحابية، نوصي بـ YOLOv5l/x. راجع الجدول الخاص بنا في ملف README للحصول على مقارنة كاملة لجميع النماذج.

نماذج YOLOv5

  • ابدأ من أوزان مُدرَّبة مسبقًا. موصى به لمجموعات البيانات الصغيرة إلى المتوسطة الحجم (مثل VOC, VisDrone, GlobalWheat). مرر اسم النموذج إلى --weights argument. يتم تنزيل النماذج تلقائيًا من أحدث إصدار من 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 '' argument:

    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 argparser.

  • الحقبات (Epochs). ابدأ بـ 300 حقبة. إذا حدث فرط تكيّف (overfit) مبكرًا، يمكنك تقليل عدد الحقبات. إذا لم يحدث فرط تكيّف (overfitting) بعد 300 حقبة، فقم بالتدريب لفترة أطول، أي 600 أو 1200 حقبة، إلخ.
  • حجم الصورة. يتم تدريب COCO بالدقة الأصلية لـ --img 640، على الرغم من أنه نظرًا للكمية الكبيرة من الكائنات الصغيرة في مجموعة البيانات، يمكن أن يستفيد من التدريب بدقة أعلى مثل --img 1280. إذا كان هناك العديد من الكائنات الصغيرة، فستستفيد مجموعات البيانات المخصصة من التدريب بدقة أصلية أو أعلى. يتم الحصول على أفضل نتائج الاستدلال بنفس --img كما تم تشغيل التدريب، أي إذا قمت بالتدريب على --img 1280 يجب عليك أيضًا الاختبار والكشف في --img 1280.
  • حجم الدفعة. استخدم الأكبر --batch-size الذي يسمح به جهازك. ينتج عن أحجام الدُفعات الصغيرة أداءً ضعيفًا تطبيع الدفعة الإحصائيات ويجب تجنبها. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لوحدة معالجة الرسومات الخاصة بك تلقائيًا.
  • معدل التعلم. يعمل جدول معدل التعلم الافتراضي بشكل جيد في معظم الحالات. لتحقيق تقارب أسرع، يمكنك محاولة استخدام --cos-lr لتفعيل جدولة معدل التعلم الجيبية، والتي تقلل تدريجياً من معدل التعلم باتباع منحنى جيب التمام على مدى الحقب.
  • زيادة البيانات. تتضمن YOLOv5 تقنيات زيادة متنوعة مثل الفسيفساء، والتي تجمع بين صور تدريب متعددة. بالنسبة للحقبات القليلة الماضية، ضع في اعتبارك استخدام --close-mosaic 10 لتعطيل زيادة الفسيفساء، مما يساعد على استقرار التدريب.
  • المعلمات الفائقة. القيم الفائقة الافتراضية موجودة في hyp.scratch-low.yamlنوصي بالتدريب باستخدام المعلمات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، سيؤدي زيادة معلمات التوسيع إلى تقليل ومنع فرط التجهيز، مما يسمح بتدريبات أطول وزيادة في mAP النهائي. تقليل معلمات اكتساب مكون الخسارة مثل hyp['obj'] سيساعد في تقليل التجاوز في مكونات الخسارة المحددة هذه. للحصول على طريقة آلية لتحسين هذه المعلمات الفائقة، راجع دليل تطوير المعلمات الفائقة.
  • التدريب على الدقة المختلطة. تمكين التدريب المختلط الدقيق مع --amp لتسريع التدريب وتقليل استخدام الذاكرة دون التضحية بدقة النموذج.
  • التدريب متعدد وحدات معالجة الرسوميات (Multi-GPU). إذا كان لديك وحدات معالجة رسومات متعددة (GPUs)، فاستخدم --device 0,1,2,3 لتوزيع التدريب عليها، مما يقلل بشكل كبير من وقت التدريب.
  • إيقاف مبكر. استخدم --patience 50 to stop training if validation metrics don't improve for 50 epochs, saving time and preventing overfitting.

تقنيات التحسين المتقدمة

  • التعلم بالنقل. بالنسبة لمجموعات البيانات المتخصصة، ابدأ بأوزان مُدرَّبة مسبقًا وقم تدريجيًا بإلغاء تجميد الطبقات أثناء التدريب لتكييف النموذج مع مهمتك المحددة.
  • تقليم النموذج. بعد التدريب، ضع في اعتبارك تقليم النموذج الخاص بك لإزالة الأوزان الزائدة وتقليل حجم النموذج دون فقدان كبير في الأداء.
  • تجميع النماذج. بالنسبة للتطبيقات الهامة، قم بتدريب نماذج متعددة بتكوينات مختلفة واجمع تنبؤاتها لتحسين الدقة.
  • زيادة وقت الاختبار. تمكين TTA أثناء الاستدلال مع --augment لتحسين دقة التنبؤ عن طريق حساب متوسط النتائج من الإصدارات المعززة للصورة المدخلة.

مزيد من القراءة

إذا كنت ترغب في معرفة المزيد، فإن مكانًا جيدًا للبدء هو 'وصفة لتدريب الشبكات العصبية' لكارباثي، والتي تحتوي على أفكار رائعة للتدريب تنطبق على نطاق واسع عبر جميع مجالات تعلم الآلة: https://karpathy.github.io/2019/04/25/recipe/

للحصول على معلومات أكثر تفصيلاً حول إعدادات وتكوينات التدريب، راجع وثائق إعدادات تدريب Ultralytics، والتي تقدم شروحات شاملة لجميع المعلمات المتاحة.

حظًا سعيدًا 🍀 وأخبرنا إذا كانت لديك أي أسئلة أخرى!

الأسئلة الشائعة

كيف أعرف ما إذا كان النموذج الخاص بي يعاني من فرط التخصيص (overfitting)؟

قد يكون النموذج الخاص بك يعاني من فرط التخصيص إذا استمر فقدان التدريب في الانخفاض بينما بدأ فقدان التحقق في الزيادة. راقب خريطة الدقة المتوسطة للتحقق - إذا استقرت أو انخفضت بينما يستمر فقدان التدريب في التحسن، فهذه علامة على فرط التخصيص. تشمل الحلول إضافة المزيد من بيانات التدريب أو زيادة توسيع البيانات أو تنفيذ تقنيات التنظيم.

ما هو حجم الدفعة الأمثل لتدريب YOLOv5؟

يعتمد حجم الدفعة الأمثل على ذاكرة GPU الخاصة بك. توفر أحجام الدفعات الأكبر عمومًا إحصائيات تطبيع أفضل للدفعات واستقرار التدريب. استخدم أكبر حجم دفعة يمكن أن يتحمله جهازك دون نفاد الذاكرة. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لإعدادك تلقائيًا.

كيف يمكنني تسريع تدريب YOLOv5؟

لتسريع التدريب، حاول: --amp، باستخدام وحدات معالجة الرسوميات (GPU) المتعددة مع --device 0,1,2,3، وتخزين بياناتك مؤقتًا باستخدام --cache، وتحسين حجم الدفعة. ضع في اعتبارك أيضًا استخدام متغير نموذج أصغر مثل YOLOv5s إذا لم تكن الدقة المطلقة ضرورية.



📅 تم الإنشاء منذ سنة واحدة ✏️ تم التحديث منذ شهرين

تعليقات