نصائح للحصول على أفضل نتائج تدريب YOLOv5
📚 يشرح هذا الدليل كيفية الحصول على أفضل نتائج MAP والتدريب باستخدام YOLOv5 🚀.
في معظم الأحيان يمكن الحصول على نتائج جيدة دون إجراء أي تغييرات على النماذج أو إعدادات التدريب، شريطة أن تكون مجموعة البيانات الخاصة بك كبيرة بما فيه الكفاية وموسومة بشكل جيد. إذا لم تحصل على نتائج جيدة في البداية، فهناك خطوات يمكنك اتخاذها لتحسين الأداء، ولكننا نوصي دائمًا بأن يتدرب المستخدمون أولاً على جميع الإعدادات الافتراضية قبل التفكير في أي تغييرات. يساعد ذلك في إنشاء خط أساس للأداء وتحديد مجالات التحسين.
إذا كانت لديك أسئلة حول نتائج تدريبك نوصيك بتقديم أكبر قدر ممكن من المعلومات إذا كنت تتوقع ردًا مفيدًا، بما في ذلك مخططات النتائج (خسائر القطار، وخسائر القطار، وخسائر الفقدان، وP، وR، وMAP)، ومنحنى العلاقات العامة, مصفوفة الارتباكوفسيفساء التدريب ونتائج الاختبار وصور إحصائيات مجموعة البيانات مثل labels.png. كل هذه الصور موجودة في project/name
الدليل، عادةً yolov5/runs/train/exp
.
لقد وضعنا دليلاً كاملاً للمستخدمين الذين يتطلعون للحصول على أفضل النتائج في تدريباتهم على YOLOv5 أدناه.
مجموعة البيانات
- الصور لكل فصل ≥ 1500 صورة لكل فصل موصى به
- مثيلات لكل فئة ≥ 10000 مثيل (كائنات مصنفة) لكل فئة موصى بها
- تنوع الصور. يجب أن تكون ممثلة للبيئة المنتشرة. بالنسبة لحالات الاستخدام في العالم الحقيقي، نوصي بالتقاط صور من أوقات مختلفة من اليوم، ومواسم مختلفة، وطقس مختلف، وإضاءة مختلفة، وزوايا مختلفة، ومصادر مختلفة (تم جمعها عبر الإنترنت، ومصادر مختلفة (تم جمعها محلياً، وكاميرات مختلفة) إلخ.
- اتساق التسمية. يجب تسمية جميع مثيلات جميع الفئات في جميع الصور. لن تنجح التسمية الجزئية.
- دقة التسمية. يجب أن تحيط التسميات بكل كائن بإحكام. يجب ألا توجد مسافة بين الكائن والمربع المحيط به. يجب ألا يكون هناك كائنات تفتقد التسمية.
- التحقق من الملصق. عرض
train_batch*.jpg
في بداية القطار للتحقق من أن تسمياتك تبدو صحيحة، أي انظر مثال الفسيفساء - صور الخلفية. صور الخلفية هي صور لا تحتوي على أي كائنات تُضاف إلى مجموعة البيانات لتقليل النتائج الإيجابية الكاذبة (FP). نوصي بحوالي 0-10% من صور الخلفية للمساعدة في تقليل الإيجابيات الكاذبة (يحتوي COCO على 1000 صورة خلفية كمرجع، أي 1% من الإجمالي). لا توجد تسميات مطلوبة لصور الخلفية.
اختيار النموذج
ستنتج النماذج الأكبر حجمًا مثل YOLOv5x و YOLOv5x6 نتائج أفضل في جميع الحالات تقريبًا، ولكنها تحتوي على المزيد من المعلمات، وتتطلب المزيد من الذاكرة CUDA للتدريب، وتكون أبطأ في التشغيل. بالنسبة لعمليات النشر على الأجهزة المحمولة، نوصي باستخدام YOLOv5/m، أما بالنسبة لعمليات النشر السحابية فنوصي باستخدام YOLOv5l/x. راجع جدول README للحصول على مقارنة كاملة لجميع النماذج.
- ابدأ من الأوزان المدربة مسبقاً. يوصى به لمجموعات البيانات الصغيرة والمتوسطة الحجم (أي المركبات العضوية المتطايرة, فيز درون, 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
- ابدأ من الصفر يوصى به لمجموعات البيانات الكبيرة (أي كوكو, كائنات365, OIv6). مرر بنية النموذج YAML التي تهتم بها مع نموذج 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 argparser.
- الحقب الزمنية. ابدأ بـ 300 حقبة زمنية. إذا كان هذا يلائم بشكل مفرط في وقت مبكر، فيمكنك تقليل الحقب الزمنية. إذا لم يحدث التجاوز بعد 300 حقبة، قم بالتدريب لفترة أطول، أي 600، 1200 إلخ.
- حجم الصورة. تتدرب COCO على الدقة الأصلية لـ
--img 640
على الرغم من أنه نظرًا للكمية الكبيرة من الأجسام الصغيرة في مجموعة البيانات، يمكن أن تستفيد من التدريب على دقة أعلى مثل--img 1280
. إذا كان هناك العديد من الكائنات الصغيرة، فستستفيد مجموعات البيانات المخصصة من التدريب على الدقة الأصلية أو أعلى. يتم الحصول على أفضل نتائج استدلال على نفس--img
كما تم إجراء التدريب، أي إذا كنت تتدرب في--img 1280
يجب عليك أيضًا الاختبار والكشف في--img 1280
. - حجم الدفعة. استخدم أكبر
--batch-size
التي تسمح بها أجهزتك. تنتج أحجام الدُفعات الصغيرة ضعف تطبيع الدُفعات الإحصائيات ويجب تجنبها. يمكنك استخدام--batch-size -1
لتحديد حجم الدفعة الأمثل تلقائيًا GPU الخاصة بك. - معدل التعلم. يعمل جدول معدل التعلم الافتراضي بشكل جيد في معظم الحالات. للحصول على تقارب أسرع، يمكنك محاولة استخدام
--cos-lr
لتمكين جدولة معدل تعلُّم جيب التمام الذي يقلل تدريجيًا من معدل التعلُّم باتباع منحنى جيب التمام على مدى الحقب الزمنية. - زيادة البيانات. يتضمن YOLOv5 تقنيات تعزيز مختلفة مثل الفسيفساء التي تجمع بين صور تدريب متعددة. بالنسبة للحقب القليلة الماضية، ضع في اعتبارك استخدام
--close-mosaic 10
لتعطيل الزيادة الفسيفسائية، والتي يمكن أن تساعد في استقرار التدريب. - المعلمات الفائقة. توجد المعلمات الفائقة الافتراضية في hyp.scratch-low.yaml.yaml. نوصيك بالتدريب باستخدام المعلمات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، ستؤدي زيادة المعلمات التشعبية للتكبير إلى تقليل وتأخير الإفراط في التركيب، مما يسمح بإجراء تدريبات أطول و mAP نهائي أعلى. يؤدي تقليل المعلمات الزائدة لمكونات الخسارة مثل
hyp['obj']
سيساعد في تقليل الإفراط في تركيب مكونات الخسارة المحددة هذه. للحصول على طريقة آلية لتحسين هذه البارامترات الفائقة، راجع برنامج تعليمي لتطور البارامتر الفائق. - تدريب دقيق مختلط. تمكين التدريب الدقيق المختلط مع
--amp
لتسريع التدريب وتقليل استخدام الذاكرة دون التضحية بدقة النموذج. - تدريب متعدد GPU معالجة معالجة معالجة متعددة الوسائط. إذا كانت لديك وحدات معالجة رسومات متعددة، استخدم
--device 0,1,2,3
لتوزيع التدريب عليها، مما يقلل من وقت التدريب بشكل كبير. - التوقف المبكر. الاستخدام
--patience 50
لإيقاف التدريب إذا لم تتحسن مقاييس التحقق من الصحة لمدة 50 حقبة، مما يوفر الوقت ويمنع الإفراط في التهيئة.
تقنيات التحسين المتقدمة
- نقل التعلّم. بالنسبة لمجموعات البيانات المتخصصة، ابدأ بأوزان مدربة مسبقًا وقم بإلغاء تجميد الطبقات تدريجيًا أثناء التدريب لتكييف النموذج مع مهمتك المحددة.
- تشذيب النموذج. بعد التدريب، فكّر في تشذيب النموذج الخاص بك لإزالة الأوزان الزائدة عن الحاجة وتقليل حجم النموذج دون خسارة كبيرة في الأداء.
- مجموعة النماذج. بالنسبة للتطبيقات الحرجة، قم بتدريب نماذج متعددة بتكوينات مختلفة واجمع تنبؤاتها لتحسين الدقة.
- زيادة وقت الاختبار. تمكين TTA أثناء الاستدلال باستخدام
--augment
لتحسين دقة التنبؤ عن طريق حساب متوسط النتائج من الإصدارات المعززة من صورة الإدخال.
مزيد من القراءة
إذا كنت ترغب في معرفة المزيد، فإن أفضل مكان للبدء هو كتاب كارباثي "وصفة لتدريب الشبكات العصبية"، والذي يحتوي على أفكار رائعة للتدريب تنطبق على نطاق واسع في جميع مجالات التعلم الآلي: https://karpathy.github.io/2019/04/25/recipe/
للحصول على مزيد من المعلومات التفصيلية حول إعدادات التدريب والتكوينات، راجع وثائق إعدادات تدريبUltralytics والتي توفر شرحًا شاملاً لجميع المعلمات المتاحة.
حظًا موفقًا 🍀 وأخبرنا إذا كان لديك أي أسئلة أخرى!
الأسئلة الشائعة
كيف يمكنني معرفة ما إذا كان نموذجي مناسباً أكثر من اللازم؟
قد يكون نموذجك مناسبًا بشكل مفرط إذا استمرت خسارة التدريب في التناقص بينما تبدأ خسارة التحقق من الصحة في الزيادة. راقب خطة عمل التحقق من الصحة - إذا استقرت أو تناقصت بينما تستمر خسارة التدريب في التحسن، فهذه علامة على الإفراط في الملاءمة. تتضمن الحلول إضافة المزيد من بيانات التدريب، أو زيادة زيادة زيادة البيانات، أو تطبيق تقنيات التنظيم.
ما هو حجم الدفعة الأمثل لتدريب YOLOv5
يعتمد حجم الدفعة الأمثل على ذاكرة GPU لديك. توفر أحجام الدفعات الأكبر عمومًا إحصائيات تطبيع أفضل للدفعات واستقرار التدريب. استخدم أكبر حجم دفعة يمكن لجهازك التعامل معه دون نفاد الذاكرة. يمكنك استخدام --batch-size -1
لتحديد حجم الدُفعات الأمثل تلقائيًا لإعداداتك.
كيف يمكنني تسريع تدريب YOLOv5
لتسريع التدريب، جرب: تمكين التدريب الدقيق المختلط مع --amp
باستخدام وحدات معالجة رسومات متعددة مع --device 0,1,2,3
تخزين مجموعة البيانات الخاصة بك مؤقتًا باستخدام --cache
وتحسين حجم الدفعة الخاصة بك. ضع في اعتبارك أيضًا استخدام متغير طراز أصغر مثل YOLOv5s إذا لم تكن الدقة المطلقة أمرًا بالغ الأهمية.