Overslaan naar inhoud

Testtijdvergroting (TTA)

📚 Deze handleiding legt uit hoe je Test Time Augmentation (TTA) kunt gebruiken tijdens testen en inferentie voor verbeterde mAP en Recall met YOLOv5 🚀.

Voordat je begint

Kloon repo en installeer requirements.txt in een Python>=3.8.0 omgeving, inclusief PyTorch>=1.8. Modellen en datasets worden automatisch gedownload van de nieuwste YOLOv5 release.

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

Test normaal

Voordat we TTA proberen, willen we een basislijn bepalen om mee te vergelijken. Deze opdracht test YOLOv5x op COCO val2017 met een afbeeldingsgrootte van 640 pixels. yolov5x.pt is het grootste en meest nauwkeurige model dat beschikbaar is. Andere opties zijn yolov5s.pt, yolov5m.pt en yolov5l.ptof je eigen controlepunt van het trainen van een aangepaste dataset ./weights/best.pt. Zie onze README voor meer informatie over alle beschikbare modellen. tabel.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

Uitgang:

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_hybrid=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

Test met TTA

Voeg toe --augment naar een bestaande val.py commando om TTA in te schakelen en de afbeeldingsgrootte met ongeveer 30% te vergroten voor betere resultaten. Merk op dat inferentie met TTA ingeschakeld ongeveer 2-3X zo lang duurt als normale inferentie, omdat de afbeeldingen links-rechts worden omgedraaid en op 3 verschillende resoluties worden verwerkt, waarbij de resultaten worden samengevoegd voor NMS. Een deel van de snelheidsafname is eenvoudigweg te wijten aan de grotere afbeeldingsformaten (832 vs 640), terwijl een deel te wijten is aan de eigenlijke TTA-bewerkingen.

python val.py --weights yolov5x.pt --data coco.yaml --img 832 --augment --half

Uitgang:

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_hybrid=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

Inferentie met TTA

detect.py TTA-inferentie werkt identiek aan val.py TTA: gewoon toevoegen --augment naar een bestaande detect.py commando:

python detect.py --weights yolov5s.pt --img 832 --source data/images --augment

Uitgang:

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 testtijd augmentaties

PyTorch Hub TTA

TTA wordt automatisch geïntegreerd in alle YOLOv5 PyTorch Hub modellen, en kunnen worden geopend door augment=True op het moment van inferentie.

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.

Pas aan

Je kunt de TTA ops die worden toegepast aanpassen in de YOLOv5 forward_augment() methode hier.

Ondersteunde omgevingen

Ultralytics biedt een reeks kant-en-klare omgevingen, elk vooraf geïnstalleerd met essentiële afhankelijkheden zoals CUDA, CUDNN, Python, en PyTorchom je projecten een kickstart te geven.

Projectstatus

YOLOv5 CI

Deze badge geeft aan dat alle YOLOv5 GitHub Actions Continuous Integration (CI) tests met succes zijn doorstaan. Deze CI-tests controleren rigoureus de functionaliteit en prestaties van YOLOv5 op verschillende belangrijke aspecten: training, validatie, inferentie, export en benchmarks. Ze zorgen voor een consistente en betrouwbare werking op macOS, Windows en Ubuntu, met tests die elke 24 uur en bij elke nieuwe commit worden uitgevoerd.



Gemaakt op 2023-11-12, Bijgewerkt op 2023-12-03
Auteurs: glenn-jocher (4)

Reacties