多機能アノテーションツールLabelStudioの使い方を解説
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/labelstudio-howto.001.jpeg)
様々なタスクのアノテーションが行えるLabelStudioですが、ここでは、物体検知のアノテーションについて説明します。また、アノテーション済みのデータの読み込み方法も調査したので、手順も解説します。
Label Studioとは
これまでLabelImgというアノテーションツールを利用していました。このLabelImgのGitHubリポジトリを見ると、”Labelimg is now part of the Label Studio Community!“と書かれており、今後はLabelStudioに統合されることになったようです。
ちなみに、Label Studioは、LabelImgの後継ではなく、映像、テキスト、オーディオ、ビデオ、時系列データなどいろいろなメディアのアノテーション機能を統合したオープンソースの多機能なアノテーションツールです。
1つのツールで様々なタイプのデータのアノテーションが可能なのは魅力ですが、それだけに慣れるまで大変です。
本記事では、Label Studioを使って、物体検知(Object Detection)のための枠(バウンディングボックス)のアノテーションを行ってみましたので、実際に試してうまく動作した手順を説明します。
感想としては、最初にアノテーションを始めるまで、少し手間がかかるかな?といった感じです。また、かなり多機能な印象を持ちました。
なお、LabelImgについては、以下で使い方を説明していますので興味がある方は参照してください。
![物体検出のためのアノテーションツール | labelImgの使い方を説明](https://tech.aru-zakki.com/wp-content/uploads/2023/07/labelImg.001-320x180.jpeg)
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
簡単な物体検出のアノテーションなら、labelImgの方が楽だと思います。
また、LabelStudioではバックエンドを用いることで自動アノテーションなどの支援機能を搭載しています。バックエンド機能については、以下の記事を参考にしてください。
![Label Studioの自動アノテーション機能(AI支援)にYOLOv8を使う方法](https://tech.aru-zakki.com/wp-content/uploads/2023/10/labelstudio-yolov8-backend.001-1-320x180.jpeg)
インストール
ローカルにLabel Studioをインストールする場合は、pip
でインストールします。
pip install label-studio
一緒にいろいろなパッケージがインストールされるので、anaconda
を使っている場合は、以下のように環境を作成してインストールしたほうが良いかもしれません(私の場合は、YOLOv8用に作っていたcondaの環境にインストールしました)
conda create --name label-studio
conda activate label-studio
conda install psycopg2
pip install label-studio
また、公式リポジトリでは、Dockerを利用する方法が最初に案内されています。docker-compose
用のファイルも用意されていますので、Dockerを使う場合は、docker-compose
の利用をおすすめします。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
また、Label Studioはブラウザ経由で操作する、サーバータイプのソフトウェアなので、Dockerで動かすのと相性が良いです。
以下は、Macにpip
でにインストールした場合を前提に解説しますが、ブラウザベースのGUIなので、他の環境でもほぼ同様の手順で使えると思います。
利用方法
起動
インストールが正しく行われていれば、以下のコマンドで起動できます。
label-studio
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
MacOSの場合、Safariではうまく動かないみたいです。Google Chromeを利用しましょう。
起動すると、ウェブブラウザに以下の画面が表示されます。表示されない場合は、http://localhost:8080/
にアクセスします。
![ログイン画面](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-58-1020x1024.png)
SIGN UPを選んで、適当なメールアドレスとパスワードでログインします
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
guest@example.comみたいな適当なアドレスでも大丈夫でしたが、一応保有するメールアドレスを設定した方がよ良い気がします。
プロジェクトを作成
最初にプロジェクトを作成する必要があります。以下の画面が表示されるのでCreate Project
をクリックしてプロジェクトを作成します。
![プロジェクトの作成](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-59-1024x855.png)
プロジェクト名は”test
“にします。
![プロジェクト設定画面(1)](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-60-1024x342.png)
次に、Data Importタブで画像をインポートしておきます。この画像のインポートは後からでも可能です。ローカルからファイルをアップロードする場合は、「Upload Files
」をクリックしてファイルを選択します。
![プロジェクト設定画面(2)](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-61-1024x612.png)
次にLabeling Setup
のタブに移動して、どのようなアノテーションを行うか設定します。Computer Vision, Natural Language Processing, Audio/Speech Processing, Conversational AI, Ranking&Scoring, Structured Data Parsing, Time Series Analysis, Videos, Generative AIのアノテーションが1つのツールで行えると言うのは本当に驚きです。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
個人的には「とりあえずこれを試して使いにくければ他のアノテーションツールを探す」といった活用方法を考えています。
![プロジェクト設定画面(3)](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-980x1024.jpg)
今回は、Computer Visionの”Object Detection with Bounding Boxes
“を選択します。すると、画面が切り替わりますので、ここでラベル名などを設定します。
![プロジェクト設定画面(4)](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-1-1024x701.jpg)
私の場合は、最初に設定されているLabelsを削除して、”cat
“を追加しました。
以上の設定が完了したら”Save
“ボタンを押します。すると以下のように、プロジェクトが表示されます(列は、読み込んだ画像です)。
![プロジェクトのトップ画面](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-2-1024x760.jpg)
label-image起動時に表示されるメッセージに保存場所が表示されています。MacOSで起動した場合は、以下のようなメッセージが表示されていました。実際に、フォルダに移動するとSQLデータベース等が格納されていました。
=> Database and media directory: /Users/hogehoge/Library/Application Support/label-studio
アノテーション
一覧で、列をクリックするとアノテーション画面になります。ここで、アノテーションを行います。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-3-905x1024.jpg)
ラベル名をクリックするか、ラベル番号に対応する数字キーをクリックすることで、枠を作成するモードになります。マウスで枠を作成すると、枠を生成できます。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-4-766x1024.jpg)
枠を修正したい場合は、枠をクリックすると修正用のガイドが表示されます。枠を修正したら、u
キーで選択を解除できます。また、枠を削除したい場合は、backspace
を押します。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-5-716x1024.jpg)
ショートカットについては、下図のメニューをクリックすることで確認できます。
![ショートカット](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-6-300x271.jpg)
MacOSの場合は、以下のような表示でした。
![ショートカット](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-62-865x1024.png)
アノテーションが完了したら、”Submit
“ボタンをクリックします。
アノテーションが完了したら、プロジェクト名(下図では”test
“)をクリックしてプロジェクト画面に戻ります。
![プロジェクトへ戻るボタン](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-64-1024x110.png)
アノテーション結果を書き出す
右上にある”Export
“ボタンを押すと、フォーマットが選択できる画面になります。ここで、書き出すフォーマットを設定して”Export
“ボタンを押すと画像とアノテーション結果が書き出されます。
![Exportオプション](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-65-639x1024.jpg)
ZIPファイルとしてダウンロードされますが、YOLOフォーマットを選択した場合は中身は以下のようになっていました。
![画像ファイルの中身](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-65-1-1024x689.jpg)
アノテーション済みのデータのインポート
アノテーション済みのデータをインポートするにはLabel Studio Converterを利用するようです。
このツールを使うことで、以下のフォーマットをコンバートすることが可能です
- JSON
- CSV
- CoNLL 2003
- COCO
- Pascal VOC XML
- YOLO
物体検出だとCOCOとPascal VOC XML, YOLOになるかと思います。試しにYOLOデータを変換してみました。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
MacOSでの動作確認になります。linuxはおそらく同じ手順でYOLOフォーマットのアノテーションデータをインポートできます
![](https://tech.aru-zakki.com/wp-content/uploads/2023/07/cat2-e1688625674820.png)
公式ドキュメント通りにいかず、何度も試行錯誤しています。環境によっては少し手順を変えないとインポートできないかもしれません。
インストール
label-studio-converter
をインストールする必要があります。
pip install -U label-studio-converter
フォルダ構成
ここでは、フォルダ構成が以下のようになっていると想定して説明します。classes.txt
は、各行にクラス名が書かれたテキストです。cat
,dog
であれば、以下のようになります。
cat
dog
また、imagesには画像データ、labelsにはYOLOフォーマットのアノテーションデータが格納されているとします。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-66-1024x309.png)
YOLOフォーマットからのLabel Studioへのコンバート
/home/xxxx/dataset/
ディレクトリに移動して、以下のコマンドを実行すると変換が行われます。
label-studio-converter import yolo -i ./ -o ls-tasks.json
INFO:root:Reading YOLO notes and categories from /Users/tadanori/tmp/yolodata
INFO:root:Found 1 categories
INFO:root:Converting labels from /Users/tadanori/tmp/yolodata/labels
INFO:root:image extensions->, ['.jpg']
INFO:root:Saving Label Studio JSON to /Users/tadanori/tmp/yolodata/ls-tasks.json
1. Create a new project in Label Studio
2. Use Labeling Config from "/Users/tadanori/tmp/yolodata/ls-tasks.label_config.xml"
3. Setup serving for images [e.g. you can use Local Storage (or others):
https://labelstud.io/guide/storage.html#Local-storage]
4. Import "/Users/tadanori/tmp/yolodata/ls-tasks.json" to the project
次に、sedを使って生成されたls-tasks.json
の中身を一括書き換えします。
cat ls-tasks.json | sed 's/\?d=/\?d=images/g' > converted.json
これで、フォルダ名を変更したjsonファイルが作成されます。
以上の作業後のフォルダの中身は以下のようになるはずです。
> ls
classes.txt converted.json images labels
ls-tasks.json ls-tasks.label_config.xml
label studioを起動する
ローカルストレージにアクセスしたいので、環境変数を追加してlabel-studioを起動します。
LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/xxxx/dataset label-studio
新規プロジェクトを作成する
新規プロジェクトを作成します。Labeling Setup
を開いて、Custom template
を選択します。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-65-2-860x1024.jpg)
エディタが表示されるので、生成された ls-tasks.label_config.xml
の内容をここにコピーします。コピーしたらsave
をクリックします。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-65-3-1024x518.jpg)
ローカルストレージの設定を行う
Setting
→Cloud Storage
から、Add Source Storage
をクリックします
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-68-1024x451.png)
ここで、Storage Type
をLocal files
にして、画像が格納されているフォルダを絶対パスで設定します。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-69-1024x781.png)
Check Connectionをクリックしてエラーが出なければ、Saveして閉じてください。
これでローカルファイルなファイルへのアクセスの設定は完了です。
Label Studioへのデータのインポート
最後に、変換したconverted.json
をインポートします。Import
ボタンをクリックして、インポートしてください。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-67-1024x203.png)
ここまでの手順で正しい設定が行われていれば、一覧が表示されます。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/10/image-68-1024x556.jpg)
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
サーバータイプのアプリになっているため、ローカルのデータにアクセスするのが少し手間です。このあたりはlabelimgの方が簡単です。
使ってみた感想
実際に使ってみた素直な感想は、本格的なツールで、手軽なツールではないということです。
アノテーションを本格的に行う場合は、かなり便利そうです。例えば、グループで分担してアノテーションする場合などには重宝しそうです。
ただ、「ちょっとアノテーションして学習させてみる」みたいな使い方には、少し重いです。
ただ、LabelImgの開発はストップするみたいなので、他のツールになれていくしかないかなと考えています。しばらく使ってみるとまた感想が変わるかもしれませんが、現状はそんな感じです。
まとめ
Label Studioの使い方を、物体検出タスクのアノテーションを例に説明しました。かなり多機能でつかいこなすのは大変そうです。
また、YOLOフォーマットなどのアノテーション済みのデータのインポートも少し手間そうです。
個人でちょっと使う分には、LabelImgの方が使いやすい気がします。
ただ、いろいろなタスクのアノテーションができるので、慣れればこちらもよいかもです。