bohemia日記

おうちハックとか画像処理、DeepLearningなど

ディープラーニングで新しいポケモン作ろうとしたら妖怪が生まれた

こんにちは。ぼへみあです。

先日はポケモンの個体値判別の記事を書いたらかつてないほどバズって驚きました。
今では、スクリーンショットを撮ったり、常駐してゲーム画面に被せるタイプの個体値チェッカーアプリがたくさん出てきてるので、分度器勢は消え去ったようです。

f:id:bohemian916:20160813112522p:plain

被せるタイプはとても便利で使っているのですが、基本的に入力は全て自分で行う必要があり、少し面倒です。 コンピュータビジョン研究者見習いとしては、全てローカルの画像認識で行わせたいところです。

そこで手始めに、ポケモンの種類を画像認識で判別するためにポケモンデータセットを作ったのですが、寄り道してポケモンから妖怪ができてしまったので、そのお話です。

ポケモンデータセットの作成

機械学習でクラス分類を行わせるのためには、そのドメインのデータセットが必要です。 以前、おそ松さんを見分けた時も6000枚弱のデータセットをスクリーンショットをたくさん撮って作りました。

今回は、ゲームの手持ちのポケモンのスクリーンショットを撮って作っていきます。 ポケモンGOはUnityという3Dゲームエンジンを使って開発されているので、3Dモデルのポケモンは360度クルクル回せます。 なので持っているポケモンについては、様々な角度から撮り、かつ必殺技モーション中も含めて、2~30枚づつスクショを撮っていきます。

しかしながら僕の図鑑はまだ120種類程度なので、全てのポケモン画像は集められません。持ってないポケモンやまだ出現しないポケモンについては、画像検索で集めます。

3000枚くらいスクリーンショットを撮りました。 f:id:bohemian916:20160813115507p:plain

その画像から、ポケモンが写っている領域のみを切り取ります。 さすがに手動では大変なので、HOG特徴量とSVMを使った物体検出器で切り取ってもらいます。 100枚くらい手動で学習データを作って、学習させます。 詳しくは、以下を参考にしてください。
ディープラーニングでおそ松さんの六つ子は見分けられるのか? 〜準備編〜 - bohemia日記

SVMのパラメータをグリッドサーチで適当にチューニングすると、ポケモン検出器の精度は、precisionで0.904762、recallが0.76というところでした。

どうしても検出の苦手なポケモンがいるので、検出できず切り取られなかったポケモンは、手動で補ってあげます。 領域を切り取れたポケモンは、種類ごとにフォルダ分けします。
ポケモンは初代なら151匹楽勝で覚えているので、おそ松さんのフォルダ分けに比べたら楽勝です。

出来上がったデータセットはこんな感じです。*1 f:id:bohemian916:20160813120828p:plainf:id:bohemian916:20160813120840p:plain

新しいポケモンを作ろう

データセットができあがったので、畳み込みニューラルネットワークを用いたクラス分類でポケモン判別器を作るか! 、と思う前にDCGANを試して、新しいポケモンを作ろうと思いついたのでやってみました。

DCGANとは、ディープラーニングを用いた画像生成手法で、データセットを学習し、データセットにありそうな画像を生成します。 2015年年末に発表された手法で、まだまだ大きい解像度で生成できなかったり、キレイにできなかったりしますが、そのあたりの問題を解決すべく研究が進んでいます。

詳しくはこちら。

qiita.com

こちらのChainer実装を使って、学習、生成させてみます。

github.com

学習過程

youtu.be

生成されたポケモン妖怪たち

f:id:bohemian916:20160813124040p:plain:w200
深い憎悪を感じる妖怪です。闇に紛れているところを見つけてしまったら大変そうです。
f:id:bohemian916:20160813124117p:plain:w200
寝てる時に、「なんか寝苦しいな・・」と思ったら上に乗ってそうな妖怪です。 f:id:bohemian916:20160813124132p:plain:w200
ピカチュウとピッピの交配の結果生まれてしまったポケモンが成仏しきれなくて現世に残ってそうな妖怪です。
f:id:bohemian916:20160813124107p:plain:w200
ちょっと陽気で、人々にいたづらをして回るきつね妖怪っぽいです。
f:id:bohemian916:20160813131636p:plain:w200
帰り道に出会ったら、全速力で走って逃げたくなる妖怪です。

割といそうなポケモン候補たち

f:id:bohemian916:20160813124031p:plain:w200
なんかカッコイイ雰囲気が漂う水ポケモンっぽい
f:id:bohemian916:20160813124049p:plain:w200
ガンメンっぽいポケモン
f:id:bohemian916:20160813124057p:plain:w200
炎・ドラゴンタイプでいそうなポケモン
f:id:bohemian916:20160813124144p:plain:w200
格闘・地面の地中にいそうなポケモン
f:id:bohemian916:20160813124451p:plain:w200
宇宙にいそうな神秘ポケモンっぽい。
f:id:bohemian916:20160813124529p:plain:w200
水・ゴーストでありえそう。

その他一覧

f:id:bohemian916:20160813124204p:plain

感想

実際異なる種類のポケモンを交配したら、こういう微妙なポケモンが本来生まれてくるんだろうなーと。 生成過程見てると、ポケモンを配合してキメラを生み出してしまったマッドサイエンティストの気分になりました。

先日設立された、電気通信大学の、人工知能先端研究センターでは、AI妖怪を作るというプロジェクトがありますが、これにちょうどじゃないでしょうか
http://www.uec.ac.jp/about/publicity/media_release/pdf/20160630.pdf

あんまりキレイじゃないけど、それっぽいのも生まれました。こういう人工知能が作った原案を、人がリファインしてキャラクターにしていけば、様々なキャラクターが生成できるかもしれない。キャラクター作成補佐AIが商売になる日が来るかも。

*1:データセットが欲しい方がいましたら、差し上げます。