"BOKU"のITな日常

62歳・文系システムエンジニアの”BOKU”は日々勉強を楽しんでます

ImageAugmentationレイヤーで画像を加工した結果を確認する/Neural Network Consoleの使い方

ディープラーニングの学習データは量が必要です。

なので、データ量が少ない時には、画像にランダムな変化を加えて、1枚の画像から複数の画像を生成して学習データの水増しをしたりします。

 Neural Network Consoleにも、そういうレイヤーがあります。

それが、「ImageAugmentation」です。。

今回は、その処理結果を視覚で確認して、水増しするイメージをつかんでみます。 

f:id:arakan_no_boku:20190326212937j:plain

 

出力画像イメージを確認するネットワークモデル

 

ニューラルネットワークコンソールを立ち上げます。

f:id:arakan_no_boku:20170902235819j:plain

New Projectを作って、とりあえず名前をつけて保存しておきます。

 

EDITタブ(レイヤー構成)

 

EDITタブで、以下の3つのレイヤーをドロップします。

  • input
  • ImageAugmentation
  • SquaredError

Shiftキーを押しながら、クリックして、線でつなぎます。

f:id:arakan_no_boku:20170905223600j:plain

最後の「SquaredError」は回帰問題でよく使うレイヤーですが、学習回数0回指定で使うと、処理結果を直接確認する用途に使えます。 

レイヤーリファレンスにはこんな感じで書いてあります。

ImageAugmentationの効果の手軽な確認方法として、画像Input→ImageAugmentation→SquaredErrorだけのネットワークを用いた上でMax Epoch 0として学習し、評価実行ボタンにより加工結果をモニタするという方法があります。 

 

 

DATASETタブ

 

f:id:arakan_no_boku:20170905224643j:plain

 

右上の「Open Dataset」ボタンを開いて、任意のデータを選択します。 

今回は、前回作成した独自データ・セットを例にしていますが、MNISTでもいいです。 

注意点は、trainingとvalidationで全く同じデータ・セットを選択することです。 

今回はアウトプットを確認するだけですから。

 

CONFIGタブ

 

ここで「Max Epoch」を「0」にしてください。

f:id:arakan_no_boku:20170905225221j:plain

 これで準備OKです。

 

インプット画像がどう変化するか見ていく

 

あとは、「ImageAugmentation」のパラメータを変更しながら、インプット画像がどう変化するか見ていくことにします。 

 

ImageAugmentationのパラメータ

 

EDITタブにもどって、「ImageAugmentation」を選択して、左側にパラメータ設定を表示させます。

f:id:arakan_no_boku:20170905225931j:plain

 

サイズ変更

 

最初は、サイズ変更をやってみます。

MinScale を 1.0→ 0.8、MaxScaleを1.0→1.5 に変更してください。 

こうすると、0.8倍~1.5倍の間でランダムに拡大縮小するはずです。 

上書き保存して、学習(training)ボタンを押し、学習が終了したら評価(evaluation)ボタンを押します。

f:id:arakan_no_boku:20170905232247j:plain

 

結果画面で確認します。 

注意しないといけないのは、最初、こんな感じで表示されますが、このimageは入力画像がそのまま表示されているだけで、加工後ではないということです。

f:id:arakan_no_boku:20170905232740j:plain

右側に横スクロールしてください。

f:id:arakan_no_boku:20170905233024j:plain

 

そうすると、右端に「y'」のヘダーの画像が表示されています。 

これが加工後の画像です。 

比べてみますね。

f:id:arakan_no_boku:20170905233557j:plain

 

左が元画像で、右が加工後画像です。 

拡大縮小されてますね。 

 

Angle

 

じゃあ、次はMinScaleと、MaxScaleを1.0に戻して(別に戻さなくてもいいですが、わかりやすくするため)、下の「Angle」を。0.52に変更してみます。 

Angleは指定した数字に対応する角度のプラス方向からマイナス方向の範囲内の角度にランダムに傾けます。 

ちなみに、「0.26」は15度(計算式:15度/360度 × 2π)なので、「0.52」は30度になります。 

上書き保存、学習、評価の結果はこんな感じです。

f:id:arakan_no_boku:20170905234547j:plain

 傾いてますね。

 

FlipLRとFlipUD

 

それじゃあ、Angleを0.0の初期値に戻して、今度は、FlipLRとFlipUDを、falseからTrueに変更します。 

これはランダムに左右反転(FlipLR)や上下反転(FilpUD)を行うパラメータです。 

上書き保存、学習、評価の結果はこんな感じです。

f:id:arakan_no_boku:20170905235337j:plain

 見事に反転してますね。

 

Distotion

 

他にも、Britenessとか明るさや輝度を加工するパラメータはありますが、ハードコピーで見るといまいちわかりづらいので、明確なものだけ、この記事では書いて、あとは実際に触ってみてのお楽しみでよいのじゃないかと考えてますので。 

Distotionはランダムに歪ませる機能です。 

とりあえず、0.5 くらいで試してみます。 

数字を大きくしすぎると、わけがわからくなるので。 

上書き保存、学習、評価の結果はこんな感じです。

f:id:arakan_no_boku:20170906000517j:plain

 歪んでますね。

 

まとめ

 

わかりやすくするために、ひとつひとつ指定してやりました。 

でも、当然複数のパラメータを組み合わせてもOKです。 

ただ、「ImageAugmentation」を通すことによって、1枚の画像のバリエーションを増やせるイメージはわかると思います。

ちなみに、これをImageAugmentationを通して内部的に水増しするのではなく、事前に画像を水増ししてみるというのも、実はやってます。

arakan-pgm-ai.hatenablog.com

よろしければ、こちらもどうぞ。

ではでは。