Text-Adaptive Generative Adversarial Networks: Manipulating Images with Natural Language を読んだ

Seonghyeon Nam, Yunji Kim, and Seon Joo Kim
Yonsei University
NeurIPS 2018
[arXiv](https://arxiv.org/abs/1810.11919), [pdf](https://arxiv.org/pdf/1810.11919.pdf), [GitHub](https://github.com/woozzu/tagan)

[以前読んだ論文](https://qiita.com/d-ogawa/items/5b25b587deea6929e1df)が比較手法として登場していたので読んでみた．

# どんなもの？
画像とテキストを入力とし，テキストの属性をもつ画像に修正するGAN, TAGAN (Text-Adaptive Generative Adversarial Network) を提案．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/62559433-f298-038b-a588-fdc28cea8f74.png)


# 先行研究との差分

- 従来手法ではオリジナル画像内のコンテンツが崩れることが多かった．提案手法では**与えられたテキストで言及されていない部分は保持**した画像を生成する．
- Word-level の discriminator を提案．

# 技術や手法のキモ

- $x$ : 画像
- $t$ : 画像とマッチしたテキスト
- $\hat{t}$ : 画像とマッチしていないテキスト

目標は，$x$ と $\hat{t}$ が与えられたときに，$\hat{t}$ の属性が加えられ，一方で $\hat{t}$ で言及されていない属性については $x$ のコンテンツを保持した画像 $\hat{y} = G(x, \hat{t})$ を生成すること．

## Generator
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/ee7527bd-6c53-d6aa-ef25-1d2fb1721d44.png)

