High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANsを読んだ

Ting-Chun Wang, Ming-Yu Liu, Jun-Yan Zhu, Andrew Tao, Jan Kautz, Bryan Catanzaro
NVIDIA Corporation, UC Berkeley
CVPR2018
[pdf](https://arxiv.org/pdf/1711.11585.pdf), [arXiv](https://arxiv.org/abs/1711.11585), [github](https://github.com/NVIDIA/pix2pixHD), [project page](https://tcwang0509.github.io/pix2pixHD/)

# どんなもの？
[前回紹介した](https://qiita.com/d-ogawa/items/12252cc10111bcc2d4d8)論文の拡張元の論文．前回の論文中に比較手法として登場しているpix2pixHDを提案．
Conditional GANを用いた高解像度（2048x1024）のimage to imageの手法を提案．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/c002f9b1-f747-ea19-380d-35328d4bc8f6.png)


# 先行研究との差分

- 高解像度（2048x1024）でリアルな画像を生成可能
- ラベル情報を操作することで Interactive Object Editing が可能
- Boundary map を使用することでより物体の境界が鮮明に

# 技術や手法のキモ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/a2f50ce6-bf12-fe11-6743-3b138663c0ff.png)
※論文中Figure 3を加工

## Coarse-to-fine generator
$G_1$で4分の1サイズ（1024x512）の画像を生成，画像特徴を$G_2$でも使用し，画像をrefineし出力（2048x1024）.
$G_1$には512x512のstyle transferで良い結果が得られた手法[[22](https://arxiv.org/abs/1603.08155)]のネットワークを使用．
学習時には初めに$G_1$を訓練し，その後$G_2$を訓練した後に全体でfine-tuning．

## Multi-scale discriminators
高解像度の画像を判別するには大きな受容野が必要となる
→　そのためには深い構造や大きな畳み込みフィルタが必要
→　大きなメモリが必要に，過学習の原因に
→　元サイズ，2分の1サイズ，4分の1サイズの生成画像を判別する同じ構造のdiscriminator $D_1, D_2, D_3$を用意することで解決

```math
\min_G\max_{D_1, D_2, D_3}\sum_{k=1, 2, 3}L_{GAN}(G, D_k)
```

## Improved adversarial loss
discriminatorの角層の特徴マップでfeature matching lossを定義．
$k$番目のdiscriminatorの$i$層目の特徴マップを$D_k^{(i)}(s, x)$と表記．

```math
L_{FM}(G, D_k) = \mathbb{E}_{(s, x)}\sum_{i=1}^T\frac{1}{N_i}\Bigl[\bigl|\bigl|D_k^{(i)}(s, x) - D_k^{(i)}(s, G(s))\bigr|\bigr|_1\Bigr]
```

最終的に以下の問題を解く．

```math
\min_G\biggl(\Bigl(\max_{D_1, D_2, D_3}\sum_{k=1, 2, 3}L_{GAN}(G, D_k)\Bigr) + \lambda\sum_{k=1, 2, 3}L_{FM}(G, D_k) \biggr)
```

## Using Instance Maps
入力とするセマンティックセグメンテーション画像では同じクラスの個体までは区別しない．
個体まで区別したいが，one-hot vectorなどで与えると，クラスごとでチャンネル数が異なってしまい現実的な解決法ではない．
→　今回は個体の情報として個体間の境界線（instance boundary map，4近傍が異なるobject IDなら1，それ以外は0）を入力に与える．
以下はinstance boundary mapの例．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/3c0a6bad-bb26-6de6-6f43-34017c48ad33.png)
以下はinstance boundary mapの有無の比較．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/cf7147ca-8600-e4c4-3be1-7b98b6cb5996.png)

## Learning an Instance-level Feature Embedding
生成画像に多様性を持たせたり，ユーザーが生成画像をインスタンスレベルで操作できるように，低次元の画像特徴を入力に加える．
インスタンスの真値に対応した低次元特徴を抽出できるようにencoder-decoder network $E$を学習する．
ロス関数中の$G(s)$は$G(s, E(x))$に置き換えられる．

- 学習済みの$E$を使って，画像中の全てのインスタンスの特徴をエンコード
- 同じクラスに属する特徴量をK-meansクラスタリング
- こうすることで同じ"road"クラスでも asphalt や cobblestone　textureを区別できる
- 推論時には同じクラス中から適当にエンコード済みの特徴を取ってくる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/3f21eb26-adac-3c0f-aba2-465ea1b07054.png)


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

