A Style-Based Generator Architecture for Generative Adversarial Networks を読んだ

Tero Karras, Samuli Laine, Timo Aila
NVIDIA
[arXiv](https://arxiv.org/abs/1812.04948), [pdf](https://arxiv.org/pdf/1812.04948.pdf), [YouTube](https://www.youtube.com/watch?v=kSLJriaOumA)

Twitterで話題になっていたので読んでみました．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/14556fe2-d5ab-a8ce-c482-5398fc66298d.png)

[この記事](https://towardsdatascience.com/explained-a-style-based-generator-architecture-for-gans-generating-and-tuning-realistic-6cb2be0f431)と[この記事](https://gigazine.net/news/20181219-nvidia-style-based-generator-architecture-gans/)の解説も参考にさせてもらい，いくつか画像も引用しています．

# どんなもの？
- 高解像度（1024x1024）の画像を生成するGAN，StyleGANを提案．
- 著者の[以前の論文](https://arxiv.org/abs/1710.10196)で提案されている"Progressive-Growing of GANs"のgenerator部分を発展させたもの（discriminator, lossはそのまま）．
- 新たな顔画像データセット，"Flickr- Faces-HQ, FFHQ"を公開．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/a965e62f-c6c8-355c-2009-fdc9ac05a0ee.png)


# 先行研究との差分

- Mapping networkを導入することで，データセットのfeatures entanglementを解消
- coarse, middle, fineなレベルのstyleを操作可能
- ノイズで（シワ，そばかす，毛先のような）小さなバリエーションをつけることが可能



# 技術や手法のキモ

## Progressive-Growing of GANs（筆者の従来手法）
![1_fydEO1rIeJBwZ9LS0wOoTg.gif](https://qiita-image-store.s3.amazonaws.com/0/259451/aa978c8d-43f5-8d4b-4ebe-f9c6958542ad.gif)

**Progressive-Growing of GANs** [[26]](https://arxiv.org/abs/1710.10196) は高解像度の画像を生成するためのテクニックで，generatorとdiscriminatorを低い解像度の層から順に学習するというもの．
徐々に解像度を大きくすることで，学習を効率的に進め，良い結果に繋がるらしい．
しかし，従来手法では生成する画像を操作することが難しいので，generatorを改良して操作可能に．

## Mapping network
以下の画像（fig 1）の (a) が従来の，(b) が提案手法のgenerator．
提案手法のgeneratorは**Mapping network** $f$ （赤破線枠）と **Synthesis network** $g$ （青破線枠）で構成される．
画像中 A は **learned affine transform**，B は **learned per-channel scaling factors to the noise input** で Synthesis network の各畳み込み層の直後にそれらの出力が入力される．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/93f77921-cd55-fb7f-a26d-23ba3ee0a6eb.png)
※ 論文中のFigure 1を加工


Mapping networkの目的は入力のベクトル$z \in \mathbb Z$を別の空間$\mathbb W$に射影すること．
つまり，$f: \mathbb Z \to \mathbb W$でエンコード後のベクトルは$w\in \mathbb W$．

これにより，**features entanglement**（これを解消（disentanglement）しないと，生成画像の操作が難しい）を解消することができる（おそらくデータセットに含まれる画像特徴の分布（偏り）に従わなくてよくなる）．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/0b810061-37eb-18fc-e771-5bd5e241bf00.png)


## Adaptive Instance Normalization (AdaIN)
ベクトル$w$はlearned affine transform A（おそらく全結合層で2出力，scale vector $y_{s, i}$, bias vector $y_{b, i}$）で画像用のベクトルに変換される．
その後，**AdaIN**でSynthesis networkの特徴ベクトルと合体．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/17fae680-7903-d69a-6c7d-09270ef3dc3e.png)


## Removing traditional input
画像の生成のために従来のgeneratorにrandom inputを定数（赤枠，4x4x512）に変更．
$w$やAdaINで生成画像を操作できるということを発見したため定数に変更したらしい．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/2b8cd77c-2ec9-4a3a-eac5-a1817e58cd09.png)
※論文中のFigure 1を加工


## Stochastic variation
人間の（シワ，そばかす，毛先のような）小さなバリエーションは，各層のサイズにスケーリングされたノイズで実現．
Bのlearned per-channel scaling factors to the noise inputでスケーリング後に入力．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/3782db01-7abd-dd84-80f0-dc40a0760ff4.png)
※論文中のFigure 1を加工


