【論文読み】写真の天気を自在に変換！「Weather GAN」を紹介

原論文をもとに解説していますが、**間違い、指摘などあればお気軽にご連絡ください**！

# はじめに
近年、GANの発展によりスタイル変換手法がいくつか提案されてきましたが、**オブジェクトや複雑な気象条件を含む「天気の変換」については十分に高品質な画像の生成ができませんでした**。
そこで、本論文の著者たちは「天気の変換」に焦点を当てて専用のGANのフレームワークを開発することにより、従来よりも高品質な天気の変換を可能にしました。
今回はその提案手法である「Weather GAN」を論文に沿って解説していきます。

本記事で解説する元論文
***"Weather GAN: Multi-Domain Weather Translation Using Generative Adversarial Networks"***
Xuelong Li, Kai Kou, Bin Zhao 著
Paper: https://arxiv.org/abs/2103.05422

本記事で引用している画像はすべてこの論文が出典です。

**本記事の流れ**
- 要約・ポイント
- 1. 論文解説
- 2. 所感・まとめ
- 3. 参考文献


#要約・ポイント
- 従来から画像のスタイル変換タスクの研究が行われている
    - しかし、**気象条件にはさまざまなカテゴリと複雑なセマンティック構造があり従来研究ではカバーしきれない**
- そこで、新たにマルチドメイン気象変換フレームワーク「Weather GAN」を提案する
    - いくつかの天気（**晴れ、曇り、霧、雨、雪**）の画像を相互に変換できる
    - 気象を決める要因（雲、青空、湿地などの環境）を効率よく考慮するための**3つのモジュールで構成される**
        1. **Initial translation module：生成過程で全体的な変換を行う**
        2. **Weather-cue segmentation module：気象要因の構造・分布を識別する**
        3. **Attention module：変換すべき領域に焦点を当てる**

- 定量的評価、定性的評価、ユーザー評価において従来手法よりも高い評価を獲得した


# 1. 論文解説

## 1.1 導入
気象条件(天気)によって写真の視覚効果やスタイルが大きく変わることが知られています。そのため、**写真家は撮影場所が最良の気象条件になるまで待つ必要があるため、撮影の効率が悪いという欠点があります。**
そんなとき、「良い天気になるまで待たなくても、撮った写真を好きな天気にすぐ変換できる」手法があれば重宝します。
そこで、本研究では「画像の気象条件を自動的に変換できるアプローチ」を開発します。
Fig.1は本研究の変換例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/659d5e1c-ac48-546d-04b4-dfaa92c59103.png)

### 1.1.1 研究のきっかけ、モチベーション
従来研究に**雨・霧の除去**がありましたが、除去後も見た目の天気がそのままであまり画像が明瞭にならないという欠点があります。そういった手法は雨⇒晴れというように天気を変換することを前提にしていません。
この研究では、画像内の気象を決めている重要な領域にのみ焦点を当て、自然な天気の変換をする手法の開発に成功しました。

### 1.1.2 本研究の貢献点
- 気象変換タスク「Weather GAN」を提案。
- 気象要因の領域に焦点を当てる**Attention module**を開発。
- 気象要因のセグメンテーションマップを生成し、構造を把握する**Weather-cue segmentation module**を開発。


## 1.2 関連研究
### 1.2.1 気象画像
気象認識、雨・霧除去などの研究が行われていますが、複雑な気象条件には対応できません。
例：

- 気象認識を取り入れた自律運転システム
- GANを利用した雨・霧除去

### 1.2.2 GAN
GANは、**画像変換、画像編集、画像生成の分野で大きく進歩しています**。
例：

- 入力画像に対応した画像生成ができるcGAN
- スタイル変換の基礎となったCycleGAN

### 1.2.3 画像変換
画像のスタイル変換、着色、データ拡張の手法が多く提案されています。
例：

- スタイル画像を用いたゴッホの油絵調への変換


## 1.3 提案モデル
### 1.3.1 モデルの構成
提案モデルは、主に3つのモジュールで構成されています。

