تخطي إلى المحتوى

تجميع نماذج YOLOv5

📚 يشرح هذا الدليل كيفية استخدام تجميع نماذج Ultralytics YOLOv5 🚀 أثناء الاختبار والاستدلال لتحسين mAP و Recall.

من التعلم الجماعي:

النمذجة التجميعية هي عملية يتم فيها إنشاء نماذج متعددة ومتنوعة للتنبؤ بنتيجة ما، إما باستخدام العديد من خوارزميات النمذجة المختلفة أو باستخدام مجموعات بيانات تدريبية مختلفة. ثم يقوم النموذج التجميعي بتجميع تنبؤات كل نموذج أساسي وينتج عنه تنبؤ نهائي واحد للبيانات غير المرئية. الدافع لاستخدام النماذج التجميعية هو تقليل خطأ التعميم في التنبؤ. وطالما أن النماذج الأساسية متنوعة ومستقلة، يقل خطأ التنبؤ في النموذج عند استخدام نهج التجميع. يسعى هذا النهج إلى الاستفادة من حكمة الحشود في إجراء التنبؤ. على الرغم من أن النموذج التجميعي يحتوي على نماذج أساسية متعددة داخل النموذج، إلا أنه يعمل ويعمل كنموذج واحد.

قبل أن تبدأ

استنساخ الريبو وتثبيت المتطلبات.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. للحصول على تفاصيل عن جميع الموديلات المتاحة، راجع جدول نقاط التفتيش قبل التدريب.

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_hybrid=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

المخرجات:

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_hybrid=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/exp3/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/exp2
Done. (0.223s)

YOLO نتيجة الاستدلال

فوائد تجميع النماذج

يوفر تجميع النماذج باستخدام YOLOv5 العديد من المزايا:

  1. تحسين الدقة: كما هو موضح في الأمثلة أعلاه، يؤدي تجميع نماذج متعددة إلى زيادة mAP من 0.504 إلى 0.515 و mAR من 0.681 إلى 0.689.
  2. تعميم أفضل: يساعد الجمع بين النماذج المتنوعة على تقليل التعميم الزائد وتحسين الأداء على البيانات المتنوعة.
  3. تعزيز المتانة: عادةً ما تكون المجموعات أكثر قوة في مواجهة الضوضاء والقيم المتطرفة في البيانات.
  4. نقاط القوة التكميلية: قد تتفوق النماذج المختلفة في اكتشاف أنواع مختلفة من الأجسام أو في ظروف بيئية مختلفة.

تتمثل المفاضلة الأساسية في زيادة وقت الاستدلال، كما هو موضح في مقاييس السرعة (22.4 مللي ثانية للنموذج الفردي مقابل 39.5 مللي ثانية للنموذج التجميعي).

متى يجب استخدام تجميع النماذج

ضع في اعتبارك استخدام تجميع النماذج في هذه السيناريوهات:

  • عندما تكون الدقة أكثر أهمية من سرعة الاستدلال
  • للتطبيقات الحرجة حيث يجب تقليل السلبيات الخاطئة إلى أدنى حد ممكن
  • عند معالجة الصور الصعبة ذات الإضاءة المتنوعة أو الانسداد أو المقياس المتنوع
  • أثناء المنافسات أو المقارنة المعيارية حيث يتطلب الأمر أقصى أداء ممكن

بالنسبة لتطبيقات الوقت الحقيقي ذات المتطلبات الصارمة لزمن الاستجابة، قد يكون الاستدلال بنموذج واحد أكثر ملاءمة.

البيئات المدعومة

Ultralytics مجموعة من البيئات الجاهزة للاستخدام، كل منها مثبت مسبقًا مع التبعيات الأساسية مثل CUDA، CUDNN, Pythonو PyTorchلبدء مشاريعك.

حالة المشروع

YOLOv5 CI

تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) لإجراءات GitHub YOLOv5 بنجاح. تتحقق اختبارات التكامل المستمر هذه بدقة من وظائف وأداء YOLOv5 عبر مختلف الجوانب الرئيسية: التدريب والتحقق من الصحة والاستدلال والتصدير والمعايير. وهي تضمن تشغيلًا متسقًا وموثوقًا على أنظمة macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 8 أيام

التعليقات