Deep Convolutional GANs(DCGAN)をkerasで実装して、いらすとや画像を生成する

前回,GANを勉強して実装したので、その取り組みの続きとして、 DCGAN(Deep Convolutional GAN(DCGAN)を実装して遊んでみる。

生成結果はこのようになった。 (2017/9/7 追記)

f:id:yusuke_ujitoko:20170907010748p:plain

DCGANの論文を読んでみたところ、GANの論文よりも読みやすかった。 またGANのときには省略されていたモデルの構造も書かれていたため実装の難易度が低かった。 (DCGAN著者の実装も公開されているため,パラメータを参考にすることもできる)

DCGANの肝は以下の三点だ(と論文で触れられている)

  • deterministicなpooling手法の代わりに、 fractionally-stridedを使っている こと。これにより、ネットワークが自身のdownsamplingを学習可能となった。
  • 全結合層を使っていない こと。convolutional featuresを入力層と出力層に直接結合している。
  • Batch Normalizationを使っている こと。これにより初期化の影響を受けにくくなり、学習の勾配問題も緩和することができる。 三点目のBatch NormalizationはGANの実装のときに既に使ってしまっていた. たしかに,GANのときにはBatch Normalizationを入れないと生成画像が同一になってしまうという弊害があった

DCGANの構造の例として以下の構造が論文には載っている。 この構造をもとにDCGANのモデルを実装した.

f:id:yusuke_ujitoko:20170503205130p:plain

いらすとや画像の生成

データセット

いらすとやからダウンロードした10575点の画像を使って、 DCGANでいらすとや画像を生成してみる。

データセット
f:id:yusuke_ujitoko:20170508205931p:plain

画像すべてCrop & Resizeして96x96に統一し、さらに正規化した。 そしてMNISTのときと同様に学習してみた。

生成データ

0epoch時点
f:id:yusuke_ujitoko:20170508203541p:plain

6万epoch時点
f:id:yusuke_ujitoko:20170508203944p:plain

17万epoch時点
f:id:yusuke_ujitoko:20170508203708p:plain

gifアニメ
f:id:yusuke_ujitoko:20170508210327g:plain

なんとも言えないものを生成した。 ノイズ大量に生成してみる。

f:id:yusuke_ujitoko:20170508210530p:plain f:id:yusuke_ujitoko:20170508210532p:plain

人の顔に見えなくもないものもあるかな… パラメータチューニングが微妙なんだろうか

(追記:2017/9/7)顔画像に限定すると鮮明に生成できることを確認

データセット数は大きく減るが、顔画像に限定して学習させてみたところ、かなり鮮明な画像を生成できた。 f:id:yusuke_ujitoko:20170907010748p:plain

MNISTにこのDCGANを適用

MNISTを生成するのも試してみた。
f:id:yusuke_ujitoko:20170508203132g:plain
この実装はgithubに置いておく。