YOLO Vision 2026:

YOLOv5 Model Ensembling#

📚 Bu kılavuz, daha iyi mAP ve Recall elde etmek için test ve çıkarım sırasında Ultralytics YOLOv5 🚀 model birleştirmesinin (ensemble) nasıl kullanılacağını açıklar.

Ensemble öğrenmeden:

Ensemble modelleme, ister birçok farklı modelleme algoritması kullanılarak isterse farklı training data setleri kullanılarak bir sonucu tahmin etmek için birden fazla farklı modelin oluşturulduğu bir süreçtir. Ensemble model daha sonra her temel modelin tahminini toplar ve görülmeyen veriler için tek bir nihai tahminle sonuçlanır. Ensemble modelleri kullanmanın motivasyonu, tahminde genelleme hatasını azaltmaktır. Temel modeller farklı ve bağımsız olduğu sürece, ensemble yaklaşımı kullanıldığında modelin tahmin hatası azalır. Bu yaklaşım, tahmin yaparken kalabalığın bilgeliğini arar. Ensemble model, model içinde birden fazla temel modele sahip olmasına rağmen, tek bir model gibi hareket eder ve performans gösterir.

Başlamadan Önce#

Depoyu klonla ve Python>=3.8.0 ortamında requirements.txt dosyasını PyTorch>=1.8 dahil olacak şekilde yükle. Modeller ve veri setleri 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 Et#

Model 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 veya özel bir veri setini ./weights/best.pt eğitmekten elde ettiğin kendi kontrol noktandır. Mevcut tüm modeller hakkında ayrıntılar için pretrained checkpoints table sayfasına 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 komutundaki --weights argümanına fazladan modeller ekleyerek test ve çıkarım zamanında birden fazla ön eğitilmiş model bir araya getirilebilir. Bu örnek, birlikte 2 modelden oluşan bir ensemble'ı test eder:

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

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

Topluluk Çıkarımı#

Ensemble çıkarımı çalıştırmak için --weights argümanına fazladan 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)
YOLO inference result

Model Birleştirmenin Faydaları#

YOLOv5 ile model birleştirme çeşitli avantajlar sunar:

  1. İ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.
  2. Daha İyi Genelleme: Farklı modelleri birleştirmek, aşırı öğrenmeyi (overfitting) azaltmaya yardımcı olur ve çeşitli veriler üzerinde performansı artırır.
  3. Artırılmış Sağlamlık: Topluluklar, verideki gürültüye ve aykırı değerlere karşı genellikle daha sağlamdır.
  4. 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.

Model 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.

Desteklenen Ortamlar#

Ultralytics, projelerinizi hızlandırmak için 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 Continuous Integration (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: training, validation, inference, export ve benchmarks. Her 24 saatte bir ve her yeni commit ile gerçekleştirilen testlerle macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir bir çalışma sağlarlar.

Katkıda Bulunanlar

Yorumlar