Label StudioとYOLOで自動アノテーション
物体検出するには、画像全体から検出したい物体をバウンディングボックスで囲ってラベル付けする作業が必要。これをアノテーションと呼ぶ。
データは求める精度によって数百から数千は必要となってくるので、効率的にアノテーションするためには、専用のツールを使って行う。
アノテーションツールは、色々なものが出回っていてどれを選んでいいのか迷うところ。
求めるものは、
- 無料で使える
- 簡単に使える
- 自動アノテーション対応
- 色々なフォーマットでデータセットを出力できる
- ローカル環境で使える
まずは、比較的情報が多いlabelImgというツールが気になったが、もう開発が終了しているようで、Label Studioというものに変わったらしい。自動アノテーションにも対応している。
もう一つは、Intel製のCVATというツールも有名。こちらも様々な自動アノテーションに対応していて高機能。
Label Studioの構築
pipを使って簡単にインストールできる。
mkdir label-studio
python3 -m venv .venv
source .venv/bin/activate.fish
pip install label-studio
# ローカルポート8080で立ち上がる
label-studio start
- 最初にSign Upからアカウント登録。
- Create Projectからプロジェクトを作成。
- Data Importからアノテーションしたい画像を登録。
- Labeling SetupからObject Detection with Bounding Boxesを選択。
Labeling Interfaceからラベル付けするテンプレを編集できる。最初は、AirplaneとCarが設定済みとなっている。今回は鳥を検出したいので、Birdに変更する。
<View>
<Image name="image" value="$image"/>
<RectangleLabels name="label" toName="image">
<Label value="Bird" background="green"/>
</RectangleLabels>
</View>
こんな感じでアノテーションできる。
YOLOで自動アノテーション
次は、こちらのチュートリアルを参考にYOLOを使って自動アノテーションをテストしてみる。
https://labelstud.io/tutorials/yolo#YOLO-ML-backend-for-Label-Studio
git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend/label_studio_ml/examples/yolo/
models配下にカスタムモデルを配置して使用することもできる。
まずは、APIキーを設定する必要があるため、Label StudioのAccount & SettingsからAPIキーを取得する。ハマった点は、Personal Access Tokenしか項目がなく、最初はこれを設定してみたが上手くいかなかった。
左上のメニューアイコンから、Organaizationを選択、API Token Settingsというボタンがあるので、そこにLegacy Tokensという項目がある。これをオンにする。
すると、Account & SettingsのPersonal Access Tokenの下にLegacy Tokenが表示されているので、これを設定する。
APIキーの設定が終わったら下記コマンドでML Backendを立ち上げる。
docker-compose up
次にプロジェクトのSettingsからModelに接続するための設定を行う。
次に自動アノテーションするためにLabeling Interfaceを修正する。鳥を自動選択したいので、predicted_values属性にbirdを設定する。
<View>
<Image name="image" value="$image"/>
<RectangleLabels name="label" toName="image">
<Label value="Bird" background="green" predicted_values="bird" />
</RectangleLabels>
</View>
あとは、対象画像を開くとyoloのタブが追加されていて、自動アノテーションされている。