Comet ML 機械学習実験トラッキングロゴ

YOLOv5 と Comet の連携

本ガイドでは、機械学習実験のトラッキング、比較、最適化を行う強力なツールである Comet と YOLOv5 を使用する方法について説明します。

Comet について

Comet は、データサイエンティスト、エンジニア、チームリーダーが 機械学習 モデルおよび ディープラーニング モデルの開発を加速・最適化するためのツールを構築しています。

モデルのメトリクスをリアルタイムでトラッキングおよび可視化し、ハイパーパラメータ、データセット、モデルチェックポイントを保存しましょう。また、Comet Custom Panels を使用してモデルの予測結果を可視化することも可能です!Comet を使用すれば、作業内容を確実に管理できるだけでなく、結果の共有やチーム間でのコラボレーションも簡単に行えます。

導入

Comet のインストール

pip install comet_ml

Comet クレデンシャルの設定

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 で実行結果を可視化および分析できます。

YOLOv5 のトレーニングメトリクスと実験トラッキングを示す Comet ダッシュボード

サンプルを試す

完了した実行のサンプル を確認してください。

さらに、こちらの Colab Notebook で実際に試してみることをお勧めします:

Open In Colab

自動ロギング

デフォルトでは、Comet は以下の項目をログに記録します:

メトリクス

パラメーター

  • モデルハイパーパラメータ
  • コマンドラインオプションを通じて渡されたすべてのパラメータ

可視化

  • 検証データにおけるモデル予測の 混合行列 (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 predictions

Comet を使用したチェックポイントのロギング

モデルを 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 2

Comet に記録される予測画像の数の制御

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 アーティファクトパネル

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

Comet データセットプレビューとバージョン履歴

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

Comet アーティファクトメタデータ

保存されたアーティファクトの使用

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)を追跡することもできます。以下は、アップロードされたデータセットを使用したすべての実験を示すグラフです:

Comet アーティファクト系統グラフ

トレーニング実行の再開

インターネット接続の遮断など、何らかの理由でトレーニングが中断された場合、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 にはスイープの結果を可視化するためのいくつかの方法があります。スイープが完了したプロジェクト をこちらからご覧ください。

Comet ハイパーパラメータの可視化

コメント