post Image
DCGANで画像の自動生成

背景

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

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 を安定的に使うのはなかなか難しいが、安定化の新しい手法もいろいろ提案されているようなので、余裕があるときに、また取り組んでみたい。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。