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

LabelStudioの使い方を説明|おすすめの多機能アノテーションツール

tadanori

様々なタスクのアノテーションが行える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の使い方を説明
物体検出のためのアノテーションツール | labelImgの使い方を説明

簡単な物体検出のアノテーションなら、labelImgの方が楽だと思います。

また、LabelStudioではバックエンドを用いることで自動アノテーションなどの支援機能を搭載しています。バックエンド機能については、以下の記事を参考にしてください。

あわせて読みたい
Label Studioの自動アノテーション機能(AI支援)にYOLOv8を使う方法
Label Studioの自動アノテーション機能(AI支援)にYOLOv8を使う方法

インストール

ローカルに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の利用をおすすめします。

また、Label Studioはブラウザ経由で操作する、サーバータイプのソフトウェアなので、Dockerで動かすのと相性が良いです。

以下は、Macにpipでにインストールした場合を前提に解説しますが、ブラウザベースのGUIなので、他の環境でもほぼ同様の手順で使えると思います。

利用方法

起動

インストールが正しく行われていれば、以下のコマンドで起動できます。

label-studio

MacOSの場合、Safariではうまく動かないみたいです。Google Chromeを利用しましょう。

起動すると、ウェブブラウザに以下の画面が表示されます。表示されない場合は、http://localhost:8080/にアクセスします。

ログイン画面

SIGN UPを選んで、適当なメールアドレスとパスワードでログインします

guest@example.comみたいな適当なアドレスでも大丈夫でしたが、一応保有するメールアドレスを設定した方がよ良い気がします。

プロジェクトを作成

最初にプロジェクトを作成する必要があります。以下の画面が表示されるのでCreate Projectをクリックしてプロジェクトを作成します。

プロジェクトの作成

プロジェクト名は”test“にします。

プロジェクト設定画面(1)

次に、Data Importタブで画像をインポートしておきます。この画像のインポートは後からでも可能です。ローカルからファイルをアップロードする場合は、「Upload Files」をクリックしてファイルを選択します。

プロジェクト設定画面(2)

次にLabeling Setupのタブに移動して、どのようなアノテーションを行うか設定します。Computer Vision, Natural Language Processing, Audio/Speech Processing, Conversational AI, Ranking&Scoring, Structured Data Parsing, Time Series Analysis, Videos, Generative AIのアノテーションが1つのツールで行えると言うのは本当に驚きです。

個人的には「とりあえずこれを試して使いにくければ他のアノテーションツールを探す」といった活用方法を考えています。

プロジェクト設定画面(3)

今回は、Computer Visionの”Object Detection with Bounding Boxes“を選択します。すると、画面が切り替わりますので、ここでラベル名などを設定します。

プロジェクト設定画面(4)

私の場合は、最初に設定されているLabelsを削除して、”cat“を追加しました。

以上の設定が完了したら”Save“ボタンを押します。すると以下のように、プロジェクトが表示されます(列は、読み込んだ画像です)。

プロジェクトのトップ画面
データはどこに保存されている?

label-image起動時に表示されるメッセージに保存場所が表示されています。MacOSで起動した場合は、以下のようなメッセージが表示されていました。実際に、フォルダに移動するとSQLデータベース等が格納されていました。

=> Database and media directory: /Users/hogehoge/Library/Application Support/label-studio

アノテーション

一覧で、列をクリックするとアノテーション画面になります。ここで、アノテーションを行います。

ラベル名をクリックするか、ラベル番号に対応する数字キーをクリックすることで、枠を作成するモードになります。マウスで枠を作成すると、枠を生成できます。

枠を修正したい場合は、枠をクリックすると修正用のガイドが表示されます。枠を修正したら、uキーで選択を解除できます。また、枠を削除したい場合は、backspaceを押します。

ショートカットについては、下図のメニューをクリックすることで確認できます。

ショートカット

MacOSの場合は、以下のような表示でした。

