OpenCV
機械学習
画像認識
dlib

アノテーションツール(正解入力ツール)が進化している。

オブジェクト検出器を作るときは、正解データを入力する作業がある。そういった作業をアノテーションと呼ばれている。

昔のアノテーションの状況

この作業が実に面倒だった。

  • マウスで領域の指定をして結果を保存するツールを部署ごとに自作していた。
  • 入力結果を保存するファイル形式が標準化されていない。
  • ツールの中で途中で作業の打ち切りや再開が難しい。
  • 入力作業中に間違えたときの取り消し、やり直しがきかない。
  • 最終結果ファイルが意図した内容になっているのかの確認がむずかしい。

dlibのアノテーションツール

そのような状況が変わっていることをdlibのオブジェクト検出器の学習用のツールで実感した。

dib/tools/imgLab https://github.com/davisking/dlib/tree/master/tools/imglab

  • dlibの中でオブジェクト検出器の学習用に必要なアノテーションツールが提供されている。
  • dlibのオブジェクト検出器の学習に使えるファイル構造としてxmlを標準化している。
  • そのアノテーションツールでは、作業をするファイルを任意の場所から選べる。
  • また、間違えた部分があったときに、エディタでそのXMLファイルを修正がしやすい。
  • 結果のXMLファイルを表示させると、画像にアノテーションされた矩形が表示される。
    • XMLファイルに画像自体とその上に矩形を表示させる枠組みとしてimage_metadata_stylesheet.xslが用意されている。

その実際の使い勝手は、dlibでのsimple_object_detectorの学習手順を示している次の記事が参考になるだろう。

HOG特徴とSVMによる物体検出

imglabを使ってよいと思った点

  • XMLファイルに書き込んだ結果を元にしたオブジェクトの枠を ブラウザ上で表示できる。
  • この枠を重ね書きした画像をファイルとして一時的に作成する必要がない。
  • このため、ディスクスペースを無駄に使うことがない。
  • また、ファイルがあれば整合性がとれているのかバージョン管理などの問題を生じるが、その都度XMLファイルから読み込んで枠を表示させるのだから、そのような問題を生じない。

検出結果の表示にしても同じようにXMLファイルで結果を表示すれば、
検出結果をXMLファイルでだけ保存すればよく、検出結果を重ね書きした画像ファイルを別途保存する必要がなくなる。

OpenCV にあるopencv_annotation

https://github.com/opencv/opencv/blob/master/apps/annotation/opencv_annotation.cpp

その他のアノテーションツール

以下のツールがあるが使ったことがないので、コメントができない。

sloth https://github.com/cvhciKIT/sloth
LEAR
labelMe http://labelme.csail.mit.edu/Release3.0/
labelImg https://github.com/tzutalin/labelImg

物体検出用の画像アノテーション正解データ生成に便利なツール
https://github.com/tzutalin/ImageNet_Utils

qiita 物体認識用データセット作成支援ツール(Faster R-CNNとかSSDとか)