RCNN (Regional Convolutional newral networks)などの機械学習モデルを使って画像から物体検出するには、"どこ"に"なにが"あるのか、すなわちバウンディングボックスの四角の座標(x, y)および正解ラベルが画像とセットで必要となります。
10000枚単位の画像が欲しい場合、自力で集めるのは大変なので、Pascal VOCのようなコンペで公開されている過去のトレーニング用データセットを流用しますが、それだけでは足りなかったり、自分が検出したい物体がなかったりします。
そんなときにPascal VOCに存在しない正解データを自分で追加して、一緒に学習させたい場合は、Pascal VOCのデータセットと同一形式のアノテーションデータを用意すると一緒に処理できて便利です。
例えばこの画像だと、黄枠のバウンディングボックスの中に車と人間がいます。
これがPascal VOCのトレーニング用データセットではxmlで
のようにしてアノテーション情報が書き出されています。
データセットはたとえばここでダウンロードできます。(500MBほどあるので注意)
ここでxml上で指定されている座標(xmnin, xmax, ymin ,ymax)の単位はピクセルで、最も左上のピクセルが(1,1)です。
各データの定義の詳細はこちら↓。
The PASCAL Visual Object Classes Challenge 2007 (VOC2007) Development Kit
自前のデータセットに対してアノテーションxmlを生成したかったのですが、なんかいい感じのツールないかなと思ってネットの海をサーフィンしているといい感じのやつが見つかりました。
手動でアノテーションした結果が、Pascal VOCと同等の形式のxmlとして吐き出されます。
インストール
まず、下準備として、依存ライブラリをインストールします。
- Pyqt4
Riverbank | Software | PyQt | PyQt4 Download
- lxml
Windowsの方は
lxml 3.3.5 : Python Package Index
からインストーラを落とした方が早いです。pipは依存ライブラリが入らないのでめんどくさい。
使い方
labelImgGUIディレクトリに入り
$ python labelImg.py
でGUIツールを立ち上げます。
後はOpenで画像を開いて、左クリックでアノテーション領域を指定して、Saveでアノテーション結果をxmlで出力します。簡単です。
PascalVOCを見ると1クラスあたり数百オーダーの画像なので、人間ディープラーニングとなってしこしこ手作業でアノテーションしてたら1クラス1日くらいでなんとかなる気がします。