YOLO Vision 2026:

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

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

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

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

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

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

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

COCO dataset class distribution analysis

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

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

YOLOv5 Models

  • البدء من أوزان مدرَّبة مسبقًا. يُوصى بذلك لمجموعات البيانات الصغيرة إلى المتوسطة الحجم (مثل 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 عصر. إذا حدث فرط التخصيص مبكرًا، فيمكنك تقليل عدد العصور. إذا لم يحدث فرط التخصيص بعد 300 عصر، فدرّب لمدة أطول، مثل 600 أو 1200 عصر وغير ذلك.
  • حجم الصورة. يُدرَّب COCO بالدقة الأصلية --img 640، لكنه قد يستفيد من التدريب بدقات أعلى مثل --img 1280 بسبب العدد الكبير من الكائنات الصغيرة في مجموعة البيانات. إذا كان هناك العديد من الكائنات الصغيرة، فستستفيد مجموعات البيانات المخصصة من التدريب بالدقة الأصلية أو بدقة أعلى. تتحقق أفضل نتائج الاستدلال عند استخدام قيمة --img نفسها التي استُخدمت في التدريب، أي إذا درّبت باستخدام --img 1280، فيجب أيضًا إجراء الاختبار والكشف باستخدام --img 1280.
  • حجم الدفعة. استخدم أكبر قيمة لـ --batch-size تسمح بها أجهزتك. تنتج أحجام الدفعات الصغيرة إحصاءات ضعيفة لـتطبيع الدفعة، وينبغي تجنبها. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لوحدة GPU الخاصة بك تلقائيًا.
  • معدل التعلم. يعمل جدول معدل التعلم الافتراضي جيدًا في معظم الحالات. لتحقيق تقارب أسرع، يمكنك تجربة استخدام العلامة --cos-lr لتمكين جدولة معدل التعلم جيبيًا، إذ تخفّض معدل التعلم تدريجيًا باتباع منحنى جيبي عبر العصور.
  • زيادة البيانات. يتضمن YOLOv5 تقنيات متنوعة لزيادة البيانات، مثل الفسيفساء التي تجمع عدة صور تدريب. اضبط قوة زيادة البيانات من خلال المعامل الفائق mosaic في ملف --hyp للمساعدة في استقرار التدريب.
  • المعاملات الفائقة. توجد المعاملات الفائقة الافتراضية في hyp.scratch-low.yaml. نوصي بالتدريب باستخدام المعاملات الفائقة الافتراضية أولًا قبل التفكير في تعديل أي منها. عمومًا، ستؤدي زيادة معاملات زيادة البيانات إلى تقليل فرط التخصيص وتأخيره، مما يتيح إجراء عمليات تدريب أطول وتحقيق mAP نهائي أعلى. يساعد تقليل معاملات كسب مكونات الخسارة مثل hyp['obj'] على تقليل فرط التخصيص في مكونات الخسارة المحددة تلك. للحصول على طريقة مؤتمتة لتحسين هذه المعاملات الفائقة، راجع البرنامج التعليمي لتطور المعاملات الفائقة.
  • التدريب باستخدام الدقة المختلطة. يمكّن YOLOv5 الدقة المختلطة التلقائية (AMP) تلقائيًا عند اكتشاف وحدة GPU مدعومة، مما يسرّع التدريب ويقلل استخدام الذاكرة من دون التضحية بدقة النموذج.
  • التدريب باستخدام وحدات GPU متعددة. إذا كانت لديك وحدات GPU متعددة، فاستخدم --device 0,1,2,3 لتوزيع التدريب بينها، مما قد يقلل وقت التدريب بشكل كبير.
  • الإيقاف المبكر. استخدم --patience 50 لإيقاف التدريب إذا لم تتحسن مقاييس التحقق لمدة 50 عصرًا، مما يوفر الوقت ويمنع فرط التخصيص.

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

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

قراءات إضافية#

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

لمزيد من المعلومات التفصيلية حول إعدادات التدريب وتهيئاته، راجع توثيق إعدادات التدريب في Ultralytics، الذي يقدم شروحات شاملة لجميع المعلمات المتاحة.

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

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

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

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

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

التعليقات