R&Dチーム所属の伊藤です。
最近物体検出系の画像アノテーションをする機会があったため色々なアノテーションツールを触っていたのですが、Label Studioが中々便利だったので紹介したいと思います。 今回は物体検出向けのアノテーションを実際に行なった時に詰まった部分を中心に解説していこうかと思います。
はじめに
Label StudioはHeartex社より提供されるオープンソースのラベリング・アノテーションツールです。 最近のアノテーションツールにありがちなWebアプリ形式のツールであり、基本的にはサーバを立ててブラウザからアクセスすることになると思います(一応REST APIを使用して直接アノテーション結果等を取得することも可能です)。 画像はもちろん、音声・テキスト・時系列データ等の多彩なデータのアノテーションに対応しており、それらを組み合わせたマルチドメインなタスク(例:OCR)におけるアノテーションにも対応しています。 多くのフォーマットでアノテーション結果を出力することが可能であり、例えば物体検出タスク向けにはJSON, CSV, TSV, COCO, Pascal VOC XML, YOLO形式に対応しています。
ちなみに、公式ホームページやアプリのロード画面等に出てくるマスコットはオポッサムと呼ばれる生物らしいです(参考)。かわいいですね。
今回は、物体検出のためのアノテーションを目標にしてLabel Studioを使っていきたいと思います。 例として、前回の記事である「CLIP+Faiss+Streamlitで画像検索アプリを作成してみる」で使用したThe Oxford-IIIT Pet Dataset(CC BY 4.0)から犬と猫を検出するためのアノテーションを行なっていきます。
準備
公式サイトのInstall and upgrade Label Studioを参考にインストールを行います。
今回はpipを使用してインストールを行いました。Python 3.7以降のバージョンを使っているのであれば、下記コマンドのみでインストールが終了します。
pip install label-studio
インストールが終了した後、下記コマンドを実行してhttp://localhost:8080にアクセスすることでLabel Studioのページが開きます。
label-studio
起動したら、アカウントを作成した後に画面右上のCreate
をクリックしてプロジェクトを作成しましょう。
Project Name
タブからプロジェクト名を入力し、Label Setup
タブでアノテーションのテンプレートを選択します。
今回のタスクは物体検出なので、Object Detection with Bounding Boxes
を選んでいます。
テンプレートを設定したら、物体検出のラベルを設定します。今回は犬と猫の検出が目的なので、「dog」ラベルと「cat」ラベルを用意しました。
ラベルを設定してSave
をクリックするとプロジェクトの作成が完了します。
データの読み込み
さて、次にアノテーションしたいデータの読み込みを行います。 Label Studioは様々なクラウドストレージと同期してデータの管理をすることが可能ですが、ローカルのデータをアノテーションに使う場合には少し面倒な設定をする必要があります。
ちなみに、メイン画面でImport
からデータの読み込みが可能ではありますが、個人的にはこの方法は推奨しません。
この画面からD&Dでインポートしたデータはファイル名とパスが別のものになってしまうため、アノテーション後のデータと元の画像との紐付けが出来なくなるからです。
このパスの問題を解決してローカルのデータを扱うには、データのあるディレクトリをローカルストレージとしてLabel Studioに登録する必要があります。
具体的な手順としては、まず環境変数を設定します。
export LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true export LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/home/user # ローカルストレージのルートとなるディレクトリ
この設定が終わったらLabel Studioを再起動して、プロジェクトのホーム画面から次の操作を実行します。
- Settings > Cloud Storageを選択
- Add Source Storageをクリックし、Storage TypeをLocal filesを選択
- Storage Titleを設定
- Local Pathにアノテーションしたいデータを格納しているパスを指定
(LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT
で指定したディレクトリより下のパスにすること) - Treat every bucket object as a source fileにチェックを入れる
- Check Connectionをクリックして問題がなければAdd Storageをクリックしてデータを追加する
- Sync Storageをクリックしてデータを同期
以上の手順後にホーム画面に戻るとデータ(タスク)が追加されていることが確認できます。
アノテーション
アノテーション自体は特に難しくありません。 他のアノテーションツールと同じくマウスで直感的にアノテーションが可能です。
- ホーム画面でLabel All Tasksをクリック
- アノテーションを行う
- 数字キーがラベルのショートカットになっている
- アノテーションが終了したらSubmitをクリック
全てのデータのアノテーションが終了したらホーム画面からExportをクリックすることでデータを出力できます。
最後に
Label Studioを使うまでの方法について紹介してきましたが、ほとんどがローカルのデータ同期の話になってしまった気がします。 基本的にこのようなツールは大人数で大量のデータをアノテーションすることが想定されているからか、ローカル環境で軽くアノテーションするには準備が面倒な点がいくつかありました。 ただ、アノテーションそのものについてはかなり直感的に操作できるようになっており、データのフィルタリングやソート等の機能も充実しているため、一度セットアップさえできてしまえばかなり快適なアノテーション生活が送れること間違いなしです。
自分がアノテーションを行う場合は、上記の設定に加えて機械学習モデルを使ったPre-annotationを行って作業を効率化していました。 機会があればそちらのやり方の解説もしていきたいと思います。
オプティムではアノテーションしたデータを使って新たな価値を創出するエンジニアを募集しています。