Label Studioの自動アノテーション(AI支援)にYOLOv8を使う方法
Label Studioには、アノテーション作業を効率化するためのAI支援機能が搭載されています。これらのAI支援機能を利用するには、専用のバックエンドサーバーが必要です。本記事では、バックエンドとしてYOLOv8を導入し、自動アノテーション機能を活用するための具体的な手順について詳しく解説します。YOLOv8を利用することで、アノテーションの精度向上と効率化を同時に実現できます。
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を接続してみましたが、あらかじめ予測枠をつけたいだけなら、YOLOv8で予測した結果をLabel Studioにインポートする方が楽です。
ただ、LabelStudioも進化していくと思いますので、そのうち完成度が上がってバックエンドの接続も楽になるかもしれません。
とりあえず、ラベルをつけてインポート指定だけなら、以下の記事の手法もおすすめします。