フリー素材で遊びながら理解するディープラーニング精度向上のための画像データ水増し(Data Augmentation)手法

f:id:karaage:20190705015928p:plain:w640

画像データ水増し(Data Augmentation)手法

 Data Augmentation(データの水増し)は、ディープラーニングの画像認識で、学習の際に精度を上げるためのテクニックです。データ水増しは、他にもデータ拡張とか言ったりします。

 具体的には、教師データの画像に対して、明るさ変更・回転等の画像処理をして、教師データを増やして、カメラの変動に対して性能を向上させます(変動に対して強いことをロバスト性が高いと言ったりします)。

 TensorFlow(Keras)で物体判別をする際のData Augmentationに関しては、多くの解説例があります。特に id:aidiary さんのものが分かりやすいです。

 同じことをしても仕方ないので、今回はあまりネットに情報無かったTensorFlowのObject Detection APIでの物体検出のData Augmentationが何をしているかを、実際に動かしながら確認していきます。

 確認方法に関しては、コマンドの羅列になり知らない人には退屈(宇宙語)なのでQiitaに投稿しました。興味ある方はご覧下さい。Mac/Linuxでの動作を想定しています。WindowsでもPythonのセットアップ部分をWindowsに合わせて修正すれば動くと思います(未確認)。

 ここからは、データ水増しした結果のみを紹介していこうと思います。

 素材としては、おなじみの優良なフリー素材「変デジ研究所」のロンスタさんです。

 ここに書いてあることの意味が良くわからないという人は、とりあえずロンスタさんの12変化をお楽しみ下さい。

f:id:karaage:20190704020457j:plain:w480

データ水増し結果

 ここからData Augmentationで画像加工した結果を載せていきます。以下の点ご了承下さい。

  • Object Detection APIのData Augmentation機能のうち代表的なものを紹介(全てでは無いです)
  • パラメータは一部、分かりやすくするためデフォルト値から修正

 詳細は、今回の画像加工に用いた以下のJupyter Notebookを見てもらえれば、分かる人には分かると思います。

Normalization(正規化)

f:id:karaage:20190706014329p:plain:w480

 RGB値をとある範囲内に正規化します。デフォルトだと0〜255を0〜1.0に正規化します。ここでは効果を分かりやすくするため、0〜255を63〜127に正規化しています。

Horizontal Flip(左右反転)

f:id:karaage:20190705015743p:plain:w640

 左右反転です。代表的なものです。

Vertical Flip(上下反転)

f:id:karaage:20190705015810p:plain:w640

 上下反転です。

Rotation90(90度回転)

f:id:karaage:20190705015825p:plain:w640

 90度回転です。

Pixel Value Scale(ピクセルノイズ?)

f:id:karaage:20190705015835p:plain:w640

 ノイズ的なものが加わっている?

Image Scale(画像サイズ変更)

f:id:karaage:20190705015841p:plain:w640

 様々なサイズの変換です。

Rgb to Gray(モノクロ変換)

f:id:karaage:20190705015849p:plain:w640

 モノクロ画像の変換です。

Adjust Brightness(明るさ調整)

f:id:karaage:20190705015903p:plain:w640

 明るさ調整です。分かりやすくするため、パラメータをデフォルトより強目にしています。

Adjust Contrast(コントラスト調整)

f:id:karaage:20190705015911p:plain:w640

 コントラスト調整です。分かりやすくするため、パラメータをデフォルトより強目にしています。

Adjust Saturation(彩度調整)

f:id:karaage:20190705015919p:plain:w640

 彩度調整です。分かりやすくするため、パラメータをデフォルトより強目にしています。

Distort Color(歪んだ色?)

f:id:karaage:20190705015928p:plain:w640

 なかなか強烈な加工です。個人的にはベスト(面白さ的に)。

Black Patches(黒パッチ)

f:id:karaage:20190705015936p:plain:w640

 分かりづらいですが、海苔みたいな黒い四角がランダムに写真を覆っています。

 恐らく、Random EragingやCutoutと呼ばれるData Augmentation手法と思います。以下のQiita記事が分かりやすかったです。

 論文は以下です。こちらは、まあいずれ読むかも…

[1708.04896] Random Erasing Data Augmentation

[1708.04552] Improved Regularization of Convolutional Neural Networks with Cutout

まとめ

 データの水増しに関して、実際に試しながら理解を深めてみました。調べると、色々なテクニックがあって中々奥深い世界ですね。GANの自動生成で水増しするテクニックもあるみたいですけど、そこまでやると、凄い遠回りしている感がありますね。

 簡単な画像処理の確認をしただけですが、実際に手を動かして可視化すると、理解が深まりますし、生TensorFlowの基礎練(?)みたいになるので良いですね。自分的には色々発見ありました。

 ディープラーニングでの画像認識や、GANでの自動生成に関して、有料noteでチュートリアルを公開しているので、もし興味あればご参考まで。

参考リンク

用意した画像は一枚だけ!?物体検出で将棋駒の認識 - Qiita

PCA Color Augmentationを使ってみよう - Qiita

models/preprocessor.py at master · tensorflow/models · GitHub

TensorFlowを使った画像の水増しレシピまとめ

How to Configure Image Data Augmentation in Keras

NumPyでの画像のData Augmentationまとめ - kumilog.net

関連記事