Test-Time Augmentation (TTA)#
📚 Bu kılavuz, YOLOv5 🚀 ile geliştirilmiş mAP ve Recall için test ve çıkarım sırasında Test Zamanı Artırma (TTA) özelliğinin nasıl kullanılacağını açıklar.
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 # installNormal Test Et#
TTA'yı denemeden önce, karşılaştırma yapmak amacıyla bir taban çizgisi performansı belirlemek istiyoruz. 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 eğitmekten elde ettiğin kendi kontrol noktandır ./weights/best.pt. Mevcut tüm modeller hakkındaki ayrıntılar için lütfen YOLOv5 belgelerimize göz at.
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 gelişmiş sonuçlar için görüntü boyutunu yaklaşık %30 artır. Görüntüler sağa sola çevrilip 3 farklı çözünürlükte işlendiği ve çıktıları NMS öncesinde birleştirildiği için TTA etkinleştirilmiş çıkarımın normal çıkarımın yaklaşık 2-3 katı süreceğini unutma. Hız düşüşünün bir kısmı basitçe daha büyük görüntü boyutlarından (640 yerine 832) kaynaklanırken bir kısmı da gerçek TTA işlemlerinden kaynaklanır, bu nedenle --img değerini artırmadan önce GPU'nun yeterli bellek alanına sahip 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/exp-2/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 --augment eklemen yeterlidir:
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 zamanında augment=True geçilerek erişilebilir.
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önteminde uygulanan TTA işlemlerini özelleştirebilirsin.
Test-Time Augmentation'ın Faydaları#
Test Zamanı Artırma, nesne tespiti görevleri için birkaç temel avantaj sunar:
- İyileştirilmiş 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ı geliştirir; küçük alan AP değeri 0.351'den 0.361'e çıkar.
- Artırılmış Dayanıklılık: Her görüntünün birden fazla varyasyonunu test ederek, TTA görüş açısı, ışıklandırma ve diğer çevresel faktörlerin etkisini azaltır.
- Basit Uygulama: Mevcut komutlara yalnızca
--augmentbayrağının eklenmesini gerektirir.
Bunun karşılığı artan çıkarım süresidir, bu da TTA'yı hızdan ziyade doğruluğun öncelikli olduğu uygulamalar için daha uygun hale getirir.
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.
- Ü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 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.