ショートカット

アノテーションが完了したら、”Submit“ボタンをクリックします。

Submit“または”Update“ボタンをクリックするのを忘れないように。

アノテーションが完了したら、プロジェクト名(下図では”test“)をクリックしてプロジェクト画面に戻ります。

プロジェクトへ戻るボタン

アノテーション結果を書き出す

右上にある”Export“ボタンを押すと、フォーマットが選択できる画面になります。ここで、書き出すフォーマットを設定して”Export“ボタンを押すと画像とアノテーション結果が書き出されます。

Exportオプション

ZIPファイルとしてダウンロードされますが、YOLOフォーマットを選択した場合は中身は以下のようになっていました。

画像ファイルの中身

アノテーション済みのデータのインポート

アノテーション済みのデータをインポートするにはLabel Studio Converterを利用するようです。

このツールを使うことで、以下のフォーマットをコンバートすることが可能です

  • JSON
  • CSV
  • CoNLL 2003
  • COCO
  • Pascal VOC XML
  • YOLO

物体検出だとCOCOとPascal VOC XML, YOLOになるかと思います。試しにYOLOデータを変換してみました。

MacOSでの動作確認になります。linuxはおそらく同じ手順でYOLOフォーマットのアノテーションデータをインポートできます

公式ドキュメント通りにいかず、何度も試行錯誤しています。環境によっては少し手順を変えないとインポートできないかもしれません。

インストール

label-studio-converterをインストールする必要があります。

pip install -U label-studio-converter

フォルダ構成

ここでは、フォルダ構成が以下のようになっていると想定して説明します。classes.txtは、各行にクラス名が書かれたテキストです。cat,dogであれば、以下のようになります。

cat
dog

また、imagesには画像データ、labelsにはYOLOフォーマットのアノテーションデータが格納されているとします。

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を選択します。

エディタが表示されるので、生成された ls-tasks.label_config.xmlの内容をここにコピーします。コピーしたらsaveをクリックします。

ローカルストレージの設定を行う

SettingCloud Storageから、Add Source Storageをクリックします

ここで、Storage TypeLocal filesにして、画像が格納されているフォルダを絶対パスで設定します。

Check Connectionをクリックしてエラーが出なければ、Saveして閉じてください。

これでローカルファイルなファイルへのアクセスの設定は完了です。

Label Studioの起動時に環境変数が正しく設定されていない場合は、ローカルストレージへのアクセスがエラーとなります。以下の2つの変数が正しく設定されているか確認してください。

LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true 
LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/xxxx/dataset

Label Studioへのデータのインポート

最後に、変換したconverted.jsonをインポートします。Importボタンをクリックして、インポートしてください。

ここまでの手順で正しい設定が行われていれば、一覧が表示されます。

サーバータイプのアプリになっているため、ローカルのデータにアクセスするのが少し手間です。このあたりはlabelimgの方が簡単です。

使ってみた感想

実際に使ってみた素直な感想は、本格的なツールで、手軽なツールではないということです。

アノテーションを本格的に行う場合は、かなり便利そうです。例えば、グループで分担してアノテーションする場合などには重宝しそうです。

ただ、「ちょっとアノテーションして学習させてみる」みたいな使い方には、少し重いです。

ただ、LabelImgの開発はストップするみたいなので、他のツールになれていくしかないかなと考えています。しばらく使ってみるとまた感想が変わるかもしれませんが、現状はそんな感じです。

まとめ

Label Studioの使い方を、物体検出タスクのアノテーションを例に説明しました。かなり多機能でつかいこなすのは大変そうです。

また、YOLOフォーマットなどのアノテーション済みのデータのインポートも少し手間そうです。

個人でちょっと使う分には、LabelImgの方が使いやすい気がします。

ただ、いろいろなタスクのアノテーションができるので、慣れればこちらもよいかもです。

おすすめ書籍

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

記事URLをコピーしました