YOLO Vision 2026:

テスト時オーギュメンテーション (TTA)#

📚 このガイドでは、YOLOv5 🚀 を使用してテストおよび推論時にテスト時データ拡張(TTA)を活用し、mAP と Recall を向上させる方法について説明します。

始める前に#

リポジトリをクローンし、Python>=3.8.0 環境で requirements.txt をインストールします(PyTorch>=1.8 を含みます)。モデルデータセットは、最新の YOLOv5 リリースから自動的にダウンロードされます。

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

通常のテスト#

TTA を試す前に、比較のためのベースライン性能を設定します。このコマンドは、画像サイズ 640 ピクセルで COCO val2017 を使用して YOLOv5x をテストします。yolov5x.pt は利用可能な中で最大かつ最も正確なモデルです。その他のオプションには yolov5s.ptyolov5m.ptyolov5l.pt、またはカスタムデータセットのトレーニングによる独自のチェックポイント ./weights/best.pt があります。利用可能なすべてのモデルの詳細については、YOLOv5 ドキュメントを参照してください。

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

出力:

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を使用したテスト#

TTAを有効にするには、既存の val.py コマンドに --augment を追加し、精度向上のために画像サイズを約30%大きくします。TTAを有効にした推論では、画像が左右反転されて3つの異なる解像度で処理され、出力が NMS の前に統合されるため、通常、通常の推論の約2〜3倍の時間がかかることに注意してください。速度低下の一部は単に画像サイズが大きくなること(832対640)によるものであり、一部は実際のTTA処理によるものであるため、--img を増やす前にGPUに十分なメモリの余裕があることを確認してください。

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

出力:

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

TTAを使用した推論#

detect.py のTTA推論は、val.py のTTAと同様に動作します。既存の detect.py コマンドに --augment を追加するだけです。

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

出力:

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 はすべての YOLOv5 PyTorch Hub モデルに自動的に統合されており、推論時に augment=True を渡すことでアクセスできます。

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.

カスタマイズ#

YOLOv5 forward_augment() メソッドで適用される TTA 操作をカスタマイズできます。

テスト時オーギュメンテーションの利点#

テスト時データ拡張には、物体検出タスクにおいていくつかの重要な利点があります:

  • 精度の向上: 上記の結果で示されているように、TTAはmAPを0.504から0.516に、mARを0.681から0.696に向上させます。
  • 小さな物体の検出精度向上: TTAは特に小さな物体の検出を強化し、小さな領域のAPを0.351から0.361に向上させます。
  • 堅牢性の向上: 各画像の複数のバリエーションをテストすることで、TTAは視野角、照明、その他の環境要因の影響を低減します。
  • 簡単な実装: 既存のコマンドに --augment フラグを追加するだけです。

トレードオフとして推論時間が増加するため、TTAは速度よりも精度が優先されるアプリケーションに適しています。

サポートされている環境#

Ultralytics は、プロジェクトを迅速に開始できるように、CUDACUDNNPythonPyTorch などの必須依存関係が事前にインストールされた、すぐに使用できるさまざまな環境を提供しています。

プロジェクトの状態#

YOLOv5 CI

このバッジは、すべての YOLOv5 GitHub Actions 継続的インテグレーション(CI)テストが正常に合格していることを示しています。これらの CI テストは、学習検証推論エクスポートベンチマークの主要な側面全体で、YOLOv5 の機能とパフォーマンスを厳格にチェックします。これらは、24 時間ごとおよび新しいコミットごとにテストが実施され、macOS、Windows、Ubuntu での一貫した信頼性の高い動作を保証します。

コメント