Meet YOLO26: next-gen vision AI.

Link to this sectionYOLOv5'te Model Budama ve Seyreklik#

📚 Bu rehber, performansı korurken daha verimli ağlar oluşturmak için YOLOv5 🚀 modellerine nasıl budama (pruning) uygulayacağını anlatıyor.

Link to this sectionModel Budama Nedir?#

Model budama, daha az önemli parametreleri (ağırlıklar ve bağlantılar) kaldırarak sinir ağlarının boyutunu ve karmaşıklığını azaltmak için kullanılan bir tekniktir. Bu işlem, birkaç avantajı olan daha verimli bir model oluşturur:

  • Kaynak kısıtlı cihazlarda daha kolay dağıtım için azaltılmış model boyutu
  • Doğruluk üzerinde minimum etkiyle daha hızlı çıkarım hızları
  • Daha düşük bellek kullanımı ve enerji tüketimi
  • Gerçek zamanlı uygulamalar için geliştirilmiş genel verimlilik

Budama, modelin performansına minimum düzeyde katkıda bulunan parametreleri belirleyip kaldırarak, benzer doğrulukta daha hafif bir model elde edilmesini sağlar.

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 # install

Link to this sectionTemel Performansı Test Et#

Budamadan önce, karşılaştırma yapmak için bir temel performans belirle. Bu komut, YOLOv5x modelini 640 piksel görüntü boyutunda COCO val2017 üzerinde test eder. yolov5x.pt mevcut olan en büyük ve en doğru modeldir. Diğer seçenekler yolov5s.pt, yolov5m.pt ve yolov5l.pt veya kendi özel veri setini eğiterek elde ettiğin ./weights/best.pt kontrol noktandır. Tüm mevcut modeller hakkında detaylı bilgi için README tablosuna bak.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

Çıktı:

val: data=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, 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, dnn=False
YOLOv5 🚀 v6.0-224-g4c40933 torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)

Fusing layers...
Model Summary: 444 layers, 86705005 parameters, 0 gradients
val: Scanning '/content/datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<?, ?it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [01:12<00:00,  2.16it/s]
                 all       5000      36335      0.732      0.628      0.683      0.496
Speed: 0.1ms pre-process, 5.2ms inference, 1.7ms NMS per image at shape (32, 3, 640, 640)  # <--- base speed

Evaluating pycocotools mAP... saving runs/val/exp-2/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.507  # <--- base mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.689
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.552
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.345
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.559
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.652
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.381
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.630
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.682
 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.731
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.829
Results saved to runs/val/exp

Link to this sectionYOLOv5x'e Budama Uygula (%30 Seyreklik)#

We can apply pruning to the model using the torch_utils.prune() command defined in utils/torch_utils.py. To test a pruned model, we update val.py to prune YOLOv5x to 0.3 sparsity (30% of weights set to zero):

YOLOv5 model pruning to 30% sparsity code

%30 budanmış çıktı:

val: data=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, 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, dnn=False
YOLOv5 🚀 v6.0-224-g4c40933 torch 1.10.0+cu111 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)

Fusing layers...
Model Summary: 444 layers, 86705005 parameters, 0 gradients
Pruning model...  0.3 global sparsity
val: Scanning '/content/datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<?, ?it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [01:11<00:00,  2.19it/s]
                 all       5000      36335      0.724      0.614      0.671      0.478
Speed: 0.1ms pre-process, 5.2ms inference, 1.7ms NMS per image at shape (32, 3, 640, 640)  # <--- prune 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.489  # <--- prune mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.677
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.537
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.334
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.542
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.635
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.370
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.612
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.664
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.496
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.722
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803
Results saved to runs/val/exp-3

Link to this sectionSonuç Analizi#

Sonuçlardan şunları gözlemleyebiliriz:

  • %30 seyreklik elde edildi: nn.Conv2d katmanlarındaki modelin ağırlık parametrelerinin %30'u artık sıfır
  • Çıkarım süresi değişmedi: Budamaya rağmen, işleme hızı aslında aynı
  • Minimum performans etkisi: mAP değeri 0.507'den 0.489'a hafifçe düştü (sadece %3.6 azalma)
  • Model boyutu küçültme: Budanmış model depolama için daha az bellek gerektirir

Bu, budamanın performans üzerinde sadece küçük bir etkiyle model karmaşıklığını önemli ölçüde azaltabileceğini ve kaynak kısıtlı ortamlarda dağıtım için etkili bir optimizasyon tekniği olduğunu gösterir.

Link to this sectionBudanmış Modellere İnce Ayar (Fine-tuning) Yapma#

En iyi sonuçlar için, budanmış modeller doğruluk kazanımını geri sağlamak amacıyla budamadan sonra ince ayar yapılmalıdır. Bu şu şekilde yapılabilir:

  1. İstenen seyreklik seviyesinde budama uygulamak
  2. Budanmış modeli daha düşük bir öğrenme oranıyla birkaç epoch boyunca eğitmek
  3. İnce ayar yapılmış budanmış modeli temel performans ile değerlendirmek

Bu işlem, kalan parametrelerin kaldırılan bağlantıları telafi etmek için uyum sağlamasına yardımcı olur ve genellikle orijinal doğruluğun çoğunu veya tamamını geri kazandırır.

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.

Link to this sectionProje 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 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.

Katkıda bulunanlar

Yorumlar