2. 画像のアノテーションをする

次に、収集した画像に学習用の教師ラベルをつける、アノテーションという作業をします。

アノテーションについて

学習を行うには、画像に学習のための情報を付与する必要があります。
画像のどこに何があるのか、を画像とセットで与えてあげることで、学習を行うことができるようになります。
この画像内の物体の位置、名前を付与する作業をアノテーションといいます。
アノテーションは:doc:image_collection で行ったように自動化する方法もありますが、基本的には手作業が必要となります。

labelImgのセットアップ

アノテーションには専用のソフトを用います。ソフトは様々な種類がありますが、今回はlabelImgを用います。
下記コマンドでlabelImgをセットアップして起動します。
  1. labelImgをcloneする。

git clone https://github.com/heartexlabs/labelImg.git
  1. 仮想環境をセットアップする。

cd labelImg
python3 -m venv venv
. venv/bin/activate
  1. 必要なライブラリをインストールする。

pip install pyqt5==5.15.2 lxml
  1. labelImgをビルドする。

make qt5py3

アノテーションラベルを編集する

まず、これから学習させたい物体のラベル名を編集します。
labelImg/data/predefined_classes.txt を開きます。
デフォルトのラベル名が記載されていますが、全て削除して自分が使いたいラベル名に変更します。
例) "pen", "dog", "phone"を学習させたい場合
pen
dog
phone
学習させたいラベルを全て記載したら保存します。

labelImgでアノテーションをする

準備が完了したら、labelImgのディレクトリ直下で下記コマンドを実行し、labelImgを起動します。
python3 labelImg.py
下記のウィンドウが開くので、「ディレクトリを開く」で 1. 学習用のデータセットを作る で収集した画像のディレクトリを選択します。
先程の画像の一覧が読み込まれます。
../../../_images/annotation_01.jpg
保存するデータのフォーマットを「YOLO」に変更します。
../../../_images/annotation_02.jpg
「矩形を作成する」を選択し、画像内の認識させたい物体を囲むようにドラッグします。
../../../_images/annotation_03.jpg
ドラッグすると、ラベル名をつけるウィンドウが表示されるので、1でディレクトリとファイルに付けたラベル名を設定します。("pen"など)
../../../_images/annotation_04.jpg
「保存する」を押して、画像と同じ名前でアノテーションファイルを保存します。YOLOの場合は. txt 形式となります。
../../../_images/annotation_05.jpg ../../../_images/annotation_06.jpg
「次の画像」を押して、次の画像についても同様に行っていきます。
この作業をファイル全てに対して繰り返します。
ショートカットキーを使うことで作業を早く行うことができます。代表的なものとしては、
w: 矩形を作成する
d: 次の画像
s: 前の画像
Ctrl + s: 保存する
などがあります。その他のショートカットキーは、labelImgの「ヘルプ」→「ショートカット一覧を見る」から確認できます。

アノテーションは単純作業の繰り返しで枚数が多いほど大変ですが、ここの作業が後の学習の精度を左右します。頑張って全部の画像にアノテーションを行いましょう。
次は学習のステップに進みます。
もしnvidia GPU搭載のLinux PCがない場合は、Google Colabを使ってクラウド上で学習する 3. 学習を行う(Google Colab上で行う場合) を実行してください。こちらはAKARIのブラウザ上でも実行可能です。
ただ、Google Colabは無料版ではアクセス数が一定以上になると処理が中断されるなど、安定して学習が行えない場合があります。ご注意ください。
nvidia GPU搭載のLinux PCを持っている場合は、PC上で学習する 3. 学習を行う(GPU搭載のPC上で行う場合) を実行した方が、学習が早く安定します。

3. 学習を行う(Google Colab上で行う場合) へ進む

3. 学習を行う(GPU搭載のPC上で行う場合) へ進む

1. 学習用のデータセットを作る へ戻る