前回、ちょっと言いすぎかな。。でも検証してみても、やはり1データで学習してしまう。。。
いやいや、言い方がちょっと違うかもしれません。
汎用性は全くない。。Trainデータをしっかり覚えてくれます。
つまり、普通の意味で言うと、完全に過学習!
いくつか改変したコードを以下に置きました
MuAuan/pix2pix
pix2pixの原理
pix2pixは、普通のGANと異なり、二つの画像の関連性の真偽から学習して、習得した関連に関しては再現よく表現するというものです。したがって、利用は2つの画像ペア(画像に表せれば何でもOKだし、二つである必要も無いらしい)間の変換や途中の補完などに利用するものであるようです。
pix2pixは原理として以下の工夫をしています。
(1)pix2pixは、cGANである
条件付きという意味は、今回はもともとの画像と加工先の画像等が必要で、どっちがどっちでもいいですが、この二つの画像ペアの一致度をDiscriminatorが判断しつつ学習します。
(2)Generatorにu-netを使っている
u-netは、encoder-decoderにおいて、対象的な構造としており、対応する(相似な)中間層のパラメーターをencoderから直接decoderに渡す構造を採用しています。
※一応、普通のencoder-decoderでもよさそうですが、論文中ではよい結果は得られていないようです
(3)patchGANを利用して、L1相関を強化
論文見るとL1相関強くして、全体的な変化を均一化してDiscriminatorを欺く戦略とのこと。確かに効果が表れている根拠図が示されています。
因みに、Generatorは、例えばGray画像や輪郭画像のみで目的の図を出力しています。
とにかく1dataChallengeを継続
今回、やってみたこと
準備として
TestとTrainのコンタミが怖いのと、どの画像がTestに採用されているのかがわかりにくいので、完全に分離して読み込むように改めました。
①1Train1Testで収束するのか
やってみました。
Trainはほんとに1個でも10分もかからず収束する。
けど、TestはCannyとGrayで試しましたが、どちらもいい結果は出ません。
②90%Train10%TestでTestはきれいな絵になるのか
③Grayの場合、顔でtrainして、ファッション絵に適用
汎用性の検証としてやってみました。
おまけ~出力専用AP作成
モデルの構造を見る意味でも、検証用に利用する意味でも、学習済のパラメータで出力専用アプリを作成しました。
※入力対応はhdf5ファイルです
結果
①各カテゴリ1Train1Testの結果
データは同じデータの右向きと左向きをTrainとTestに使っています。
Trainデータ
Testデータ
(ひどいので掲載しません)
Grayの場合
Testデータは綺麗に塗れました
②90%Train10%TestでTestはきれいな絵になるのか
これも、Cannyは汚れてしまって、何がなんだか
Grayは一応、見られる程度の色を塗ってくれますが、以下の通りです
でも、色合いとか完成度低い。。ということで不満足
この結果は、かなり危険です。汎用的な変換器を作ろうという目論見だと、破綻する兆候です。
③Grayの場合、顔でtrainして、ファッション絵に適用
これは、それなり。。。塗れてます
Testデータ
まあ、植物も背景も学習していなから、塗れないのは当然ですが、ファッションのデータで学習しても上のレベルなので、ほぼ似たような感じです。
もちろん、どれもTrainデータの再現性はほぼ完ぺきです。
まとめ
・1データでも簡単に学習する
・過学習である
課題
・Generatorの過学習を回避するにはどうすればいいか
・過学習であることを利用すること