【論文メモ】A Style-Based Generator Architecture for Generative Adversarial Networks

# 概要
画風変換手法であるAdaptive Instance Normalization（AdaIN）をGANに持ち込み、高精細かつ潜在変数による制御が用意な画像生成モデルであるStyleGANを提案。
この論文以降の画像の生成モデルは、AdaINを使用するものが非常に多くなった。

また、ネットワーク構造やその学習手順のみならず、画像生成モデルの潜在空間に求められる特性を定量的に評価するためのPerceptual Path Lengthも提案している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/0f351072-4c72-7c16-1008-b67afedebe15.png)

> 注意：この文書は私的なメモです。論文の要約をしているわけではなく、私見が混じっています。

# 論文情報

- Karras, Tero, Samuli Laine, and Timo Aila. "[A style-based generator architecture for generative adversarial networks.](http://openaccess.thecvf.com/content_CVPR_2019/html/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.html)" Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.
- CVPR Honorable Mentions for the papers
- [公式実装（Tensorflow）](https://github.com/NVlabs/stylegan)

# 手法
まず、StyleGANがどのようなネットワーク構造を持っているのかを示す。

従来の多くの手法で採用されていたGenerator(a)と、StyleGANのGenerator(b)を下図に示す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/c8643864-d219-2bb5-b000-adb32e5dd794.png)

従来のGeneratorが潜在変数$z$に畳み込みやUpsampleを加えつつ、徐々に高解像度の画像に変換していくという処理を行なっているのに対し、StyleGANのGeneratorでは、潜在変数$z$をMapping Networkによって変換した後、Synthesis Network内の謎の機構であるAdaINに入力していることが確認できる。

ぱっと以下のような疑問が思いつく。

- AdaINとは何か？ それによって何を行おうとしているのか？
- 図中の「A」や「B」といったSynthesis Networkに入力される情報は、何を意味するか？
- Mapping Networkはなぜ必要か？　適切な次元のガウス分布からサンプルされた$z$を直接「A」に入力してはいけないのか？

以降は、これらの観点からまとめていくが、最初に結論的な要点を示しておこうと思う。

- AdaINは、FeatureMapをscaleとbiasという外部からのパラメータでチャネル単位で制御できるようにする処理機構である。
- 「A」には画像の基調となる特徴を制御するStyleパラメータが入力され、「B」には画像の不確定で確率的な見た目を生ずる特徴を制御するNoiseパラメータが入力される。
- Mapping Networkは、Styleパラメータ空間$W$の滑らかさを実現するために導入される。その効果は、Perceptual Path LengthとLinear Separabilityによって定量的に評価される。

## AdaINによって何を実現しているか
そもそもAdaINとは何かを説明した後に、本手法でどのように使われているのかを確認する。

### Adaptive Instance Normalizationとは
AdaIN[^1]とは、もともと画像のStyle変換の手法として提案された処理で、その名前通り、適応的（Adaptive）なInstance Normalizationである。

AdaINについて確認する前に、通常のInstance Normalizationを見てみよう。
Instance Normalizationは数式的には、以下で表現される。$\gamma, \beta$は、訓練対象のパラメータで、各チャネルごとに訓練される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/32dad373-25fb-13e9-21a4-fe2fc7817ff5.png)

一方で、AdaINは、以下のような数式で表現される。$\mu(y), \sigma(y)$は、外部から入力された$y$の平均と標準偏差を表す。前者をbiasパラメータ、後者をscaleパラメータと表現することもある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/ff79c25d-bd85-5785-4b57-3f676c064726.png)

2つの数式を見比べれば、Instans Normalizationにおける$\gamma, \beta$が、AdaINでは$\sigma(y), \mu(y)$に対応していることがわかる。外部から与えられる$y$によって、どのチャネルをどの程度強調するかをが$y$によって「適応的に」変化することがわかる。

なお、重要なポイントなので強調しておくと、AdaINには、訓練対象のパラメータは存在しない。

[^1]: Huang, Xun, and Serge Belongie. "[Arbitrary style transfer in real-time with adaptive instance normalization.](http://openaccess.thecvf.com/content_iccv_2017/html/Huang_Arbitrary_Style_Transfer_ICCV_2017_paper.html)" Proceedings of the IEEE International Conference on Computer Vision. 2017.

