collect, analyze, and visualize data
/ produced by Hiroyuki Shinoda
collect, analyze, and visualize data
Article
2020.4.7
GANやstyle変換を駆使して任意の写真を”どうぶつの森”風に変換したかった

屋内での自粛を求められる昨今、
人々は、デジタルに新たなユートピアを求め始めました。
そう、「あつまれどうぶつの森」(以降、”あつ森”)です。

 

2020年3月20日にnintendo switchソフトとして発売された本作は、
かわいいどうぶつたちと無人島ライフを楽しむゲームでして
4/1時点で、早くも260万本の売上と驚異的な人気です。

 

1日の時間、季節の移り変わりがリアルタイムに連動している本作、
“3年は遊べる”と言われており、
ゲームに飽きる頃にはさすがにコロナが収束していると思われます。

 

しかしスローなゲーム進行にやきもきした筆者は、
もっと早く、いろんな動物を見たい、いろんな建物やシーンをみたいと
思いました。(中毒)

 

そこで、GANやStyle変換など各種NN系の画像処理技術を駆使して、
任意の写真を”あつ森”風に変換するAIを作成していこうと思います。

 

全体の処理フロー

まずは写真全体を、”あつ森”の画像を用いて、”塗り”や”色”をstyle変換します。
この際、人物も同様にstyle変換されますが、形状は変わらないため
当然”あつ森”キャラのような2等身になるわけではありません。
そこで、写真中で人物が写っている箇所は
別のアルゴリズムで人物部分を推計した上で、
周囲の平均画素で塗りつぶしておきます。
そのあとで、人物がいた箇所に、
GANで生成しておいた”あつ森”風キャラのうち、
もとの写真の人物にもっとも近いものを自動算出し、
大きさ調整の上配置します。

 

画像のstyle変換

まずは写真全体を”あつ森”風にstyle変換していきます。
style変換では、近年styleGANなどを用いた画風変換が有名ですが、
今回は、学習済みモデルを使用することができる、
Neural Transfer(元論文:”A Neural Algorithm of Artistic Style”)というアルゴリズムを用いました。
日本語記事はPFNの方がブログでまとめていただいております。
実装はPytorch tutorialを参照いたしました。

 

元の画像はこちら。(筆者撮影)

 

style画像としたものはこちら。(任天堂公式サイト画像より)

 

元の画像にNeural Transferした結果は下記となります。

 

“あつ森”風…なんだろうか。
少なくとも”あつ森”的なカラーリングでのドリーミーな感じにはなりました。

 

なお本手法では一枚のみのstyle画像と適用先画像を用います。
そのため、style画像の選定が非常に重要となります。
様々なゲーム中の画像、およびテクスチャのような画像を独自に作成し、
それぞれの結果を比較しました。
※下記ゲーム中の画像は、任天堂公式サイトおよびnintendo directより

 

並べてみると、style画像の色構成などを引き継いでいることがよくわかります。

上記の結果をもとに、もっとも感覚として塗りが破綻しておらず色のバランスが良い、
“ゲーム画像A”を使用することにします。

 

GANによる”あつ森”風キャラ生成

style変換では写真の”塗り”は変換されても、
形状が変換されるわけではありません。
写真画像中の人物が6等身のままですと、その画像が”あつ森”風とはとても言えません。
そこで、既存の”あつ森”のキャラを学習して、
GAN(Generative Adversarial Network:敵対的生成ネットワーク)によって
大量の”あつ森”風キャラを生成し、
既存の写真の人物ともっとも近いものと置換するということを行います。

 

GANは、近年「ポケモンの生成」や「アイドル顔の生成」など
市井でもたくさんの活用が見られますので、ご存知の方も多いかと思います。
簡単にいうと、学習元っぽい画像を生成するAIと、
本物と偽物を判別するAIを作成し、それらを敵対させることで
本物に近い画像を生成していくものとなります。

 

“あつ森”キャラの画像は、有志の方がまとめられた下記の画像を拝借、
pythonで一括でキャラごとに分割して保存いたしました。

 

GANはDCGAN(Deep Convolution Generative Adversarial Network)にて実装いたしました。

 

205種類のキャラを元に、3000回ほどの学習で、下記のようなキャラが生成されました。



 

なんか怖いけど、、ニュアンスはある、、!(気がする)
もう一息な感じがします。
が、これ以上学習すると、元キャラに限りなく近いものが生成され始めるようになったので、
この段階のものを使用することにしました。
(すでに上のキャラで、元ネタキャラが類推できそう、。)

 

ただ画像を見ていただいてわかる通り、少しノイジーな感じがありますので、
このGANで生成したキャラに、元画像でもっとも近いキャラで、
前述のneural transferのstyle変換をかけて、
ならすことにします。
なお、GANのキャラと元のキャラの近さの算出には、
Average Hashを用いました。
実装はこちらの記事を参照させていただきました。

 

もっとも近いキャラでneural transferでstyle変換した結果は下記のようになります。
ノイジーな感じが薄れ、ならされたのではないでしょうか。




 

セマンティックセグメンテーションによる人物・キャラ置換

前述のneural transferでのstyle変換において、写真画像を”あつ森”風に変換しましたが、
style変換の前に、人物を消しておきます。

セマンティックセグメンテーションという技術を用いて、
(今回はVOC2012imagesetでの学習済みモデルを使用)
画像中の人物ピクセル部分を推計し、その箇所を周囲の平均画素で塗りつぶしておきます。
(若干はみ出すように前後5px分多く塗りつぶしておきました)

 

また、画像中から人物箇所を特定して消す際に、
同時に、人物自体の画像も自動抽出し、別途保存しておきます。
※トリミングが少々荒いですが、こちらはphotoshopなどで手動でトリミングしているのではなく、
 セマンティックセグメンテーションを用いて人物が写っていそうな箇所を
 確率的に推計しているためとなります。


 

この人物画像を、先ほどのGANで生成した”あつ森”風キャラと比較し、
Average hashがもっとも近いキャラを置換するキャラとして選定します。

 

以上を通して、全て組み合わせた結果が以下となります。


 

 

なんだろう、、ファミコン版”あつ森”があるとして、
そのファミカセが本体にささり切らずにずれたら、こんな画像になるのでしょうか。。
いろんな画像処理技術を駆使したものの、キャラと背景が馴染みきっていない感じがしますね、。 この画像をみて、「あ、あつ森だ〜!」という人はいないと思います。
しかし「異様な生き物が現世と離れた場所でサバイバルしている」と思う人はいるかもしれませんが、
まさにそれが”あつ森”の本質であります。

 

余談:average hashを用いて友人と一番近い”あつ森”キャラを判定する

さて、前述のaverage hashですが、任意の画像間の距離を算出できますので、
友人の写真をもとに、もっとも距離の近い”あつ森”キャラを判定できたりもします。
実際にやってみた結果が下記となります。
※友人の許諾はとっています。

 

どことなく、それっぽいのではないでしょうか。
いやむしろ、このネタのほうが分かりやすい気さえしてきました笑

 

※ちなみに、、人物を消す際に、周りの平均画素で塗りつぶすのではなく、
 周囲背景から補完するアルゴリズムを後日、後輩に教えていただきました。

 

ということで、みなさま良き”あつ森”ライフを。

人気記事: