LoginSignup
24
17

More than 5 years have passed since last update.

DCGANで画像の自動生成

Last updated at Posted at 2017-07-15

背景

いままで教師あり学習の分類問題ばかりやってきたので、少し気分を変えて、ディープラーニングで画像の生成とかやってみたい思った。

DCGAN とは?

一言で言えば、与えられた画像データセットを元に、それによく似た感じの画像を出力してくれるシステム。詳しくは、
TensorFlowによるDCGANでアイドルの顔画像生成
あたりを参照のこと。

実際に自分でコードを書くのがおすすめ。コードを書くまでは何のことだかさっぱりわからなかったが、書いてみたら、なるほど、となった。
GANの動作原理は、「偽札を作る人と取り締まる警察」の関係に例えられる。偽札を作る人はより精巧な偽札を作ろうと努力し、警察は精巧な偽札も見破れるようにしようと努力する。そうすると偽札(ここでは生成される画像のこと)はどんどん精巧になって本物と区別がつかなくなるのだ。DCGAN では「偽札を作る人」「警察」をそれぞれ別のニューラルネットワークが担当する。

実装

DCGANを実装してみた

たぶん、元論文に近い実装は、DCGAN implementation by TensorFlow。私は、これを Keras で実行してみたのだが、どうにもうまく行かなかった。

そこで、keras-dcganに従ってみた。このサンプルコードでは、MNIST の数字をうまく学習している。ただ、問題点としては、この issueにあるように、元論文とはかなり違うネットワーク構成を取っている。GAN(Generative Adversarial Network, 生成的敵対的ネットワーク?)であるのは確かだと思うが。

だから私の実装も GAN の雰囲気をつかむもの、という程度にとらえてもらえれば、と思う。

Github から clone して、python keras-dcgan.py と実行すれば、とりあえず gen_images ディレクトリ以下に画像が生成され始める。in_images に学習したい任意の画像(のフォルダ)を入れてほしい。in_images/images に入っている初音ミクの画像は、animeface-character-datasetからお借りしました。深く感謝します。

実行結果

animeface-character-datasetの画像約15000枚に基づいて学習させた(これは Github のレポジトリには入っていない。各自追試したい場合は、animeface-character-dataset をダウンロードしてみてください)。

元の画像

batch_images.png

step 1000(のべ55000枚学習後)

gen01000.png

step 3000(のべ165000枚学習後)

gen03000.png

step 10000(のべ550000枚学習後)

gen10000.png

step 29900(のべ1644500枚学習後)

gen29900.png

感想

今回の実装では、どうも過学習の影響が出やすいというか、元画像を完全にコピーした画像が生まれやすい傾向がある気がする。とはいえ、画像生成器(Generator)に乱数しか入力していないことを思えば、驚くべき学習能力ではある。GAN を安定的に使うのはなかなか難しいが、安定化の新しい手法もいろいろ提案されているようなので、余裕があるときに、また取り組んでみたい。

24
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
17