ClearMLを使用してUltralytics YOLOv5をリモートでトレーニングおよびモニタリング
ClearMLを使って実験を追跡し、データセットをバージョン管理し、ハイパーパラメーターを調整して、リモートマシンでUltralytics YOLOv5モデルをトレーニングする方法を学びます。
Nuvola Ladi7 分で読めます
Ultralyticsは、YOLOv5などのオープンソースツールを誰もが無料で利用できるようにするため、研究開発の資金調達を支援する他のスタートアップと商業提携しています。この記事には、提携先へのアフィリエイトリンクが含まれる場合があります。
ClearMLは、時間の節約を目的に設計されたオープンソースのツールボックスで、私たちの新しいパートナーです。
ClearMLは、MLの導入を加速するという使命のもと、あらゆるソフトウェア製品やハードウェア製品にMLを簡単に統合できるようにします。
この統合により、YOLOv5モデルのトレーニングがさらに簡単になり、ClearMLの実験マネージャーを使って実験を自動的に追跡できます。ClearMLデータセットのバージョンIDを入力データとして簡単に指定でき、自動的にモデルのトレーニングに使用されます。
実験の追跡を次のレベルへ#
- YOLOv5のすべてのトレーニング実行を実験マネージャーで追跡できます。
- 統合されたClearML Data Versioning Toolを使って、カスタムトレーニングデータのバージョンを管理し、簡単にアクセスできます。
- ClearML Hyperparameter Optimizationで最高のmAPを実現できます。
- ClearML Servingを使えば、わずか数個のコマンドで新たにトレーニングしたYOLOv5モデルをAPIに変換できます。
これらのツールをいくつ使うかは自由です。実験マネージャーだけを使うことも、すべてを連携させて高度なパイプラインを構築することもできます。
セットアップ#
実験とデータを追跡するには、ClearMLがサーバーと通信する必要があります。選択肢は2つあります。ClearML Hosted Serviceに無料で登録するか、独自のサーバーをセットアップしてください。
サーバーもオープンソースなので、機密データを扱う場合でも問題ありません。
- ClearML Pythonパッケージをインストールします:
pip install clearml - 認証情報を作成してClearML SDKをサーバーに接続します(右上の「Settings → Workspace → Create new credentials」に進みます)。次に、以下のコマンドを実行して指示に従います:
clearml-init
これで使い始める準備が整いました。
ClearMLを使ったYOLOv5のトレーニング#
ClearMLの実験追跡を有効にするには、ClearML pipパッケージをインストールするだけです。
pip install clearmlこれにより、YOLOv5のトレーニングスクリプトとの統合が有効になります。以降のすべてのトレーニング実行は、ClearMLの実験マネージャーによって記録・保存されます。project_nameまたはtask_nameを変更する場合は、カスタムロガーで変更できます: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache次の情報が記録されます:
- ソースコード + 未コミットの変更
- インストール済みパッケージ
- (ハイパー)パラメーター
- モデルファイル(nエポックごとにチェックポイントを保存するには、--save-period nを使用します)
- コンソール出力
- スカラー値(mAP50、mAP50-95、適合率、再現率、損失、学習率など)
- マシンの詳細、実行時間、作成日などの一般情報
- ラベル相関図や混同行列など、生成されたすべてのプロット
- 各エポックのバウンディングボックス付き画像
- 各エポックのモザイク画像
- 各エポックの検証画像
これで、トレーニングの進捗状況を概観するために、ClearML UIですべての情報を可視化できます。テーブルビューにカスタム列(mAP50など)を追加すると、最も高い性能を示すモデルで簡単に並べ替えられます。または、複数の実験を選択して直接比較できます!
この情報を活用すれば、ハイパーパラメーター最適化やリモート実行など、さらに多くのことができます。方法を知るには、このまま読み進めてください。
データセットのバージョン管理#
データをコードとは別にバージョン管理するのは一般に有効で、最新バージョンの取得も簡単になります。このリポジトリではデータセットのバージョンIDを指定でき、データがまだない場合は自動的に取得されます。さらに、このワークフローでは使用したデータセットIDもタスクのパラメーターとして保存されるため、どの実験でどのデータを使ったかをいつでも確認できます。
データセットを準備する#
YOLOv5リポジトリは、データ情報を含むYAMLファイルを使って、さまざまなデータセットに対応しています。デフォルトでは、データセットはリポジトリのルートフォルダーを基準とした../datasetsフォルダーにダウンロードされます。そのため、YAML内のリンクまたはYOLOv5が提供するスクリプトを使ってCOCO128データセットをダウンロードすると、次のフォルダー構成になります。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtもちろん、これは任意のデータセットに置き換えられます。このフォルダー構成を維持すれば、ご自身のデータセットも自由に使用できます。
次に、対応するYAMLファイルをデータセットフォルダーのルートにコピーします。これらのYAMLファイルには、ClearMLがデータセットを適切に使用するために必要な情報が含まれています。もちろん、自分で作成することもできます。その場合は、サンプルYAMLの構成に従ってください。
YAMLファイルには次のキーが必要です:path、train、test、val、nc、およびnames。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txtデータセットをアップロードする#
このデータセットをバージョン管理されたデータセットとしてClearMLに登録するには、データセットのルートフォルダーに移動して、次のコマンドを実行します。
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .コマンドclearml-data syncは、実際には短縮コマンドです。次のコマンドを順番に実行することもできます。
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeClearMLデータセットを使って学習を実行する#
ClearMLデータセットを用意できたら、それを使ってカスタムYOLOv5モデルをトレーニングできます。
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cacheハイパーパラメーター最適化#
実験とデータのバージョンが揃ったので、次にそれらを活用して何ができるか見ていきましょう。
コード情報、インストール済みパッケージ、環境の詳細を使うことで、実験を完全に再現できるようになりました。実際、ClearMLでは実験を複製し、パラメーターを変更することもできます。その後、変更したパラメーターで自動的に再実行できます。これは基本的にHPOの仕組みです。
ローカルでハイパーパラメーター最適化を実行するためのスクリプトを用意しています。トレーニングタスクを少なくとも一度実行し、ClearML実験マネージャーに登録されていることを確認してください。スクリプトが実験を複製し、ハイパーパラメーターを変更します。
スクリプトutils/loggers/clearml/hpo.pyでこのテンプレートタスクのIDを指定して、実行してください。task.execute_locally()をtask.execute()に変更すると、タスクをClearMLのキューに登録し、代わりにリモートエージェントで実行できます。
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.pyリモート実行(応用編)#
HPOをローカルで実行するのは便利ですが、実験をリモートマシンで実行したい場合はどうすればよいでしょうか。社内に高性能なGPUマシンがある場合や、クラウドGPUを利用する予算がある場合もあるでしょう。そこで活躍するのがClearML Agentです。
エージェントでできることはこちらをご覧ください。
簡単に言うと、実験マネージャーで追跡される各実験には、別のマシンで再現するために十分な情報(インストール済みパッケージ、未コミットの変更など)が含まれています。ClearML Agentはキューを監視し、タスクを見つけると環境を再構築して実行し、スカラー値やプロットなどを実験マネージャーに報告します。
次のコマンドを実行するだけで、マシン(クラウドVM、ローカルのGPUマシン、ご自身のノートPC)をClearML Agentにできます。
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]複製、編集、キューへの登録#
エージェントを起動したら、タスクを割り当てられます。HPOのセクションで説明したように、タスクを複製してハイパーパラメーターを編集できます。これはインターフェースからも実行できます。
- 実験を右クリックして複製します。
- ハイパーパラメーターを希望する値に編集します。
- タスクを右クリックして、任意のキューに登録します。
タスクをリモートで実行する#
上記の説明のようにタスクを複製するか、現在のスクリプトにtask.execute_remotely()を追加してください。実行するとタスクがキューに登録され、エージェントが処理を開始します。
YOLOv5の学習スクリプトをリモートで実行するには、ClearMLロガーを初期化した後、train.pyスクリプトに次の行を追加するだけです。
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # ロガーのインスタンス
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ この行を追加ご質問はありますか?コミュニティに参加して、ぜひご質問ください。
執筆者
コメント
質問したり、結果を共有したり、ほかの人をサポートしたりできます。










