Test Zamanı Artırma (TTA)#
📚 Bu kılavuz, YOLOv5 ile test ve çıkarım sırasında daha yüksek mAP ve Geri Çağırma elde etmek için Test Zamanı Artırma'nın (TTA) nasıl kullanılacağını açıklar 🚀.
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 # installNormal Test#
TTA'yı denemeden önce karşılaştırma yapabilmek için temel performansı belirlemek istiyoruz. Bu komut, YOLOv5x'i 640 piksel görüntü boyutunda COCO val2017 üzerinde test eder. yolov5x.pt, kullanılabilir en büyük ve en doğru modeldir. Diğer seçenekler yolov5s.pt, yolov5m.pt ve yolov5l.pt ya da özel bir veri kümesiyle yapılan eğitimden elde ettiğin kendi checkpoint'in ./weights/best.pt olabilir. Kullanılabilir tüm modeller hakkında ayrıntılar için YOLOv5 belgelerimize bakabilirsin.
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.826TTA ile Test#
TTA'yı etkinleştirmek için mevcut herhangi bir val.py komutuna --augment ekle ve daha iyi sonuçlar için görüntü boyutunu yaklaşık %30 artır. TTA etkinleştirilmiş çıkarımın, görüntüler yatay olarak çevrilip 3 farklı çözünürlükte işlendiği ve çıktılar NMS öncesinde birleştirildiği için normal çıkarıma kıyasla genellikle yaklaşık 2-3X daha uzun süreceğini unutma. Hızdaki düşüşün bir kısmı yalnızca daha büyük görüntü boyutlarından (832 ve 640) kaynaklanırken, bir kısmı gerçek TTA işlemlerinden kaynaklanır; bu nedenle --img değerini artırmadan önce GPU'nda yeterli bellek payı olduğundan emin ol.
python val.py --weights yolov5x.pt --data coco.yaml --img 832 --augment --halfÇıktı:
val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=832, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=True, 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...
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)
return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
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, 2885.61it/s]
val: New cache created: ../datasets/coco/val2017.cache
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [07:29<00:00, 2.86s/it]
all 5000 36335 0.718 0.656 0.695 0.503
Speed: 0.2ms pre-process, 80.6ms inference, 2.7ms NMS per image at shape (32, 3, 832, 832) # <--- TTA speed
Evaluating pycocotools mAP... saving runs/val/exp2/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.516 # <--- TTA mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.701
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.562
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.361
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.564
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.656
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.388
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.640
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.696 # <--- TTA mAR
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.553
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.744
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.833TTA ile Çıkarım#
detect.py TTA çıkarımı, val.py TTA ile aynı şekilde çalışır: mevcut herhangi bir detect.py komutuna yalnızca --augment ekle:
python detect.py --weights yolov5s.pt --img 832 --source data/images --augmentÇıktı:
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Downloading https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt to yolov5s.pt...
100% 14.1M/14.1M [00:00<00:00, 81.9MB/s]
Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/2 /content/yolov5/data/images/bus.jpg: 832x640 4 persons, 1 bus, 1 fire hydrant, Done. (0.029s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 480x832 3 persons, 3 ties, Done. (0.024s)
Results saved to runs/detect/exp
Done. (0.156s)
PyTorch Hub TTA#
TTA, tüm YOLOv5 PyTorch Hub modellerine otomatik olarak entegre edilmiştir ve çıkarım sırasında augment=True aktarılıp kullanılabilir.
import torch
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s") # or yolov5m, yolov5x, custom
# Images
img = "https://ultralytics.com/images/zidane.jpg" # or file, PIL, OpenCV, numpy, multiple
# Inference
results = model(img, augment=True) # <--- TTA inference
# Results
results.print() # or .show(), .save(), .crop(), .pandas(), etc.Özelleştirme#
YOLOv5 forward_augment() yöntemi ile uygulanan TTA işlemlerini özelleştirebilirsin.
Test Zamanı Artırmanın Avantajları#
Test Zamanı Artırma, nesne algılama görevleri için çeşitli önemli avantajlar sunar:
- Daha Yüksek Doğruluk: Yukarıdaki sonuçlarda gösterildiği gibi TTA, mAP değerini 0.504'ten 0.516'ya ve mAR değerini 0.681'den 0.696'ya yükseltir.
- Daha İyi Küçük Nesne Algılama: TTA, özellikle küçük nesnelerin algılanmasını iyileştirir; küçük alan AP değeri 0.351'den 0.361'e yükselir.
- Artırılmış Sağlamlık: Her görüntünün birden fazla varyasyonunu test eden TTA, görüş açısının, aydınlatmanın ve diğer çevresel etkenlerin etkisini azaltır.
- Basit Uygulama: Mevcut komutlara yalnızca
--augmentbayrağının eklenmesini gerektirir.
Bunun karşılığında çıkarım süresi artar; bu da TTA'yı hızdan çok doğruluğun önceliklendirildiği uygulamalar için daha uygun hâle getirir.
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.
- Ü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 ç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.