機械学習
記事内に商品プロモーションを含む場合があります

Label Studioの自動アノテーション機能(AI支援)にYOLOv8を使う方法

tadanori

Label Studioでは、アノテーションを楽にするためのAI支援によるアノテーション機能がいくつか用意されています。この機能を利用するにはバックエンドサーバーが必要です。ここでは、バックエンドサーバーの機能とYOLO v8をバックエンドとして利用する方法について説明します。

label studioの使い方については以下の記事を参照してください

あわせて読みたい
LabelStudioの使い方を説明|おすすめの多機能アノテーションツール
LabelStudioの使い方を説明|おすすめの多機能アノテーションツール

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の使い方

以下の説明は、環境にDocker, Docker Composeがインストールされていることが前提になります。各環境(Windows, Linux, Mac)に合わせてインストールしてください

動作確認した環境はMacOSです。他の環境では若干修正が必要な可能性があります(linuxは大丈夫だと思います)

リポジトリをクローン

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_HOSTLABEL_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をクリックします。

Label StudioをDockerで起動している場合は、localhostではなくIPアドレスを設定してください。

接続が正しくできたら、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
YOLOv8で独自データを学習させる方法はこちら
YOLO v8で物体検出|独自(カスタム)データの学習と推論を実践
YOLO v8で物体検出|独自(カスタム)データの学習と推論を実践

docker-compose.ymlを修正

LABEL_STUDIO_HOSTLABEL_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で予測して、結果をインポートする方がトラブルが少なくて楽な気もします。

ただ、完成度が上がればこの機能はかなり便利かもしれませんが、ツールに統合されてしますとトラブルシューティングが大変になりますので、多少手間はかかりますが以下の記事のようなやり方のほうが間違いない気もします。

Label Studioを使わない方法
物体検出のアノテーションで楽する方法(YOLOv8+labelImg)
物体検出のアノテーションで楽する方法(YOLOv8+labelImg)

このあたりは、個人の趣味だと思いますが。

おすすめ書籍

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました