
Cometを使ったYOLOv5#
このガイドでは、機械学習実験の追跡、比較、最適化に役立つ強力なツールである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ノートブックで実際に試してみましょう。
自動記録#
デフォルトでは、Cometは次の項目を記録します。
メトリクス#
パラメーター数#
- モデルのハイパーパラメーター
- コマンドラインオプションで渡されたすべてのパラメーター
可視化#
- 検証データに対するモデル予測の混同行列
- すべてのクラスの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_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の物体検出カスタムパネルで可視化できます。この頻度は、エポックごとにN番目のデータバッチを記録する間隔を示します。以下の例では、各エポックの2番目のデータバッチごとに記録しています。
注: YOLOv5の検証データローダーでは、トレーニングのバッチサイズの2倍(--batch 16の場合は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 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 Sweepの設定#
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.comで無料アカウントを作成し、アカウント設定を開いてAPIキーをコピーします。
COMET_API_KEYとしてエクスポートするか、train.pyの隣にある.comet.configファイルに保存してください。はい。
COMET_MODE=offlineを設定してExperimentをローカルアーカイブに書き込み、後からcomet upload path/to/archive.zipでアップロードします。チェックポイントのログ記録はデフォルトで無効になっています。
train.pyに--save-period 1(または別の間隔)を渡すと、保存された各チェックポイントがExperimentにアップロードされます。Comet UIからRun Pathをコピーし、
python train.py --resume "comet://WORKSPACE/PROJECT/EXPERIMENT_ID"を指定してトレーニングを開始します。YOLOv5はチェックポイント、ハイパーパラメーター、CometデータセットArtifactを復元し、同じExperimentへのログ記録を続けます。