## Style mixing
$z_1, z_2$をMapping networkに入力し，得られた$w_1, w_2$を使用してStyle mixingを行う．
どの割合で$w_1, w_2$をmixした$w$を，どの層へ入力するかで，styleを操作することができる．
（$w_1$にどれだけ$w_2$の特徴を加えるかを操作）
lower levelの層への入力を操作することでcoarse styleを変更でき，topの層に向かうにつれてmiddle, fine detailを変更できる．
以下の画像がStyle mixingの結果．
入力先の層を変えることで，どのレベルの特徴を操作するかを選べる（[YouTube](https://www.youtube.com/watch?v=kSLJriaOumA)を見た方が分かりやすい）．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/de6c4ff5-cf66-364d-6bb2-dca0891ccb12.png)

## Truncation trick in W
generatorはデータセットにあまり含まれていないスタイルを学習することが難しい（似た画像を生成するようになる，mode collapse?）．
これを防ぐために**Truncation trick**を導入する．
$\mathbb W$の平均$\bar{w} = \mathbb E_{z\sim p(z)} \bigl[f(z)\bigr]$を求めて，$w$を

```math
w^{\prime} = \bar{w} + \psi(w - \bar{w})
```
とする．
$\psi$でどれだけ平均画像から離れた画像を生成するかを操作できる（[YouTube](https://www.youtube.com/watch?v=kSLJriaOumA)を見た方が分かりやすい）．


## The FFHQ dataset
Flickr-Faces-HQ (FFHQ) は，1024x1024の顔画像70000枚で構成される．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/c539526d-f72a-a7cb-c3c0-b2d19264ae75.png)




# どうやって有効性を検証したか

## Quantitative results
2つのデータセットを用いた際のFID scoreの比較．
FID scoreが低いほど生成画像の質が高く，多様性があることを表す．
AからFに進むにつれて提案手法の構造．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/decb3404-dd23-3152-a1f1-6274a71a0ab4.png)

Disentanglementを定量化するために，**Perceptual path length**と**Linear separability**（どちらもentanglement具合の指標）を提案しており，各ネットワークでこれらの値を比較（値は小さいほど良い）．
Eが最もよく，Fで値が大きくなったのはstyle mixingを加えることで$W$の分布を学習するのが難しくなったからだと考えられる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/3f6c9538-09c7-3716-1089-08ba172f9d67.png)

以下はMapping networkの深さを変えた場合の比較．
どの指標も深い構造のものが最も良いことが分かる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/41ce0779-38c2-a507-9085-53c689b5a5ec.png)


## Qualitative results

以下は，Stochastic variationによる変化を可視化したもの．
繊細なvariationを加えられていることが分かる．
standard deviationが大きいところほどStochastic variationが効いており，髪の毛や背景が大きな値となっている一方で，アイデンティティや姿勢などは影響を受けていないことが分かる．
また，瞳のエリアの標準偏差が大きくなっているのは，瞳での光の反射が考慮できているからかも．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/8e5b6156-b165-ffa5-cb32-1c1bcf6267b2.png)

以下は，Stochastic variationのためのノイズを加える層を変えたときの比較画像．

- (a) 全ての層にノイズ有り
- (b) ノイズ無し
- (c) topに近い層だけノイズ有り (642 – 10242). 
- (d) lowerな層だけにノイズ有り (42 – 322)

ノイズ無しだと絵画っぽくなってしまう．
(c) は　finer　な影響を与え，(d) は大きな変化を与える．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/52e41fd1-529f-af5e-aba3-d97df295dbaf.png)

以下は，Truncation trickの$\psi$の値を変えたときの比較画像．

```math
w^{\prime} = \bar{w} + \psi(w - \bar{w})
```
$\psi = 0$のとき$w$は平均$\bar{w}$になる．
$\psi$の変化（-1 ~ 1）とともに視点，メガネの有無，年齢，色，髪の長さ，性別が反転しているところが面白い．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/7793b296-3aeb-d8bc-1c54-5873aa8fdf15.png)

以下はその他のデータセットによる結果．
どのデータセットでも非常にバリエーションに富んでいる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/bf3dd881-eb58-2d25-b6f3-ba2c9ec190e4.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/d549cec0-d743-5b1e-0f7e-704d64b3a269.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/298f1794-0832-e94c-0bca-db82c0fec343.png)


# 議論はあるか

- 高解像度（1024x1024）の画像を生成するGAN，StyleGANを提案
- Perceptual path lengthとLinear separabilityという評価指標を提案
- この論文で用いられたテクニックや評価指標はその他のGANでも利用できるため，今後のスタンダードになるかも

# 次に読む論文
この論文の拡張元
[Progressive Growing of GANs for Improved Quality, Stability, and Variation
](https://arxiv.org/abs/1710.10196)