PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATIONを読んだ

Tero Karras, Timo Aila, Samuli Laine, Jaakko Lehtinen
NVIDIA and Aalto University
Published as a conference paper at ICLR 2018
[arXiv](https://arxiv.org/abs/1710.10196), [pdf](https://arxiv.org/pdf/1710.10196.pdf), [GitHub](https://github.com/tkarras/progressive_growing_of_gans), [YouTube](https://www.youtube.com/watch?v=G06dEcZ-QTg&feature=youtu.be)

[前回読んだ論文](https://qiita.com/d-ogawa/items/d645509e3ccedc989680)の元となった論文．

# どんなもの？
Progressive growing of GANsを用いることで，学習をより早く，また安定させることができ，高解像度の画像の生成も可能にした．
![1_fydEO1rIeJBwZ9LS0wOoTg.gif](https://qiita-image-store.s3.amazonaws.com/0/259451/061ea8a7-a7c8-2f2b-2dbd-550bb73b91e6.gif)


# 先行研究との差分

- Progressive growing of GANs
- Minibatch standard deviationを用いたvariation
- Equalized learning rate
- Pixelwise feature vector normalization
- 新たな評価指標sliced Wasserstein distance SWD

を提案

# 技術や手法のキモ

## Progressive growing of GANs
以下の画像はProgressive growing of GANsの概要図．
低解像度の画像から学習し，学習が進むにつれて徐々に層を積み重ねる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/a987f81f-388b-b64f-563b-267b9b748749.png)

新たに層を積み重ねるときには学習済みの層へのsudden shocksを回避するために，下図のように$\alpha$を0~1へと線形に増やす．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/80d5a8e5-608f-d0ba-67c1-d177ba27c090.png)


## Increase variation using minibatch standard deviation
出力画像に多様性を持たせる方法の一つに[minibatch discrimination](https://arxiv.org/abs/1606.03498)がある．
これを簡略化した以下のようなテクニックをdiscriminatorの最終層で使用する．

- ミニバッチの画像間の標準偏差を計算（B x H x W x C → H x W x C）
- 空間的な位置ごとに平均をとる（H x W x 1）
- 平均をとったものを各画像にconcatenate

## Equalized learning rate
重みの更新を工夫する．
重みの初期化は$\it{N} (0, 1)$で初期化するが，重みの更新は

```math
\hat{\omega_i} = \omega_i / c
```
とする．
$c$は[Heらの初期化](https://arxiv.org/abs/1502.01852)で得られるper-layer normalization constant．
これによって通常，RMSProp, Adamなどはダイナミックレンジが大きいパラメータは学習により多くの時間がかかるが，この正則化によってスケールを考慮したパラメータの更新ができ，学習のスピードを上げることができる．

## Pixelwise feature vector normalization
学習でそれぞれのネットワークが，制御不可能な値をとるようになることを防ぐために，generatorの各畳み込み層の後にチャンネル方向の正規化を加える．

```math
b _ { x , y } = \frac{a _ { x , y }}{\sqrt { \frac { 1 } { N } \sum _ { j = 0 } ^ { N - 1 } \left( a _ { x , y } ^ { j } \right) ^ { 2 } + \epsilon }}
```

$\epsilon = 10^{-8}$，$N$は特徴マップの数で$a_{x, y}, b_{x, y}$はそれぞれオリジナルと正規化後の特徴ベクトルの要素$(x, y)$の値．

## sliced Wasserstein distance SWD
既存の評価指標である[MS-SSIM](https://arxiv.org/abs/1610.09585)は大きなmode collapsesには敏感だが，色やテクスチャの多様性のような小さな効果はスコアに影響しにくく，生成した画像とtraining setの類似度を評価してもいない．
そのため新たにLaplacian pyramidによって得られた局所特徴を用いる評価指標，sliced Wasserstein distance SWDを提案．
しているのですが，理解が及ばない．．．
何か生成画像とtraining set中の画像を比較し，各層のごとのsliced Wasserstein distanceを求めている．

# どうやって有効性を検証したか
下の表はCELEBA，LSUN BEDROOMでの評価．
Baseline (WGAN-GP) の手法に，提案した要素を順に追加している．
要素を追加するほどより良いスコアを得ている．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/491c6d3f-73a3-86af-8340-6d3071ffd57d.png)
また，各段階での生成画像を比較すると (h) が最も良いがMS-SSIMがそれを反映していないことから，提案した評価指標の方が好ましい．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/b0ccf7df-78c4-4652-113d-706ba13ae2de.png)

下の図中 (a), (b) はWGAN-GPと提案手法の訓練時間ごとのSWD．
提案手法の方がSWDが下がっており，収束するまでの時間も短い．
また提案手法では低解像度の層を学習したのちに上層を積み重ねているため，学習が安定している．
(c)は経過時間に対する学習に使用した画像枚数のグラフ．
提案手法では序盤は層が浅く，処理が軽いため多くの画像を使用できている．
提案手法では学習が収束するまでに合計で640万枚の画像を96時間掛けて処理したが，従来手法が同じ枚数処理するには520時間掛かってしまう（提案手法が5.4倍高速化できている）．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/193a7419-c949-9c8b-dddd-5f6ba5fb5b95.png)

以下の画像はCELEBA-HQを用いた時の生成結果．
画像サイズは1024x1024で，学習には8 Tesla V100 GPUsで4日掛かった．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/ab3c48a1-d4cb-1c67-245a-64441ffa1754.png)

以下はこの時のネットワーク．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/f9ae23d0-b25e-cc31-965d-d97e895f4079.png)

以下はその他のデータセットを使用した場合の結果．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/fbdb5deb-444c-a1a1-5163-74356a9e7605.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/94aecee8-2d4d-7491-920d-5b6a36636b15.png)


# 議論はあるか

- 段階的に層を積み重ねながら学習を進めるProgressive growingを提案
- 生成画像に多様性を持たせ，学習を安定に，高速に行うための工夫を提案
- 画像中のより微細な構造の部分については改善の余地がある

# 次に読む論文
考え中．．．