تشذيب النماذج والتشتت في YOLOv5
📚 يشرح هذا الدليل كيفية تطبيق التقليم على نماذج YOLOv5 🚀 لإنشاء شبكات أكثر كفاءة مع الحفاظ على الأداء.
ما هو التقليم النموذجي؟
تشذيب الن ماذج هو تقنية تُستخدم لتقليل حجم وتعقيد الشبكات العصبية عن طريق إزالة المعلمات الأقل أهمية (الأوزان والوصلات). تؤدي هذه العملية إلى إنشاء نموذج أكثر كفاءة مع العديد من الفوائد:
- تقليل حجم النموذج لسهولة النشر على الأجهزة محدودة الموارد
- سرعات استنتاج أسرع مع الحد الأدنى من التأثير على الدقة
- استخدام أقل للذاكرة واستهلاك أقل للطاقة
- تحسين الكفاءة الكلية للتطبيقات في الوقت الحقيقي
يعمل التقليم من خلال تحديد وإزالة المعلمات التي تساهم بالحد الأدنى في أداء النموذج، مما يؤدي إلى نموذج أخف وزنًا بدقة مماثلة.
قبل أن تبدأ
استنساخ الريبو وتثبيت المتطلبات.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
. للحصول على تفاصيل حول جميع النماذج المتاحة، راجع README الجدول.
المخرجات:
val: data=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, 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, dnn=False
YOLOv5 🚀 v6.0-224-g4c40933 torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)
Fusing layers...
Model Summary: 444 layers, 86705005 parameters, 0 gradients
val: Scanning '/content/datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<?, ?it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [01:12<00:00, 2.16it/s]
all 5000 36335 0.732 0.628 0.683 0.496
Speed: 0.1ms pre-process, 5.2ms inference, 1.7ms NMS per image at shape (32, 3, 640, 640) # <--- base speed
Evaluating pycocotools mAP... saving runs/val/exp2/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.507 # <--- base mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.689
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.552
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.345
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.559
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.652
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.381
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.630
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.682
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.731
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.829
Results saved to runs/val/exp
تطبيق التقليم على YOLOv5x (30٪ من التباعد)
يمكننا تطبيق التقليم على النموذج باستخدام طريقة torch_utils.prune()
الأمر. لاختبار نموذج مشذّب، نقوم بتحديث val.py
لتهذيب YOLOv5x إلى 0.3 من التباعد (30٪ من الأوزان الموضوعة على الصفر):
مخرجات مشذبة بنسبة 30%:
val: data=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, 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, dnn=False
YOLOv5 🚀 v6.0-224-g4c40933 torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)
Fusing layers...
Model Summary: 444 layers, 86705005 parameters, 0 gradients
Pruning model... 0.3 global sparsity
val: Scanning '/content/datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<?, ?it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [01:11<00:00, 2.19it/s]
all 5000 36335 0.724 0.614 0.671 0.478
Speed: 0.1ms pre-process, 5.2ms inference, 1.7ms NMS per image at shape (32, 3, 640, 640) # <--- prune speed
Evaluating pycocotools mAP... saving runs/val/exp3/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.489 # <--- prune mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.677
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.537
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.334
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.542
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.635
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.370
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.612
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.664
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.496
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.722
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803
Results saved to runs/val/exp3
تحليل النتائج
من النتائج، يمكننا أن نلاحظ:
- 30% من التباعد المتحقق: 30٪ من معلمات وزن النموذج في
nn.Conv2d
الطبقات الآن صفر - يظل زمن الاستدلال دون تغيير: على الرغم من التقليم، فإن سرعة المعالجة هي نفسها بشكل أساسي
- الحد الأدنى من التأثير على الأداء: انخفضت mAP قليلاً من 0.507 إلى 0.489 (انخفاض بنسبة 3.6% فقط)
- تقليل حجم النموذج: يتطلب النموذج المشذّب ذاكرة أقل للتخزين
هذا يوضح أن التقليم يمكن أن يقلل بشكل كبير من تعقيد النموذج مع تأثير بسيط على الأداء، مما يجعله أسلوب تحسين فعال للنشر في البيئات محدودة الموارد.
صقل النماذج المشذبة
للحصول على أفضل النتائج، يجب ضبط النماذج المشذبة بدقة بعد التشذيب لاستعادة الدقة. يمكن القيام بذلك عن طريق:
- تطبيق التقليم بمستوى التشتت المطلوب
- تدريب النموذج المشذّب لبضع حلقات بمعدل تعلم أقل
- تقييم النموذج المشذّب المعدّل والمضبوط بدقة مقارنة بالنموذج الأساسي
تساعد هذه العملية المعلمات المتبقية على التكيف لتعويض الوصلات التي تمت إزالتها، وغالبًا ما تستعيد معظم أو كل الدقة الأصلية.
البيئات المدعومة
Ultralytics مجموعة من البيئات الجاهزة للاستخدام، كل منها مثبت مسبقًا مع التبعيات الأساسية مثل CUDA، CUDNN, Pythonو PyTorchلبدء مشاريعك.
- GPU دفاتر مجاناً:
- Google السحابة: دليل البدء السريع لـ GCP
- أمازون دليل AWS للبدء السريع
- Azure: دليل البدء السريع لـ AzureML
- دوكر: دليل البدء السريع لـ Docker
حالة المشروع
تشير هذه الشارة إلى اجتياز جميع اختبارات التكامل المستمر (CI) لإجراءات GitHub YOLOv5 بنجاح. تتحقق اختبارات التكامل المستمر هذه بدقة من وظائف وأداء YOLOv5 عبر مختلف الجوانب الرئيسية: التدريب والتحقق من الصحة والاستدلال والتصدير والمعايير. وهي تضمن تشغيلًا متسقًا وموثوقًا على أنظمة macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.