視覚障害支援用途の領域分割アノテーションを実施して、認識モデルに持っていくまでの馬場の忘備録。論文執筆用に引用などもメモしていきます。
令和5年3月15日現在、5000枚程度の画像アノテーションを済ませており、このvidvipデータセットを使い、推論用のモデル生成までの流れを以下にまとめます。
vidvipでは令和5年3月15日現在で、5698枚の画像に対して、99953箇所のセグメンテーションによるアノテーションが作成されています。この画像セットはvidvip object detectionと同様の画像セットや一部都立大中庭を利用したデータセットになっており、アノテーションの種類に偏りがあるunbalancedなデータセットです。本データセットの詳細は以下の通り。上から順にアノテーション数、各ラベルの登録頂点数に関する箱ひげ図、各ラベルの登録面積[pixel^2]の箱ひげ図となっている。
すでにvidvip segmentation(以下 vidvips)はYOLOのtxt形式に倣った形でラベル番号と頂点数を記述したアノテーションファイルと画像ファイルの集合で構成されている。アノテーションファイルと画像ファイルは同名ファイルであり、拡張子はそれぞれ .txt, .jpgで決め打ちしている。.jpegや.JPG, .TXT等の大文字は利用できない(自前のデータチェックスクリプトでエラー処理にするようにしている)。これらデータをpascal vocデータセットの作成手順を流用して、tensorflowで学習可能なtfrecord形式まで進めます。手順としては以下のようになります。
以下に各手順の詳細を記述します。
vidvip object detection(以下vidvipo)のときも同様であるが、一括操作の場合ファイル数があまりに多いと通常のコマンド操作では対応できないため、findコマンドを利用して一つずつコピー処理をしていく。vidvipsのデータはSegmentation/timestamp_作業者名/ の形式でデータが保存されており、これらをallディレクトリに.jpgと.txtだけ全てallディレクトリにコピーするコマンドは以下の通り。
find ./Segmentation -name *.jpg | xargs -I hogehoge cp hogehoge ./all find ./Segmentation -name *.txt | xargs -I hogehoge cp hogehoge ./all
これで少々時間はかかるが全ての画像、アノテーションファイルが ./all ディレクトリにコピーできる。
まずは imagemagick をinstall( https://imagemagick.org/script/download.php )しておく。vidvipsの画像サイズは1920×1080、1280×720等少しサイズがまちまちであるが比較的大きめの画像ファイルが多い。このまま学習に利用することもできるが、GPUメモリ無いに画像を展開する際に画像サイズが多いと、メモリが足りなくてエラーになったり、それを回避するためにバッチサイズを大きくする必要が生じる。バッチサイズを大きくすることで学習時間が長くなってしまうため、現実的なサイズで予め画像サイズを変更しておく必要がある。このページでは一律横幅600[px]に変更する。all ディレクトリに移動後、以下のコマンドにて一括で画像サイズが変更できる。
mogrify -resize 600x *.jpg
vidvipsのアノテーション形式はyolo形式を拡張したもので、馬場が勝手に定義したものです。このアノテーション情報から領域分割画像を各画像ごとに生成してしまえば良いわけです。生成プログラムを記述することも可能ですが、ここでは labelme を利用してlabelmeへのアノテーション情報変換を行うことで、領域分割画像生成を行います。このスクリプトはCSIの慎さんが作成してくれた、text2json.py を利用します。
tfrecordはtensorflowを利用して学習を行う際のデータセット形式です。deeplabやその他画像認識では必ずこのtfrecord化が必要になります。