Comet を使用した YOLOv5
このガイドでは、機械学習の実験を追跡、比較、最適化するための強力なツールである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で実行を視覚化および分析できます。
例を試す!
完了した実行例はこちらをご覧ください。
さらに良いことに、このColab Notebookでご自身でお試しください。
自動的にログを記録
デフォルトでは、Cometは次の項目をログに記録します。
メトリクス
- トレーニングおよび検証データのBox Loss、Object Loss、Classification Loss
- 検証データに対するmAP_0.5、mAP_0.5:0.95のメトリクス
- 検証データの適合率と再現率
パラメータ
- モデルのハイパーパラメータ
- コマンドラインオプションを介して渡されるすべてのパラメータ
可視化
- 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
トレーニングスクリプトへの引数。これにより、ログに記録されたチェックポイントが、によって提供される間隔値に基づいてCometに保存されます。 save-period
:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1
モデル予測のロギング
デフォルトでは、モデルの予測(画像、正解ラベル、バウンディングボックス)がCometに記録されます。
ログに記録される予測とその関連画像の頻度を制御するには、以下を渡します。 bbox_interval
コマンドライン引数。予測はCometの機能を使用して視覚化できます。 物体検出 カスタムパネル。この頻度は、データセットのN番目のバッチに対応します。 エポック。以下の例では、各エポックのデータの2番目のバッチごとにログを記録しています。
注: YOLOv5の検証データローダーは、デフォルトでバッチサイズが32になるため、それに応じてログ記録の頻度を設定する必要があります。
以下は、Panelを使用したプロジェクトの例です。
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アーティファクトを使用すると、次のものを使用してそれを行うことができます。 upload_dataset
フラグ。
データセットは、以下に説明されているように構成する必要があります。 YOLOv5のドキュメント。データセット構成は以下のとおりです: yaml
fileは、以下と同じ形式に従う必要があります。 coco128.yaml
file。
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_dataset
アップロードされたデータセットは、Cometワークスペースの[アーティファクト]タブにあります。
Comet UIでデータを直接プレビューできます。
アーティファクトはバージョン管理されており、データセットに関するメタデータの追加もサポートしています。Cometは、データセットからメタデータを自動的にログに記録します。 yaml
ファイル:
保存されたアーティファクトを使用する
Comet Artifactsのデータセットを使用したい場合は、以下を設定してください。 path
データセット内の変数 yaml
ファイルで、次のアーティファクトリソース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
アーティファクトを使用すると、実験ワークフローを流れるデータの系統を追跡することもできます。ここでは、アップロードしたデータセットを使用したすべての実験を示すグラフを確認できます。
学習の再開
トレーニングの実行が何らかの理由で中断された場合(インターネット接続の中断など)、以下を使用して実行を再開できます。 resume
フラグとComet実行パス。
実行パスは次の形式です。 comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID
.
これにより、中断前の状態に実行が復元されます。これには、チェックポイントからのモデルの復元、すべてのハイパーパラメータとトレーニング引数の復元、および元の実行で使用されていた場合はCometデータセットアーティファクトのダウンロードが含まれます。再開された実行は、Comet UIの既存の実験へのロギングを継続します。
python train.py \
--resume "comet://YOUR_RUN_PATH"
Cometオプティマイザーによるハイパーパラメータ探索
YOLOv5はCometのOptimizerとも統合されており、Comet UIでハイパーパラメータースイープを簡単に視覚化できます。
オプティマイザースイープの構成
Comet Optimizerを設定するには、スイープに関する情報を含むJSONファイルを作成する必要があります。サンプルファイルが以下に用意されています。 utils/loggers/comet/optimizer_config.json
:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"
The 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は、スイープの結果を可視化するための多くの方法を提供します。完了したスイープのプロジェクトはこちらをご覧ください。