- Weather-cue segmentation module $G_{seg}$：天気セグメンテーションマップを生成
- Attention module $G_{att}$：天候に関係のある重要な領域を強調するアテンションマップを生成
- Initial translation module $G_{init}$：入力画像 $x$ の全体的なスタイルを変換

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/93ee124b-bd24-d5c5-96e7-3973f6aded82.png)

では、一つずつモジュールの構成を見ていきたいと思います。

### 1.3.2 Weather-cue segmentation module
このモジュールによって、**正確な気象要因の要素と位置を判定することができます**。
たとえば、Fig.3の $G_{seg}(x)$ は、建物と空で正確にセグメンテーションが行われていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/de010fe2-6f4d-5acb-0de8-f4be98e8a501.png)
この画像の場合、**天気の変化は空が重要であるため黄色の領域が重要**ということになります。各領域の構成要素と重要度をこのモジュールを用いて学習します。
気象要因の分布は画像によって非常に複雑であるため、このモジュールに対しては弱教師付き学習を用いています。
このモジュールの学習には、学習画像に対応するセグメンテーションマップをバウンディングボックスを使って手動で作成したものを使用します（使用するデータセットにすでに含まれています）。
損失関数にはクロスエントロピーを使用しています。
$a_{i,j}$：One-hotラベルベクトル（対応した要素のみ1 、そのほかが0のラベル）
$\hat{a}_{i,j}$：予測したラベルベクトル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/df176ba8-f794-aac4-d0be-f11114d6d41f.png)

### 1.3.3 Attention Module
$G_{att}$ によって画像変換に重要な領域の重みづけを行うことができます。 $G_{att}(x)$ は$[0, 1]$の間で連続していて**各領域のAttention Weightとしてはたらきます**。
画像には複雑な背景情報が含まれ教師なし学習では予測位置を誤る可能性があるため、正確に位置を判定できるように $G_{seg}(x)$ と組み合わせて $T(x)$ を生成します（要素積による算出）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/ab38e80e-9bb4-3a9d-2ac1-c87eca507e72.png)
 $T(x)$ は、$G_{seg}(x)$ と $G_{att}(x)$ を組み合わせることで**「天気を変換する際に重要な領域を正確に算出したもの」**と捉えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/a957eb60-3145-8fb2-7d24-cf02393c2a22.png)

### 1.3.4 Initial Translation Module
$G_{init}$ によって全体的なスタイル変換を行うことができます。$G_{init}$ は目的の天気に沿う画像を生成しますが、**個々のオブジェクトや気象要因を考慮しておらず、あくまで全体的に変換を行うモジュールです**。
Fig.3の$G_{init}(x)$を見ると全体的には晴れの画像から曇りの画像に変換されたように見えますが、**建物の色味が変わり、元の色や質感が失われていることがわかります**。

そこで、$G_{init}(x)$ と $T(x)$ を組み合わせることにより、重要な領域のみ変換を適用できるようにします。
変換すべき領域は $G_{init}(x)$ を、維持すべき領域は入力画像 $x$ を適用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/f63b5f6f-09dc-f4fe-8a3b-45c7b4417365.png)

それでは、モデルの損失関数を細かく見ていきましょう。


### 1.3.5 損失関数
#### 1.3.5.1 敵対的損失
ジェネレータ $G$ 、ディスクリミネータ $D$ には一般的なGANの敵対的損失を利用します（$G$、$D$それぞれの損失式は割愛）。
変換元のドメインを $X$ 、変換先を $Y$ としたときの $G$、$D$ の損失は以下で求められます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/66c8974a-3833-4506-2747-3a92faf96fc9.png)

#### 1.3.5.2 双方向変換の敵対的損失
双方向の変換を実現するために、逆変換用のジェネレータ $F$ を用意します。ジェネレータの出力 $G(x)$ を $F$ に入力することにより、変換前の画像 $x$ に戻るような学習をします。
$F$ についても、$G$ と同等の敵対的損失を適用します。逆変換なので、変換元のドメインは $Y$ 、変換先のドメインは $X$ となります。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/d65624e0-b812-3831-d2b0-996930f513f7.png)

