ディープラーニングの学習データは量が必要です。
なので、データ量が少ない時には、画像にランダムな変化を加えて、1枚の画像から複数の画像を生成して学習データの水増しをしたりします。
Neural Network Consoleにも、そういうレイヤーがあります。
それが、「ImageAugmentation」です。。
今回は、その処理結果を視覚で確認して、水増しするイメージをつかんでみます。
出力画像イメージを確認するネットワークモデル
ニューラルネットワークコンソールを立ち上げます。
New Projectを作って、とりあえず名前をつけて保存しておきます。
EDITタブ(レイヤー構成)
EDITタブで、以下の3つのレイヤーをドロップします。
- input
- ImageAugmentation
- SquaredError
Shiftキーを押しながら、クリックして、線でつなぎます。
最後の「SquaredError」は回帰問題でよく使うレイヤーですが、学習回数0回指定で使うと、処理結果を直接確認する用途に使えます。
レイヤーリファレンスにはこんな感じで書いてあります。
ImageAugmentationの効果の手軽な確認方法として、画像Input→ImageAugmentation→SquaredErrorだけのネットワークを用いた上でMax Epoch 0として学習し、評価実行ボタンにより加工結果をモニタするという方法があります。
DATASETタブ
右上の「Open Dataset」ボタンを開いて、任意のデータを選択します。
今回は、前回作成した独自データ・セットを例にしていますが、MNISTでもいいです。
注意点は、trainingとvalidationで全く同じデータ・セットを選択することです。
今回はアウトプットを確認するだけですから。
CONFIGタブ
ここで「Max Epoch」を「0」にしてください。
これで準備OKです。
インプット画像がどう変化するか見ていく
あとは、「ImageAugmentation」のパラメータを変更しながら、インプット画像がどう変化するか見ていくことにします。
ImageAugmentationのパラメータ
EDITタブにもどって、「ImageAugmentation」を選択して、左側にパラメータ設定を表示させます。
サイズ変更
最初は、サイズ変更をやってみます。
MinScale を 1.0→ 0.8、MaxScaleを1.0→1.5 に変更してください。
こうすると、0.8倍~1.5倍の間でランダムに拡大縮小するはずです。
上書き保存して、学習(training)ボタンを押し、学習が終了したら評価(evaluation)ボタンを押します。
結果画面で確認します。
注意しないといけないのは、最初、こんな感じで表示されますが、このimageは入力画像がそのまま表示されているだけで、加工後ではないということです。
右側に横スクロールしてください。
そうすると、右端に「y'」のヘダーの画像が表示されています。
これが加工後の画像です。
比べてみますね。
左が元画像で、右が加工後画像です。
拡大縮小されてますね。
Angle
じゃあ、次はMinScaleと、MaxScaleを1.0に戻して(別に戻さなくてもいいですが、わかりやすくするため)、下の「Angle」を。0.52に変更してみます。
Angleは指定した数字に対応する角度のプラス方向からマイナス方向の範囲内の角度にランダムに傾けます。
ちなみに、「0.26」は15度(計算式:15度/360度 × 2π)なので、「0.52」は30度になります。
上書き保存、学習、評価の結果はこんな感じです。
傾いてますね。
FlipLRとFlipUD
それじゃあ、Angleを0.0の初期値に戻して、今度は、FlipLRとFlipUDを、falseからTrueに変更します。
これはランダムに左右反転(FlipLR)や上下反転(FilpUD)を行うパラメータです。
上書き保存、学習、評価の結果はこんな感じです。
見事に反転してますね。
Distotion
他にも、Britenessとか明るさや輝度を加工するパラメータはありますが、ハードコピーで見るといまいちわかりづらいので、明確なものだけ、この記事では書いて、あとは実際に触ってみてのお楽しみでよいのじゃないかと考えてますので。
Distotionはランダムに歪ませる機能です。
とりあえず、0.5 くらいで試してみます。
数字を大きくしすぎると、わけがわからくなるので。
上書き保存、学習、評価の結果はこんな感じです。
歪んでますね。
まとめ
わかりやすくするために、ひとつひとつ指定してやりました。
でも、当然複数のパラメータを組み合わせてもOKです。
ただ、「ImageAugmentation」を通すことによって、1枚の画像のバリエーションを増やせるイメージはわかると思います。
ちなみに、これをImageAugmentationを通して内部的に水増しするのではなく、事前に画像を水増ししてみるというのも、実はやってます。
よろしければ、こちらもどうぞ。
ではでは。