### StyleGANにおけるAdaIN
Style変換の手法では、scaleパラメータとbiasパラメータは、別途用意されているスタイル画像から得られる特徴量$y$の統計量だが、StyleGANでは、Mapping Networkを通じて直接算出される。

本手法でのAdaINは以下のように書かれる。元のAdaINではscaleパラメータとbiasパラメータが統計量であったのに対し、直接入力された$y$をそのまま適用していることがわかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/0f9b499e-e04f-3c36-cafc-afdfbb74d752.png)

## Synthesis Networkレイヤーの役割分担
Synthesis Networkは似た構造のレイヤーが積層されており、それぞれにAdaIN用のStyleパラメータと、ランダム性を付与するNoiseパラメータを各レイヤーで外部から注入するという構造になっている。

（記事の読みやすさんのためにネットワーク構造の図を再掲する）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/c8643864-d219-2bb5-b000-adb32e5dd794.png)

このようなパラメータが、生成画像に対してどのような影響を与えるのかを確認していく。

### Styleパラメータ
画像生成のモデルでは、潜在変数を通じて、生成される画像の構図や基本的なパーツの配置、テクスチャ、色といった属性を独立して制御できることが理想とされる。本手法での潜在変数$w$は分割されて、Styleパラメータとして使われるが、Synthesis Networkのはじめの方のレイヤーに入力されるもの、おわりの方のレイヤーに入力されるものとで異なる属性を担当することが期待される。実際、定性的には、以下のように、レイヤーごとに異なる属性を担当するように訓練される。

- はじめの方のレイヤー: 顔の向きや基本的な顔つきといった、粗い描画を担当している。
- 中間のレイヤー: 顔のパーツの特徴といったより細かい描画を担当している。
- うしろの方のレイヤー: 細かい髪の色、肌の色といった色合いや細かい特徴を担当している。

各レイヤーに入力されるStyleパラメータが独立して生成画像の属性を制御できることは、以下の図からも確認できる。Source AとSource Bは、$z_a, z_b$から得られた$w_a, w_b$をもとに、Synthesis Networkを通して生成された画像である。そして、$w_a$の一部を$w_b$に置き換えた時に生成される画像が並べられている。はじめの方のレイヤーに対応する部分を$w_b$に置き換えると、顔の向きや基本的な顔つきが変化したり、うしろの方のレイヤーに対応する部分を置き換えると、細かい髪の色や肌の色が変化するということがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/5d01aab1-1e2b-a135-fedb-b2eda6300704.png)

詳細は記述しないが、本手法では、このような複数の$w_a, w_b$を混合したとしてもうまくDiscriminatorを騙せるような画像を生成できるように訓練するという、Mixing Regularizationを採用している。これによって、Style情報を様々なレイヤーで画像の属性を分離するという目的を達成しようとしている。

### Noiseパラメータ
StyleGANでは、AdaINに入力されるStyleパラメータ以外に、上図の「B」に当たる部分にNoiseパラメータが入力される。このノイズは、髪の毛、そばかす・黒子の位置、といった確率的に見た目が変化する属性に関わる生成を行うために用いられている。

以下の図は、あるレイヤーで入力するノイズを変化させた時に、生成画像にどのような変化が見られるのか、という例を示している。左が生成画像の全体で、真ん中が髪の毛がNoiseパラメータによってどのように変化するのかを示しており、右がNoiseパラメータによって生じる画素値のばらつきを示している。Noiseパラメータが、髪の毛やシワといったランダムに変わりうる情報に対応していることがわかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/25813ebf-0e6d-8955-5601-81f2070b9564.png)

また、以下の図は、はじめの方のレイヤー（粗い描画を制御する）でノイズを入れないとどうなるか、おわりの方のレイヤー（細かい描画を制御する）でノイズを入れないとどうなるか、といった比較を示している。

- (a) 全てのレイヤーでノイズを入れている。
- (b) ノイズなし。髪や肌の質感がぼやけている。
- (c) はじめの方のレイヤーはノイズなし。描画が細かいが、(a)と比べると髪がやや整然としすぎていて違和感がある。
- (d) うしろの方のレイヤーはノイズなし。髪の束はランダムだが、ぼやけている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/984dbb43-af74-4896-f899-912c8ce548fc.png)

