رؤية YOLO لعام 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% من صور الخلفية للمساعدة في تقليل الإيجابيات الكاذبة (تحتوي COCO على 1000 صورة خلفية كمرجع، أي 1% من الإجمالي). لا يلزم وجود تصنيفات لصور الخلفية.

تحليل توزيع فئة مجموعة بيانات COCO

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

ستنتج النماذج الأكبر مثل 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.

  • العصور (Epochs). ابدأ بـ 300 عصر. إذا حدث فرط تخصيص (overfitting) مبكرًا، يمكنك تقليل عدد العصور. إذا لم يحدث فرط التخصيص بعد 300 عصر، تدرب لفترة أطول، مثل 600 أو 1200 عصر أو نحو ذلك.
  • حجم الصورة. يتم التدريب على مجموعة بيانات COCO بدقة أصلية تبلغ --img 640، على الرغم من أنه نظرًا للعدد الكبير من الكائنات الصغيرة في مجموعة البيانات، يمكن الاستفادة من التدريب بدقة أعلى مثل --img 1280. إذا كان هناك العديد من الكائنات الصغيرة، فإن مجموعات البيانات المخصصة ستستفيد من التدريب بدقة أصلية أو أعلى. يتم الحصول على أفضل نتائج الاستدلال عند نفس --img الذي تم إجراء التدريب به، أي إذا قمت بالتدريب عند --img 1280 فيجب عليك أيضًا الاختبار والاكتشاف عند --img 1280.
  • حجم الدفعة (Batch size). استخدم أكبر --batch-size يسمح به جهازك. تؤدي أحجام الدُفعات الصغيرة إلى إحصاءات تسوية دفعية (batch normalization) ضعيفة ويجب تجنبها. يمكنك استخدام --batch-size -1 لتحديد حجم الدفعة الأمثل لوحدة الرسوميات (GPU) الخاصة بك تلقائيًا.
  • معدل التعلم (Learning rate). يعمل جدول معدل التعلم الافتراضي بشكل جيد في معظم الحالات. للوصول إلى التقارب بشكل أسرع، يمكنك محاولة استخدام علامة --cos-lr تمكين جدول معدل التعلم الجيبي (cosine)، والذي يقلل تدريجيًا معدل التعلم باتباع منحنى جيبي على مدار العصور.
  • زيادة البيانات (Data augmentation). يتضمن YOLOv5 تقنيات زيادة مختلفة مثل الفسيفساء، التي تجمع صور تدريب متعددة. اضبط قوة زيادة البيانات عبر المعلمة الفائقة mosaic في ملف --hyp الخاص بك للمساعدة في تثبيت التدريب.
  • المعلمات الفائقة. توجد المعلمات الفائقة الافتراضية في ملف hyp.scratch-low.yaml. نوصي بالتدريب باستخدام المعلمات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، سيؤدي زيادة المعلمات الفائقة لزيادة البيانات إلى تقليل وتأخير فرط التخصيص، مما يسمح بفترات تدريب أطول وتحقيق دقة ماب (mAP) نهائية أعلى. سيساعد تقليل المعلمات الفائقة لربح مكونات الخسارة مثل hyp['obj'] في تقليل فرط التخصيص في مكونات الخسارة المحددة تلك. للحصول على طريقة آليّة لتحسين هذه المعلمات الفائقة، راجع دليل تطور المعلمات الفائقة.
  • تدريب الدقة المختلطة (Mixed precision). يُمكّن YOLOv5 ميزة الدقة المختلطة التلقائية (AMP) تلقائيًا عند اكتشاف وحدة رسوميات (GPU) مدعومة، مما يؤدي إلى تسريع التدريب وتقليل استهلاك الذاكرة دون التضحية بدقة النموذج.
  • التدريب باستخدام وحدات رسوميات متعددة (Multi-GPU). إذا كان لديك وحدات رسوميات متعددة، فاستخدم --device 0,1,2,3 لتوزيع التدريب عبرها، مما يمكن أن يقلل وقت التدريب بشكل كبير.
  • الإيقاف المبكر (Early stopping). استخدم --patience 50 لإيقاف التدريب إذا لم تتحسن مقاييس التحقق لمدة 50 عصرًا، مما يوفر الوقت ويمنع فرط التخصيص.

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

  • التعلم النقلي (Transfer learning). بالنسبة لمجموعات البيانات المتخصصة، ابدأ بالأوزان المدربة مسبقًا وقم بإلغاء تجميد الطبقات تدريجيًا أثناء التدريب لتكييف النموذج مع مهمتك المحددة.
  • تقليم النموذج (Model pruning). بعد التدريب، فكر في تقليم نموذجك لإزالة الأوزان الزائدة وتقليل حجم النموذج دون فقدان كبير في الأداء.
  • مجموعات النماذج (Model ensemble). بالنسبة للتطبيقات الحرجة، قم بتدريب نماذج متعددة بتكوينات مختلفة واجمع تنبؤاتها لتحسين الدقة.
  • زيادة وقت الاختبار (Test-time augmentation). قم بتَمكين TTA أثناء الاستدلال باستخدام --augment لتحسين دقة التنبؤ عن طريق حساب متوسط النتائج من الإصدارات المُعززة لصورة الإدخال.

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

إذا كنت ترغب في معرفة المزيد، فالنقطة الجيدة للبدء هي مقال كارباتي المعنون 'صفحة تدريب الشبكات العصبية' (Recipe for Training Neural Networks)، والذي يتضمن أفكارًا رائعة للتدريب تنطبق بشكل عام عبر جميع مجالات تعلم الآلة: https://karpathy.github.io/2019/04/25/recipe/

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

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

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

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

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

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

التعليقات