
YOLOv5とComet#
このガイドでは、機械学習実験の追跡、比較、最適化に役立つ強力なツールであるCometをYOLOv5で使用する方法を説明します。
Cometについて#
Cometは、データサイエンティスト、エンジニア、チームリーダーが機械学習モデルとディープラーニングモデルの開発を加速し、最適化するためのツールを提供しています。
モデルのメトリクスをリアルタイムで追跡・可視化し、ハイパーパラメータ、データセット、モデルチェックポイントを保存して、Comet Custom Panelsでモデルの予測を可視化できます。Cometを使用すれば作業の追跡漏れを防ぎ、規模を問わずチーム間で結果を簡単に共有して共同作業できます。
はじめに#
Cometをインストールする#
pip install comet_mlCometの認証情報を設定する#
CometをYOLOv5で設定する方法は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
パラメーター数#
- モデルのハイパーパラメータ
- コマンドラインオプションで渡されたすべてのパラメータ
可視化#
- 検証データに対するモデル予測の混同行列
- すべてのクラスにおける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を使用して可視化できます。この頻度は、エポックごとのN個おきのデータバッチに対応します。次の例では、各エポックで2バッチおきにデータを記録しています。
注記: YOLOv5の検証データローダーでは、デフォルトのバッチサイズが32に設定されているため、それに応じて記録頻度を設定する必要があります。
Panelを使用したプロジェクトの例はこちらです。
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、precision、recall、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 WorkspaceのArtifactsタブで確認できます。

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

Artifactsはバージョン管理に対応しており、データセットに関するメタデータも追加できます。Cometはデータセットのyamlファイルからメタデータを自動的に記録します。

保存済みArtifactを使用する#
Comet Artifactsのデータセットを使用する場合は、データセットのyamlファイル内のpath変数に、次のArtifactリソース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.ptArtifactsを使用すると、実験ワークフローを通じてデータが処理される際の系譜も追跡できます。ここでは、アップロードしたデータセットを使用したすべての実験を示すグラフを確認できます。

トレーニング実行を再開する#
インターネット接続の中断など、何らかの理由でトレーニング実行が中断された場合は、resumeフラグとComet Run Pathを使用して実行を再開できます。
Run Pathの形式はcomet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_IDです。
これにより、中断前の状態に実行が復元されます。復元には、チェックポイントからのモデルの復元、すべてのハイパーパラメータとトレーニング引数の復元、元の実行で使用していた場合のCometデータセットArtifactsのダウンロードが含まれます。再開された実行では、Comet UIの既存のExperimentへの記録が継続されます。
python train.py \
--resume "comet://YOUR_RUN_PATH"Comet Optimizerでハイパーパラメータを検索する#
YOLOv5はCometの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には、スイープの結果を可視化する方法が複数あります。スイープが完了したプロジェクトの例をご覧ください。
