YOLOv5 Model Topluluğu
Bu kılavuz, test ve çıkarım sırasında Ultralytics YOLOv5 ile model topluluğu oluşturma yöntemini kullanarak daha yüksek mAP ve duyarlılık değerlerine nasıl ulaşacağını açıklar.
Topluluk modellemesi, bir sonucu tahmin etmek için farklı modelleme algoritmaları kullanarak veya farklı eğitim verisi kümelerinden yararlanarak çeşitli modeller oluşturma sürecidir. Topluluk modeli, her temel modelin tahminini bir araya getirerek görülmemiş veriler için tek bir nihai tahmin üretir. Topluluk modelleri kullanmanın amacı, tahminin genelleme hatasını azaltmaktır. Temel modeller çeşitli ve birbirinden bağımsız olduğu sürece, topluluk yaklaşımı kullanıldığında modelin tahmin hatası azalır. Bu yaklaşım, tahmin yaparken kalabalığın bilgeliğinden yararlanmayı amaçlar. Topluluk modeli birden fazla temel model içerse de tek bir model gibi çalışır ve performans gösterir.
Başlamadan Önce#
Depoyu klonla ve Python>=3.8.0 ortamında requirements.txt dosyasındaki gereksinimleri, PyTorch>=1.8 dâhil 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 # installNormal Test#
Model topluluğu oluşturmadan önce tek bir modelin temel performansını belirle. Bu komut, YOLOv5x modelini COCO val2017 üzerinde 640 piksel görüntü boyutuyla test eder. yolov5x.pt, en büyük ve en yüksek doğruluğa sahip P5 modelidir. Diğer seçenekler daha küçük önceden eğitilmiş kontrol noktaları yolov5n.pt, yolov5s.pt, yolov5m.pt ve yolov5l.pt ya da özel bir veri kümesinde eğitiminden elde ettiğin kendi kontrol noktan (ör. runs/train/exp/weights/best.pt) olabilir.
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 Instances P R mAP50 mAP50-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.826Topluluk Testi#
Mevcut herhangi bir val.py veya detect.py komutundaki --weights argümanına ek modeller ekleyerek test ve çıkarım sırasında birden fazla önceden eğitilmiş modeli bir araya getirebilirsin. 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/exp5/weights/best.pt gibi özel ağırlıklar dâhil istediğin kadar kontrol noktası listeleyebilirsin. YOLOv5, her modeli otomatik olarak çalıştırır ve NMS uygulamadan önce tahminlerini görüntü başına birleştirir.
Çı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 Instances P R mAP50 mAP50-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.844Topluluk Çıkarımı#
Topluluk çıkarımı yapmak için --weights bağımsız değişkenine ek 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/exp2
Done. (0.223s)
Model Topluluğunun Avantajları#
YOLOv5 ile model topluluğu kullanmak çeşitli avantajlar sunar:
- Daha Yüksek Doğruluk: Yukarıdaki örneklerde gösterildiği gibi, birden fazla modeli topluluk hâlinde kullanmak mAP değerini 0.504'ten 0.515'e, mAR değerini ise 0.681'den 0.689'a yükseltir.
- Daha İyi Genelleme: Farklı modelleri birleştirmek aşırı öğrenmeyi azaltmaya yardımcı olur ve çeşitli verilerdeki performansı iyileştirir.
- Daha Yüksek Sağlamlık: Topluluklar genellikle verilerdeki gürültüye ve aykırı değerlere karşı daha dayanıklıdır.
- Birbirini Tamamlayan Güçlü Yönler: Farklı modeller, farklı nesne türlerini veya farklı çevre koşullarındaki nesneleri tespit etmede başarılı olabilir.
Temel ödünleşim, hız ölçümlerinde görüldüğü gibi çıkarım süresinin artmasıdır (tek model için 22.4 ms, topluluk için 39.5 ms).
Model Topluluğu Ne Zaman Kullanılmalı?#
Şu senaryolarda model topluluğu kullanmayı düşünebilirsin:
- Doğruluk, çıkarım hızından daha önemli olduğunda
- Yanlış negatiflerin en aza indirilmesi gereken kritik uygulamalarda
- Aydınlatma, örtülme veya ölçek bakımından çeşitlilik gösteren zorlu görüntüler işlenirken
- Maksimum performansın gerektiği yarışmalarda veya kıyaslama testlerinde
Katı gecikme gereksinimleri olan gerçek zamanlı uygulamalarda tek modelle çıkarım yapmak daha uygun olabilir.
Desteklenen Ortamlar#
Ultralytics, projelerine hızlıca başlaman için CUDA, cuDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklendiği, kullanıma hazır çeşitli ortamlar sunar.
- Ücretsiz GPU Not Defterleri:
- Google Cloud: GCP Hızlı Başlangıç Kılavuzu
- Amazon: AWS Hızlı Başlangıç Kılavuzu
- Azure: AzureML Hızlı Başlangıç Kılavuzu
- Docker: Docker Hızlı Başlangıç Kılavuzu
Proje 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ğitim, doğrulama, çıkarım, dışa aktarma ve karşılaştırmalı testler gibi temel alanlarda titizlikle denetler. Testler her 24 saatte bir ve her yeni gönderimde gerçekleştirilerek macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışma sağlanır.
Sık Sorulan Sorular#
İstediğin sayıda. Örneğin
--weights yolov5x.pt yolov5l6.pt runs/train/exp/weights/best.ptgibi her kontrol noktasını--weightssonrasında listele. Çıkarım süresi, model sayısıyla yaklaşık orantılı olarak artar.Evet. Tahminler NMS uygulanmadan önce birleştirildiğinden, her modelin aynı sınıf listesiyle ve aynı sırada eğitilmiş olması gerekir. Girdi boyutları ve mimariler farklı olabilir.
Evet. Topluluktaki her modele TTA uygulamak için aynı
val.pyveyadetect.pykomutuna--augmentekle.Topluluk oluşturma işlemi
models/experimental.pyiçindeki PyTorchEnsemblemodülü tarafından yürütülür; bu nedenle yalnızca.ptkontrol noktalarına uygulanır. ONNX veya TensorRT dosyalarına ihtiyacın varsa her modeli ayrı ayrı dışa aktar.
Yorumlar
Bir soru sor, sonuçlarını paylaş veya başka birine yardım et.