コンテンツにスキップ

YOLOv5モデルのアンサンブル

📚 このガイドでは、mAPと再現率を向上させるために、テストおよび推論中にUltralytics YOLOv5 🚀 モデルアンサンブルを使用する方法について説明します。

アンサンブル学習より:

アンサンブルモデリングは、多数の異なるモデリングアルゴリズムを使用するか、異なるトレーニングデータセットを使用することにより、結果を予測するために複数の多様なモデルを作成するプロセスです。次に、アンサンブルモデルは、各ベースモデルの予測を集約し、未知のデータに対する1つの最終予測をもたらします。アンサンブルモデルを使用する動機は、予測の一般化誤差を減らすことです。ベースモデルが多様で独立している限り、アンサンブルアプローチを使用すると、モデルの予測誤差が減少します。このアプローチは、予測を行う際に大衆の知恵を求めます。アンサンブルモデルにはモデル内に複数のベースモデルがありますが、単一のモデルとして機能および実行されます。

始める前に

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

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

通常テスト

アンサンブルを行う前に、単一モデルのベースラインパフォーマンスを確立します。このコマンドは、画像サイズ640ピクセルでCOCO val2017に対するYOLOv5xをテストします。 yolov5x.pt が利用可能な中で最大かつ最も正確なモデルです。その他のオプションは yolov5s.pt, yolov5m.pt および yolov5l.pt、またはカスタムデータセットをトレーニングした独自のチェックポイントを直接渡すことができます。 ./weights/best.pt利用可能なすべてのモデルの詳細については、以下をご覧ください。 事前トレーニング済みチェックポイントテーブル.

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

アンサンブルテスト

複数の学習済みモデルをテスト時や推論時に連結して、アンサンブルとして利用できます。 --weights 既存の val.py または detect.py コマンドの引数。この例では、2 つのモデルのアンサンブルをまとめてテストします。

  • YOLOv5x
  • YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half

出力:

val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, 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  # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients  # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']  # Ensemble notice

val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00,  1.52s/it]
                 all       5000      36335      0.747      0.637      0.692      0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640)  # <--- ensemble speed

Evaluating pycocotools mAP... saving runs/val/exp3/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.515  # <--- ensemble mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.699
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.557
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.387
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.638
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.689  # <--- ensemble mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844

アンサンブル推論

追加のモデルを以下に追記します --weights アンサンブル推論を実行するための引数:

python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/images

出力:

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
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']

image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp2
Done. (0.223s)

YOLO 推論結果

モデルアンサンブルの利点

YOLOv5でのモデルアンサンブルには、いくつかの利点があります。

  1. 精度向上: 上記の例で示されているように、複数のモデルをアンサンブルすることで、mAPが0.504から0.515に、mARが0.681から0.689に向上します。
  2. より良い汎化性能: 多様なモデルを組み合わせることで、過学習を軽減し、多様なデータに対する性能を向上させることができます。
  3. ロバスト性の強化: アンサンブルは通常、データ内のノイズや外れ値に対してよりロバストです。
  4. 補完的な強み: モデルが異なれば、検出するオブジェクトの種類や環境条件も異なる場合があります。

主なトレードオフは、速度指標に示されているように、推論時間が増加することです(単一モデルで22.4ms、アンサンブルで39.5ms)。

モデルアンサンブルを使用する場合

これらのシナリオでは、モデルアンサンブルの使用を検討してください:

  • 精度が推論速度よりも重要な場合
  • 偽陰性を最小限に抑える必要がある重要なアプリケーションの場合
  • さまざまな照明、オクルージョン、またはスケールで困難な画像を処理する場合
  • 最大のパフォーマンスが要求される競技会やベンチマーク中

厳密なレイテンシ要件を持つリアルタイムアプリケーションの場合、単一モデルの推論の方が適している場合があります。

サポートされている環境

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

プロジェクトのステータス

YOLOv5 CI

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



📅 1年前に作成 ✏️ 2か月前に更新

コメント