#### 1.3.5.3 再変換整合性損失
モード崩壊を起こさないよう、従来手法であるCycleGANに取り入られている損失項$ L_{cycle} $を追加します。
まず、ジェネレータ $G, F$ の出力画像と真の画像のL1損失を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/18bb5a86-d616-25a7-ddde-d507a2b8bd69.png)

また、気象変換のセマンティックをより適切に学習できるよう知覚損失を追加します。
特徴抽出を行う学習済みVGG19ネットワークを使用し、真の画像と生成画像を入力した各層の特徴マップを比較しています。これにより、人間の知覚に近い高品質な画像を生成できるように学習を行えます。
$\phi_j$：VGG19ネットワークの $j$ 層目の特徴マップ
$H_j, W_j$：$j$ 層目の特徴マップのサイズ（高さ、幅）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/bbc34264-5505-2b2c-671f-37995c57ac44.png)

以上の2式を加算し $L_{cycle}$ とします。パラメータ $\lambda$を調整することでそれぞれの項の効き目を制御することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/83f5b156-9102-0581-85ea-41b23bd8f5e8.png)

#### 1.3.5.4 気象カテゴリ損失
ディスクリミネータに気象判別器の機能を持たせ、ジェネレータの生成画像が正しいカテゴリに判定されるように学習します。
カテゴリの算出を $C()$ としたとき、この損失 $L_{class}$ は以下の式で求められます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/165472ff-fecc-4e6f-e0b5-a7f2f7d34d51.png)

#### 1.3.5.5 損失関数全体
損失の項を全て足し合わせて最終的な損失関数とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/6ebb16dc-eda8-2191-3857-679f2e80acbf.png)


## 1.4 実験
### 1.4.1 実験方法
データセットは豊富な気象の画像を有する「Multi-task Weather」を使用します。

- 豊富な気象カテゴリが用意されている（晴れ、曇り、霧、雨、雪）
- さまざまな屋外シーンの画像がある
- バウンディングボックスを利用したセグメンテーションマップがある（Fig.4）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/df5336a6-7562-12d9-b6dd-cf9d73bafaa9.png)


画像サイズを300x300にリサイズし、$𝜆=0.8$ に設定しています（(10)式）。
提案手法との比較には、最近の有名な画像変換手法3つを使用します。

- CycleGAN：画像変換手法（スタイル変換など）
- UNIT：ソース／ターゲットドメイン空間を共有し、VAE-GANを取り入れた画像変換手法
- MUNIT：ソース／ターゲットドメイン空間の共有部分と独立部分を組み合わせた画像変換手法

評価指標には、GANの標準的な指標であるFID、KIDを使用します。

- FID（Frechét Inception Distance）
Inception networkが出力した特徴マップの分布を比較し、2つの画像集合間の距離を算出したもの
通常、真の（本物の）画像集合と生成画像集合の距離で評価する

- KID（Kernel Inception Distance）
2つの特徴マップ集合間の平均差の最大値を2乗したもので、FIDのような分布距離を示す
不変推定量を有し、より人間の感覚に近い


### 1.4.2 定性的評価
Fig.5から、**Attention mapとWeather-cue segmentation mapが大きな効果を出している**ことが分かります。

- Attention map ：「晴れ→曇り」では主に空に焦点を当て、その他の領域を変化させない
- Weather-cue segmentation map：気象要素の位置を正確に判定する（空とオブジェクトの境界など）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/3c093b18-7624-35b2-91a1-e1dfe4dde6d7.png)

また、Fig.6から、さまざまな気象条件で高品質な画像変換ができていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/94e2db2c-48fe-214a-f80e-2d42d2e01949.png)


Fig.7では、以下のパラメータ $\alpha ([0.0, 1.0])$を変更することにより、生成画像の多様性が向上していることを示しています。
最終的な生成画像を構成する(3)式を重みづけした式:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/281fa322-f182-07d6-5316-124772ac6e19.png)
$\alpha$ が大きいほど変換スタイルが大きく適用されます。
Fig.7の2～4列目の生成画像について左列から右列になるにつれて、**だんだん変換先のスタイルが強く表れている**のが分かります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/156f0f02-a4fb-d12d-f33a-a966ffad8cde.png)


