[DCGAN] GANで新種のポケモンを生成する① 〜Let's Go! newイーブイ〜

# 新種のポケモンを描きたい！！！
いきなりですがポケモンの新作が発表されるときってワクワクしますよね!!
ということで今回は流行りのGANを使って新種のポケモンの生成にチャレンジしました！

### 環境
Python=3.5.2
Tensorflow=1.3.0

#はじめに
GANで画像生成はすでに多くの方がやられています。
最近ではアイドルの画像生成もかなりのクオリティでできるようです。
では, キャラクターに関してはどうでしょうか。調べてみるとポケモンの画像生成に既に取り組まれている方々もいらっしゃいました。


[DCGANでポケモンとアイマスを作成したった](https://qiita.com/yoyoyo_/items/4df8d78b5118190bbcd2)
[PokemonGAN](https://www.monthly-hack.com/entry/201612170000)
[ディープラーニングで新しいポケモン作ろうとしたら妖怪が生まれた](http://bohemia.hatenablog.com/entry/2016/08/13/132314)
(今回の執筆にあたり参考にさせていただきました!感謝いたします！)

しかし, 人間のように形やパーツの位置, 形状, 色などがある程度定まっていないものに関しての生成は難しいようです。

#予測するポケモンを絞ってみればどうか
ポケモンは現実世界の生き物をモチーフにしているものも多いため, ある程度絞って予測をしてみようと思いました。
ということで, 次回作に新ポケモンとして出て来そうなポケモンを考えてみました。。。。!!!!

私が思いついたのがこちら！！

**イーブイ!!**
![1. 06e12ebe327bff40ac7b53c11af50806.png](https://qiita-image-store.s3.amazonaws.com/0/183525/9c12c480-8501-10f0-b480-d577563a6491.png)

初代に登場したポケモン,イーブイ。
その人気は凄まじく, 今秋発売のSwitchの発売タイトルにもなっています。
そのイーブイといえば以下の表のように, 新世代の発売に伴って新進化先が追加されているポケモンでもあります。

| 世代       |       追加された新進化 |  
|:-----------------|------------------:|
| 初代 (赤, 緑)             |      シャワーズ, サンダーズ, ブースター       |       
| 第2世代 (金, 銀)           |            エーフィ, ブラッキー |  
| 第4世代 (ダイヤモンド, パール)             |              リーフィア, グレイシア |       
| 第6世代 (X, Y)               |                ニンフィア |       

今後, 上記に記されているタイプではない新種のイーブイの進化が追加される可能性があるのではないかということで, イーブイっぽいポケモンを描いてみようと思います。

#本題
前置きが長くなりましたが, これから新ポケモンの予想をしていきたいと思います。

##データセット
今回は, 先ほどのリンク先に方のようにPokemonGOからスクリーンショットで取得しました。
今回はイーブイに関連のあるポケモンのみを選択し, 角度やモーションを変更しながら各30枚ずつの系180枚の画像で学習を行いました(圧倒的に少ない。。。)

###画像例
<img width="375" alt="スクリーンショット 2018-08-17 18.17.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/183525/13b09027-4c55-4753-8bae-57b25a56dcd6.png">

##手法 (DCGAN)
今回は自分もtensorflowを利用しているということもあり, こちらのDCGANを利用してみました。
[DCGAN-tensorflow](https://github.com/carpedm20/DCGAN-tensorflow)
自作データでの学習法はリンク先に書いてあります。

```python
python main.py --dataset pokemon --input_height=120 --output_height=120 --train
```
上記のような引数を設定して簡単に学習が可能です。
自作データのディレクトリをコードと同じディレクトリに配置し, ディレクトリ名, データの解像度等を設定することで学習ができます。

##学習の様子

- 200 epoch
![train_199_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/8df5ecc3-e31b-e518-f072-310962f85e2f.png)

- 500 epoch
![train_499_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/d7aa9309-e4f5-ff14-f7e3-dde0b6476a53.png)

- 1000 epoch
![train_999_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/91213d1a-0c1e-66bd-2cb9-d3490bce3162.png)

- 2000 epoch
![train_1999_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/4968946f-e579-cb50-a312-3ec4215fd29b.png)

- 3000 epoch
![train_2999_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/2182cfbe-ab84-9ad5-ed24-affafe07f275.png)

- 4000 epoch
![train_3999_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/d6c0d61b-7667-cc31-1f66-1c6a14a6daac.png)

- 5000 epoch
![train_4999_0001.png](https://qiita-image-store.s3.amazonaws.com/0/183525/d21ae92f-0dbc-49a1-2b27-29dad207e21c.png)

## 結果
5000 epoch学習させた結果, 下図のようになりました！
そこそこうまく学習できているようですが, 新種のポケモンとまではいきませんでした。
イーブイ×サンダース, イーブイ×ブラッキーのような雑なポケモンフュージョンのようなものは, ちらほら見られますが、、、
![test_arange_99.png](https://qiita-image-store.s3.amazonaws.com/0/183525/d4398523-0958-4cf2-42b1-71390da4cd9b.png)

#感想と考察
##データセットについて
今回はPokemonGOでデータセットを作成したため, 未実装の進化先(リーフィアやグレイシアなど)を取り入れていなかったり, そもそもデータセットが少なかったりしたのでネットからしっかりと集めていければと思いました。
イーブイの進化系統のみに捉われず, 他の似たポケモンやキャラクターなどをデータセットに取り入れても面白くなるかなと思いました。

##学習に関して
とりあえず既存モデルを使って見ましたが, GANは多くの手法が提案されているので, まだ着手したことのないGANにも触れて試していければと思います。
学習がうまくいくように同系統のポケモンで試してみたといえど,色などは明らかに異なるので, 形だけの推測をするだけなら入力画像をグレースケールにした方がいいかもと思いました。