ClearMLを使用してUltralytics YOLOv5をリモートでトレーニング・監視する
ClearMLとのパートナーシップにより、シームレスなML統合、実験トラッキングなどを実現し、Ultralytics YOLOv5の体験を向上させる取り組みをご覧ください。

Ultralyticsでは、YOLOv5のような優れたオープンソースツールを誰でも無料で利用できる状態に保つため、研究開発費の支援を目的として、他のスタートアップ企業と商業的に提携しています。この記事には、提携先へのアフィリエイトリンクが含まれている場合があります。
ClearMLは、時間の節約を目的に設計されたオープンソースツールボックスであり、私たちの新しいパートナーです。
ML導入の加速を使命とするClearMLは、あらゆるSoftwareおよびHardware製品へのMLの統合をシームレスにします。
この統合により、YOLOv5モデルのトレーニングがさらに簡単になり、ClearMLの実験マネージャーを使用して自動的に追跡できます。データ入力としてClearMLデータセットのバージョンIDを簡単に指定でき、そのデータセットがモデルのトレーニングに自動的に使用されます。
実験のトラッキングを次のレベルへ引き上げる#
- すべてのYOLOv5トレーニング実行を実験マネージャーで追跡できます。
- 統合されたClearML Data Versioning Toolを使用して、カスタムトレーニングデータをバージョン管理し、簡単にアクセスできます。
- ClearML Hyperparameter Optimizationで最高のmAPを実現できます。
- ClearML Servingを使用すると、わずかなコマンドで新しくトレーニングしたYOLOv5モデルをAPIに変換できます。
これらのツールをいくつ使用するかは自由に選択できます。実験マネージャーだけを使用することも、すべてをつなぎ合わせて優れたパイプラインにすることもできます。
セットアップ#
実験とデータを追跡するため、ClearMLはサーバーと通信する必要があります。方法は2つあります。ClearML Hosted Serviceに無料登録するか、独自のサーバーをセットアップしてください。詳しくはClearML Server deployment docsをご覧ください。
サーバー自体もオープンソースなので、機密データを扱う場合でも問題ありません。
- 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を使用します)
- コンソール出力
- スカラー(mAP_0.5、mAP_0.5:0.95、precision、recall、losses、learning rates、...)
- マシンの詳細、ランタイム、作成日などの一般情報
- ラベル相関図や混同行列など、生成されたすべてのプロット
- エポックごとのバウンディングボックス付き画像
- エポックごとのモザイク
- エポックごとの検証画像
なかなか便利です。これで、ClearML UIですべての情報を可視化し、トレーニングの進捗を概観できます。テーブルビューにカスタム列(例: mAP_0.5)を追加すると、最も高い性能のモデルで簡単に並べ替えられます。また、複数の実験を選択して直接比較することもできます。
この情報を使えば、ハイパーパラメーター最適化やリモート実行など、さらに多くのことができます。詳しくはこのまま読み進めてください。
データセットのバージョン管理#
コードとは別にデータをバージョン管理することは、一般的に良い方法であり、最新バージョンの取得も簡単になります。このリポジトリではデータセットのバージョンIDを指定でき、データがまだ存在しない場合は確実に取得します。さらに、このワークフローでは使用したデータセットIDもタスクパラメーターの一部として保存されるため、どの実験でどのデータが使用されたかを常に正確に把握できます。
データセットを準備する#
YOLOv5リポジトリでは、データセットの情報を含むYAMLファイルを使用して、さまざまなデータセットをサポートしています。デフォルトでは、データセットはリポジトリのルートフォルダーを基準とした../datasetsフォルダーにダウンロードされます。そのため、YAML内のリンクまたはyolov5が提供するスクリプトを使用してcoco128データセットをダウンロードすると、次のフォルダー構造になります:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtただし、これは任意のデータセットに置き換えられます。このフォルダー構造を維持する限り、自分のデータセットを自由に使用できます。
次に、⚠️対応するYAMLファイルをデータセットフォルダーのルートにコピーしてください⚠️。これらのYAMLファイルには、ClearMLがデータセットを正しく使用するために必要な情報が含まれています。もちろん、自分で作成することもできます。その場合は、サンプル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コマンドは、実際には短縮コマンドです。次のコマンドを1つずつ実行することもできます:
# 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の機能です。
ハイパーパラメーター最適化をローカルで実行するために、あらかじめ用意されたスクリプトを同梱しています。トレーニングタスクが少なくとも1回実行され、ClearML実験マネージャーに登録されていることを確認してください。基本的には、そのタスクをクローンしてハイパーパラメーターを変更します。
スクリプト内にあるこのテンプレートタスクのID(utils/loggers/clearml/hpo.py)を入力して実行します。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エージェントはまさにそれを実行します。キューで着信タスクを待機し、タスクを見つけると環境を再作成して実行しながら、スカラーやプロットなどを実験マネージャーに引き続き報告します。
次のコマンドを実行するだけで、あらゆるマシン(クラウドVM、ローカルGPUマシン、自分のノートパソコン)をClearMLエージェントにできます:
clearml-agent daemon --queue [--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) # loggers instance
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ ADD THIS LINEご質問はありますか?コミュニティに参加して、ぜひご質問ください。









