
YOLOv5 と Comet#
このガイドでは、機械学習実験の追跡、比較、最適化を行うための強力なツールであるCometでYOLOv5を使用する方法について説明します。
Comet について#
Cometは、データサイエンティスト、エンジニア、チームリーダーがmachine learningおよびdeep learningモデルを加速・最適化するためのツールを構築しています。
モデルのメトリクスをリアルタイムで追跡および視覚化し、ハイパーパラメータ、データセット、モデルチェックポイントを保存し、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 ノートブックで実際に試してみてください:
自動ログ記録#
デフォルトでは、Comet は以下の項目をログに記録します:
メトリクス#
- トレーニングおよびvalidation dataのボックス損失、オブジェクト損失、分類損失
- 検証データの 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の検証データローダーはデフォルトでbatch sizeが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.ptComet Artifacts へのデータセットのアップロード#
Comet Artifactsを使用してデータを保存したい場合は、upload_dataset フラグを使用して行うことができます。
データセットは、YOLOv5 documentationに記載されているように整理する必要があります。データセット設定の 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 ファイルからメタデータを自動的にログに記録します:

保存された 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 上の既存の実験に継続してログを記録します:
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には、探索結果を視覚化するためのいくつかの方法が用意されています。探索が完了したプロジェクトはこちらをご覧ください。
