Ultralytics YOLO27:
Get Started

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

Normal 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.826

TTA 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.833

TTA 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)
YOLOv5 test time augmentations

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 --augment bayrağı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.

Proje 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ğ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 --img boyutundan 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 DetectionModel içinde uygulanır; bu nedenle --augment yalnızca .pt kontrol noktalarını etkiler. Dışa aktarılmış ONNX, TensorRT ve diğer biçimler bu özelliği yok sayar.

Yorumlar