İçeriğe geç

YOLOv5 Model Birleştirme

📚 Bu kılavuz, geliştirilmiş mAP ve Recall için test ve çıkarım sırasında Ultralytics YOLOv5 🚀 model topluluğunun nasıl kullanılacağını açıklamaktadır.

Ensemble learning'den:

Ensemble modelleme, birçok farklı modelleme algoritması kullanarak veya farklı eğitim verisi kümeleri kullanarak bir sonucu tahmin etmek için birden fazla çeşitli modelin oluşturulduğu bir işlemdir. Ensemble modeli daha sonra her temel modelin tahminini toplar ve görülmeyen veriler için bir nihai tahminle sonuçlanır. Ensemble modellerini kullanmanın nedeni, tahminin genelleme hatasını azaltmaktır. Temel modeller çeşitli ve bağımsız olduğu sürece, ensemble yaklaşımı kullanıldığında modelin tahmin hatası azalır. Yaklaşım, bir tahminde bulunurken kalabalığın bilgeliğini arar. Ensemble modelinin içinde birden fazla temel modeli olmasına rağmen, tek bir model gibi davranır ve performans gösterir.

Başlamadan Önce

requirements.txt'i bir Python>=3.8.0 ortamında, PyTorch>=1.8 dahil olmak üzere klonlayın ve kurun. Modeller ve veri kümeleri, en son YOLOv5 sürümünden otomatik olarak indirilir.

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

Normal Test

Topluluk oluşturmadan önce, tek bir modelin temel performansını belirleyin. Bu komut, YOLOv5x'i COCO val2017 üzerinde 640 piksel görüntü boyutunda test eder. yolov5x.pt mevcut en büyük ve en doğru modeldir. Diğer seçenekler şunlardır: yolov5s.pt, yolov5m.pt ve yolov5l.pt, veya özel bir veri kümesini eğiterek kendi kontrol noktanızı kullanabilirsiniz. ./weights/best.pt. Mevcut tüm modeller hakkında ayrıntılı bilgi için şuraya bakın: önceden eğitilmiş kontrol noktaları tablosu.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

Çıktı:

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

Ensemble Testi

Test ve çıkarım zamanında, birden fazla önceden eğitilmiş model, basitçe ek modeller eklenerek bir araya getirilebilir. --weights mevcut herhangi bir val.py veya detect.py komutunda argümanı. Bu örnek, 2 modelden oluşan bir topluluğu birlikte test eder:

  • YOLOv5x
  • YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half

Çıktı:

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/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

Ensemble Çıkarımı

Ekstra modelleri şuraya ekle: --weights toplu çıkarım çalıştırmak için argüman:

python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/images

Çıktı:

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 çıkarım sonucu

Model Topluluğunun Faydaları

YOLOv5 ile model topluluğu çeşitli avantajlar sunar:

  1. Geliştirilmiş Doğruluk: Yukarıdaki örneklerde gösterildiği gibi, birden çok modeli bir araya getirmek mAP'yi 0,504'ten 0,515'e ve mAR'ı 0,681'den 0,689'a yükseltir.
  2. Daha İyi Genelleme: Çeşitli modelleri birleştirmek, aşırı öğrenmeyi azaltmaya ve çeşitli verilerde performansı artırmaya yardımcı olur.
  3. Gelişmiş Sağlamlık: Topluluklar genellikle verilerdeki gürültüye ve aykırı değerlere karşı daha sağlamdır.
  4. Tamamlayıcı Güçler: Farklı modeller, farklı nesne türlerini veya farklı çevre koşullarını tespit etmede üstün olabilir.

Temel ödünleşme, hız ölçümlerinde gösterildiği gibi artan çıkarım süresidir (tek model için 22,4 ms, topluluk için 39,5 ms).

Model Birleştirmeyi Ne Zaman Kullanmalı

Bu senaryolarda model topluluğunu kullanmayı düşünebilirsiniz:

  • Doğruluk, çıkarım hızından daha önemli olduğunda
  • Yanlış negatiflerin en aza indirilmesi gereken kritik uygulamalar için
  • Çeşitli aydınlatma, tıkanıklık veya ölçek içeren zorlu görüntüleri işlerken
  • Maksimum performansın gerektiği yarışmalar veya kıyaslamalar sırasında

Katı gecikme gereksinimleri olan gerçek zamanlı uygulamalar için, tek model çıkarımı daha uygun olabilir.

Desteklenen Ortamlar

Ultralytics, projelerinize hızlı bir başlangıç yapmanız için her biri CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam sunar.

Proje Durumu

YOLOv5 CI

Bu rozet, tüm YOLOv5 GitHub Actions Sürekli Entegrasyon (CI) testlerinin başarıyla geçtiğini gösterir. Bu CI testleri, YOLOv5'in işlevselliğini ve performansını çeşitli temel açılardan titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışmayı sağlarlar; testler her 24 saatte bir ve her yeni commit'te yapılır.



📅 1 yıl önce oluşturuldu ✏️ 1 ay önce güncellendi

Yorumlar