LoginSignup
5
3

More than 5 years have passed since last update.

pix2pix(unet版)の過学習の制御は可能か??~実行編~

Posted at

計画編で目論んだのは以下のように
①pix2pix(unet版)にL1L2ノルムを導入して汎化特性を持たせよう
②pix2pix(encoder-decoder版)に層間写像を導入してさらに綺麗な画像を作ろう
って、まともな戦略だった。

結果は、簡単に言うと。。。失敗!
①のUnet版の汎化は、一層のみの層間写像でさえ、導入すると未知データの画像は壊れました。
ということで、①も②もここで失敗です。
※簡単に書きましたが一週間ほぼ回し続けての結果でマシンはメモリフルになるしですが、パラメータの特性を勉強するには適当な題材でした。

しかし、②の層間写像はあきらめたが、DropoutやL1L2ノルムの適用の調整は良い効果も見られたので以下示したいと思います。

これらの調整をやるためのコードを以下に置いておきます。
MuAuan/pix2pix_alt

Dropout及びL1L2ノルムの効果について

この両者はそれぞれ過学習の抑制として効果のある手法だとされています。
しかし、やってみるとDropoutの方が格段に効果がわかりやすいです。
ということで、以下はDropoutの効果を中心に実施したことを示すこととします。

pix2pix(encoder-decoder版)は、層間写像はしませんが、Dropoutはi<2に導入しています。これを調整しようということです。
当初は、dropout(0.5)としています。これはオリジナルのpix2pixでその値だったからです。しかし、層間写像を止めた時点で汎化特性は緩めてもいいかもしれないので、もっと小さな値にしてもいいかもしれません。
ということで、そもそもDropout無しとdropout(0.25)、dopout(0.5)、dropout(0.75)、そしてdropout(0.9)をやってみました。
200epoch回した時点でのvalidationデータでチェックしました。結果は以下の通りです。

結果

Dropout(0) 200epoch

current_batch_mayu2kitaRaw_test2.png

Dropout(0.25) 200epoch

current_batch_mayu2kitaRaw_test2.png

Dropout(0.5) 200epoch

current_batch_mayu2kitaRaw_test2.png

Dropout(0.75) 200epoch

current_batch_mayu2kitaRaw_test2.png
ということで、構造が同じ場合はあまり差がありませんが、それでもDropout(0.25)か(0)当たりが一番よさそうです。05,0.75では目が消えていきます。

Dropout(0), L1L2(0.0001) 500epoch

current_batch_kita2mayuRaw_test1.png
まあまあだが、若干壊れかけている

encoder-decoder版 1000epoch

current_batch_kita2mayuRaw_test1.png
結局、encoder-decoder版が安定して綺麗

まとめ

いろいろパラメータを動かしてvalidationデータの出力を見たが、過学習なく安定した出力はencoder-decoder版で得られた。

課題

実は、encoder-decoder版では細部が甘く、epochを回しても学習データでさえピンボケが消えない。一方、unet版の収束性は非常にいい。
ということで、議論は振り出しに戻ってしまった

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3