Link to this sectionYOLOv5 Model Ensembling#
📚 Bu rehber, test ve çıkarım sırasında mAP ve Recall değerlerini iyileştirmek için Ultralytics YOLOv5 🚀 model birleştirmenin (model ensembling) nasıl kullanılacağını açıklar.
Topluluk öğreniminden yola çıkarak:
Topluluk modelleme, bir sonucu tahmin etmek için birçok farklı modelleme algoritması kullanılarak veya farklı eğitim verisi setleri kullanılarak birden fazla çeşitli modelin oluşturulduğu bir süreçtir. Topluluk modeli, her bir temel modelin tahminini toplar ve görülmemiş veriler için tek bir nihai sonuç ortaya koyar. Topluluk modellerini kullanmanın motivasyonu, tahminin genelleme hatasını azaltmaktır. Temel modeller çeşitli ve bağımsız olduğu sürece, topluluk yaklaşımı kullanıldığında modelin tahmin hatası azalır. Bu yaklaşım, tahmin yaparken kolektif bilgeliğe başvurur. Topluluk modeli, içinde birden fazla temel model barındırmasına rağmen, tek bir model gibi hareket eder ve performans gösterir.
Link to this sectionBaşlamadan Önce#
Depoyu kopyala ve requirements.txt dosyasını Python>=3.8.0 ortamında, PyTorch>=1.8 dahil olmak üzere yükle. 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 # installLink to this sectionNormal Test Et#
Birleştirmeden önce, tek bir modelin temel performansını belirle. Bu komut, YOLOv5x'i 640 piksel görüntü boyutunda COCO val2017 üzerinde test eder. yolov5x.pt, mevcut en büyük ve en doğru modeldir. Diğer seçenekler yolov5s.pt, yolov5m.pt ve yolov5l.pt'dir veya özel bir veri kümesini eğiterek elde ettiğin kendi kontrol noktan ./weights/best.pt olabilir. Mevcut tüm modeller hakkında ayrıntılar için önceden eğitilmiş kontrol noktaları tablosuna bak.
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.826Link to this sectionTopluluk Testi#
Birden fazla önceden eğitilmiş model, herhangi bir mevcut val.py veya detect.py komutundaki --weights argümanına ekstra modeller eklenerek test ve çıkarım zamanında birleştirilebilir. 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 --halfruns/train/exp-5/weights/best.pt gibi özel ağırlıklar da dahil olmak üzere istediğin kadar kontrol noktasını listeleyebilirsin. YOLOv5, her modeli otomatik olarak çalıştıracak, tahminleri görüntü bazında hizalayacak ve NMS gerçekleştirmeden önce çıktıların ortalamasını alacaktır.
Çı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/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.844Link to this sectionTopluluk Çıkarımı#
Topluluk çıkarımı çalıştırmak için --weights argümanına ekstra modeller ekle:
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/exp-2
Done. (0.223s)
Link to this sectionModel Birleştirmenin Faydaları#
YOLOv5 ile model birleştirme çeşitli avantajlar sunar:
- İyileştirilmiş Doğruluk: Yukarıdaki örneklerde gösterildiği gibi, birden fazla modeli birleştirmek mAP değerini 0.504'ten 0.515'e ve mAR değerini 0.681'den 0.689'a çıkarır.
- Daha İyi Genelleme: Farklı modelleri birleştirmek, aşırı öğrenmeyi (overfitting) azaltmaya yardımcı olur ve çeşitli veriler üzerinde performansı artırır.
- Artırılmış Sağlamlık: Topluluklar, verideki gürültüye ve aykırı değerlere karşı genellikle daha sağlamdır.
- Tamamlayıcı Güçlü Yönler: Farklı modeller, farklı nesne türlerini tespit etmede veya farklı çevresel koşullarda daha başarılı olabilir.
Hız ölçümlerinde görüldüğü gibi (tek model için 22.4ms iken topluluk için 39.5ms) birincil dezavantaj, artan çıkarım süresidir.
Link to this sectionModel Birleştirme Ne Zaman Kullanılır#
Model birleştirmeyi şu senaryolarda kullanmayı düşün:
- Doğruluk, çıkarım hızından daha önemli olduğunda
- Yanlış negatiflerin en aza indirilmesi gereken kritik uygulamalar için
- Değişken ışıklandırma, tıkanıklık veya ölçeğe sahip 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.
Link to this sectionDesteklenen Ortamlar#
Ultralytics, projelerine hızlı bir başlangıç yapman için CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklü olduğu, kullanıma hazır çeşitli ortamlar sağlar.
- Ücretsiz GPU Not Defterleri:
- Google Cloud: GCP Hızlı Başlangıç Kılavuzu
- Amazon: AWS Başlangıç Kılavuzu
- Azure: AzureML Başlangıç Kılavuzu
- Docker: Docker Başlangıç Kılavuzu
Link to this sectionProje Durumu#
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 yönlerden titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir çalışmayı garanti eder; testler her 24 saatte bir ve her yeni commit yapıldığında gerçekleştirilir.