Link to this sectionYOLOv5 モデルアンサンブル#
📚 このガイドでは、テストおよび推論時に Ultralytics YOLOv5 🚀 モデルアンサンブル を使用して mAP と Recall を向上させる方法を説明します。
アンサンブル学習とは:
アンサンブルモデリングとは、複数の異なるモデルを作成して予測を行うプロセスです。これには、多数の異なるモデリングアルゴリズムを使用する方法や、異なる学習データセットを使用する方法があります。アンサンブルモデルは、各ベースモデルの予測を集約し、未知のデータに対して最終的な一つの予測結果を出力します。アンサンブルモデルを使用する動機は、予測の汎化誤差を減らすことです。ベースモデルが多様で独立している限り、アンサンブルアプローチを採用することでモデルの予測誤差は減少します。このアプローチは、予測を行う際に「集合知」を活用しようとするものです。アンサンブルモデルは内部に複数のベースモデルを保持していますが、動作やパフォーマンスの面では単一のモデルとして機能します。
Link to this section始める前に#
Clone repo and install requirements.txt in a Python>=3.8.0 environment, including PyTorch>=1.8. Models and datasets download automatically from the latest YOLOv5 release.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # installLink to this section通常のテスト#
アンサンブルを行う前に、単一モデルのベースラインパフォーマンスを確立してください。以下のコマンドは、画像サイズ 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.826Link to this sectionアンサンブルテスト#
複数の学習済みモデルは、既存の val.py または detect.py コマンドの --weights 引数に追加モデルを並べるだけで、テスト時や推論時にアンサンブルすることができます。この例では、2 つのモデルのアンサンブルをテストします。
- YOLOv5x
- YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --halfカスタムウェイト (runs/train/exp-5/weights/best.pt など) を含め、任意の数のチェックポイントをリスト化できます。YOLOv5 は自動的に各モデルを実行し、画像ごとに予測を揃え、NMS を実行する前に出力を平均化します。
出力:
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/exp-3/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.844Link to this sectionアンサンブル推論#
推論時に --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/exp-2
Done. (0.223s)
Link to this sectionモデルアンサンブルの利点#
YOLOv5 でのモデルアンサンブルには、いくつかの利点があります。
- 精度の向上: 上記の例で示したように、複数のモデルをアンサンブルすることで mAP が 0.504 から 0.515 へ、mAR が 0.681 から 0.689 へと向上します。
- 優れた汎化性能: 多様なモデルを組み合わせることで、過学習を軽減し、多様なデータに対するパフォーマンスを向上させることができます。
- 堅牢性の強化: アンサンブルは通常、データのノイズや外れ値に対してより堅牢です。
- 補完的な強み: 異なるモデルは、異なる種類のオブジェクトの検出や、異なる環境条件下での検出において強みを発揮する可能性があります。
主なトレードオフは推論時間の増加であり、スピードメトリクス(単一モデルで 22.4ms、アンサンブルで 39.5ms)に示されている通りです。
Link to this sectionモデルアンサンブルの利用シーン#
次のようなシナリオでは、モデルアンサンブルの利用を検討してください。
- 推論速度よりも精度が優先される場合
- 偽陰性を最小限に抑える必要がある重要なアプリケーションにおいて
- 照明の変化、遮蔽、スケールなどがある困難な画像を処理する場合
- コンペティションやベンチマークなど、最大限のパフォーマンスが求められる場合
厳格なレイテンシ要件を持つリアルタイムアプリケーションでは、単一モデルによる推論の方が適切かもしれません。
Link to this sectionサポートされている環境#
Ultralyticsは、プロジェクトを迅速に開始できるように、CUDA、CUDNN、Python、PyTorch などの主要な依存関係が事前にインストールされた、すぐに使える環境を多数提供しています。
- 無料GPUノートブック:
- Google Cloud: GCP クイックスタートガイド
- Amazon: AWS クイックスタートガイド
- Azure: AzureML クイックスタートガイド
- Docker: Docker クイックスタートガイド
Link to this sectionプロジェクトの状態#
このバッジは、すべての YOLOv5 GitHub Actions 継続的インテグレーション(CI)テストが正常に合格していることを示します。これらのCIテストは、YOLOv5の機能とパフォーマンスをトレーニング、バリデーション、推論、エクスポート、およびベンチマークといった様々な主要な観点から厳密にチェックします。これにより、macOS、Windows、Ubuntuで24時間ごと、および新しいコミットごとにテストが実施され、一貫した信頼性の高い動作が保証されます。