ディープラーニングでFortniteをPUBGにする

[FortniteをPUBGにする](https://qiita.com/rana_kualu/items/a8b5b9c58bef45564a33) / [GTA5を実写にする](https://qiita.com/rana_kualu/items/9b371adfd74cae11ddd5)

PUBGもFortniteも面白いですよね。
ということで以下は[Turning Fortnite into PUBG with Deep Learning](https://towardsdatascience.com/turning-fortnite-into-pubg-with-deep-learning-cyclegan-2f9d339dcdb0)の日本語訳です。

https://cdn-images-1.medium.com/max/800/1*8h--ozdvpCR3__lOwUkAtw.gif

# Turning Fortnite into PUBG with Deep Learning

CycleGANの画風変換技術について理解し、ゲームのグラフィックMODへの応用可能性について探ってみましょう。

あなたがゲーマーであるなら、現在とても人気のあるふたつのバトルロワイヤルゲーム、FortniteとPUBGについて知っていることでしょう。
いずれも小さな島で、100人のプレイヤーが最後の一人になるまで生き延びるという、非常によく似たゲームです。
私はFortniteのゲーム性のほうが好みですが、PUBGのよりリアルなビジュアルも好きです。
そこで考えました。
開発者が提供するオプションに頼らずに、好みのビジュアルを選べるようにするMODを作ることはできないでしょうか。
FortniteのゲームをPUBGのグラフィックでレンダリングするMODがあれば夢が広がります。
私はディープラーニングがこの目的を果たすために役立つのではないかと考え、そして画風スタイルの変換に優れたCycleGANというニューラルネットワークに出会いました。
この記事ではCycleGANがどのような機能を持っているかを解説し、そしてFortniteをPUBGにするようトレーニングします。

![02.jpeg](https://qiita-image-store.s3.amazonaws.com/0/26088/af1ea744-f59c-8754-2861-5969caeb0533.jpeg)

## What are CycleGANs?

CycleGANは[Generative Adversarial Network](https://deeplearning4j.org/generative-adversarial-network)の一種で、ドメインをまたぐ画風変換を行います。
これによって、Fortniteというドメインの映像を、PUBGのような別のドメインの映像に変換するように訓練することができます。
このタスクは教師を必要としません。
すなわち、両方のドメインで同じ構図の画像を用意する必要がないということです。

![03.jpeg](https://qiita-image-store.s3.amazonaws.com/0/26088/a4740d83-4a22-ff86-23f9-fa5a093e3dcf.jpeg)

このモデルは、元のドメインの画像のオブジェクト構造を理解し、変換を施し、ターゲットドメインのオブジェクトと同じ外観にすることができます。
このアルゴリズムの最初の実装では、馬をシマウマに、オレンジをリンゴに、写真を絵画に変換するという、驚くべき訓練結果が得られました。

## How do they work?

入力ドメインとしてFortniteを、ターゲットドメインとしてPUBGを使用し、CycleGANがどのように働くのか理解したいと思います。
両ゲームのスクリーンショットを大量に用意し、ひとつのネットワークがFortniteを、もうひとつのネットワークはPUBGのビジュアルスタイルを学習するようにGANのペアを訓練します。
ふたつのネットワークは、同じオブジェクトが同じものであることを学習し、それによってビジュアルスタイルを適切に変換できるように、同時に循環的に訓練されることになります。
次の図は、この二つのネットワークの循環的学習の様子を示したものです。

![04.png](https://qiita-image-store.s3.amazonaws.com/0/26088/9d649fd8-5ba9-1881-d176-5a39bd2baf63.png)

まずはFortniteのスクリーンショットから訓練プロセスを開始します。
ここではふたつのディープラーニングネットワーク、generatorとdiscriminatorを訓練していくことになります。
discriminatorは本物のFortniteの画像と、偽物のそれとを見分ける能力を強めていきます。
generatorはPUBGのスクリーンショットを参考に、入力されたFortniteドメインの画像をPUBGドメインの画像っぽく変換する能力を学習していきます。

この変換を有意義なものにするため、再構成の条件を強制します。
すなわち、生成された偽PUBGドメインから元のドメインに画像を変換する、もうひとつのgeneratorとdiscriminatorのセットを同時に訓練することです。
我々は、この逆変換が元の画像に似ていなければならないという条件を強制し、トレーニングプロセスにおける計算ロスの削減を試みました。
これはautoencoderに似ていますが、潜在変数の抽出を目指しているわけではなく、ターゲットドメインの画像を目的としているところが異なります。

![05.png](https://qiita-image-store.s3.amazonaws.com/0/26088/dbc78f32-dfbf-b650-4a01-b3005b5abdf4.png)


このF2P generatorネットワークは、主に3つの畳み込みブロックで構成されています。
最初はFortniteを低次元にエンコードして潜在変数を抽出します。
次に、潜在変数をPUBGを表すものに変換します。
最後に、変換された潜在変数をデコードし、FortniteのイメージをPUBGっぽく見えるように復元します。

この訓練プロセスで私が遭遇した問題は、GPUのメモリが足りないせいで256*256の画像しか作れないことでした。
8GB以上のビデオメモリがあるGPUなら、512*512以上の画像を生成できるはずです。
大きな画像を作成できたなら、是非私に[教えて](https://twitter.com/deepgamingai)ください。

## Results

12時間のトレーニング後CycleGANから生成された画像は、非常に満足のいくものでした。
このネットワークは、空、樹木、草の色をFortniteのものからPUBGのものへと変換することができました。
彩度の高かったFortniteの配色は、落ち着いたPUBGの色味へと変換されています。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="da" dir="ltr">Turning Fortnite into PUBG <a href="https://t.co/9hBGnWLFaC">pic.twitter.com/9hBGnWLFaC</a></p>&mdash; ラナ・クアール (@rana_kualu) <a href="https://twitter.com/rana_kualu/status/1028961625338830849?ref_src=twsrc%5Etfw">2018年8月13日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


空の青はくすみ、カートゥーン調だった草や木々の緑はまるでPUBGのそれのように見えます。
さらになんと、画面下部にあるHPと弾薬ゲージをPUBGのものに置き換えることすら学習していました。
両ドメインでリンクすることができなかったのはプレイヤーの様子であり、周囲のピクセルがぼんやりしているのはこのためです。
全体的にこのネットワークはとても良く動き、2つのドメイン間でオブジェクトを識別し、その外観を変更してくれました。

もっと長い結果を見たいのであれば、下の動画を見てください。
気に入ったらぜひ[ここをクリックして](http://www.youtube.com/subscription_center?add_user=DeepGamingAI)私のYoutubeチャンネルを登録してください。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr"><a href="https://t.co/PuJ8IqPeEF">https://t.co/PuJ8IqPeEF</a><br>Turning Fortnite into PUBG with Deep Learning (CycleGANs)</p>&mdash; ラナ・クアール (@rana_kualu) <a href="https://twitter.com/rana_kualu/status/1028959912527781889?ref_src=twsrc%5Etfw">2018年8月13日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Application to graphic mods in games

結果を出せてうれしいですが、実際にPUBGの見た目でFortniteをプレイすることができるようになるまでには、まだまだ長い道のりがあることは明らかです。
しかし、これらのネットワークを使ってリアルタイムでより高解像度の映像を生成することができるようになれば、グラフィックを入れ替えるMODをゲーム開発者の手を煩わせることなく作ることが可能になるでしょう。
どんなゲームだろうと、自分好みのビジュアルスタイルでプレイすることができるようになるのです。

-----------------

今後は、今回の記事で取り上げた技術を使って、ビジュアルを実写に差し替えることで、リアリズムを実現する方法を追求するつもりです。
続きを読みたいと思ってくれたのなら[medium](https://medium.com/@chintan.t93)や[Youtubeチャンネル](http://youtube.com/c/DeepGamingAI)を登録してください。
読んでくれてありがとう！

# コメント欄

・ナイスアイデア、面白い
・Kerasで[似たようなの作った](https://github.com/bendangnuksung/fortnite-pubg)よ。
・CS GOで同じことやってみる！
・pix2pixHD :)


# 感想

[馬をシマウマにする](https://junyanz.github.io/CycleGAN/)とか言われてもあっはいそうですかって感じでしたが、『FortniteをPUBGにする』とか言われると問答無用の説得力がありますね。
とはいえPUBGには壁をぶん殴ったり建築したりするアクションはないので、そのあたりの違和感は拭えませんが。

あとはこの映像をリアルタイムで作成してFortniteのゲーム画面に被せるMODを作成すれば完成ですが、それを実現するにはマシンパワーが全く足りないですね。
今はまだ、そんなことをするよりテクスチャをいじった方が早そうです。
しかしいずれは、スマブラをモータルコンバットのグラフィックでプレイできる時代が来るのかもしれません。


よし、それじゃあ次はディープラーニングでIdentity VをDead by Daylightにしよう。