Attentive Generative Adversarial Network for Raindrop Removal from A Single Imageを読んだ

Rui Qian, Robby T. Tan, Wenhan Yang, Jiajun Su, and Jiaying Liu
CVPR2018
[pdf](http://openaccess.thecvf.com/content_cvpr_2018/papers/Qian_Attentive_Generative_Adversarial_CVPR_2018_paper.pdf), [arXiv](https://arxiv.org/abs/1711.10098), [github](https://github.com/rui1996/DeRaindrop)

# どんなもの？
画像からの雨滴除去をGANを用いて行う．
雨滴有り画像から雨滴無し画像を生成する．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/57d9a808-48ca-c924-10fb-d41d5cc317f7.png)


# 先行研究との差分

- Generator, Discriminator共に (visual) attentionを使用する．
- GeneratorのAttentive-Recurrent Networkでattention mapを生成し，Contextual Autoencoderで雨滴除去画像を生成する．

# 技術や手法のキモ
提案手法の全体図．
Generatorは前半のAttentive-Recurrent Network, 後半のContextual Autoencoderで構成される．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/e7aab1a0-a7b4-9c88-5711-e6e0574015fd.png)

## Generative Network
**Attentive-Recurrent Network**では雨滴の場所やContextual Autoencoderが注目すべき点を表すAttention mapを生成する．
**Contextual Autoencoder**では雨滴有り画像とAttention mapを入力として，雨滴無し画像を生成する．

### Attentive-Recurrent Network
4つのBlockで構成されており，各Blockは5層（5 x Residual Block）のResNet, LSTM, Convsで構成される．
各Blockへの入力は，入力の雨滴有り画像と前のBlockからのAttention map.

マスクと異なりAttention mapは0~1の値を持つため，雨滴領域内でも値が変化，雨滴外でも値を持ち，雨滴周辺にもAttentionを持つことができる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/d668a8e2-2b84-bcf6-7652-ab5ae7b65d01.png)
※ Figure 2を加工

ロスはAttention mapとマスクのMSEの和.
$\theta = 0.8$は割引率．

```math
L_{ATT}(\{A\}, M) = \sum_{t=1}^{N}\theta^{N-t}L_{MSE}(A_t, M)
```

以下のようなAttention map（epoch毎の$A_{N}$）が生成される．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/22a42213-9430-6e30-47fc-877bcc0683f4.png)

以下はtime stepごとのAttention map.
stepを重ねるごとに雨滴周辺により強くAttentionがかかっていることが分かる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/9d9ee6a5-4f53-b39c-41cb-d6fa64cf7a1f.png)

### Contextual Autoencoder
Contextual Autoencoderへは，入力の雨滴有り画像とAttention mapが入力される．
16個のconv-relu blockで構成され，雨滴除去画像を生成する．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/3ccbc80c-f89f-efd4-4a71-2974ba371afa.png)
※ Figure 2を加工

以下はContextual Autoencoder部分の詳細．
ロスはmulti-scale losses $L_M$とperceptual loss $L_P$の二つが存在．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/57d53fb1-1348-bb56-d5df-4810204151fa.png)
$L_M$は異なる層の出力$S_i$とそのスケールにリサイズした真値画像$T_i$のMSEの和．
$\lambda$は重みで0.6, 0.8, 1.0

```math
L_M(\{S\}, \{T\}) = \sum_{i=1}^{M}\lambda_iL_{MSE}(S_i, T_i)
```

$L_P$はContextual Autoencoderの出力画像$O$と真値画像$T$のVGG特徴のMSE．

```math
L_P(O, T) = L_{MSE}(VGG(O), VGG(T))
```

Generative Network全体のロスは以下のようにまとめられる．

```math
L_G = 10^{-2}L_{GAN}(O) + L_{ATT}(\{A\}, M) + L_M(\{S\}, \{T\}) + L_P(O, T) \\
L_{GAN}(O) = log(1 - D(O))
```

## Discriminative Network
DiscriminatorはAttentive discriminator.
局所的な部分に注目して判別するために，Attention mapを使用する.
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/e348cdaf-455c-2edf-04a2-42d910ccc59a.png)
※ Figure 2を加工

Discriminative Networkのロスは以下で表される．
$D_{map}$はDiscriminative Networkによって2Dマップが生成されるプロセスを表す．
$O$はContextual Autoencoderの出力画像，$R$は雨滴無し画像群からの画像．
$A_N$はAttention map.

```math
L_{map}(O, R, A_N) = L_{MSE}(D_{map}(O), A_N) + L_{MSE}(D_{map}(R), 0) \\
L_D(O, R, A_N) = -log(D(R)) - log(1 - D(O)) + \gamma L_{map}(O, R, A_N)
```

# どうやって有効性を検証したか
## Raindrop Dataset
実験には背景が同一の雨滴有り画像と雨滴無し画像のペアが必要．
そのような画像を撮影するために，普通（濡れていない）のレンズと水を吹きかけたレンズを付け替えて画像ペアを作成．
作成したRaindrop Datasetは1119ペアの画像データセット．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/aca5c9bc-c2c0-5ea7-b4f4-e95ea7bd4ccc.png)

## Quantitative Evaluation
PSNRは生成画像の真値画像の画素値が平均的にどれだけ変わったかで評価．
SSIMは生成画像と真値画像間の画素値，コントラスト，構造の変化で評価．
どちらも高い値の方が良．
[PSNR, SSIMについて](http://visualize.hatenablog.com/entry/2016/02/20/144657)

- A (autoencoder alone without the attention map)
- A+D (non-attentive autoencoder plus non- attentive discriminator)
- A+AD (non-attentive autoencoder plus attentive discriminator). 
- AA+AD (attentive autoencoder plus attentive discriminator, **proposed**)

提案手法が最も良いスコアを出している．
このことからGenerative, Discriminative network両方でAttention mapを使用する有効性が分かる． 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/f758f471-8a9a-0f95-03d3-a520d2357fd3.png)

## Qualitative Evaluation
以下は別手法との比較．
提案手法が最も効果的に雨滴除去できていることが分かる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/299ae229-bf01-70c9-399d-906552431199.png)

以下は提案手法の要素の有無で比較したもの．
(b) -> (e)の順により良い雨滴除去が可能になっている．
定性的にもAttention mapを使用する有効性が分かる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/8ae3e538-1940-28c2-9012-0d376a59b18e.png)

より細かく生成画像を比較すると，ノイズが少なく，背景の構造を維持した雨滴除去ができていることが分かる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/0cde78ec-f3f2-83f1-9782-78a2143a826c.png)

## Application
Google Vision API (https://cloud.google.com/vision/) を使った比較．
オリジナルの画像と雨滴除去後の画像を入力し，認識結果で比較する．
雨滴除去後の画像の方が認識結果が良く，また多くの物体を認識できている．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/accc12be-bebb-cdb2-c4ff-2e965afdbbd2.png)

以下はtest dataset全ての画像による結果をまとめたもの．
雨滴除去後の方がscoreが高く，多くの物体を認識できる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259451/066d5766-d2fb-697d-c961-77c44cfd01e5.png)

# 議論はあるか
- Single-image basedの画像からの雨滴除去手法を提案
- Generative NetworkはAttention mapを生成し，それに基づき画像を生成する
- Discriminative NetworkでもAttention mapを用いて画像を判別する

# 次に読むべき論文
ロゴを生成するGAN
[Logo Synthesis and Manipulation
with Clustered Generative Adversarial Networks](http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/2998.pdf)