YOLO Vision 2026:

YOLOv5 Model Topluluklandırma#

📚 Bu kılavuz, daha yüksek mAP ve Recall elde etmek amacıyla test ve çıkarım sırasında Ultralytics YOLOv5 🚀 model topluluklandırmanın nasıl kullanılacağını açıklar.

Topluluk öğrenmesinden:

Topluluk modelleme, birçok farklı modelleme algoritması kullanarak veya farklı eğitim verisi kümelerinden yararlanarak bir sonucu tahmin etmek üzere birden fazla, çeşitli modelin oluşturulduğu bir süreçtir. Topluluk modeli daha sonra her temel modelin tahminini birleştirir ve daha önce görülmemiş veriler için tek bir nihai tahmin üretir. Topluluk modellerini 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 modelinin içinde birden fazla temel model bulunsa da tek bir model gibi davranır ve çalışır.

Başlamadan Önce#

Depoyu klonla ve Python>=3.8.0 ortamında, PyTorch>=1.8 dahil olmak üzere requirements.txt dosyasını yükle. Modeller ve veri kümeleri, en güncel 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ı belirle. Bu komut, YOLOv5x modelini 640 piksel görüntü boyutunda COCO val2017 üzerinde test eder. yolov5x.pt, kullanılabilir en büyük ve en isabetli modeldir. Diğer seçenekler yolov5s.pt, yolov5m.pt ve yolov5l.pt veya özel bir veri kümesiyle yapılan eğitimden kendi kontrol noktan ./weights/best.pt olabilir. Kullanılabilir tüm modellerin 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.826

Topluluk Testi#

Mevcut herhangi bir val.py veya detect.py komutunda --weights bağımsız değişkenine ek modeller ekleyerek birden fazla önceden eğitilmiş modeli test ve çıkarım sırasında kolayca birlikte kullanabilirsin. 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

runs/train/exp5/weights/best.pt gibi özel ağırlıklar da dahil olmak üzere istediğin kadar kontrol noktası listeleyebilirsin. YOLOv5 her modeli otomatik olarak çalıştırır, görüntü bazında tahminleri hizalar ve NMS gerçekleştirmeden önce çıktılarının ortalamasını alı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/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

Topluluk Çıkarımı#

Topluluk çıkarımını çalıştırmak 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)
YOLO inference result

Model Topluluklandırmanın Avantajları#

YOLOv5 ile model topluluklandırma çeşitli avantajlar sunar:

  1. Daha Yüksek Doğruluk: Yukarıdaki örneklerde gösterildiği gibi birden fazla modelin topluluk olarak kullanılması mAP değerini 0.504'ten 0.515'e, mAR değerini ise 0.681'den 0.689'a yükseltir.
  2. Daha İyi Genelleme: Çeşitli modelleri birleştirmek aşırı öğrenmeyi azaltmaya ve farklı veriler üzerindeki performansı iyileştirmeye yardımcı olur.
  3. Geliştirilmiş Sağlamlık: Topluluklar genellikle verilerdeki gürültüye ve aykırı değerlere karşı daha dayanıklıdır.
  4. Tamamlayıcı Güçlü Yönler: Farklı modeller, farklı nesne türlerini veya farklı çevresel koşullardaki nesneleri algılamada başarılı olabilir.

Temel ödünleşim, 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 Topluluklandırma Ne Zaman Kullanılmalı?#

Model topluluklandırmayı şu senaryolarda kullanmayı düşün:

  • Doğruluk, çıkarım hızından daha önemli olduğunda
  • Yanlış negatiflerin en aza indirilmesi gereken kritik uygulamalarda
  • Çeşitli aydınlatma koşullarına, örtülmeye veya ölçeğe sahip zorlu görüntüleri işlerken
  • Maksimum performansın gerekli olduğu 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, projelerine hızlı bir başlangıç yapman 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.

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 çeşitli önemli alanlardaki işlevselliğini ve performansını titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve karşılaştırmalı testler. Testler her 24 saatte bir ve her yeni işleme sonrasında yürütülerek macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir çalışmayı güvence altına alır.

Yorumlar