前回,GANを勉強して実装したので、その取り組みの続きとして、 DCGAN(Deep Convolutional GAN(DCGAN)を実装して遊んでみる。
生成結果はこのようになった。 (2017/9/7 追記)
DCGANの論文を読んでみたところ、GANの論文よりも読みやすかった。 またGANのときには省略されていたモデルの構造も書かれていたため実装の難易度が低かった。 (DCGAN著者の実装も公開されているため,パラメータを参考にすることもできる)
DCGANの肝は以下の三点だ(と論文で触れられている)
- deterministicなpooling手法の代わりに、 fractionally-stridedを使っている こと。これにより、ネットワークが自身のdownsamplingを学習可能となった。
- 全結合層を使っていない こと。convolutional featuresを入力層と出力層に直接結合している。
- Batch Normalizationを使っている こと。これにより初期化の影響を受けにくくなり、学習の勾配問題も緩和することができる。 三点目のBatch NormalizationはGANの実装のときに既に使ってしまっていた. たしかに,GANのときにはBatch Normalizationを入れないと生成画像が同一になってしまうという弊害があった
DCGANの構造の例として以下の構造が論文には載っている。 この構造をもとにDCGANのモデルを実装した.
いらすとや画像の生成
データセット
いらすとやからダウンロードした10575点の画像を使って、 DCGANでいらすとや画像を生成してみる。
データセット
画像すべてCrop & Resizeして96x96に統一し、さらに正規化した。 そしてMNISTのときと同様に学習してみた。
生成データ
0epoch時点
6万epoch時点
17万epoch時点
gifアニメ
なんとも言えないものを生成した。 ノイズ大量に生成してみる。
人の顔に見えなくもないものもあるかな… パラメータチューニングが微妙なんだろうか
(追記:2017/9/7)顔画像に限定すると鮮明に生成できることを確認
データセット数は大きく減るが、顔画像に限定して学習させてみたところ、かなり鮮明な画像を生成できた。
MNISTにこのDCGANを適用
MNISTを生成するのも試してみた。
この実装はgithubに置いておく。