上の画像は，提案手法の全体図．
Generator はこの Figure 2 (a) の encoder-decoder network．
encoder-decoder network は [[15]](https://arxiv.org/abs/1707.06873) の ものを使用．
テキストは bidirectional GRU でエンコード．

さらに StackGAN[[12]](https://arxiv.org/abs/1612.03242) の **conditional augmentation method** を適用することで，滑らかなテキスト表現と生成された出力に多様性を持たせる．

しかし，このままではテキストで言及されていない新たなコンテンツが生成されてしまうので，**reconstruction loss** [[27]](https://arxiv.org/abs/1711.10678) $L_{rec}$ を導入する．
テキストとして入力画像とマッチした $t$ が与えられたときに，入力画像を生成させるようなロス．

```math
L_{rec} = || x - G(x, t) ||
```

## Text-adaptive discriminator
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/ee7527bd-6c53-d6aa-ef25-1d2fb1721d44.png)

Figure 2 (b) が Text-adaptive discriminator．
generator と同様に，discriminator も text encoder (bidirectional GRU) を同時に学習する．

ここで， $i$ 番目の単語をエンコードした word vector $w_i$ を入力とする **1D sigmoid local discriminator** $f_{w_i}$ を導入する．

```math
f_{w_i} = \sigma(W(w_i) \cdot v + b(w_i))
```

$W(w_i), b(w_i)$ は $w_i$ に依存する重みとバイアス．
$v$ は image encoder の出力に global average pooling を適用して計算した 1D image vector．

word ごとの attention $\alpha_i$ は，

```math
\alpha_i = \frac{\exp{(u^Tw_i)}}{\sum_i \exp{(u^Tw_i)}}
```

で計算する（$u$ は $w_i$ の時間平均(？)）

$x, t$ が与えられたときの最終的な discriminator の出力 $D(x, t)$ は

```math
D(x, t) = \prod_{i=1}^T\bigl[f_{w_i}(v)\bigr]^{\alpha_i}
```

$T$ はテキスト中の単語数．
さらに，複数スケールの画像特徴を考慮するために，以下のように書き換え．

```math
D(x, t) = \prod_{i=1}^T \bigl[ 
\sum_j \beta_{ij} \ f_{w_i, \ j}(v_j) \bigr]^{\alpha_i}
```

$v_j$ は image encoder の $j$ 層目の image vector，$\beta_{ij}$ は $j$ 層目の $w_i$ の softmax weight．

ここまでで定義した $D(x, t)$ を **text-conditional loss** とする．

## GAN objective
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/2c7fd3b5-1601-dded-137c-434fdf070373.png)

目的関数は，

- unconditional adversarial loss $D(x)$
- text-conditional loss $D(x, \hat{t})$
- reconstruction loss $L_{rec}$

で構成される．

```math
L_D = \mathbb E_{x, t, \hat{t} \sim p_{data}} \bigl[ \log{D(x) + \lambda_1(\log{D(x, t) + \log{(1 - D(x, \hat{t}))}})}\bigr] \\
 + \mathbb E_{x, \hat{t}\sim p_{data}} \bigl[ \log{(1 - D(G(x, \hat{t})))}\bigr]
```

```math
L_G = \mathbb E_{x, \hat{t}\sim p_{data}} \bigl[ \log{D(x)} + \lambda_1 \log{D(G(x, \hat{t}), \hat{t})}\bigr] + \lambda_2 L_{rec}
```

$L_D$ に $D(G(x, \hat{t}), \hat{t})$ が無いのは，学習の安定化のため．
$L_D, L_G$ を最大化するように学習（のはず）．

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

- Dataset
    - CUB dataset [[18]](http://www.vision.caltech.edu/visipedia/CUB-200-2011.html)
        - 11,788 bird images of 200 categories
    - Oxford-102 dataset [[19]](http://www.robots.ox.ac.uk/~vgg/publications/papers/nilsback08.pdf)
        - 8,189 flower images of 102 categories
    - どちらのデータセットにも各画像に10個のキャプションが用意されている [[11]](https://arxiv.org/abs/1605.05396)

- Baseline methods
    - SISGAN [[15]](https://arxiv.org/abs/1707.06873)
        - オリジナルの実装をそのまま使用
    - AttnGAN [[13]](https://arxiv.org/abs/1711.10485)
        - オリジナルの実装に image encoder と reconstruction lossを追加


## Quantitative results
Human evaluation.
test set から 10枚の画像と 10個のテキストを選び，2つのデータセットから100枚ずつ（計200枚）の画像を生成．
20人に評価してもらい，3つの手法に順位を付けてもらう．
Worker には2つの基準で評価してもらう．

- Accuracy
    - whether the visual attributes (colors, textures) of the manipulated image match the text, and the background irrelevant to the text is preserved
- Naturalness
    - whether the manipulated image looks natural

以下は Human evaluation の結果．
AccuracyとNaturalnessは各手法の平均順位．
$L_2$ reconstruction error は「オリジナル画像」と「オリジナル画像とpositive textを入力した時の生成画像」の $L_2$ error．
どの指標，データセットにおいても提案手法が最も好まれていることが分かる．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/eaee2179-eb5a-c162-8c3f-931296fc406d.png)


## Qualitative results
以下は提案手法による生成画像．
テキストに従った的確な変化が加えられている．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/aa0383a5-6fa7-1744-5ff2-9f36e96fcba3.png)

以下は従来手法との比較．
どちらの従来手法もオリジナル画像のポーズとレイアウトを保持できているが，テキストで言及されていないコンテンツが保持されない傾向がある．
一方で提案手法では，的確な属性の変更が加えられ，テキストで言及されていないコンテンツについては保持されていることが分かる．

右端は失敗例で，テキストで新たなshapeの記述がされている．
「オリジナルのコンテントを保持すること」と「新たなコンテンツを生成すること」が trade-off の関係にあるからだと述べている．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/ad3731e7-fe1e-b74e-6aab-00e82724a09a.png)


## Component analysis
以下は local discriminator の saliency map を Class Activation Maps (CAMs) [[31]](http://cnnlocalization.csail.mit.edu/Zhou_Learning_Deep_Features_CVPR_2016_paper.pdf) で可視化したもの．
3つの畳み込み層における top-3 の word attentions を可視化している．
この画像から，テキスト内の視覚属性とそれに対応してどの層における情報に重きを置くかを学習していることが分かる．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/b8b4ebb9-1c5d-d45b-5517-9a4baf3ce55c.png)

以下が text-conditional loss に使用する畳み込み層を変更した場合の比較．
conv3, 4, 5と異なるレベルの情報（疎な情報からきめ細かな情報まで）を用いた場合が最も良いことが分かる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/dd396524-7fd9-c329-7be6-cef98829abf0.png)

以下の表は，CUB dataset における top-1 の image-to-text retrieval accuracy (Top-1 Acc) と top-50 の text-to-image retrieval results (AP@50) の結果．
text-to-image で特に大幅な向上が見られるが，これは word-level の discriminator と そこでmulti-scale layers を使用していることによるらしい．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/00e79c09-0c77-523c-8757-f5c55be2065c.png)

最後に，異なる2つのテキストのベクトル間を補完し，画像を生成した結果．
オリジナル画像のコンテンツは保持したまま，妥当な画像が生成されていることが分かる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/127d3537-d281-9c9a-d255-39040e6270b1.png)


# 議論はあるか

- 画像とテキストを入力とし，テキストの属性をもつ画像に修正するGAN, TAGAN (Text-Adaptive Generative Adversarial Network) を提案
- word-level local discriminators を使用することで，テキストからきめ細かな視覚属性を得られるように学習が可能
- 提案手法では，テキストで言及されていない部分はオリジナルのコンテンツを保持したまま修正を加えることが可能

# 次に読む論文

- Person Re-identification に GAN を使用した論文
    - [FD-GAN: Pose-guided Feature Distilling GAN for Robust Person Re-identification](https://arxiv.org/abs/1810.02936)