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

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

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

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

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

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

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

  • الصور لكل فئة. يوصى بـ ≥ 1500 صورة لكل فئة
  • عدد المثيلات لكل فئة. يوصى بـ ≥ 10000 مثيل (كائنات مصنفة) لكل فئة
  • تنوع الصور. يجب أن تكون ممثلة للبيئة المنتشرة. بالنسبة لحالات الاستخدام الواقعية، نوصي بصور من أوقات مختلفة من اليوم، وفصول مختلفة، وأحوال طقس مختلفة، وإضاءة مختلفة، وزوايا مختلفة، ومصادر مختلفة (مكشطة عبر الإنترنت، تم جمعها محليًا، وكاميرات مختلفة) إلخ.
  • اتساق التسمية. يجب تسمية جميع مثيلات جميع الفئات في جميع الصور. لن تعمل التسمية الجزئية.
  • دقة التسمية. يجب أن تحيط التسميات بكل كائن بدقة. يجب ألا توجد مسافة بين الكائن والمربع المحيط به. يجب ألا يكون هناك كائنات تفتقد التسمية.
  • نظام تقسيم التدريب/التحقق من الصحة. تأكد من أن صور التحقق والاختبار لا تظهر أبدًا في مجموعة التدريب لتجنب المقاييس المفرطة في التفاؤل. حافظ على تشابه توزيعات الفئات بين التقسيمات.
  • التحقق من الملصق. عرض train_batch*.jpg عند بدء التدريب للتحقق من ظهور الملصقات الخاصة بك بشكل صحيح، أي انظر مثال فسيفساء.
  • صور الخلفية. صور الخلفية هي صور لا تحتوي على أي كائنات تُضاف إلى مجموعة البيانات لتقليل النتائج الإيجابية الكاذبة (FP). نوصي بحوالي 0-10% من صور الخلفية للمساعدة في تقليل الإيجابيات الكاذبةCOCO يحتوي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 يجب عليك أيضًا الاختبار detect في --img 1280.
  • حجم الدفعة. استخدم الأكبر --batch-size الذي يسمح به جهازك. ينتج عن أحجام الدُفعات الصغيرة أداءً ضعيفًا تطبيع الدفعة الإحصائيات ويجب تجنبها. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لوحدة معالجة الرسومات الخاصة بك تلقائيًا.
  • معدل التعلم. يعمل جدول معدل التعلم الافتراضي بشكل جيد في معظم الحالات. لتحقيق تقارب أسرع، يمكنك محاولة استخدام --cos-lr لتفعيل جدولة معدل التعلم الجيبية، والتي تقلل تدريجياً من معدل التعلم باتباع منحنى جيب التمام على مدى الحقب.
  • زيادة البيانات. تتضمن YOLOv5 تقنيات زيادة متنوعة مثل الفسيفساء، والتي تجمع بين صور تدريب متعددة. بالنسبة للحقبات القليلة الماضية، ضع في اعتبارك استخدام --close-mosaic 10 لتعطيل زيادة الفسيفساء، مما يساعد على استقرار التدريب.
  • المعلمات الفائقة. القيم الفائقة الافتراضية موجودة في hyp.scratch-lowyaml. نوصيك بالتدريب باستخدام المعلمات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، ستؤدي زيادة المعلمات التشعبية للتكبير إلى تقليل وتأخير الإفراط في التركيب مما يسمح بتدريبات أطول و mAP نهائي أعلى. يؤدي تقليل المعلمات الزائدة لمكونات الخسارة مثل hyp['obj'] سيساعد في تقليل التجاوز في مكونات الخسارة المحددة هذه. للحصول على طريقة آلية لتحسين هذه المعلمات الفائقة، راجع دليل تطوير المعلمات الفائقة.
  • التدريب على الدقة المختلطة. تمكين التدريب المختلط الدقيق مع --amp لتسريع التدريب وتقليل استخدام الذاكرة دون التضحية بدقة النموذج.
  • التدريب متعدد وحدات معالجة الرسوميات (Multi-GPU). إذا كان لديك وحدات معالجة رسومات متعددة (GPUs)، فاستخدم --device 0,1,2,3 لتوزيع التدريب عليها، مما يقلل بشكل كبير من وقت التدريب.
  • إيقاف مبكر. استخدم --patience 50 لإيقاف التدريب إذا لم تتحسن مقاييس التحقق لمدة 50 حقبة، مما يوفر الوقت ويمنع التجاوز.

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

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

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

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

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

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

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

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

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

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

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

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

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



📅 تم إنشاؤها منذ 2 سنوات مضت ✏️ تم التحديث منذ 8 أيام
glenn.jocher@ultralytics.comRizwanMunawarLaughing-qBurhan-Q

تعليقات