VAEGANを実装してみた
アバターが欲しい
アバターアイコンが欲しい。でも他所様からパクってくるのもどうかと思う。
そうだ、深層学習で機械に描かせよう。
VAE + GAN
生成モデルでパッと思いつくのは"VAE"と"GAN"の二つ。
GANのGeneratorをVAEに置き換えたものをVAEGANと呼ぶらしい。
VAEによるGeneratorで、特徴を連続的に変化するような画像を生成できる。
モデル
EncoderとDiscriminatorにはそれぞれResNet50を転移学習させた。
DecoderではSRResNetを模したネットを組んでいる。
実装
教師データはDanbooruからランダムに落とした、うどんげのイラスト200枚ほどの顔をクロップ、224x224へリサイズした。
学習の手順は
- VAEをEpoch数100で学習
- 潜在変数zをN(0, 1)のガウシアンノイズとし、生成された画像をFake(label: 0)としてDを学習
- 教師画像をReal(label: 1)としてDを学習
上記を100 Iteration繰り返す。
損失関数は以下の感じに。
ここでaは適当に0.000001とした。
最適化関数はAdamを使用。
結果
とりあえずアバター候補を
他には
考察
VAEのみで生成した画像と比較する。
これと比べると、なんとなく線がはっきりしているように思える。
VAEGANは、顔のパーツを複数のイラストから寄せ集めてキメラのような生成をしているように思えた。わかりやすいのが以下の画像。
それぞれの目と口の画風が異なるが、それっぽい位置に置かれている。
GANの特性で、目と口の適切な位置を学習したという事だろうか。