İçeriğe geç

Test Zamanı Artırma (TTA)

📚 Bu kılavuz, YOLOv5 🚀 ile geliştirilmiş mAP ve Geri Çağırma için test ve çıkarım sırasında Test Zamanı Artırmanın (TTA) nasıl kullanılacağını açıklar.

Başlamadan Önce

requirements.txt'i bir Python>=3.8.0 ortamında, PyTorch>=1.8 dahil olmak üzere klonlayın ve kurun. 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ırmak için bir temel performans oluşturmak istiyoruz. Bu komut, YOLOv5x'i COCO val2017 üzerinde 640 piksel görüntü boyutunda test eder. yolov5x.pt mevcut en büyük ve en doğru modeldir. Diğer seçenekler şunlardır: yolov5s.pt, yolov5m.pt ve yolov5l.pt, veya özel bir veri kümesini eğiterek kendi kontrol noktanızı kullanabilirsiniz. ./weights/best.pt. Mevcut tüm modeller hakkında ayrıntılı bilgi için lütfen şuraya bakın: YOLOv5 dokümantasyonu.

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

Eklemek --augment mevcut herhangi bir val.py TTA'yı etkinleştirmek ve daha iyi sonuçlar için görüntü boyutunu yaklaşık %30 artırmak için komut. TTA etkinleştirilmiş çıkarımın, görüntülerin sağa-sola çevrilmesi ve 3 farklı çözünürlükte işlenmesi ve çıktıların birleştirilmesi nedeniyle normal çıkarımın tipik olarak yaklaşık 2-3 katı zaman alacağını unutmayın. NMS. Hızdaki düşüşün bir kısmı sadece daha büyük görüntü boyutlarından (832'ye karşı 640), bir kısmı ise gerçek TTA işlemlerinden kaynaklanmaktadır.

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ı, aynı şekilde çalışır val.py TTA: sadece şunu ekleyin --augment mevcut herhangi bir detect.py komutu:

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 zamanı artırmaları

PyTorch Hub TTA

TTA, otomatik olarak tümüne entegre edilmiştir YOLOv5 PyTorch Hub modellerine ve geçirilerek erişilebilir augment=True çıkarım zamanında.

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ştir

İçinde uygulanan TTA işlemlerini özelleştirebilirsiniz. YOLOv5 forward_augment() metodu.

Test Zamanı Artırmanın Faydaları

Test Zamanı Artırma, nesne algılama görevleri için çeşitli önemli avantajlar sunar:

  • Geliştirilmiş Doğruluk: Yukarıdaki sonuçlarda gösterildiği gibi, TTA mAP'yi 0,504'ten 0,516'ya ve mAR'ı 0,681'den 0,696'ya yükseltir.
  • Daha İyi Küçük Nesne Tespiti: TTA, özellikle küçük nesnelerin tespitini geliştirir ve küçük alan AP'si 0,351'den 0,361'e yükselir.
  • Artırılmış Dayanıklılık: Her görüntünün birden çok varyasyonunu test ederek, TTA görüntüleme açısı, aydınlatma ve diğer çevresel faktörlerin etkisini azaltır.
  • Basit Uygulama: Sadece şunu eklemeyi gerektirir: --augment işaretini mevcut komutlara ekleyin.

Buradaki ödünleşme, çıkarım süresinin artmasıdır; bu da TTA'yı hızdan çok doğruluğun öncelikli olduğu uygulamalar için daha uygun hale getirir.

Desteklenen Ortamlar

Ultralytics, projelerinize hızlı bir başlangıç yapmanız için her biri CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam 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şitli temel açılardan titizlikle kontrol eder: eğitim, doğrulama, çıkarım, dışa aktarma ve kıyaslamalar. macOS, Windows ve Ubuntu'da tutarlı ve güvenilir çalışmayı sağlarlar; testler her 24 saatte bir ve her yeni commit'te yapılır.



📅 1 yıl önce oluşturuldu ✏️ 1 ay önce güncellendi

Yorumlar