## Mapping Networkの必要性
Mapping Networkは、ガウス分布からサンプルされた$z$に対して非線形の変換$f$を加えるという処理を行う。この処理が、潜在空間の滑らかさを実現するために必要なのだ、という説明をする。
また、本当にMapping Networkによって潜在空間が滑らかになっているのかを評価するために提案されている、Perceptual Path LengthとLinear Separabilityという評価指標についても確認する。

### 潜在空間の滑らかさ
制御が容易な潜在空間は、「滑らか」であることが求められる。「滑らか」とは、以下のような性質を指すものとする。

- (ア)潜在空間における近傍の2点から生成される画像の対は、見た目が近い。見た目の近さは、VGG16によって得られるEmbedding同士の距離を元に、画像間の見た目の距離を測る手法[^2]がある。
- (イ)潜在空間における自然な画像を生成できる任意の2点の線形補間からも、自然な画像を生成できる。

この性質を満たすことで、潜在変数を通じた生成画像の制御が可能になると考えられる。潜在変数に少しノイズを加えたくらいで、生成される画像の見た目が大幅に変わってしまうようでは潜在変数を通じた生成画像の制御などできなくなってしまうし、自然な画像が生成できるとわかっている2つの点の線形補間は、その2つの自然な画像の中間的な属性を持ちつつも、自然な画像であってほしい。

### Mapping Networkの必要性
潜在空間の滑らかさを実現するために問題となるのが、教師データの分布に偏りがあることである。以下の画像の(a)は、画像の属性を2軸取ってきて、分布を示したものである。ここでは、縦軸が「男らしさ」、横軸が「髪の長さ」だとする。さいの目状に均等に引かれている線は、この空間が滑らかであることを示している。左上が空白なのは、教師データの偏りを示しており、「男らしく」かつ「髪が長い」という画像が存在しないということを表している。しかし、空間としては存在しており、左上の空白の点は、「男らしく」かつ「髪が長い」画像に対応している。実際には、このような属性は潜在的なものなので、この分布はあくまでも理想的なものである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/c4bf33a2-2be6-56f8-7b03-fef5614425ea.png)

GANの学習は、(a)の属性分布と$g(z)$の分布をできるだけ一致させることが目的である。そのため、教師データに存在する属性と潜在空間内の点とを対応づけるように訓練される。そのため、ガウス分布の中心に近い範囲（(b)の黒太線で囲まれた円形領域）に、(a)の分布が無理やり押し込まれるように学習してしまい、教師データに存在していない属性の組み合わせに対応する点はガウス分布の端へと追いやられてしまう。
これによって、潜在空間の滑らかさが崩れてしまい、$Z$の空間では、（ア）や（イ）の条件が満たせないということがわかる。

ここで、$z$に対して非線形変換$f$を施した$w = f(z)$が存在する別の潜在空間$W$を考える。(c)に示す黒太線で囲まれた領域が、$f(z)$が分布している範囲であり、そこに(a)の分布を対応させると、潜在空間$W$の滑らかさが保たれているということがわかる。「男らしく」かつ「髪が長い」特徴に対応する点もどこにあるかが容易に分かる。

まとめると、$Z$空間と特徴分布を直接対応づけようとすると、（ア）と（イ）の性質が満たせなくなってしまう。一方で、適切な非線形変換$f: Z \rightarrow W$を用いると、属性の分布との対応づけが容易な空間$W$で潜在変数を扱うことができるようになるため、（ア）と（イ）の性質を満たすことができる。

この非線形変換$f$こそが、Mapping Networkである。これによって、潜在空間の望ましい性質が満たせる可能性が生まれる。

[^2]: Zhang, Richard, et al. "[The unreasonable effectiveness of deep features as a perceptual metric.](http://openaccess.thecvf.com/content_cvpr_2018/html/Zhang_The_Unreasonable_Effectiveness_CVPR_2018_paper.html)" Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.

### 潜在空間の評価指標
潜在空間の滑らかさを評価する指標として、Perceptual Path Lengthを提案している。また、潜在空間が主要な顔の要素（CelebAのラベル）に関して線形分離可能であることを示す、Linear Separabilityも導入している。

