読者です 読者をやめる 読者になる 読者になる

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

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

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

いらすとや画像を生成するタスクにこのDCGANを使ってみる。

いらすとや画像の生成

データセット

いらすとやからダウンロードした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

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

(参考)MNISTにこのDCGANを利用

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