アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

画像にランダムな変化を加えるImageAugmentationレイヤーを使ってみる/使い方10:Neural Network Console

画像の学習効率をあげるために、inputデータに加工を加えるレイヤーがいくつか、ニューラルネットワークコンソールには用意してあります。 

そのうちのひとつ、「ImageAugmentation」は、入力画像をランダムな変化を加える機能があるということです。 

正直、これを前処理に使うことで、どういうメリットがあるのかはわからないのですけど、とりあえず画像の加工結果がどんな感じになるか、確認してみたら面白いんじゃないかと思っています。 

 

じゃあ、やってみます。

 

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

f:id:arakan_no_boku:20170902235819j:plain

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

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

  • input
  • ImageAugmentation
  • SquaredError

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

f:id:arakan_no_boku:20170905223600j:plain

この「ImageAugmentation」が、入力画像にランダムな変化を加えてくれるレイヤーになります。 

最後の「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」のパラメータを変更しながら、インプット画像がどう変化するか見ていくことにします。 

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」を。0.52に変更してみます

 

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

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

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

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

f:id:arakan_no_boku:20170905234547j:plain

 傾いてますね。

 

Angleを0.0の初期値に戻して、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から続けて読んでもらうのをオススメします。

arakan-pgm-ai.hatenablog.com

 

f:id:arakan_no_boku:20170910161122j:plain