
YOLOv5 と Comet の連携
本ガイドでは、機械学習実験のトラッキング、比較、最適化を行う強力なツールである Comet と YOLOv5 を使用する方法について説明します。
Comet について
Comet は、データサイエンティスト、エンジニア、チームリーダーが 機械学習 モデルおよび ディープラーニング モデルの開発を加速・最適化するためのツールを構築しています。
モデルのメトリクスをリアルタイムでトラッキングおよび可視化し、ハイパーパラメータ、データセット、モデルチェックポイントを保存しましょう。また、Comet Custom Panels を使用してモデルの予測結果を可視化することも可能です!Comet を使用すれば、作業内容を確実に管理できるだけでなく、結果の共有やチーム間でのコラボレーションも簡単に行えます。
導入
Comet のインストール
pip install comet_mlComet クレデンシャルの設定
YOLOv5 で Comet を設定するには2つの方法があります。
環境変数を通じてクレデンシャルを設定する方法:
環境変数
export COMET_API_KEY=YOUR_API_KEY
export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'または、作業ディレクトリに .comet.config ファイルを作成し、そこにクレデンシャルを設定する方法:
Comet 設定ファイル
[comet]
api_key=YOUR_API_KEY
project_name=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'トレーニングスクリプトの実行
# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.pt以上です!Comet は自動的にハイパーパラメータ、コマンドライン引数、トレーニングおよび検証メトリクスをログに記録します。Comet UI で実行結果を可視化および分析できます。

サンプルを試す
完了した実行のサンプル を確認してください。
さらに、こちらの Colab Notebook で実際に試してみることをお勧めします:
自動ロギング
デフォルトでは、Comet は以下の項目をログに記録します:
メトリクス
- トレーニングおよび 検証データ に対する Box Loss、Object Loss、Classification Loss
- 検証データに対する mAP_0.5 および mAP_0.5:0.95 メトリクス
- 検証データに対する 精度 (Precision) および 再現率 (Recall)
パラメーター
- モデルハイパーパラメータ
- コマンドラインオプションを通じて渡されたすべてのパラメータ
可視化
- 検証データにおけるモデル予測の 混合行列 (Confusion Matrix)
- すべてのクラスにわたる PR 曲線および F1 曲線のプロット
- クラスラベルのコレログラム
Comet ロギングの設定
Comet は、トレーニングスクリプトに渡されるコマンドラインフラグまたは環境変数を使用して、追加データをログに記録するように設定できます:
export COMET_MODE=online # Set whether to run Comet in 'online' or 'offline' mode. Defaults to online
export COMET_MODEL_NAME="yolov5" # Set the name for the saved model. Defaults to yolov5
export COMET_LOG_CONFUSION_MATRIX=false # Set to disable logging a Comet Confusion Matrix. Defaults to true
export COMET_MAX_IMAGE_UPLOADS=30 # Controls how many total image predictions to log to Comet. Defaults to 100.
export COMET_LOG_PER_CLASS_METRICS=true # Set to log evaluation metrics for each detected class at the end of training. Defaults to false
export COMET_DEFAULT_CHECKPOINT_FILENAME="last.pt" # Set this if you would like to resume training from a different checkpoint. Defaults to 'last.pt'
export COMET_LOG_BATCH_LEVEL_METRICS=true # Set this if you would like to log training metrics at the batch level. Defaults to false.
export COMET_LOG_PREDICTIONS=true # Set this to false to disable logging model predictionsComet を使用したチェックポイントのロギング
モデルを Comet に記録する機能はデフォルトで無効になっています。これを有効にするには、save-period 引数をトレーニングスクリプトに渡します。これにより、save-period で指定された間隔に基づいて、記録されたチェックポイントが Comet に保存されます:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1モデル予測のロギング
デフォルトでは、モデルの予測結果(画像、正解ラベル、バウンディングボックス)が Comet に記録されます。
予測のロギング頻度と関連画像は、bbox_interval コマンドライン引数を渡すことで制御できます。予測結果は、Comet の Object Detection Custom Panel を使用して可視化できます。この頻度は、各 エポック (epoch) ごとの N バッチ目に相当します。以下の例では、各エポックの2バッチごとにログを記録しています。
注意: YOLOv5 の検証データローダーはデフォルトで バッチサイズ 32 を使用するため、それに応じてロギング頻度を設定する必要があります。
パネルを使用した プロジェクトのサンプル はこちらです。
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2Comet に記録される予測画像の数の制御
YOLOv5 から予測をログに記録する際、Comet は各予測セットに関連付けられた画像を記録します。デフォルトでは、最大100枚の検証画像が記録されます。この数は、COMET_MAX_IMAGE_UPLOADS 環境変数を使用して増減できます:
env COMET_MAX_IMAGE_UPLOADS=200 python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 1クラスレベルのメトリクスのロギング
COMET_LOG_PER_CLASS_METRICS 環境変数を使用して、各クラスの mAP、精度、再現率、f1 をログに記録します:
env COMET_LOG_PER_CLASS_METRICS=true python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.ptデータセットの Comet Artifacts へのアップロード
データを Comet Artifacts を使用して保存したい場合は、upload_dataset フラグを使用して行うことができます。
データセットは YOLOv5 ドキュメント に記載されている通りに構成する必要があります。データセット設定の yaml ファイルは、coco128.yaml ファイルと同じ形式に従う必要があります。
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_datasetアップロードされたデータセットは、Comet ワークスペースの Artifacts タブから確認できます:

Comet UI で直接データをプレビューできます:

アーティファクトはバージョン管理されており、データセットに関するメタデータの追加もサポートしています。Comet はデータセットの yaml ファイルからメタデータを自動的に記録します:

保存されたアーティファクトの使用
If you would like to use a dataset from Comet Artifacts, set the path variable in your dataset yaml file to point to the following Artifact resource URL:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"次に、以下の方法でこのファイルをトレーニングスクリプトに渡します:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.ptアーティファクトを使用すると、実験ワークフローを通じてデータがどのように流れるかという系統(lineage)を追跡することもできます。以下は、アップロードされたデータセットを使用したすべての実験を示すグラフです:

トレーニング実行の再開
インターネット接続の遮断など、何らかの理由でトレーニングが中断された場合、resume フラグと Comet Run Path を使用して実行を再開できます。
Run Path は comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID という形式です。
これにより、実行が中断される前の状態(チェックポイントからのモデルの復元、ハイパーパラメータとトレーニング引数の復元、および元の実行で使用された場合は Comet データセットアーティファクトのダウンロードを含む)に復元されます。再開された実行は、Comet UI 上の既存の実験へのロギングを継続します:
python train.py \
--resume "comet://YOUR_RUN_PATH"Comet Optimizer を使用したハイパーパラメータ検索
YOLOv5 は Comet's Optimizer と統合されており、Comet UI でハイパーパラメータのスイープを簡単に可視化できます。
Optimizer スイープの設定
Comet Optimizer を設定するには、スイープに関する情報を含む JSON ファイルを作成する必要があります。サンプルファイルが utils/loggers/comet/optimizer_config.json に用意されています:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"hpo.py スクリプトは train.py と同じ引数を受け入れます。スイープに追加の引数を渡したい場合は、スクリプトの後ろに追加するだけです:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
--save-period 1 \
--bbox_interval 1結果の可視化
Comet にはスイープの結果を可視化するためのいくつかの方法があります。スイープが完了したプロジェクト をこちらからご覧ください。
