Test Zamanı Artırımı (TTA)#
📚 Bu kılavuz, YOLOv5 🚀 ile daha yüksek mAP ve duyarlılık elde etmek için test ve çıkarım sırasında Test Zamanı Artırımı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ındaki gereksinimleri 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 # installNormal Test#
TTA'yı denemeden önce karşılaştırma için temel performansı belirlemek istiyoruz. Bu komut, YOLOv5x'i COCO val2017 üzerinde 640 piksel görüntü boyutunda test eder. yolov5x.pt, kullanılabilir en büyük ve en isabetli modeldir. Diğer seçenekler yolov5n.pt, yolov5s.pt, yolov5m.pt ve yolov5l.pt ya da özel bir veri kümesi üzerinde eğitimden elde ettiğin kendi kontrol noktan, yani runs/train/exp/weights/best.pt şeklindedir. Kullanılabilir tüm modeller hakkında ayrıntılar için YOLOv5 belgelerimize 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.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 etkinken çıkarımın normal çıkarımın yaklaşık 2-3 katı süreceğini unutma; çünkü görüntüler yatay olarak çevrilir, 3 farklı çözünürlükte işlenir ve çıktılar NMS öncesinde birleştirilir. Hız düşüşünün bir bölümü yalnızca daha büyük görüntü boyutlarından (832 yerine 640) kaynaklanırken, bir bölümü de gerçek TTA işlemlerinden kaynaklanır. Bu nedenle --img değerini artırmadan önce GPU belleğinde yeterli alan 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 --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 sırasında augment=True iletilebilir.
import torch
# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s") # veya yolov5m, yolov5x, custom
# Images
img = "https://ultralytics.com/images/zidane.jpg" # veya file, PIL, OpenCV, numpy, multiple
# Inference
results = model(img, augment=True) # <--- TTA çıkarımı
# Results
results.print() # or .show(), .save(), .crop(), .pandas(), etc.Özelleştir#
YOLOv5 forward_augment() yöntemi ile uygulanan TTA işlemlerini özelleştirebilirsin.
Test Zamanı Artırımının Avantajları#
Test Zamanı Artırımı, nesne algılama görevleri için birkaç önemli avantaj sunar:
- Daha Yüksek Doğruluk: Yukarıdaki sonuçlarda gösterildiği gibi TTA, mAP değerini 0.504'ten 0.516'ya, mAR değerini ise 0.681'den 0.696'ya çıkarır.
- Küçük Nesneleri Daha İyi Algılama: TTA, küçük nesnelerin algılanmasını özellikle iyileştirir; küçük alan AP değeri 0.351'den 0.361'e yükselir.
- Daha Yüksek Sağlamlık: TTA, her görüntünün birden fazla çeşidini test ederek görüş açısı, aydınlatma ve diğer çevresel etkenlerin etkisini azaltır.
- Kolay Uygulama: Mevcut komutlara yalnızca
--augmentbayrağını eklemek yeterlidir.
Bunun karşılığında çıkarım süresi uzar; bu nedenle TTA, hızdan çok doğruluğun öncelikli olduğu uygulamalar için daha uygundur.
Desteklenen Ortamlar#
Ultralytics, projelerine hızlıca başlaman için CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıkların önceden yüklü olduğu çeşitli kullanıma hazır 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 işlevselliğini ve performansını eğitim, doğrulama, çıkarım, dışa aktarma ve karşılaştırmalı testler gibi temel alanlarda titizlikle denetler. Testler her 24 saatte bir ve her yeni gönderimde gerçekleştirilerek macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışma sağlanır.
Sık Sorulan Sorular#
Her görüntü üç ölçekte ve yatay çevrilmiş biçimde çalıştırılır; tahminler NMS öncesinde birleştirilir. Ek görünümler, özellikle küçük nesnelerde duyarlılığı artırır; bunun karşılığında daha fazla hesaplama gücü gerekir.
Normal çıkarım süresinin yaklaşık 2-3 katını bekle. Maliyetin bir kısmı daha büyük
--imgboyutundan kaynaklanır; bu değeri artırmadan önce GPU belleğinde yeterli alan olduğundan emin ol.Yaklaşık %30 daha yüksek çözünürlükte, örneğin 640 yerine 832'de çalışmak, çok ölçekli geçişlerin kullanabileceği ayrıntıyı artırır ve yukarıdaki kıyaslamalarda en iyi sonuçları vermiştir.
Hayır. Artırılmış ileri geçiş PyTorch
DetectionModeliçinde uygulanır; bu nedenle--augmentyalnızca.ptkontrol noktalarını etkiler. Dışa aktarılmış ONNX, TensorRT ve diğer biçimler bu özelliği yok sayar.