Python + tensorflow でGANを試してみた.

今回兼ねてからやってみたかったGANを触ってみました。実際に画像が生成されていく様は楽しかったです。

今回兼ねてからやってみたかったGANを触ってみました。 とは言っても、githubにあったコードを実行するだけですが、実際に画像が生成されていく様は楽しかったです。

GANとは

GANは敵対的生成ネットワークGenerative Adversarial Networksの略です。

ざっくりやっていることを説明して行きます。
generatorとdiscriminatorというものがあり、generatorは与えられたデータと同じようなものを生成しようとし、discriminatorはgeneratorによって作られたデータが本物かどうかを判定します。
これを繰り返すうちに与えられたデータそっくりのものができます。
しかもこれは与えられたデータの一部を切りはりしているわけではないのです。
非常に面白くこれからに期待ができます。

詳しい解説はこちらをみてください。

実際にやってみた

では、実際に試してみましょう。
このリンクに書いてある通りにやれば問題ないですが、一応手順を書きます。

クローンかダウンロードをして、その後

cd DCGAN-tensorflow-master/

そのディレクトリに入り

python download.py mnist celebA

でmnistとcelebAのデータ両方をダウンロードするか

python download.py mnist

のように片方だけダウンロードするかします。

その後はtrainingをさせます。

python main.py –dataset mnist –input_height=28 –output_height=28 –train
python main.py –dataset celebA –input_height=108 –train –crop

いい結果が出るまでにはかなり時間がかかります。
Macbook proでそれっぽいのが5,6時間、割といいのが12時間ぐらいかかったような記憶があります。

これでどんどん画像ができてきます。

このgithubのコードで自前の画像を学習させられるそうですがエラーがたくさん出て私はできませんでした。
画像のサイズに問題があったりしたと思います。

MNISTの画像生成です。

始まったばかりの状態です。
まだなんなのかわかりません。

しばらくするとなんか出てきた感があります。

なんか3と5っぽいものはちらほら

だんだん鮮明になってきた

数字だー!!

それからしばらく続けた結果

なんか1多くない?
多分過学習です。
やっぱりAIも0-9の中だと単純な棒一本の1が生成しやすいのでしょうね。

次に、celebAです。
セレブの画像を生成していきます。
アメリカのセレブなのでお金持ちじゃなくて有名人の意味だと思います。

なんかボヤけたものがいっぱい

ちょっと見えてきた

顔っぽくなってきた

眉毛の自己主張が激しい

実際にありそうなのがちらほら
殴られてすぐ後みたいな人もまだいますが
一番下の人なしたーー

最終的にこうなりました
どうやら一番下の人はグラサンの生成がうまくいっていなかっただけのようですね

まだまだ微妙なものが多いですが、このアルゴリズムではこんなもんでしょう。 GANにも色々な種類があるので今後もっと勉強していきたいです。

最近tfganというものができました。
tensorflowで楽にGANができるそうです。
2017年12月末の今の時期ではこの記事ぐらいしか情報がなくまだ私にはtfganを応用した画像生成ができていません。

この記事通りにやるとすぐにGANで画像を生成することができました。
今後もっと勉強したいと思います。

応用例

GANで何ができるのか、他に何を生成できるのかを調べました。

GANを使うと画像を再生成できますがこれは何に使えるのでしょうか?
一つには、少ない画像データを水増しすることができるのではないかと期待されています。
医療系の画像など入手しにくいものをGANで生成して訓練データとして用いることができればかなりいいと思います。
とはいえ現状まだここまでの精度は出せていなさそうですが。

GANで画像が生成できるということは動画も生成できるでしょう。
それをMITがやったそうです。
画像から1.5秒先の未来を予測して動画を生成するというものです。
ゴルフ場や海、列車の未来の動きを作っています。

そして、それとは別にワシントン大学が作ったオバマの動画がこちらです。

Synthesizing Obama: Learning Lip Sync from Audio

このように今後はフェイクニュースが簡単に作れるようになりそうで信用できません。

他にはこちらの動画をみてください。

CycleGAN Face-off 直播換臉

リアルタイムで人を他の人に変えています。

めちゃめちゃやばい技術ですGANは。

感想

GANはとても面白いと思いました。 今は2Dの生成ですが今後3Dの生成もできるようになればCGの生成もできるようになりそう。
ということは映画を簡単に作れるようになりそうです。
過去のデータから3D空間を生成し、役者も生成し、声まで生成することができそうです。
逆にしばらくAIができそうにないことは言葉の意味理解だと思います。
映像は作れてもしばらくは物語を作ることはできないのではないかと思います。
僕らはAIにできない物語の生成やトップ1%以内の技術力を持たないと仕事ができなくなるかもしれません。
そのうち匂いの再生成や味の再生成、感覚の再生成もセンサーが発達したりしてデータが取れるようになればできそうです。
逆に悪用されると最悪な技術だと思います。
やっていないことや言っていないことを生成されたりしそうです。
僕らはAIをやっていく上で倫理観を持ってやっていきましょう。

参考文献

https://blogs.nvidia.co.jp/2017/06/21/generative-adversarial-network/
https://roboteer-tokyo.com/archives/9676
https://www.excite.co.jp/News/it_g/20171021/ForbesJapan_18115.html