この記事ではOriented Bounding Boxのアノテーションについて解説します。Oriented Bounding Boxとは通常のBounding Boxと異なり、長方形の角度が自由に設定できるBounding Boxです。一方通常のBounding Boxは長方形の角度がXY軸に対して常に平行です。
下の図は、左が通常のBounding Boxで、右がOriented Bounding Boxです。通常のBounding Boxは錠剤と一緒に余白あるいは別の物体が多く囲まれていますが、Oriented Bounding Boxは錠剤だけを囲むことができているのが分かります。
環境
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 lxml
Code 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.txt
Code 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座標、幅、高さ、角度となっています。
以上です。