تجميع نماذج YOLOv5#
📚 يشرح هذا الدليل كيفية استخدام تجميع نماذج Ultralytics YOLOv5 🚀 أثناء الاختبار والاستدلال لتحسين قياس mAP وRecall.
نمذجة التجميع هي عملية يتم فيها إنشاء نماذج متنوعة متعددة للتنبؤ بنتيجة ما، إما باستخدام العديد من خوارزميات النمذجة المختلفة أو باستخدام مجموعات training data مختلفة. يجمع نموذج التجميع بعد ذلك توقعات كل نموذج أساسي وينتج عنه تنبؤ نهائي واحد للبيانات غير المرئية. الدافع وراء استخدام نماذج التجميع هو تقليل خطأ التعميم للتنبؤ. طالما أن النماذج الأساسية متنوعة ومستقلة، فإن خطأ التنبؤ للنموذج يقل عند استخدام نهج التجميع. يسعى النهج إلى حكمة الحشود في إجراء التنبؤ. على الرغم من أن نموذج التجميع يحتوي على نماذج أساسية متعددة بداخله، إلا أنه يعمل ويؤدي كنموذج واحد.
قبل البدء#
استنسخ المستودع وقم بتثبيت requirements.txt في بيئة Python>=3.8.0، بما في ذلك PyTorch>=1.8. يتم تنزيل النماذج ومجموعات البيانات تلقائياً من أحدث إصدار لـ YOLOv5.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # installالاختبار العادي#
قبل التجميع، حدد الأداء الأساسي لنموذج واحد. تختبر هذا الأمر YOLOv5x على COCO val2017 بحجم صورة 640 بكسل. yolov5x.pt هو النموذج الأكبر والأكثر دقة المتاح. الخيارات الأخرى هي yolov5s.pt وyolov5m.pt وyolov5l.pt، أو نقطة التفتيش الخاصة بك من تدريب مجموعة بيانات مخصصة ./weights/best.pt. للحصول على تفاصيل حول جميع النماذج المتاحة، راجع pretrained checkpoints table.
python val.py --weights yolov5x.pt --data coco.yaml --img 640 --halfالمخرجات:
val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2846.03it/s]
val: New cache created: ../datasets/coco/val2017.cache
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [02:30<00:00, 1.05it/s]
all 5000 36335 0.746 0.626 0.68 0.49
Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640) # <--- baseline speed
Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.504 # <--- baseline mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.688
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.546
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.351
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.644
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.382
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.628
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.681 # <--- baseline mAR
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.524
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.826اختبار التجميع#
يمكن تجميع نماذج مدربة مسبقًا متعددة معًا في وقت الاختبار والاستدلال ببساطة عن طريق إلحاق نماذج إضافية بمعامل --weights في أي أمر val.py أو detect.py موجود. يختبر هذا المثال مجموعة من نموذجارين معًا:
- YOLOv5x
- YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --halfيمكنك إدراج العديد من نقاط التفتيش كما تشاء، بما في ذلك الأوزان المخصصة مثل runs/train/exp-5/weights/best.pt. ستعمل YOLOv5 تلقائيًا على تشغيل كل نموذج، ومحاذاة التنبؤات على أساس كل صورة، ومتوسط المخرجات قبل إجراء NMS.
المخرجات:
val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt'] # Ensemble notice
val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00, 1.52s/it]
all 5000 36335 0.747 0.637 0.692 0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640) # <--- ensemble speed
Evaluating pycocotools mAP... saving runs/val/exp-3/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.515 # <--- ensemble mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.699
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.557
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.387
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.638
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.689 # <--- ensemble mAR
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844استدلال التجميع#
ألحق نماذج إضافية بمعامل --weights لتشغيل استدلال التجميع:
python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/imagesالمخرجات:
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']
image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp-2
Done. (0.223s)
فوائد تجميع النماذج#
يوفر تجميع النماذج مع YOLOv5 العديد من المزايا:
- دقة محسنة: كما هو موضح في الأمثلة أعلاه، يؤدي تجميع نماذج متعددة إلى زيادة mAP من 0.504 إلى 0.515 وزيادة mAR من 0.681 إلى 0.689.
- تعميم أفضل: يساعد الجمع بين نماذج متنوعة في تقليل الإفراط في التخصيص (overfitting) وتحسين الأداء على البيانات المتنوعة.
- متانة معززة: تكون النماذج المجمعة عادةً أكثر قوة في مواجهة الضوضاء والقيم المتطرفة في البيانات.
- نقاط قوة تكميلية: قد تتفوق نماذج مختلفة في اكتشاف أنواع مختلفة من الكائنات أو في ظروف بيئية مختلفة.
المقايضة الأساسية هي زيادة وقت الاستدلال، كما هو موضح في مقاييس السرعة (22.4 مللي ثانية للنموذج الواحد مقابل 39.5 مللي ثانية للتجميع).
متى تستخدم تجميع النماذج#
فكر في استخدام تجميع النماذج في هذه السيناريوهات:
- عندما تكون الدقة أكثر أهمية من سرعة الاستدلال
- للتطبيقات الحساسة حيث يجب تقليل النتائج السلبية الكاذبة
- عند معالجة صور صعبة ذات إضاءة متفاوتة أو حجب أو مقاييس مختلفة
- أثناء المسابقات أو القياس المعياري حيث يلزم الحصول على أقصى أداء
بالنسبة للتطبيقات في الوقت الفعلي ذات متطلبات زمن الانتقال الصارمة، قد يكون استدلال النموذج الواحد أكثر ملاءمة.
البيئات المدعومة#
توفر Ultralytics مجموعة من البيئات الجاهزة للاستخدام، وكل منها مثبت مسبقاً بالتبعيات الأساسية مثل CUDA، وCUDNN، وPython، وPyTorch، لبدء مشاريعك بسرعة.
- دفاتر ملاحظات مجانية لوحدات معالجة الرسومات:
- Google Cloud: GCP Quickstart Guide
- Amazon: دليل البدء السريع لـ AWS
- Azure: دليل البدء السريع لـ AzureML
- Docker: Docker Quickstart Guide
حالة المشروع#
تشير هذه الشارة إلى أن جميع اختبارات التكامل المستمر (CI) لـ YOLOv5 GitHub Actions تمر بنجاح. تتحقق اختبارات CI هذه بدقة من وظائف وأداء YOLOv5 عبر جوانب رئيسية مختلفة: training، وvalidation، وinference، وexport، وbenchmarks. وهي تضمن تشغيلاً متسقاً وموثوقاً على أنظمة macOS وWindows وUbuntu، مع إجراء اختبارات كل 24 ساعة ومع كل عملية commit جديدة.