#### Perceptual Path Length
Perceptual Path Lengthは、潜在空間の滑らかさ評価するための指標である。
$W$については、以下のように定義されている（$Z$についても、別の定義があるのが、そちらは論文で確認してほしい）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/942ebc01-6023-4d85-0565-d1027cb2f59f.png)

$lerp$は2点をパラメータ$t$で線形補間するという操作で、$g$はSynthesis Networkを表す関数、$d$はPerceptual Distance、$\epsilon$は微小ノイズであり、1e-4といった小さな値が使われる。

$t$の選び方によって、fullとendの2種類が定義されている。

- fullでは、$t \sim U(0, 1)$と選ばれる。
- endでは、$t$は$t \in \{ 0, 1 \}$と選ばれる。

つまり、fullでは、$f(z_1)$と$f(z_2)$の線形補間およびその周辺でのPerceptual Distanceを評価し、endでは、$f(z_1)$と$f(z_2)$のいずれかの周辺でのPerceptual Distanceを評価する。

一般的には、endの方が訓練中にみたことのある点の周辺での評価になるので、Perceptual Path Lengthは小さくなる。逆に、fullの方は、訓練中にみたことのない点の周辺での評価になる可能性もあり、Perceltual Path Lengthは小さいことが望ましいが、endよりは大きくなることが予想される。

#### Linear Separability
潜在空間内で画像の属性が線形分離できるかを確認したい。もし潜在変数を元に画像の様々なニ値の属性を分類できる線形分類器を構築できるとすれば、潜在空間内の変動要因を分離する超平面が存在し、生成画像の制御がしやすくなると考えられる。

具体的には、CelebAのラベル情報（＝画像の属性）を、潜在変数から線形SVMを用いて予測できるようになっている度合いを通して、評価する。とはいえ、潜在変数から生成された画像には分類ラベルがないため、擬似的なラベルを作成する必要がある。具体的には、補助画像分類ネットワークをCelebAの教師データから構築し、生成画像を入力した時に得られる予測結果を擬似的なラベルとする。

擬似ラベルを用いて線形SVMを訓練し、精度の高い線形識別器が構築できるかを、条件付きエントロピーを用いて評価する。

# 実験
代表的な表を示すが、詳細は省略する。

## FIDによる評価
ベースラインをProgGANとし、それに対して順次変更を加えていった結果どのようにFIDが変化したかを評価している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/eeba8b79-78ec-5970-f0d4-7751c66ac3a4.png)

補足しておくと、FIDは、画像集合同士の差異を表す指標である。Inceptionに入力して得られるEmbedding表現を使用し、その分布を多変量正規分布で近似し、分布間の距離を求める。FIDは小さいほど良い。

論文中に示されている提案点を盛り込んでいくことによって、徐々にFIDが下がっていくことが確認できる。

## Perceptual Path LengthとSeparabilityによる評価
提案手法によって、full, end双方のPerceptual Path LengthとSeparabilityが改善することがわかる。また、Mixing Regularizationを50%で行うことで、Separabilityは最適となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/f2b09a8b-0f18-0024-4092-77a359350b37.png)

## Mapping Networkの深さによる比較
Mapping Networkは深さは、非線形変換の複雑さに対応すると考えられる。深さが8ともなると、Separabilityは大きく改善する。ただ、fullではPath Lengthが大きくなっていることから、非線形変換がやや過剰になっている可能性も考えられる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/44166102-8bb1-823b-6a99-79dd1301af9f.png)

# 議論
画像生成で一般的に使われるテクニックとして、truncated trickがある。これは、推論時に潜在変数$z$をサンプリングする際に、ガウス分布の端を取り除いてサンプリングするという処理で、生成画像の質が上がるテクニックとして知られている（高次元のガウス分布では、「全ての次元が外れ値ではない」というサンプルはなかなか自然には得られないので、人工的に分布の端を切り捨てていると、直感的には理解できる）。

今回の手法では、潜在変数$w$に対してこのようなtruncated trickを適用するということもやっている。

# 感想
単により良い画像生成モデルができました、より制御可能な潜在空間を学習できるようになりました、というだけではなく、なぜこれがうまくいくのかという理由を定性的・定量的に示しているのが素晴らしいと思う。

モデルが大きくなる気がするが、Perceptual Path LengthやLinear Separabilityを直接最小化するように訓練するということはできないだろうか、ということをぼんやりと考えた。