ディズニー顔に瞬時に変換するAI！ウワサの「Toonify」論文を解説！

**オミータです。[ツイッター](https://twitter.com/omiita_atiimo)で人工知能のことや他媒体の記事など** を紹介していますので、人工知能のことをもっと知りたい方などは **[@omiita_atiimo](https://twitter.com/omiita_atiimo)をご覧ください！**
他にも次のような記事を書いていますので興味があればぜひ！

> * [「募ってはいるが、募集はしていない」 人たちへ](https://qiita.com/omiita/items/0f811f15e569bf2539b8)
> * [GANにもオーギュメンテーションは超有効だった！DAだけでSoTA達成した最新論文を解説！](https://qiita.com/omiita/items/3d967f30fcf73c435c6f)
> * [GANへの新しい正則化「ICR」が期待大な件&解説](https://qiita.com/omiita/items/be166c74cf8662d03e97)
> * [U-Netを識別器に！新たなGAN「U-NetGAN」を解説！](https://qiita.com/omiita/items/e0e5470595dc9b22247d)
> * [画像認識の大革命。AI界で話題爆発中の「Vision Transformer」を解説！](https://qiita.com/omiita/items/0049ade809c4817670d7)

# ディズニー顔に瞬時に変換するAI！ウワサの「Toonify」論文を解説！

「**Toonify Yourself!**」という[Webサイト](https://toonify.justinpinkney.com/)をご存知でしょうか。顔の画像をアップロードすると瞬時にディズニー顔に変換してくれるというもので、Twitterなどで話題になっていたのをご覧になった方も多く居るかと思います。論文から引用すると、以下図のように見事Toonifyされています。

![toon_face_anime](https://imgur.com/XUz93sp.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)を一部改変

今回紹介する論文は、NeurIPS2020のWorkshopにサブミットされた["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)という論文で、**Toonify Yourself!開発者によるその仕組みについての論文**です。論文中では、下図のように**浮世絵を写真化したもの**などもあります。浮世絵がそのまま人っぽくなっていて個人的にツボです。(ちなみに、論文著者の[Justin Pinkney](https://www.justinpinkney.com/start/)さんはイギリスの方のようです。)

![toon_fig6](https://i.imgur.com/Av4G6O5.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)より引用

論文を読むとToonify Yourself!で用いられている技術はとても単純なもので発想も面白いです。それではその仕組みについて見ていきましょう！

**本記事の流れ**:

- **忙しい方へ**
- **仕組みの解説**
- **実験結果**
- **まとめと所感**
- **参考**


> 原論文: ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)
> 実装: [こちら](https://github.com/justinpinkney/toonify)で公式実装が近日公開されるようです。(2020/10現在未公開)

## 0. 忙しい方へ

* **2つのスタイルを簡単にミックス**できるよ
* 手順は次の3つだよ
  * GANを**データセットAで学習**(重み:$p_{base}$)。
  * 同じGANを**データセットBで転移学習**(重み:$p_{transfer}$)。
  * 生成器の前半部分を$p_{base}$、後半部分を$p_{transfer}$(逆も可)としたGAN(重み:$p_{interp}$)を作成。(=**Layer Swapping**)
* [このサイト](https://toonify.justinpinkney.com/)で簡単に試せるよ

![toon_procedure](https://i.imgur.com/zFFrMZG.png)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)を元に作成

## 1. 仕組みの解説
手順はとても単純です。ここでは例として、人の顔を浮世絵っぽくしてみましょう。つまり、「顔写真」と「浮世絵の顔」をミックスします。

### 1.1 **顔写真で学習**
![toon_step1](https://i.imgur.com/dQlDNyp.png)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)を元に作成

まず、**顔写真(FFHQデータセット)で学習**させます。ここではStyleGANを用いています。この時の重みを$p_{base}$とします。

### 1.2 **浮世絵の顔でファインチューニング**
![toon_step2](https://i.imgur.com/bERKV9f.png)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)を元に作成

つづいて**浮世絵の顔データセットでファインチューニング**します。同じくStyleGANで学習し、初期値には先ほどの$p_{base}$を用いています。これによって得られた重みを$p_{transfer}$とします。

### 1.3 **レイヤースワッピング**
![toon_step3](https://i.imgur.com/Csgyz8K.png)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)を元に作成

最後に **レイヤースワッピング(Layer Swapping)** を行います。名前の通りレイヤーの一部を交換するだけです。今回で言うと、前半の層を浮世絵の重み$p_{transfer}$、後半の層を顔写真の重み$p_{base}$にしています。そのため、上右図のような**輪郭が浮世絵でスタイルが顔写真の画像**が出来上がりました。このときの重みを$p_{interp}$と呼んでいます。これだけです。

### 1.4 その他
StyleGANの論文[[Karras, T.(CVPR'19)]](https://arxiv.org/abs/1812.04948)で言われているように、StyleGANは層によって異なる特徴を生成しています。**浅い層では顔の向きなどで、深い層では色合いなど**を生成しています。そのため、前半の層の浮世絵重み$p_{transfer}$の割合をもう少し多くすると、次のような画像が出来上がります。だいぶ浮世絵ベースが強くなりましたね。

![ukiyo-e_face](https://i.imgur.com/NummH4G.png)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)

逆に浅い層を顔写真の重み$p_{base}$にして、深い層を浮世絵の重み$p_{transfer}$にした場合はどうなるでしょうか。この場合は**顔写真ベースの浮世絵**が出来上がります。下の画像がまさにその例です。歌舞伎感がすごいです。

![face_ukiyo-e](https://i.imgur.com/dwTOSHk.png)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)より引用


この$p_{interp}$を数式で書くと次のようになります。単純に**解像度が$r_{swap}$の時に重みを切り替える**というだけです。

![toon_eq](https://i.imgur.com/1HB27Xq.png)

ちなみに本論文によると、2つのGANの重みを内挿してスタイルをミックスするという考えは、超解像を実現するESRGAN[[Wang, X.(ECCVW'18)]](https://arxiv.org/abs/1809.00219)というモデルで提案されたようです。この内挿についてさらに研究した論文は[[Wang, X.(CVPR'19)]](https://arxiv.org/abs/1811.10515)です。単に**重みを内挿することによってスタイルをミックスできる**のはとても面白いですね。

最後に、**顔写真とアニメ画像でLayer Swappingした結果**を載せます。

![toon_face_anime](https://imgur.com/XUz93sp.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)を一部改変

## 2. 実験結果
仕組みの解説でも触れましたが、ここで結果をさらに載せます。

### 2.1 顔写真と浮世絵の合成

まずは**浅い層を浮世絵、深い層をFFHQ**とした場合です。この時の境界は解像度が16x16の時です($r_{swap}=16$)。

![toon_fig4](https://i.imgur.com/DQpHvPV.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)より引用

続いて境界をもう少し深くして32x32とした時です($r_{swap}=32$)。一気に浮世絵が強くなりましたね。この画像たちが**個人的に一番お気に入り**です。

![toon_fig6](https://i.imgur.com/ghgV09M.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)

最後に**浅い層をFFHQ、深い層を浮世絵**とします。つまり今までの逆ですね。境界は$r_{swap}=16$です。全体的に口が歪んでいるのがとても歌舞伎っぽいです。

![toon_fig5](https://i.imgur.com/Kxg8yYl.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)より引用

### 2.2 顔写真とアニメ顔の合成

ここでは**浅い層をFFHQ、深い層をアニメ**としています。境界については論文には明記されていませんでした。完全にディズニー/ピクサー感がすごいですね。

![toon_fig7](https://i.imgur.com/KaXOtJ1.jpg)

> ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)より引用


## 3. まとめと所感

簡単な手法でスタイルを混ぜることができる手法について紹介しました。Layer Swappingのような内挿については3つ以上のモデルに対しても適用することができ、また論文内ではFuture Worksとして、**重みの内挿に別の関数を用いること**や**チャネル方向でのSwapping**などが提案されています([[Edo, C.(CVPR'20)]](https://arxiv.org/abs/2004.14367)によるとStyleGANはチャネルごとに画像内の異なるパーツの生成に特化しているようです)。StyleGANの有効性もさらにいろいろと広がっていきそうですね。**実装も層を入れ替えるだけ**なのでぜひ試してみてはいかがでしょうか！

**Twitterで人工知能のことや他媒体の記事などを紹介していますので[@omiita_atiimo](https://twitter.com/omiita_atiimo)もご覧ください。**

こちらもどうぞ：
> * [「募ってはいるが、募集はしていない」 人たちへ](https://qiita.com/omiita/items/0f811f15e569bf2539b8)
> * [GANにもオーギュメンテーションは超有効だった！DAだけでSoTA達成した最新論文を解説！](https://qiita.com/omiita/items/3d967f30fcf73c435c6f)
> * [GANへの新しい正則化「ICR」が期待大な件&解説](https://qiita.com/omiita/items/be166c74cf8662d03e97)
> * [U-Netを識別器に！新たなGAN「U-NetGAN」を解説！](https://qiita.com/omiita/items/e0e5470595dc9b22247d)
> * [画像認識の大革命。AI界で話題爆発中の「Vision Transformer」を解説！](https://qiita.com/omiita/items/0049ade809c4817670d7)




## 4. 参考
* ["Resolution Dependant GAN Interpolation for Controllable Image Synthesis Between Domains", Pinkney, Justin. and Adler, Doner.(2020)](https://arxiv.org/abs/2010.05334)  
原論文
* [Toonify Yourself!](https://toonify.justinpinkney.com/)  
本論文手法が用いられているWebアプリケーション。画像渡すだけで簡単にアニメ化できます。
* [Explained: A Style-Based Generator Architecture for GANs - Generating and Tuning Realistic Artificial Faces](https://towardsdatascience.com/explained-a-style-based-generator-architecture-for-gans-generating-and-tuning-realistic-6cb2be0f431)  
StyleGANの解説記事  
* [Reading: ESRGAN — Enhanced Super-Resolution Generative Adversarial Networks (Super Resolution & GAN)](https://towardsai.net/p/machine-learning/reading-esrgan%E2%80%8A-%E2%80%8Aenhanced-super-resolution-generative-adversarial-networks-super-resolution)  
ESRGANの解説記事。ESRGANは、2つのネットワークの重みを内挿する"Network Interpolation"を用いている超解像用GAN。
* ["Editing in Style: Uncovering the Local Semantics of GANs", Collins, Edo., Bala, Raja., Prince, Bob., Sabine Süsstrunk (CVPR'20)](https://arxiv.org/abs/2004.14367)  
StyleGANにおいては、特徴量マップのチャネルがそれぞれ画像の特定のパーツに寄与していることを示している論文。