نصائح للحصول على أفضل نتائج التدريب
📚 يشرح هذا الدليل كيفية الحصول على أفضل نتائج 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
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- ابدأ من الصفر يوصى به لمجموعات البيانات الكبيرة (أي كوكو, كائنات365, OIv6). مرر بنية النموذج YAML التي تهتم بها مع نموذج YAML الفارغ
--weights ''
الحجة:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
إعدادات التدريب
قبل تعديل أي شيء، تدرب أولاً على الإعدادات الافتراضية لإنشاء خط أساس للأداء. يمكن العثور على قائمة كاملة بإعدادات train.py في إعدادات train.py argparser.
- الحقب الزمنية. ابدأ بـ 300 حقبة زمنية. إذا كان هذا يلائم بشكل مفرط في وقت مبكر، فيمكنك تقليل الحقب الزمنية. إذا لم يحدث التجاوز بعد 300 حقبة، قم بالتدريب لفترة أطول، أي 600، 1200 إلخ.
- حجم الصورة. تتدرب COCO على الدقة الأصلية لـ
--img 640
على الرغم من أنه نظرًا للكمية الكبيرة من الأجسام الصغيرة في مجموعة البيانات، يمكن أن تستفيد من التدريب على دقة أعلى مثل--img 1280
. إذا كان هناك العديد من الكائنات الصغيرة، فستستفيد مجموعات البيانات المخصصة من التدريب على الدقة الأصلية أو أعلى. يتم الحصول على أفضل نتائج استدلال على نفس--img
كما تم إجراء التدريب، أي إذا كنت تتدرب في--img 1280
يجب عليك أيضًا الاختبار والكشف في--img 1280
. - حجم الدفعة. استخدم أكبر
--batch-size
التي تسمح بها أجهزتك. تنتج أحجام الدُفعات الصغيرة إحصائيات ضعيفة لمعيار الدُفعات ويجب تجنبها. - المعلمات الفائقة. توجد المعلمات الفائقة الافتراضية في hyp.scratch-low.yaml.yaml. نوصيك بالتدريب باستخدام المعلمات الفائقة الافتراضية أولاً قبل التفكير في تعديل أي منها. بشكل عام، ستؤدي زيادة المعلمات التشعبية للتكبير إلى تقليل وتأخير الإفراط في التركيب، مما يسمح بإجراء تدريبات أطول و mAP نهائي أعلى. يؤدي تقليل المعلمات الزائدة لمكونات الخسارة مثل
hyp['obj']
سيساعد في تقليل الإفراط في تركيب مكونات الخسارة المحددة هذه. للحصول على طريقة آلية لتحسين هذه البارامترات الفائقة، راجع برنامج تعليمي لتطور البارامتر الفائق.
مزيد من القراءة
إذا كنت ترغب في معرفة المزيد، فإن أفضل مكان للبدء هو كتاب كارباثي "وصفة لتدريب الشبكات العصبية"، والذي يحتوي على أفكار رائعة للتدريب تنطبق على نطاق واسع في جميع مجالات التعلم الآلي: https://karpathy.github.io/2019/04/25/recipe/
حظًا موفقًا 🍀 وأخبرنا إذا كان لديك أي أسئلة أخرى!