Skip to main content

PaddleDetectionとW&Bを使用したオブジェクト検出

すべてのメトリクスとモデルチェックポイントをW&Bでログに記録しながら、PaddleDetectionでYOLOXモデルを最初からトレーニングする方法を学びましょう。
Created on June 21|Last edited on October 31
このレポートは、Manan Goelによる「Object Detection with PaddleDetection and W&B」の翻訳です。



目次(クリックすると開きます)


Input Image
Annotated Image
2
3


PaddleDetectionの概要

PaddleDetectionとは、 PaddlePaddleに基づくエンドツーエンドのオブジェクト検出開発キットです。ネットワークコンポーネント、データ拡張、損失などの構成可能なモジュールを備えたモジュラー設計で、さまざまな主要なオブジェクト検出、インスタンスセグメンテーション、追跡、およびキーポイント検出アルゴリズムを実行します。
現在、PaddleDetectionには、すべてのトレーニングと検証のメトリクス、およびモデルのチェックポイントとそれに対応するメタデータをログに記録するビルトインW&B統合が付属しています。
コードを実行しながらこのチュートリアルをフォローしたい場合は、以下のColabリンクを確認してください。
💡
このチュートリアルでは、トレーニングセットに1000枚の画像、および検証セットに250枚の画像が入っているCOCO2017データセットのサブセットでYOLOXモデルをトレーニングすることにします。
次の2つの方法で、トレーニングジョブのW&Bロガーをアクティベートできます:

  • コマンドライン:W&Bロガーへの引数の前に-oを付ける必要があります。各引数にはプレフィックス「wandb-」を含める必要があります。また、「--use_wandb」フラグを使用する必要があります。
python tools/train -c config.yml --use_wandb -o wandb-project=MyDetector wandb-entity=MyTeam wandb-save_dir=./logs
  • YAMLファイル:次のように、 wandbヘッダーの下のYAML構成ファイルに引数を追加してください。
wandb:
project: MyProject
entity: MyTeam
save_dir: ./logs

セットアップ

W&B SDKのインストール

wandb SDKをインストールしてから、W&Bアカウントにログインします:
pip install wandb
wandb login

PaddleDetectionのインストール

次に、 PaddleDetectionライブラリのクローンを作成し、ソースからパッケージをインストールします。これをする理由は、さまざまな事前実装モデルの構成とともに、トレーニングスクリプトも含まれているからです。
pip install paddlepaddle-gpu pyclipper attrdict gdown -qqq
git clone https://github.com/PaddlePaddle/PaddleDetection
cd PaddleDetection
pip install -e .

COCOデータセットをダウンロードする方法

それでは、この素晴らしいリポジトリを使用して作成されたCOCO2017データセットのサブセットをダウンロードすることから始めることにします。
データセットは、簡単にダウンロードできるようにするために、W&Bアーティファクトとしてログに記録されています。これには、トレーニング用の1000枚の画像と、オブジェクト検出モデルのトレーニングに使用する、対応する注釈付きの検証用の250枚の画像が含まれています。
artifact = wandb.Api().artifact("manan-goel/PaddleDetectionYOLOX/COCOSubset:latest")
path = artifact.download(root='./dataset/coco')

トレーニング

モデルのトレーニング

ここで、PaddleDetectionライブラリのトレーニングスクリプトからYOLOXモデルをトレーニングし、上記の構成でトレーニング中にW&Bログを追加します。また、 --evalフラグを追加して、5エポックごとに評価ステップを実行します。

CLIの使用

python tools/train.py -c configs/yolox/yolox_nano_300e_coco.yml --use_wandb -o wandb-project=PaddleDetectionYOLOX --eval

YAML構成ファイルの使用

トレーニングパイプラインのW&Bで実験の追跡を自動開始するために、次のスニペットをYAML構成ファイルに追加すれば、トレーニングスクリプトへの入力として使用することができます。
wandb:
project: PaddleDetectionYOLOX
今回はこのファイルを編集することにします。

視覚化

トレーニングと検証メトリクスの追跡

トレーニング中、トレーニングセットと検証セットのメトリクスは、次のようなW&Bダッシュボードに記録されます。



追跡システムメトリクス




W&Bから最上級モデルのダウンロード💾

このモデルのチェックポイントは、W&Bアーティファクトとしてログに記録され、次のスニペットを使用すれば評価用にダウンロードすることができます。
import wandb
artifact = wandb.Api().artifact('manan-goel/PaddleDetectionYOLOX/model-26oqc38r:best', type='model')
artifact_dir = artifact.download()

画像のテスト

次のセルは、demoディレクトリ内のすべての画像に対してPaddleDetectionリポジトリの推論スクリプトを実行し、 W&Bから取得したYOLOXモデルを使用してそれらをinfer_outputディレクトリに保存します。
for i in $(ls demo/*.jpg)
do
python tools/infer.py -c configs/yolox/yolox_nano_300e_coco.yml \
--infer_img=$i \
--output_dir=infer_output/ \
--draw_threshold=0.5 \
-o weights=./artifacts/model-26oqc38r:v1/model
done
これにより、デモディレクトリ内の各jpgファイルが調べられ、ダウンロードされたモデルを使用してそれらのファイルに対して推論スクリプトが実行されます。その後、注釈付きの画像がinfer_outputディレクトリに保存されます。

ボーナス:注釈付き画像をW&Bダッシュボードへ記録

import glob
import wandb

wandb.init(project="PaddleDetectionYOLOX")
wandb.use_artifact('manan-goel/PaddleDetectionYOLOX/model-26oqc38r:best')
table = wandb.Table(columns=["Input Image", "Annotated Image"])

inp_imgs = sorted(glob.glob("./demo/*.jpg"), key=lambda x: x.split("/")[-1])
out_imgs = sorted(glob.glob("./infer_output/*.jpg"), key=lambda x: x.split("/")[-1])

for inp in inp_imgs:
for out in out_imgs:
if out.split("/")[-1] != inp.split("/")[-1]:
continue
table.add_data(
wandb.Image(inp),
wandb.Image(out)
)

wandb.log({
"Predictions": table
})
wandb.finish()
上記のスクリプトは、入力画像とラベル付けされた画像を取得し、次のようなW&Bテーブルに記録します:




まとめ

このチュートリアルでは、W&BをPaddleDetectionと組み合わせて使用し、すべてのオブジェクト検出モデル開発のニーズをサポートする方法について簡潔に説明しました。実行可能なコードを記載したこのレポートについては、Colabをご覧ください。

関連記事


Iterate on AI agents and models faster. Try Weights & Biases today.
List<Maybe<File<(table)>>>