### 1.4.3 定量的評価
#### 1.4.3.1 FID / KIDによる評価
さまざまな気象クラス間の変換を比較すると、**提案手法は全体的に最もよい評価結果になっています**（FID / KIDともに距離を示す指標なので、小さい値ほど評価が高いことになります）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/6592817c-bbab-392f-5be9-a65c0ab846b3.png)



#### 1.4.3.2 生成画像の天気認識による評価
この評価は、**「生成した画像が目的の天気らしい画像になっているか」**を算出したものです。
本研究の学習画像を使って学習した天気認識ネットワークで画像認識を行い、その認識結果が目的の天気と判別される割合で比較しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/7ab64d1e-1712-c089-ab60-02e5dfad59b8.png)

提案手法は最も高い認識正解率を示していますが、クラスによってばらつきがあることが分かります。
これは、変換プロセスの中で何か情報の欠落を起こしていると思われるとのことです。


### 1.4.4 アブレーションスタディ
著者は、Attention moduleとWeather-cue segmentation moduleについて、どちらかのみを使用した場合を比較しました。

#### 1.4.4.1 Attention moduleのみ使用した場合(Ours-Att)
変換すべき領域の特定が正確に行えていません。（画像全体の見た目が変わり不自然）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/53f47f0b-f25c-8268-a49d-6996bdaa3906.png)

#### 1.4.4.2 Weather-cue segmentation moduleのみを使用した場合(Ours-Seg)
処理的には画像の部分合成と同等であり、全体的な視覚効果が不自然になっています。（空と山の境界が滑らかでないなど）

### 1.4.5 ユーザスタディ
Fig.9は、被験者10人についてランダムに並べた提案手法＋比較手法の生成画像4枚を品質の順に並べ替えてもらい、その順位をスコアにしたものを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/491c427e-6f58-4f46-d9f3-cacbfaf587ca.png)

全体的なスコアは提案手法が最も高かったことが分かります。


### 1.4.6 制限と失敗例
特に悪天候の画像の場合、**画像の大部分が雪や雨に覆われていると元の状態を正確に復元できません**。
雪に覆われた道路(Fig.10上図)、雨で洪水になっている道路(Fig.10下図)などは、元の道路がどのような構造、色であったかは推定できず、意図しない画像になることがあるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1373557/b62bca38-727a-adb9-7e26-273eb23c1142.png)

そのため、Attention mapとSegmentation mapが正確であっても色の歪み、ぼやけが発生することがあります。

## 1.5 結論
この論文では、**新しい気象変換フレームワーク「Weather GAN」**を開発しました。

- **画像の気象要因を明確にするWeather-cue  segmentation  module**を提案しました。
- **変換すべき領域に焦点を当て、必要でない変換を排除するAttention  module**を取り入れました。
- 定性的評価／定量的評価両方において、**提案手法はより自然な気象変換ができる**ことを示しました。

このフレームワークは気象変換だけでなく、他のマルチドメイン画像変換技術に応用可能です。


# 2. 所感・まとめ

- この記事では、天気の変換を自在に行うGANの新フレームワーク「Weather GAN」を紹介しました。
- スタイル変換技術はいままでいくつか見てきましたが、「**天気の変換のみに焦点を当てたフレームワーク**」という点がおもしろく感じました。
- 公式の実装はアップロードされていないとのことですが、気軽に変換を試せるコードやWebサイトがあれば、持っている写真の天気を自在に変えて遊ぶ、ということもできそうですね。
    - あいにく雨の日だった時のイベントや娯楽施設の写真を晴れの写真に変換
    - 晴れの写真を雨／霧に変換し、視界が悪くなる具合を事前にシミュレートする（車の運転などに使える？）
- リアルタイムで雨の映像を晴れに変換できれば、自動運転技術の向上にも期待できそうです。


# 3. 参考文献
原論文：
Xuelong Li, Kai Kou, and Bin Zhao, ["Weather GAN: Multi-Domain Weather Translation Using Generative Adversarial Networks,"](https://arxiv.org/abs/2103.05422) arXiv.