Yolo 深圳
深セン
今すぐ参加

ClearML使用したUltralytics YOLOv5 遠隔トレーニングとモニタリング

Ultralytics

4分で読めます

2022年10月21日

ClearML パートナーシップにより、シームレスなML統合や実験トラッキングなど、Ultralytics YOLOv5 体験がさらに充実しました。

Ultralytics 、YOLOv5ような素晴らしいオープンソースツールの研究開発に資金を提供するために、他のスタートアップ企業と商業的に提携しています。この記事には、それらのパートナーへのアフィリエイトリンクが含まれている場合があります。

ClearMLは私たちの新しいパートナーです。あなたの時間を節約するために設計されたオープンソースのツールボックスです。

MLの導入を加速することを使命とするClearML 、MLをあらゆるソフトウェアやハードウェア製品にシームレスに統合します。

この統合によって YOLOv5モデルをトレーニングし、ClearML 実験マネージャーを使って自動的にtrack することができます。データ入力としてClearML データセットのバージョンIDを簡単に指定でき、モデルのトレーニングに自動的に使用されます。

実験の追跡を次のレベルへ

  • 実験マネージャーでYOLOv5 トレーニングの実行をすべて追跡する。
  • 統合されたClearML データバージョニングツールで、カスタムトレーニングデータをバージョンアップし、簡単にアクセスできます。
  • ClearML ハイパーパラメータ最適化を使って、最高のmAP 手に入れよう。
  • 新しく学習したYOLOv5 モデルを、ClearML Servingを使って、わずかなコマンドでAPIに変換できます。

これらのツールをいくつ使用するかは自由です。実験マネージャーにこだわることも、すべてをまとめて印象的なパイプラインにすることもできます。

セットアップ

実験とデータをtrack するために、ClearML サーバーと通信する必要があります。ClearML Hosted Service に無料でサインアップするか、自分でサーバーを立ち上げるかです

サーバーでさえオープンソースなので、機密データを扱う場合でも問題ありません。

  1. clearml python インストールする: pip installclearml
  2. クレデンシャルを作成して ClearML SDK をサーバーに接続し(右上の Settings → Workspace → Create new credentials)、以下のコマンドを実行して指示に従います:clearml

これで準備完了です。

YOLOv5 ClearMLトレーニング

ClearML 実験追跡を有効にするには、ClearML pip パッケージをインストールするだけです。

pip installclearml

これにより、YOLOv5 トレーニングスクリプトとの統合が可能になります。今後、トレーニングの実行はすべてClearML experiment managerに取り込まれ、保存されます。project_nameやtask_nameを変更したい場合は、カスタムロガーのutilsclearmlloggers/clearml/clearml_utils.pyを参照してください。

python train.py --img 640 --batch 16 --epochs 3 --data coco128yaml --weights yolov5s.pt --cache

これにより、以下がキャプチャされます。

  • ソースコード + 未コミットの変更
  • インストール済みパッケージ
  • (ハイパー)パラメータ
  • モデルファイル(--save-period n を使用して、nエポックごとにチェックポイントを保存します)
  • コンソール出力
  • スカラーmAP.5、mAP.5:0.95、精度、再現率、損失、学習率、...)
  • 機械の詳細、ランタイム、作成日などの一般的な情報。
  • ラベルコレログラムや混同行列など、作成されたすべてのプロット
  • エポックごとのバウンディングボックス付き画像
  • エポックごとのモザイク
  • エポックごとの検証画像

悪くない!さて、これらの情報をClearML UI で可視化し、トレーニングの進捗状況を把握しましょう。テーブルビューにカスタムカラム(例えばmAP.5)を追加すれば、最もパフォーマンスの良いモデルを簡単にソートできます。また、複数の実験を選択して直接比較することもできます!

ハイパーパラメータの最適化やリモート実行など、このすべての情報でできることはさらにたくさんあります。読み進めてその方法を学びましょう。

データセットのバージョン管理

コードとは別にデータをバージョン管理することは一般的に良い考えであり、最新バージョンも簡単に取得できます。このリポジトリは、データセットのバージョンIDの提供をサポートしており、まだデータがない場合は、確実に取得します。それに加えて、このワークフローは、使用されたデータセットIDをタスクパラメータの一部として保存するため、どのデータがどの実験で使用されたかを常に確実に知ることができます。

データセットの準備

YOLOv5 リポジトリは、データセットの情報を含むYAMLファイルを使うことで、さまざまなデータセットをサポートしています。デフォルトでは、データセットはリポジトリのルートフォルダから./datasetsフォルダにダウンロードされます。もしcoco128データセットをYAML内のリンク、またはyolov5提供するスクリプトを使ってダウンロードした場合、このようなフォルダ構造になります:

...
|_yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt

ただし、これは任意のデータセットにすることができます。このフォルダ構造を守る限り、ご自身のデータセットを自由に使用してください。

次に、⚠️ 対応する YAML ファイルをデータセットフォルダ⚠️ のルートにコピーします。これらの YAML ファイルには、ClearML データセットを正しく使うために必要な情報が含まれています。もちろん自分でも作れますが、例の YAML の構造に従ってください。

基本的に、path、train、test、val、nc、namesのキーが必要です。

...
|_yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128yaml # ←ここ!
|_ LICENSE
|_ README.txt

データセットをアップロード

このデータセットをバージョン管理されたデータセットとしてClearML 取り込むには、データセットのルートフォルダーに移動し、以下のコマンドを実行します:

cd coco128

clearml sync --projectYOLOv5 --name coco128 --folder .


コマンドclearml syncは、実際には省略記法のコマンドである。これらのコマンドを順番に実行することもできる:

# 親となるデータセットのバージョンを指定したい場合は、--parentを追加してください

# これにより、別のデータセットバージョンに基づいて、ファイルの重複アップロードを回避できます。

clearml create --name coco128 --projectYOLOv5-プロジェクトYOLOv5

clearml add --files .

clearml

ClearML データセットを使ったトレーニングの実行

ClearML データセットがあれば、それを使ってYOLOv5 モデルを簡単にトレーニングすることができます。

python train.py --img 640 --batch 16 --epochs 3 --dataclearml:// --weights yolov5s.pt --cache

ハイパーパラメータ最適化

実験とデータのバージョンができたので、その上に何を構築できるかを見てみましょう。

コード情報、インストールされたパッケージ、環境の詳細を使用することで、実験そのものを完全に再現できるようになりました。実際、ClearML では実験のクローンを作成し、パラメータを変更することもできます。そうすれば、新しいパラメータで自動的に再実行することができます!

ハイパーパラメータの最適化をローカルで実行するために、あらかじめスクリプトを用意しました。トレーニングタスクが少なくとも一度実行され、ClearML experiment manager にあることを確認してください。

clearml.py にあるスクリプトにこのテンプレートタスクの ID を記入し、実行するだけです。task.execute_locally() を task.execute() に変更すると、ClearML キューに入れ、代わりにリモートエージェントが処理します。

# そうでなければ、オプティマイザをRandomSearchだけに変更することができます。

リモート実行(高度)

HPOをローカルで実行するのはとても便利ですが、代わりにリモートマシンで実験を実行したい場合はどうしたらよいでしょうか?非常に強力なGPU マシンをオンサイトで利用できるかもしれませんし、クラウドGPUを利用する予算があるかもしれません。そこでClearML Agent の出番です。

エージェントがここで何ができるかを確認してください:

要するに、エクスペリメントマネージャが追跡しているすべての実験には、別のマシンでそれを再現するのに十分な情報が含まれている(インストールされているパッケージ、コミットされていない変更など)。つまり、ClearML エージェントは、受信タスクのキューをリッスンし、タスクが見つかると環境を再作成して実行し、同時にスカラーやプロットなどをエクスペリメントマネージャに報告します。

実行するだけで、どんなマシン(クラウド VM、ローカルGPU マシン、自分のラップトップ)でもClearML エージェントにすることができます:

clearml デーモン --queue [--docker]

クローン作成、編集、エンキュー

エージェントが実行されているので、いくつかの作業を指示できます。HPOのセクションで、タスクを複製してハイパーパラメータを編集できることを思い出してください。インターフェースからもそれを行うことができます!

🪄 実験を右クリックして複製します

🎯 ハイパーパラメータを希望どおりに編集してください

タスクを右クリックして、任意のキューにエンキューします

タスクをリモートで実行する

上記で説明したようにタスクを複製するか、task.execute_remotely()を追加して現在のスクリプトをマークするだけで、実行時にエージェントが作業を開始するためにキューに入れられます。

YOLOv5 トレーニングスクリプトをリモートで実行するには、ClearML ロガーがインスタンス化された後、training.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 # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...

この変更後にトレーニングスクリプトを実行すると、python その行までスクリプトを実行し、それ以降はコードをパッケージ化して代わりにキューに送ります!

ワーカーの自動スケーリング

ClearML には自動スケーラーも付属しています!このツールは、選択したクラウド(AWS、GCP、Azure)に新しいリモートマシンを自動的にスピンアップし、キューに実験が検出されるたびにそれらをClearML エージェントに変えます。タスクが処理されると、オートスケーラは自動的にリモートマシンをシャットダウンします!オートスケーラのスタートビデオをご覧ください。

ご質問はありますか?<a href="https://community.ultralytics.com/" target="_blank">コミュニティに参加して、今すぐ質問を投稿してください!

AIの未来を
共に築きましょう!

未来の機械学習で、新たな一歩を踏み出しましょう。

無料ではじめる