YOLOv5 Model Toplama
📚 Bu kılavuz, geliştirilmiş mAP ve Geri Çağırma için test ve çıkarım sırasında Ultralytics YOLOv5 🚀 model topluluğunun nasıl kullanılacağını açıklar.
Topluluk modellemesi, birçok farklı modelleme algoritması veya farklı eğitim veri setleri kullanılarak bir sonucu tahmin etmek için birden fazla farklı modelin oluşturulduğu bir süreçtir. Topluluk modeli daha sonra her bir temel modelin tahminini toplar ve görülmeyen veriler için bir kez nihai tahminle sonuçlanır. Topluluk modellerini kullanma 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. Yaklaşım, bir tahminde bulunurken kalabalıkların bilgeliğini arar. Topluluk modeli, içinde birden fazla temel model barındırsa da tek bir model gibi davranır ve performans gösterir.
Başlamadan Önce
Repoyu klonlayın ve requirements.txt dosyasını bir Python>=3.8.0 ortamı dahil olmak üzere PyTorch>=1.8. 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
Topluluk oluşturmadan önce, tek bir modelin temel performansını belirleyin. 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 kümesinin eğitiminden elde ettiğiniz kendi kontrol noktanız ./weights/best.pt
. Mevcut tüm modeller hakkında ayrıntılı bilgi için bkz. önceden eğitilmiş kontrol noktaları tablosu.
Çı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_hybrid=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
Birden fazla ön eğitimli model, test ve çıkarım zamanında sadece ekstra modeller ekleyerek bir araya getirilebilir. --weights
argümanını mevcut herhangi bir val.py veya detect.py komutunda kullanabilirsiniz. Bu örnek, 2 modelden oluşan bir topluluğu birlikte test eder:
- YOLOv5x
- YOLOv5l6
Çı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_hybrid=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 Çıkarsaması
Ekstra modelleri --weights
topluluk çıkarımını çalıştırmak için argüman:
Çı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 Birleştirmenin Faydaları
YOLOv5 ile model birleştirme çeşitli avantajlar sunar:
- Geliştirilmiş Doğruluk: Yukarıdaki örneklerde gösterildiği gibi, birden fazla modelin bir araya getirilmesi mAP'yi 0,504'ten 0,515'e ve mAR'yi 0,681'den 0,689'a çıkarır.
- Daha İyi Genelleme: Farklı modellerin birleştirilmesi, aşırı uyumu azaltmaya yardımcı olur ve çeşitli veriler üzerinde performansı artırır.
- Geliştirilmiş Sağlamlık: Topluluklar genellikle verilerdeki gürültü ve aykırı değerlere karşı daha dayanıklıdır.
- Tamamlayıcı Güçlü Yönler: Farklı modeller, farklı nesne türlerini veya farklı çevresel koşulları tespit etmede üstün olabilir.
Birincil ödünleşme, hız ölçümlerinde gösterildiği gibi artan çıkarım süresidir (tek model için 22,4 ms'ye karşılık topluluk için 39,5 ms).
Model Birleştirme Ne Zaman Kullanılır?
Bu senaryolarda model birleştirme kullanmayı düşünün:
- Doğruluk, çıkarım hızından daha önemli olduğunda
- Yanlış negatif sonuçların en aza indirilmesi gereken kritik uygulamalar için
- Çeşitli ışıklandırma, oklüzyon veya ölçeğe sahip zorlu görüntüleri işlerken
- Maksimum performansın gerekli olduğu yarışmalar veya kıyaslama sırasında
Sıkı gecikme gereksinimleri olan gerçek zamanlı uygulamalar için tek model çıkarımı daha uygun olabilir.
Desteklenen Ortamlar
Ultralytics gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam sağlar. CUDA, CUDNN, Pythonve PyTorchProjelerinizi başlatmak için.
- Ücretsiz GPU Not Defterleri:
- Google Bulut: 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 'un 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. Her 24 saatte bir ve her yeni işlemde yapılan testlerle macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir çalışma sağlarlar.