Edited at

labelImgとChainerCVを使ってアノテーション作業を楽にする

More than 1 year has passed since last update.


あらまし

近年、研究者たちは、創造的な仕事を奪われ、AIのためにひたすら「アノテーション※」という儀式を繰り返していた・・・。

これは、そんな「アノテーション」を少しでも簡単にしようとした物語である。

※アノテーション(英語:annotation)

 あるデータに対して関連する情報(メタデータ)を注釈として付与すること。

 XML等の記述形式を用いてメタデータをタグ付けする場合が多い(Wikipediaより)。

※注意

 本記事にて、対象とする「アノテーション」とは、画像からの物体検出に使用するアノテーション方法です。

 画像中の物体名(ラベル)と物体の位置(物体を囲む矩形)の情報をアノテーション情報として記録します。


1 labelImg

世の中には、便利なものがたくさんありますが、

今回注目したのは、「labelImg」というツールです。

Github: https://github.com/tzutalin/labelImg


1.1 特徴


  • 矩形がPascal VOC形式とYOLO形式で出力できる

  • 矩形を付与する際に、補助線が出る(なにげに助かる機能)

  • 一度出力したxmlファイルを(自動で)再読み込みしてくれる

これは!使える!(詳細は以下)


1.2 インストールと実行方法

作者のGitHubにも載っていますが、一応書いておきます。


Python 3 + Qt5

git clone https://github.com/tzutalin/labelImg.git

cd labelImg
sudo apt-get install pyqt5-dev-tools
sudo pip3 install lxml
make qt5py3
python3 labelImg.py


1.3 使い方

python3 labelImg.py を実行すると、以下の画面が表示されます。



  • OpenOpen Dirで画像または画像の入っているディレクトリを指定すると画像が表示されます。


  • Create RectBoxを押すと矩形をプロットできるようになるので、矩形をプロットします。

  • 矩形をプロットすると、ラベルの選択画面が表示されるので、矩形で囲った物体のラベルを選択します。

  • Saveでアノテーション結果が保存できます。


    • AutoSave機能もあります(オプションで設定できます)。




2 便利機能

ここまでは、普通のアノテーションソフトですが、このlabelImgというソフトは、「一度出力したxmlファイルを(自動で)再読み込みしてくれる」機能があります。

ということは、手持ちの物体検出アルゴリズムで物体検出をかけた出力結果をPascal VOCフォーマットで保存すれば、画像のアノテーション処理が半自動化できます。


2.1 実際にやってみた

ChainerCVのexampleにあるSSDの検出処理を少し改良し、画像に物体検出処理をかけ、

結果をPascal VOCのフォーマットで出力するプログラムを作成しました。

プログラムはGitHubにあげておきました。

まだ、機能としては入力がJPG画像で、出力がPascal VOCフォーマットだけですが、、、

アノテーションデータ生成:https://github.com/wakaba130/create_annotation

使用方法などは、GitHubに書きました。

わかりにくいなどあれば、こちらのコメントに記載いただいても対応します。


2.2 出力について

出力フォーマットは以下のとおりです。

pathの部分が本家のPascal VOCにはなく、labelImgの仕様だと思われます。

<annotation>

<folder>hogehoge</folder>
<filename>image.jpg</filename>
<path>/home/hogehoge/image.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>1125</width>
<height>1600</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>person</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>4</xmin>
<ymin>143</ymin>
<xmax>947</xmax>
<ymax>1600</ymax>
</bndbox>
</object>
</annotation>


2.3 作業の流れ


  1. アノテーションする画像を1つのディレクトリにまとめる


  2. create_ano.pyを使用して、一度認識にかける

  3. labelImgを起動し、create_ano.pyで出力されたディレクトリを指定する

  4. Let's annotation


3 最後に

アノテーションは、みんな困っているが、「そこまで作りこむか?」って感情もあり、

なかなか「これだ!」って納得するソフトはなかなか見つからないですね・・・

今回紹介したlabelImg以外にも、「これが便利だよ!」ってツールがあればご紹介いただければ幸いです。