- LSGANs を使用
- loss の重み$\lambda = 10$
- $K=10$ for K-means
- perceptual loss $\lambda\sum_{i=1}^{N}\frac{1}{M_i}\bigl[||F^{(i)}(x) - F^{(i)}(G(s))||_1\bigr]$も追加して実験

## Datasets

- Cityscapes dataset
- NYU Indoor RGBD dataset
- ADK29K dataset
- Helen Face dataset

## Baselines

- pix2pix
- CRN

## Quantitative Comparisons
セマンティックセグメンテーション画像を入力としてリアルな画像を生成するタスクを評価．
生成した画像をPSPNetでセマンティックセグメンテーションした結果で比較．
以下の表は生成画像をPSPNetでセマンティックセグメンテーションした結果．
Oracle はオリジナル画像でセマンティックセグメンテーションした結果（理論的な上限）．
提案手法で生成した画像が最も良い結果になっている（Oracle に近いことから，最もリアルな画像だ生成できていると言える）．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/9e523e98-4c14-f0bf-fb6a-2e51636cd30e.png)

## Human Perceptual Study
人間にどちらの生成画像が好ましいかを判断してもらう．

- **Unlimited time**
    - 人間に2枚の画像をじっくりと見てもらって判断してもらう
- **Limited time**
    - 人間に2枚の画像を限られた時間だけ見てもらって判断してもらう
    - 時間は1/8 ~ 8秒に設定

以下の表はUnlimited timeの結果．
9割近くの被験者が提案手法が優れていると判断している．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/22fcf296-566b-03d7-766a-888e00ee7a03.png)

以下のグラフは設定時間毎のLimited timeの結果．
提案手法の方が"Real"に近い画像を生成できていると言える．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/4b7b9171-790d-c4cb-c0eb-c145889f69a6.png)

以下はそのときの生成画像の例．
より詳細な画像を生成できている．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/47f77cc0-1115-6c3f-9fe2-4bdeec82046c.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/944c0617-ea50-a952-3afe-59e4083bcf23.png)

- Using instance maps
    - 64.34%の人がinstance maps有りで学習した画像を好ましいと判断した
- Analysis of the generator
    - generatorの構造をU-Net, CRNの場合と比較

以下の表はgeneratorの構造を変えた場合の比較結果．
提案手法がより良い結果を出している．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/6ba06cfc-b8ab-d026-000d-9838e88bbcf2.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/27d1035f-6613-ef30-c597-63c2c12f6195.png)

- Analysis of the discriminator
    - multi-scale discriminators と only one discriminator で比較
    - generator と ロス関数は固定
    - 69.2%の人が multi-scale discriminators で生成した画像が好ましいと判断した

以下の表は multi-scale discriminators と only one discriminator の比較結果．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/57b86fa6-43a7-7250-1379-f1619bd3c529.png)

- Additional datasets
    - NYU dataset, ADE20K dataset で実験

以下は2つのデータセットによる生成画像の例．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/11b40032-b59d-6ac6-c600-ba1562cc491c.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/f7d3488b-8ea0-7a82-1d2c-6e7e71509f47.png)

## Interactive Object Editing
与えるインスタンスレベルの特徴を変更することで生成画像をinteractiveに変更できる．
以下はその生成画像の例．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/62c0abb0-0fba-c15e-56ef-f45b308ae12c.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/3efa58b8-5034-9845-d0dc-29b0439e0d9c.png)


# 議論はあるか

- Conditional GANsを用いた高解像度なリアルな画像生成手法を提案．
- インスタンスレベルの特徴を与えることで生成画像のtextureをinteractiveに変更することが可能．

# 次に読む論文