Oriented Bounding Box – Annotation

Annotation

この記事ではOriented Bounding Boxのアノテーションについて解説します。Oriented Bounding Boxとは通常のBounding Boxと異なり、長方形の角度が自由に設定できるBounding Boxです。一方通常のBounding Boxは長方形の角度がXY軸に対して常に平行です。

下の図は、左が通常のBounding Boxで、右がOriented Bounding Boxです。通常のBounding Boxは錠剤と一緒に余白あるいは別の物体が多く囲まれていますが、Oriented Bounding Boxは錠剤だけを囲むことができているのが分かります。

https://blog.roboflow.com/content/images/2022/05/pills_in_bounding_box-1.png
https://blog.roboflow.com/content/images/2022/05/pills_in_oriented_bounding_box-1.png

環境

Ubuntu20.04を使用します。

セットアップ

アノテーションツールのセットアップを行います。アノテーションツールはlabelImg2を使用します。似たツールとしてlabelImg_OBBがありますが正しく動作しませんでした。

sudo apt update
sudo apt-get install pyqt5-dev-tools python3-pip
git clone https://github.com/chinakook/labelImg2
cd labelImg2
python3 -m pip install lxmlCode language: Bash (bash)

データ

アノテーションの練習として画像をlabelImage2のdataフォルダにダウンロードし、"car"だけ存在するクラスファイルを用意します。

wget https://img.freepik.com/premium-photo/aerial-view-of-many-colorful-cars-parked-on-parking-lot-in-evening_127089-18411.jpg?w=1800 -O data/car-parking.jpg
echo car > data/classes.txtCode language: Bash (bash)

アノテーション

labelImage2を起動します。

python3 labelImg.py data/ data/classes.txt data/Code language: Bash (bash)

1番目のdata/は画像データディレクトリを指定します。2番目のdata/classes.txtはクラスファイルです。クラスファイルは分類するクラス1行ごと指定したファイルです。3番目のdata/はアノテーション結果を保存するディレクトリを指定します。

labelImage2を起動すると以下のように表示されます。

アノテーションはEdit > Create RotatedRBoxを選択、もしくはキーボードの"e"押しOriented Bounding Boxを作成ます。左ドラッグで枠を囲い、右ドラッグで枠を回転させます。

Ctrl+Dで枠を複製できます。またCtrl+マウスホイールで拡大縮小ができます。

Ctrl+sを押しアノテーションファイルを保存します。最終的に以下のようになります。

このアノテーション作業ではクラスの種類が"car"の1つの為クラスを選択する必要がありませんでしたが、複数のクラスをアノテーションする場合は適切なクラスを選択する必要があります。

アノテーションファイル

アノテーションファイルdata/car-parking.xmlが作成されているのが確認できます。以下にdata/car-parking.xmlを一部抜粋します。

	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<robndbox>
			<cx>343.0944</cx>
			<cy>715.3419</cy>
			<w>123.0101</w>
			<h>59.9565</h>
			<angle>0.459784</angle>
		</robndbox>
		<extra/>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<robndbox>
			<cx>375.0944</cx>
			<cy>659.3419</cy>
			<w>123.0101</w>
			<h>59.9565</h>
			<angle>0.459784</angle>
		</robndbox>
		<extra/>
	</object>Code language: HTML, XML (xml)

<object>...</object>がアノテーション作業で作成したOriented Bounding Boxと同じ数存在します。<robndbox>...</robndbox>の中に<cx>、<cy>、<w>、<h>、<angle>がありそれぞれ、Orineted Bounding Boxの中央のx座標、中央のy座標、幅、高さ、角度となっています。

以上です。

参照