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

DCGANで人間の顔を生成

chainer-DQNでオリジナルゲームはまた今度です.
いや,プログラム自体はもう出来ているんですが,いろいろと説明が大変なので
説明が大変じゃないこちらを先に更新します.

本題
何番煎じかわかりませんが,DCGANで人間の顔画像を生成してみます.
DCGANを知らない人のためにざっくりとした説明をします.

DCGANは,画像などを生成するように学習するニューラルネットワーク技術の一種です.
作る人(Generator)と,作られた画像か本物の画像かを見分ける人(Discriminator)に分かれて学習していきます.
Generatorは,Discriminatorが見分けられないように,本物っぽい画像を作っていきます.

一般人が理解すべきことはこれだけです.
だれでも簡単にできるので,人間の顔だけでなく,いろいろな画像に対して行ってみてはどうでしょう.


既出のものたちを紹介します.
ポケモンなんかはポケモンのようなポケモンじゃないような変な生き物が出来上がってておもしろいですね

顔イラスト http://qiita.com/mattya/items/e5bfe5e04b9d2f0bbd47
イラスト http://qiita.com/rezoolab/items/5cc96b6d31153e0c86bc
間取り画像 http://nextdeveloper.hatenablog.com/entry/2016/02/26/211332
アイドル顔画像 http://memo.sugyan.com/entry/20160516/1463359395
ポケモン http://bohemia.hatenablog.com/entry/2016/08/13/132314
アルファベット http://qiita.com/hitokun-s/items/38c0bdc3245a45fd8c29
家紋 http://qiita.com/yu4u/items/47053a1f3f20e9561823

さて,僕はPFNのmattyaさんが作成したchainer-DCGANをそのまま使わせていただきました.
qiita.com

用意した画像はとりあえず1000枚.OpenCVのfacedetectを利用して収集しました.
もっと用意してあるのでそれで実験したらまたブログを更新します.
画像収集に協力してくれた後輩のMくん,ありがとう!(これが一番たいへん)

まず面白いところから.はじめに出来た画像を貼ってみます.
f:id:butyutyumpa:20161205200548p:plain

怖い!
例えるなら,呪われたトイレに浮かび上がる呪いのシミといった感じです.

次に生成された画像はこちら
f:id:butyutyumpa:20161205200741p:plain
もう顔っぽくなってきた.まだちょっと怖いけど,目,鼻,口,髪があり,輪郭はちゃんとしています.
顔の感じはもう完全につかんできていますね


f:id:butyutyumpa:20161205200747p:plain
なんか色が怖い.プレステゲームの「サイレン」
に出てきそうな感じです.


次は学習がかなり進んだあとの画像
f:id:butyutyumpa:20161205201114p:plain
かなり良い! もうほとんど顔やね.

次は学習が進みすぎたっぽい画像
f:id:butyutyumpa:20161205201244p:plain
顔画像1000枚という少なさが原因なのか,単純に過学習なのか,(たぶん両方で,後者がより影響大)似たような画像で埋め尽くされています.
しかもここまで学習が進んでも,人間が見れば「生成された画像っぽい」と分かってしまいますね.


しかしまあ,1000枚程度の画像でここまでできるなら上出来といったところでしょうか.
プログラムの解説や,もっとデータ数を増やした実験はまた次の記事に.