نصائح للحصول على أفضل نتائج التدريب
📚 يشرح هذا الدليل كيفية إنتاج أفضل نتائج mAP والتدريب باستخدام YOLOv5 🚀.
في معظم الأحيان ، يمكن الحصول على نتائج جيدة دون أي تغييرات على النماذج أو إعدادات التدريب ، بشرط أن تكون مجموعة البيانات الخاصة بك كبيرة بما يكفي ومصنفة جيدا. إذا لم تحصل في البداية على نتائج جيدة ، فهناك خطوات قد تتمكن من اتخاذها للتحسين ، لكننا نوصي دائما المستخدمين أولا بالتدريب باستخدام جميع الإعدادات الافتراضية قبل التفكير في أي تغييرات. يساعد هذا في إنشاء خط أساس للأداء وتحديد مجالات التحسين.
إذا كانت لديك أسئلة حول نتائج التدريب الخاصة بك نوصيك بتقديم أكبر قدر ممكن من المعلومات if you expect a helpful response, including results plots (train losses, val losses, P, R, mAP), PR curve, confusion matrix, training mosaics, test results and dataset statistics images such as labels.png. All of these are located in your project/name
الدليل ، عادة yolov5/runs/train/exp
.
لقد قمنا بتجميع دليل كامل للمستخدمين الذين يتطلعون إلى الحصول على أفضل النتائج على YOLOv5 التدريبات أدناه.
مجموعة البيانات
- الصور لكل فئة. ≥ يوصى ب 1500 صورة لكل فصل
- مثيلات لكل فئة. ≥ يوصى ب 10000 مثيل (كائنات مصنفة) لكل فئة
- مجموعة متنوعة من الصور. يجب أن يكون ممثلا للبيئة المنشورة. بالنسبة لحالات الاستخدام في العالم الحقيقي ، نوصي بصور من أوقات مختلفة من اليوم ، ومواسم مختلفة ، وطقس مختلف ، وإضاءة مختلفة ، وزوايا مختلفة ، ومصادر مختلفة (كشط عبر الإنترنت ، تم جمعها محليا ، وكاميرات مختلفة) وما إلى ذلك.
- تناسق التسمية. يجب تسمية جميع مثيلات جميع الفئات في جميع الصور. لن يعمل وضع العلامات الجزئية.
- Label accuracy. Labels must closely enclose each object. No space should exist between an object and it's bounding box. No objects should be missing a label.
- التحقق من الملصق. منظر
train_batch*.jpg
في القطار ، ابدأ في التحقق من صحة ملصقاتك ، أي انظر مثل فسيفساء. - صور الخلفية. صور الخلفية هي صور لا تحتوي على كائنات تتم إضافتها إلى مجموعة بيانات لتقليل الإيجابيات الخاطئة (FP). نوصي بحوالي 0-10٪ من صور الخلفية للمساعدة في تقليل FPs (يحتوي COCO على 1000 صورة خلفية كمرجع ، 1٪ من الإجمالي). لا توجد تسميات مطلوبة لصور الخلفية.
اختيار النموذج
ستنتج النماذج الأكبر حجمًا مثل YOLOv5x و YOLOv5x6 نتائج أفضل في جميع الحالات تقريبًا، ولكنها تحتوي على المزيد من المعلمات، وتتطلب المزيد من الذاكرة CUDA للتدريب، وتكون أبطأ في التشغيل. بالنسبة لعمليات النشر على الأجهزة المحمولة، نوصي باستخدام YOLOv5/m، أما بالنسبة لعمليات النشر السحابية فنوصي باستخدام YOLOv5l/x. راجع جدول README للحصول على مقارنة كاملة لجميع النماذج.
- ابدأ من الأوزان المدربة مسبقا. موصى به لمجموعات البيانات الصغيرة والمتوسطة الحجم (أي المركبات العضويه المتطايره, فيسدرون, جلوبال قمح). قم بتمرير اسم النموذج إلى
--weights
جدال. يتم تنزيل النماذج تلقائيا من أخير YOLOv5 أفرج.
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- ابدأ من الصفر. موصى به لمجموعات البيانات الكبيرة (أي كوكو, الكائنات365, أويفي 6). قم بتمرير بنية النموذج YAML التي تهتم بها ، جنبا إلى جنب مع فارغة
--weights ''
جدال:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
إعدادات التدريب
قبل تعديل أي شيء ، قم أولا بالتدريب باستخدام الإعدادات الافتراضية لإنشاء خط أساس للأداء. يمكن العثور على قائمة كاملة بإعدادات train.py في train.py argparser.
- Epochs. Start with 300 epochs. If this overfits early then you can reduce epochs. If overfitting does not occur after 300 epochs, train longer, i.e. 600, 1200 etc. epochs.
- حجم الصورة. قطارات COCO بدقة أصلية
--img 640
، على الرغم من أنه نظرا للكمية الكبيرة من الكائنات الصغيرة في مجموعة البيانات ، يمكن أن تستفيد من التدريب بدقة أعلى مثل--img 1280
. إذا كان هناك العديد من الكائنات الصغيرة ، فستستفيد مجموعات البيانات المخصصة من التدريب بدقة أصلية أو أعلى. يتم الحصول على أفضل نتائج الاستدلال في نفس الوقت--img
كما تم تشغيل التدريب ، أي إذا كنت تتدرب في--img 1280
يجب عليك أيضا اختبار واكتشاف في--img 1280
. - Batch size. استخدم أكبر
--batch-size
التي يسمح بها جهازك. تنتج أحجام الدفعات الصغيرة إحصائيات دفعية رديئة ويجب تجنبها. - المعلمات الفائقة. المعلمات الفائقة الافتراضية موجودة في hyp.scratch-low.yaml. نوصيك بالتدريب باستخدام المعلمات الفائقة الافتراضية أولا قبل التفكير في تعديل أي منها. بشكل عام ، ستؤدي زيادة المعلمات الفائقة إلى تقليل وتأخير التجهيز الزائد ، مما يسمح بتدريبات أطول و mAP نهائي أعلى. الحد من مكون الخسارة كسب المعلمات الفائقة مثل
hyp['obj']
سيساعد في تقليل التجهيز الزائد في مكونات الخسارة المحددة هذه. للحصول على طريقة تلقائية لتحسين هذه المعلمات الفائقة، راجع البرنامج التعليمي لتطور المعلمات الفائقة.
قراءة متعمقة
If you'd like to know more, a good place to start is Karpathy's 'Recipe for Training Neural Networks', which has great ideas for training that apply broadly across all ML domains: https://karpathy.github.io/2019/04/25/recipe/
حظا 🍀 سعيدا وأخبرنا إذا كان لديك أي أسئلة أخرى!