Link to this sectionTest-Time Augmentation (TTA)#
📚 Bu rehber, YOLOv5 ile daha iyi mAP ve Recall elde etmek için test ve çıkarım sırasında Test-Time Augmentation (TTA) kullanımını açıklar 🚀.
Link to this sectionBaşlamadan Önce#
Clone repo and install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8. Models and datasets download automatically from the latest YOLOv5 release.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # installLink to this sectionNormal Test#
TTA'yı denemeden önce, karşılaştırma yapmak için bir temel performans seviyesi oluşturmak istiyoruz. Bu komut, YOLOv5x'i 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 özel bir veri seti eğiterek oluşturduğun kendi kontrol noktan olan ./weights/best.pt dosyasıdır. Mevcut tüm modeller hakkında detaylı bilgi için lütfen YOLOv5 dokümantasyonumuza 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.826Link to this sectionTTA ile Test#
Append --augment to any existing val.py command to enable TTA, and increase the image size by about 30% for improved results. Note that inference with TTA enabled will typically take about 2-3X the time of normal inference as the images are being left-right flipped and processed at 3 different resolutions, with the outputs merged before NMS. Part of the speed decrease is simply due to larger image sizes (832 vs 640), while part is due to the actual TTA operations, so ensure your GPU has enough memory headroom before increasing --img.
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.833Link to this sectionTTA ile Çıkarım#
detect.py TTA inference operates identically to val.py TTA: simply append --augment to any existing detect.py command:
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)
Link to this sectionPyTorch Hub TTA#
TTA, tüm YOLOv5 PyTorch Hub modellerine otomatik olarak entegre edilmiştir ve çıkarım sırasında augment=True parametresi 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.Link to this sectionÖzelleştirme#
YOLOv5 forward_augment() yönteminde uygulanan TTA işlemlerini özelleştirebilirsin.
Link to this sectionTest-Time Augmentation'ın Faydaları#
Test-Time Augmentation, nesne algılama görevleri için çeşitli temel avantajlar 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 ve küçük alan AP değerini 0.351'den 0.361'e çıkarır.
- Artırılmış Dayanıklılık: Her görüntünün birden fazla varyasyonunu test ederek, TTA; bakış açısı, aydınlatma ve diğer çevresel faktörlerin etkisini azaltır.
- Basit Uygulama: Mevcut komutlara sadece
--augmentbayrağını eklemen yeterlidir.
Bunun bedeli, artan çıkarım süresidir; bu da TTA'yı doğruluğun hızdan daha öncelikli olduğu uygulamalar için daha uygun hale getirir.
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 sunar.
- Ücretsiz GPU Not defterleri:
- Google Cloud: GCP Başlangıç Kılavuzu
- Amazon: AWS Başlangıç Kılavuzu
- Azure: AzureML Başlangıç Kılavuzu
- Docker: Docker Başlangıç Kılavuzu
Link to this sectionProje 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 işlevselliğini ve performansını çeşitli temel açılardan titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir bir çalışma sağlarlar; testler her 24 saatte bir ve her yeni commit'te gerçekleştirilir.