【Deep Learning】アノテーションツール labelImg

前回のDeep Learning記事は以下参照
buffalokusojima.hatenablog.com

今回は少し道を外れて、画像データ作成のツールであるlabelImgの紹介です。

インストールはググると出てきます。一応以下参照

git clone https://github.com/tzutalin/labelImg.git
cd labelImg
sudo apt-get install pyqt5-dev-tools
sudo pip3 install lxml
make qt5py3


python labelImg.pyで、アプリが起動します。

labelImg_display
labelImg操作画面

基本的にフォルダ内の画像をどんどんアノテーションしていくと思うので、Open Dirを選択して対象のフォルダを開きます。
アノテーションの座標ファイルの保存先はChange Save Dirで選択します。

Next Image、Prev Imageで画像の切替を行います。アノテーションが保存されてない場合はWarningが出るのでうっかり移動してしまうこともないです。

アノテーションの形式はYoloPascal Voc
です。ここでは、Keras-yolo3に合うフォーマットがないですが、情報量の多いPascalVocを選択します。こちらはxml形式で座標ファイルが作成されます。


さて、実際のアノテーション操作ですが、まずはCreate RectBoxを選択してカーソルを表示します。

labelImg_cursol
アノテーション開始

マウスをクリックしたまま、領域を広げて離すと、表示された領域がアノテーション領域と認識されます。
ラベル付けのポップアップが出るのでラベル名を選択または新しく入力します。デフォルトのラベルが下の方に表示されていますがこちらはdataフォルダ内のpredefined_classes.txtを編集することで設定出来ます。

labelImg_annotation
ラベル付け

この状態でSaveしてみます。

作成されたxmlファイルを見てみると以下のようになってます。

<annotation>
	<folder>image</folder>
	<filename>sample1.jpg</filename>
	<path>keras-yolo3/image/sample1.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>510</width>
		<height>340</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>リンゴ</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>57</xmin>
			<ymin>96</ymin>
			<xmax>252</xmax>
			<ymax>311</ymax>
		</bndbox>
	</object>
</annotation>

ここから必要な情報を取得して、keras-yolo3の形式に変換するところを次回説明しようかと思います。