Label Studioの自動アノテーション機能(AI支援)にYOLOv8を使う方法
Label Studioでは、アノテーションを楽にするためのAI支援によるアノテーション機能がいくつか用意されています。この機能を利用するにはバックエンドサーバーが必要です。ここでは、バックエンドサーバーの機能とYOLO v8をバックエンドとして利用する方法について説明します。
label studioの使い方については以下の記事を参照してください
Label Studio ML backendとは
Label Studio ML backendを使うことで以下のような機能が実現できます。
- 事前アノテーション
- アクティブ ラーニングを使用して、ラベル付けに最も関連性の高いデータを選択
- AI支援によるインタラクティブなラベルづけ
- アノテーションしたデータによるモデルのファインチューニング
つまり、これを使えば「学習させたモデルを使ってアノテーションで楽ができる」ということです。
この記事では、AI支援によるインタラクティブなラベル付けを中心に解説します。
なお、Label Studio ML backendは以下のサイトからダウンロードできます。
Github: https://github.com/HumanSignal/label-studio-ml-backend
Label Studio ML backendの使い方
リポジトリをクローン
Gitからリポジトリをクローンします
git clone https://github.com/HumanSignal/label-studio-ml-backend.git
the simplest backendでLabel Studioへの接続を説明
フォルダの移動
リポジトリの/label_studio_ml/examples/the_simplest_backend
に移動します。
docker-compose.ymlを修正
LABEL_STUDIO_HOST
とLABEL_STUDIO_API_KEY
を自身の環境に合わせて修正します。
version: "3.8"
services:
model_server:
build: .
image: humansignal/the_simplest_backend:v0
environment:
- MODEL_DIR=/data/models
- LABEL_STUDIO_HOST=
- LABEL_STUDIO_API_KEY=
ports:
- 9090:9090
volumes:
- "./data/server:/data"
LABEL_STUDIO_HOST
は、http://xxx.xxx.xxx.xxx:8080を入力します。xxx.xxx.xxx.xxxは、自身のPCのIPアドレスです。
dockerで起動するので、localhostはdockerのコンテナになります。ここを、自身のPCのアドレスに書き換えます(例えば、192.168.1.10など)
LABEL_STUDIO_API_KEY
は、Label Studioのユーザ設定(Account&Setting)に表示されるAccess Tokenをコピーします
docker composeで起動する
docker-composeで起動します。初回の起動ではbuildが行われますのでしばらく時間がかかります。
docker-compose up
起動したら、別のターミナルで以下のコマンドを実行します。
curl http://localhost:9090/health
以下のように表示されたら動作しています
{"model_class":"MyModel","status":"UP"}
Label Studioのプロジェクトにバックエンドを紐づける
バックエンドを紐付けしたいプロジェクトのSettingを開き、左のタブからMachine Learning
を選択します。
Add Model
をクリックして、http://localhost:9090
を入力してValidiate and Save
をクリックします。
接続が正しくできたら、Machine Learning
のページにバックエンドが追加されています。
動作確認
the simplest backend
は1つ前に設定した結果を返します。例えば、物体検出で枠を設定した後に他の画像に切り替えると、1つ前に設定した位置に枠が表示されます。
その他
examples
には他にもいろいろなバックエンドのサンプルがありますので、自身のアノテーションに合わせて動かしてみてください(図はexampleのフォルダの中身です)
YOLOv8をバックエンドとして使う
YOLOv8をバックエンドとして使うためのリポジトリがGithubにいくつかあったのですが、バージョンの問題か動かなかったので、それらを参考にして、とりあえず動作するバージョンを作成しました。
とりあえあえず、以下の環境で動作を確認しています
- Label Studio 1.8.2post1
- YOLOv8 8.0.201
Githubリポジトリ:https://github.com/aruaru0/label-studio-yolov8-backend
リポジトリをクローンする
以下のコマンドでリポジトリをクローンします
git clone https://github.com/aruaru0/label-studio-yolov8-backend.git
モデルをコピーする
YOLOv8のモデルをbest.pt
という名前で、クローンしたリポジトリのトップにコピーします。モデルは、公式のプレトレインモデルをbest.pt
という名前でコピーしても、自身で学習させたモデルでもOKです。
コピーした後のフォルダは以下のようになります。
Dockerfile README.md _wsgi.py best.pt docker-compose.yml model.py requirements.txt
docker-compose.ymlを修正
LABEL_STUDIO_HOST
とLABEL_STUDIO_API_KEY
を自身の環境に合わせて修正します。修正内容については、こちらで説明しています。
docker-composeで起動する
docker-composeで起動します。初回の起動ではbuildが行われますのでしばらく時間がかかります。
docker-compose up
起動したら、別のターミナルで以下のコマンドを実行します。
curl http://localhost:9090/health
以下のように表示されたら動作しています
{"model_dir":"/data/models","status":"UP","v2":false}
Label Studioで設定
こちらも上で説明した方法と同じです。
プロジェクトでLabeling
を行うと、自動でアノテーション枠がつくようになります。
その他
今回のバックエンドは、予測のみ対応しています。学習などを含めて追加したい場合は、model.py
を修正してください。方法は、Label Studio ML backendのリポジトリに書かれています。
今回はCPUでYOLOv8を動かしているので、予測だけにしました。学習はGPUを使った設定にする必要があるかと思います(dockerなど)
まとめ
バックエンドサーバーの接続は結構トラブりました。普通にYOLOv8で予測して、結果をインポートする方がトラブルが少なくて楽な気もします。
ただ、完成度が上がればこの機能はかなり便利かもしれませんが、ツールに統合されてしますとトラブルシューティングが大変になりますので、多少手間はかかりますが以下の記事のようなやり方のほうが間違いない気もします。
このあたりは、個人の趣味だと思いますが。