Annotationツール

SSDやYOLOなど種々の物体検出のアルゴリズムがありますが、それらを自分の関心のある問題に適用しようと思うと、問題に合わせた教師データにより学習する必要があります。そして、そのためには教師データを用意する必要があるわけですが、それを行うAnnotationツールはというと、

List of manual image annotation tools - Wikipedia

たくさんあります。どれがいいのだろう、、と思い、いくつか実際に試してみました。

まず、それぞれのツールのgithubレポジトリで、スターの数、コミット数、最新コミット日時等を見て、以下をピックアップしました。



  1. tzutalin/labelImg: LabelImg is a graphical image annotation tool and label object bounding boxes in images


    • ★ 3825, Watch 208, Fork 1438 (as of 2018/7/4)

    • 292 commits, last commit on 2018/6/15.




  2. Labelbox/Labelbox: The most versatile data labeling platform for training expert AI.


    • ★ 461, Watch 25, Fork 73 (as of 2018/7/4)

    • 571 commits, last commit on 2018/6/28.




  3. Microsoft/VoTT: Visual Object Tagging Tool: An electron app for building end to end Object Detection Models from Images and Videos.


    • ★ 527, Watch 46, Fork 122 (as of 2018/7/4)

    • 410 commits, last commit on 2018/5/17.




  4. annotorious/annotorious: Image Annotation for the Web - Annotorious Core Library


    • ★ 471, Watch 48, Fork 127 (as of 2018/7/4)

    • 589 commits, last commit on 2018/5/14.



  5. Visual Geometry Group / via · GitLab


    • ★ 29 (as of 2018/7/4)

    • 478 commits, last commit on 2018/6/15.




  6. virajmavani/semi-auto-image-annotation-tool: Anno-Mage: A Semi Automatic Image Annotation Tool which helps you in annotating images by suggesting you annotations for 80 object classes using a pre-trained model (上記のリストにはないけど、見かけて気になったので)


    • ★ 166, Watch 9, Fork 29 (as of 2018/7/4)

    • 42 commits, last commit on 2018/6/15.




比較

主に、主観に基づく比較です。

(2019.2.1追記) 以前VoTTを試したときはうまく動作しなかったが、別のPCで試したところ、正常に使えたので、コメントを修正。


1. labelImg


  • アプリタイプ: コマンド起動またはDesktopアプリ

  • LICENSE: MIT

  • 入力フォーマット: ローカルファイル

  • 出力フォーマット: PascalVOC及びYOLOフォーマット


  • コメント: アイコン付きアプリにするために、少し戸惑った。

    pyenv uninstall 3.6.5
    
    env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.6.5
    pip install virtualenv


  • UI所感: 過不足のない感じで使いやすい。矩形領域選択時に出る補助線が良い。画像端まで選択すると、truncatedフィールドを1にしてくれる。クラスのインクリメンタルサーチもできて便利。ショートカットキーも便利。

    スクリーンショット 2018-07-05 0.44.48.png



2. Labelbox


  • アプリタイプ: Webサービス

  • LICENSE: Apache-2.0

  • 入力フォーマット: ローカルファイル、クラウド(URIのリストで指定する)

  • 出力フォーマット: 独自形式。レポジトリにあるツールでPacaslVOC, COCO形式に変換できる。

  • UI所感: マテリアルデザインベース。作り込んであるけど、使いこなすには慣れが必要そうな印象。フロントエンドUIが3種類用意されていて、そのうちの1つがAnnotation用になっている。ただしポリゴンで領域を指定する形式。独自にUIを作成して追加できる。
    スクリーンショット 2018-07-03 13.28.59.png


3. VoTT


  • アプリタイプ: Electronアプリ

  • LICENSE: MIT

  • 入力フォーマット: ローカルファイル

  • 出力フォーマット: PascalVOC, YOLO, TFRecordを含むいくつかの形式。

  • コメント: maxOS High Sierra上で動かしていて、はじめの方でボタンが反応しなくて進めなくなった。
    (2019.2.1追記) 試せていないが、アクティブラーニングが利用できる。学習済みモデルの用意などのハードルを超えれば、大きな作業効率化が図れそう。

  • UI所感: 進めなかったので未確認。Continueを押しても何も反応せず。
    (2019.2.1追記) 全体的にUIがきれいで使いやすい印象を受ける。矩形選択時に補助線がある。各種ショートカットキーが定義されているため、効率よくアノテーションができる。ただし、ラベルへのショートカットの割り当ては10個までのため、それ以上のラベルがある場合は、カーソルで選択する必要がある。また、クラス数が多くなると(表示領域で3行を超すぐらい)、ラベルの表示領域に入り切らなくなり、選択が困難になる。スクリーンショット 2019-02-01 14.50.51.png


4. annotorious


  • アプリタイプ: Webアプリ

  • LINCENSE: MIT

  • 入力フォーマット: HTML内に<img>タグで指定。

  • 出力フォーマット: そのままでは出力されない。JavaScript APIで提供されているonAnnotationCreated(annotation)などで、出力処理を書く必要がありそう。

  • コメント: UIだけのようなので、画像データの供給や、出力を自分で実装しないといけない。また、プロジェクトが現在unsupportedになっている。

  • UI所感: シンプルで、編集や削除はしやすい。
    スクリーンショット 2018-07-05 0.48.13.png


5. via


  • アプリタイプ: Web

  • LICENSE: BSD 2-Clause “Simplified” License

  • 入力フォーマット: ローカルファイル、URL、URIのリストファイル。ワイルドカードで多数のローカルファイルを選択すると、読み込むまでに時間がかかった。

  • 出力フォーマット: 独自形式のJSON

  • UI所感: 必要な機能は揃っているが、使いにくさを感じた。クラスの登録が手間。領域が画像からはみ出すと選択されないため、手ではみ出さないように調整しないといけない。
    スクリーンショット 2018-07-05 0.50.35.png


6. semi-auto-image-annotation-tool


  • アプリタイプ: コマンドで起動

  • LICENSE: Apache-2.0

  • 入力フォーマット: ローカルファイル

  • 出力フォーマット: 独自形式(path, x1, y1, x2, y2,category)

  • コメント: Deep Learningでオブジェクトの推定ができる。

  • UI所感: 使いにくさを感じた。画像境界のチェックがされない。saveボタンを押すと、追記保存されるため、重複する。
    スクリーンショット 2018-07-05 0.52.43.png


まとめ

今回比較した中では、labelImgが最も良かったです:sparkles: 適度にシンプルかつ必要な機能は揃っていて、効率よくAnnotationができそうに感じました。PascalVOCで出力できるのを探していたので、その点でも良いです。Webベースだと個人的にはもっと良かったです。ポリゴンでAnnotationしたい場合は向かなそうです。

その次に良さそうと思ったのはviaです。UIが微妙に使いにくく感じましたが、必要な機能は揃っている感じでした。PascalVOC等のフォーマットへは、自分で変換する処理を書かないといけなそうです。

(2019.2.1追記) VoTTを試すことができましたが、UIがきれいで非常に良かったです。クラス数があまり多くなければ、こちらのほうが効率よく作業できるかも。

Labelboxは、UIの独自開発も視野に入れて、ガッツリ使い込む場合には良いのかもしれないと感じました。ただその場合は、有料プランで使うことになりそうです。

以上、Annotationツールの比較でした。参考になれば幸いです。