ゲームアプリの「ドット絵」をディープラーニングで自動生成する


![monsters.png](https://qiita-image-store.s3.amazonaws.com/0/3180/6d563002-3ab0-7faa-e97d-348a57a23ff1.png)

[Super Quest](https://itunes.apple.com/app/id1050429304)

---

##DCGAN

- Deep Convolutional Generative Adversarial Networks
- ディープラーニングで画像（等）を自動生成する技術
- データセットを学習して、データセットにありそうな画像を生成する

---

##例

---

##アイドルの顔画像生成

[TensorFlowによるDCGANでアイドルの顔画像生成 - すぎゃーんメモ](http://memo.sugyan.com/entry/20160516/1463359395)

- アイドルの顔画像を大量に集めて学習 → アイドルっぽい顔を自動生成

![sugyan.jpg](https://qiita-image-store.s3.amazonaws.com/0/3180/4c373a50-b981-72ee-3f36-5b95cfc8c7c2.jpeg)

---

##顔イラストの生成

[Chainerで顔イラストの自動生成 - Qiita](http://qiita.com/mattya/items/e5bfe5e04b9d2f0bbd47)

- 顔イラストを集めてきて学習 → 顔イラストを自動生成

![illust.png](https://qiita-image-store.s3.amazonaws.com/0/3180/fb7ce7be-8e7f-108a-36c9-fb8b0b0d8051.png)

---

##DCGAN-tensorflow

https://github.com/carpedm20/DCGAN-tensorflow

- TensorFlowを用いた実装
- READMEに書いてある通りに実行すれば簡単に試せる

---

##試してみた

[DCGAN-tensorflowで自動画像生成をお手軽に試す - Qiita](http://qiita.com/shu223/items/b6d8dc1fccb7c0f68b6b)

- 付属のサンプルを実行
  - セレブ顔のデータセットをダウンロード → 学習
  - 「セレブっぽい顔」の画像を生成

![train_01_1833.png](https://qiita-image-store.s3.amazonaws.com/0/3180/0ae6ce1d-dea0-2157-5f26-762694b02c8e.png)

---

##何か自前データを食わせてみたい

---

##スーパークエスト

[友人とプライベートでつくった](http://d.hatena.ne.jp/shu223/20160225/1456383853)放置系ゲーム

![2017-05-24 07_46_50.gif](https://qiita-image-store.s3.amazonaws.com/0/3180/0eba4dea-1302-f881-fce9-a7fee955458b.gif)


---

##オリジナルのドット絵モンスター画像400枚

![monsters.png](https://qiita-image-store.s3.amazonaws.com/0/3180/6d563002-3ab0-7faa-e97d-348a57a23ff1.png)

---

##これをDCGANに食わせて、新しいドット絵モンスターを自動生成できないか？

---

##ドット絵なので**生成すべき画素数は少ない**

これは結構いい題材なのでは・・・？

<img height="300" alt="Screen Shot 2017-05-23 at 20.30.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/3180/2ecc6710-5ba5-d460-c155-fa95d782c879.png">

---

##やってみた

---

##データセットの前処理

- ドットを1x1に正規化したりとか
- 詳細は割愛

##DCGAN-tensorflowに食わせる

- 基本的にはフォルダに置いて指定するだけ
- ちょっとハマりどころもあったけど詳細は割愛 [^1]

[^1]: 本記事は5分のLT用の発表資料なので、割愛しました

---

##途中経過を見ていきましょう

---

##epoch1

![train_01_0003.png](https://qiita-image-store.s3.amazonaws.com/0/3180/7dd03bf8-f1e2-96b8-568b-9d71fbd3930c.png)

---

##（なんかバグってる・・・？）

---

##epoch3

![train_03_0001.png](https://qiita-image-store.s3.amazonaws.com/0/3180/56e8b680-4ad3-f91c-714a-2789529ce7f5.png)

---

##epoch5

![train_04_0005.png](https://qiita-image-store.s3.amazonaws.com/0/3180/383aee5a-05c5-993f-da14-91b50cd1ad4d.png)

---

##（なんか出てきた・・・！）

---

##epoch16

![train_16_0003.png](https://qiita-image-store.s3.amazonaws.com/0/3180/8edc6028-16df-69c8-e1c7-df3c2cfd9e1e.png)

---

##epoch24

![train_24_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/dd3d1407-82dc-3856-a0eb-0f72de6fa5d1.png)

---

##epoch29

![train_29_0005.png](https://qiita-image-store.s3.amazonaws.com/0/3180/ad0ae259-8a79-3d09-8eee-0e30926456e7.png)

---

##epoch49

![train_49_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/c8300c25-0953-e60e-a772-96d762a683da.png)

---

##epoch133

![train_133_0000.png](https://qiita-image-store.s3.amazonaws.com/0/3180/52cf48c6-10ba-76b9-b6ab-ecd5594d573e.png)

---

##（何かになりつつある・・・!?）

---

##epoch199

![train_199_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/94496d81-dc61-29c7-12ec-eb441134d0ae.png)

---

##ここらへんまで学習は順調に見えた

---

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/fcaae063-4df5-0dd9-f5da-c35f3392885e.jpeg" width="300">

---

##しかし・・・

---

##epoch299

![train_299_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/adb92246-f691-ab03-14c6-c0ebb24525c7.png)

---

##epoch399

![train_399_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/668876a8-5008-8eaf-67b8-c2660e1c92c0.png)

---

##epoch499

![train_499_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/43e6bd42-a86c-e906-8ef8-a4296042578e.png)

---

##epoch599

![train_599_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/bc3d66cb-6d71-e2db-7c4e-62ad4ef42398.png)

---

##同じような生成結果が目立つようになってきた

epoch699

![train_699_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/a1cc85da-96a3-5d56-4de8-217e29402ee0.png)

---

##同じような生成結果が目立つようになってきた

epoch799

![train_799_0004.png](https://qiita-image-store.s3.amazonaws.com/0/3180/a9d9836d-e6bb-02f6-c864-69b41c4e3d8b.png)

---

##どうやら過学習してるっぽい・・・

---

##ここらへんでやっと気づきました

---

##今回の試みは「失敗」ということに・・・

---

##うまくいってた事例と何が違ったのか？

---

##セレブ顔生成

学習データセット：セレブの顔 **20万枚**

- いずれも目があって鼻があって口がある
- 肌の色に多少の違いはあれど真っ赤や緑色はいない

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/c02bdcf6-fe0e-b146-2bbb-69c57b1846d4.jpeg" align="left">

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/29cb371f-bb88-c986-4e44-f469aa832214.jpeg" align="left">

<img src="https://qiita-image-store.s3.amazonaws.com/0/3180/1d669fb6-6c1b-0190-2bce-f7eadbd0414e.jpeg" align="left">

<br clear="all">

---

##アイドル顔画像生成

学習データセット：**アイドル90人の顔画像からそれぞれ120件を抽出した合計10800件**

- 顔のみ
- 90人に限定
- 「日本人」かつ「女性」かつ「アイドル」に限定

→ 性別や国籍がバラバラな1万人の顔データではない

---

##顔イラスト生成

データセット：**約30万枚**の顔イラスト

- 顔だけに限定
- 圧倒的な量

---

##今回自分がやろうとしたことを考えてみる

---

<img width="735" alt="Screen Shot 2017-05-24 at 8.40.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/3180/055b25c7-95a6-b5d1-ceb2-fb1d9edb582e.png">

- 手足がある、尻尾がある、羽がある、顔しかない、武器を持ってる、etc...

---

<img width="711" alt="Screen Shot 2017-05-24 at 8.45.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/3180/dea02a3e-8e56-a7eb-30f6-fcd2bf18df1a.png">

- 一つ目、三つ目、目なし、ザク目、兜で隠れている、etc...

---

<img width="654" alt="Screen Shot 2017-05-24 at 8.52.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/3180/662c2bab-c976-8824-0681-76bd9e357bfb.png">

- 岩、花、木、火、本、etc...

---

##多様過ぎる

---

##それらを学習するにはデータが少なすぎる

---

##せめてこうだったらよかったかもしれない

- 顔だけ、とか領域を限定する
- スライム系だけとか種族を限定する
- そしてもっと大量にデータセットを用意する

---

##まとめ

- DCGANでゲームアプリのドット絵を自動生成しようとしてみた
- 過学習っぽくなって全然ダメだった
- **問題設定が悪かった ＆ データ量が少なすぎた**
- 勉強になったのでやってよかった