CycleGANsの論文を理解する（２）

#CycleGANsの論文を理解する
さあパート２です！

###4. Implementation
ではさっそく実装について読み解いていきます。

#### Network Architecture
CycleGANsの生成ネットワークではニューラルスタイル転送（ニューラルネットワークを用いスタイル、画風を変換する技術）や超解像技術で結果を出したJohnsonらのネットワークを改変して扱っています。
このネットワークでは

・**二つのストライド２の畳み込み**（CNNについては他の記事を参照ください）
・**いくつかの残差ブロック**（ResNetの構成要素：簡単にはResNetは深い深度の層を実現する）
・**ストライド1/2のfractionally strided covolutions**（出力の次元を入力より大きくする）（https://techblog.nhn-techorus.com/archives/12879）

を取り入れています。
そして128x128に６ブロック、256x256以上の解像度画像に９ブロック使用しています。

正規化には**Instance Normalization**を採用しています。
Instance Normalizationでは各サンプルと各チャンネルに対して平均と分散とを個別で計算し、ミニバッチに依存しない正規化手法として使われています。（参考：https://hotcocoastudy.hatenablog.jp/entry/2019/10/12/112213）

判別者（descriminator）ネットワークでは**70x70 PatchGANs**を使用しています。
PatchGANsは**画像全体ではなく画像の一部を切り取った部分（パッチ）**の平均誤差をとります。
ここでは70x70を一つのパッチとしそれらから画像が本物かを判別します。

こういったパッチレベルの判別者を使った設計はフルイメージのものより少ないパラメーターで済み、任意のサイズの画像に対応できます。

#### Training details
訓練モデルのプロセスを安定させるため前述した2つのテクニックを使います。
まず一つは、adversarial lossの式をいじります。
最小二乗損失と負の対数尤度（negative log likelihood）を取り替えます。
こうすることで安定性と質の高い結果が得られます。
![Screen Shot 2021-06-14 at 18.34.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/3465a65f-52b0-7261-e824-9c3b345387bb.png)
二つ目に、モデルの不必要な変動を減らすために判別者Ｄx、Ｄyを更新します。
この際、更新には最近の生成ネットワークからの画像ではなく今まで生成された画像の記録を使います。
ここでは過去の50の画像を記録します。

###5. Results
結果発表ーーーーーーーーう！

はい。
分析や評価の方法、結果をまとめています。

####5.1Quantitative Evaluation
**pix2pix**のものと同じ評価用のデータセットを使い、**意味のあるラベル**←→**写真**、**マップ**←→**航空写真**の変換を定量分析(数値データでの分析)します。

#####5.1.1 Metrics
評価基準を紹介していきます。

###### AMT perceptual studies
**マップ**←→**写真**の変換においてはAmazon Mechanical Turk上で”real vs fake”知覚学習を走らせます。
※Amazon Mechanical Turk（AMT）はアマゾンウェブサービスの一つ。コンピュータプログラムを人間の知能と組み合わせて、コンピュータだけでは不可能な仕事を処理することができる。
任意の協力者に金銭報酬を与えて判別などのコンピュータにはできないタスクをしてもらう。

つまり実際の人手を借りて真偽判定を行う。ということ。
今回ではアルゴリズムに２５人の参加者を集めたらしい。
参加者は一つの本物（のマップか写真）と一つの偽物を含んだ一連のペアの画像を見せられ、本物を選ぶ。

###### FCN score
グラフィックの正誤評価には手動などでの知覚学習が的確かもしれもせんが、自動での定量分析も行なっていきます。
**FCN score**を使い、景色ラベル→写真への変換タスクを評価します。
FCN scoreはセマンティックセグメンテーションに従って、生成された画像がどれだけ正確かを評価します。
生成された画像のラベルマップを予想します。その写像を下記のようなセマンティックセグメンテーションを用いて正解のラベルと比較します。

###### Semantic segmentation metrics
写真→ラベル変換のパフォーマンスを評価するため、Cityscapes benchmarkのメトリック規格を使います。
これはper-pixel accuracy（ピクセル毎の正確性）、per-class accuracy（クラス毎の正確性）、mean Intersection-Over-Union(Class IOU)を含みます。

Class IOUとは下記画像が非常にわかりやすいのでが正解（Grand truth）と予想をUnionとして重なってる割合で正確度を測る基準のようなものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/7b68ad8c-9021-c624-551f-99180758cd70.png)
（https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
より）

#####5.1.2 Baselines
比較対象としていくつかのベースラインを使用します。

###### ーCoGAN
この手法では各ドメイン（ＸとＹ）それぞれに一つずつのGAN生成ネットワークを学習します。
これらは、共通の**潜在表現（latent representaion）**を学習するよう催促するために初めのいくつかのレイヤー（層）で重みを共有します。その後、表現を各ドメインの様式に翻訳する共有しない層が続きます。

ちなみに**潜在表現（latent representaion）**とは
特徴と同義で、観測データから本質的な情報を抽出した内容。何かを与えたとき、それを最もよく表すような特徴情報。
とあります。

ＸからＹのドメイン間の変換はＸを生成するような潜在表現を見つけそれをＹに与えるだけで実現できます。

つまりはドメイン間で共通の特徴（潜在表現）を上手く使い無駄を省くといったところでしょうか。

###### ーPixel loss + GAN
CycleGANsと同様に敵対損失を扱います。
CycleGANsではcycle consistency lossで写像を調整しますが、これは正解値Ｘと予測値Ｙの差異の絶対値により写像を調整します。翻訳を恒等写像に近づけます。

###### ーFeature loss + GAN
またRGBピクセルではなく深層画像特徴によって**L1 loss**が算出されるようないくつかのPixel loss（上述の手法）をテストします。このように深層特徴空間（deep feature space）によって距離を計算することは**perceptual loss**とも呼ばれたりします。

**L1 loss**とは
平均絶対誤差（MAE: Mean Absolute Error）で各データの予測値、正解値の差の絶対値をデータ数で平均した値を算出する関数で、MSE（平均二乗誤差）との違いは元の値から数値の単位が変異しない点です。ただし微分ができなく（絶対値なので引き算の順番で微分係数が分岐する）、MSEと比べ誤差が大きくても評価が小さくなる。

###### ーBiGAN
条件なし（unconditional）GANsではランダムなノイズＺを画像Ｘに変換するような生成ネットワークＧ：Ｚ→Ｘを学習します。BiGANやALIのフレームワークでは生成画像xを低次元のlatent codeであるzに投影するような逆写像Ｆ：Ｘ→Ｚの学習も提案しています。
ここでは潜在ベクターzから画像xへの写像としてデザインされましたが、CycleGANsでは同じ目標をソース画像xからターゲット画像yへの写像に実装しています。

###### ーpix2pix
ペアのデータセットを用いて訓練されるpix2pixとも比較します。


公正な比較のために、CoupleGANを除いた全てのベースラインをCycleGANsと同じアーキテクチャ、詳細を用いて実装します。CoupleGANは共有の潜在表現から画像を生成するネットワークを基に作られているのでCycleGANsのようなimage-to-imageのアーキテクチャと比較できないため公然の実装を用います。

#####5.1.3 Comparison against baselines
はい、ではこれらのベースラインとの比較です。

下部の画像にある通り、ベースラインでは思うような結果が得られていません。
しかし、CycleGANsでは完全な教師あり学習であるpix2pixの結果に近いものが得られていることがわかります。
また『Pixel loss + GAN』『Feature loss + GAN』はターゲットドメインへの変換に失敗したため画像では省いています。
![Screen Shot 2021-08-26 at 23.25.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/0b1284f2-e5ee-836b-fae3-ed79d847d53b.png)
![Screen Shot 2021-08-26 at 23.25.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/6ae05fa2-dda4-8805-b4c4-9318423e9fa0.png)


下記のテーブルはAMTにおいてのパフォーマンスを示しています。
![Screen Shot 2021-08-26 at 23.27.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/d12fb7d0-116d-e6f7-5ff3-6b1e287e70cc.png)

CycleGANsで4分の1程のテスター（実際の人）を双方の変換において欺いていることがわかります。
他のベースラインは見ての通り数値が０に近いような結果になっています。

次のテーブルですが、景観の写真、ラベル間の変換を評価しています。
![Screen Shot 2021-08-26 at 23.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/7b6a0341-55bd-2bbb-7c7a-aa5907d951d0.png)

こちらでもCycleGANsが高い数値を上げています。

#####5.1.4 Analysis of the loss function
損失関数についての分析です。
![Screen Shot 2021-08-26 at 23.29.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/cd7f426e-780b-633c-f8c9-15a77ed09546.png)
これらのテーブルでは損失の除去に対しての比較を行っています。

GAN lossの除去では大幅に結果が落ち込んでいます。cycle consistency lossでも同じです。
これらを受け、どちらも結果に大きく影響すると結論付けます。

またcycle lossにおいての片方向のみの場合（forwardとbackward）についても評価が行われています。
![Screen Shot 2021-08-26 at 23.31.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/3fe4ff8e-4f3a-b7af-b526-37849c2e0d69.png)
テーブルから読み取れるように特に除去された方向の写像で頻繁に不安定さやモード崩壊を引き起こすことがわかります。
![Screen Shot 2021-08-26 at 23.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/c6aa20d8-efbc-ebc0-84fb-83d42df1175a.png)

#####5.1.5 Image reconstruction quality
画像再構成のクオリティ
ターゲットドメインに変換したものをまた基のドメインに戻す（Ｆ(Ｇ(x))または逆）際のクオリティの評価です。
![Screen Shot 2021-08-26 at 23.32.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/b23239c5-2c78-3e05-1f73-485d24925418.png)
この画像でランダムな再構成された画像（Ｆ(Ｇ(x))またはＧ(Ｆ(y))）の例が示されていますが、どれもオリジナルである入力（xまたはy）に非常に近いものが得られています。
マップ、航空写真のようなドメイン間で情報が多様化するような変換においても同様です。

#####5.1.6 Additional results on paired datasets
![Screen Shot 2021-08-26 at 23.36.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/c63dc2b5-2b2e-a95e-7b1e-a6bc993c9d15.png)

上の画像ではpix2pixで使われたペアのデータセットでのCycleGANの結果がまとめられています。
これにおいても入出力の教師なしであるCycleGANで、pix2pixで作られた画像に近いようなクオリティの画像が得られています。

####5.2Application
実践編！ということで、
CycleGANsをペアでない訓練データの存在しないようないくつかの応用に挑戦します。

詳しいデータセットの詳細は本論文のセクション７（Appendix）を参照ください。

###### ーCollection style transfer
FlickrとWikiArtでダウンロードした写真でモデルを訓練します。

neural style transferと違い、作品の全体のスタイルへの擬態を学習するもので一つの任意の作品のスタイルに変換するものではない点に注意です。
例として、ゴッホのスタイルへの変換であり、ゴッホの作品である『星が輝く夜』のスタイルの変換ではありません。

###### ーObject transfiguration
物体変形

このモデルではImagenetのクラス間の変換を行うよう訓練します。
Turmukhambetovさんet alは同じカテゴリー内での変形を行うような部分空間のモデルを提案していますが、CycleGANsでは視覚的に似た2つのカテゴリー間の変形に重きを置いています。

###### ーSeason transfer
ヨセミテの冬の写真854枚、夏の写真1273枚を使って訓練します。

###### ーPhoto generation from paintings
絵画→写真での変換において、入出力間で色構成を保つような写像を行えるように追加のloss（損失）が役立つと気づきました。
正確にはTaigmanさん達のテクニックを採用しました。
入力としてターゲットドメインの実際のサンプルを受け取った時に恒等写像に近づくように生成ネットワークを調整します。

恒常写像なしでは生成ネットワークであるＦ（またはＧ）が必要でない時に入力画像の色彩を自由に変えられることになります。
例えば、モネの絵画とFlickrの写真間の写像の学習時、頻繁に生成ネットワークが日中の絵画を日明け時の写真に写像してしまいます。
これはadversarial lossやcycle consistency lossの下ではこういった写像が等しく”有効”でありうるからです。

**identity mapping loss**の効果は以下の通りです。
![Screen Shot 2021-08-26 at 23.20.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/2d651b0e-34f0-6301-08a5-6878bee2e756.png)
（左から、入力、CycleGANのみ、CycleGAN＋identity mapping loss）

**identity mapping loss**を導入した写像（写真右）では色彩が維持されているのが分かります。

またこちらの画像でも変換についての結果が読み取れます。
![Screen Shot 2021-08-26 at 23.42.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/0525a1f1-fa07-4c2f-355f-0a2027ef9625.png)
これらの画像では他の検証と違い訓練データの絵画においての結果を示しています。
モネの絵画は”**答えが存在しない**”、実際にはないものなのでこれは問題になりません（**モネの絵画はもう新しく生まれないので、尤もらしい変換を行う**）。
訓練データではペアのデータが存在しないのでこれは重要なタスクとなります。

###### ーPhoto enhancement
またより浅い深度の写真を生成することにも有効です。

花の写真でのモデルを訓練します。
元のドメインをスマートフォンに撮った写真（口径が小さく、被写界深度が深くなる）、ターゲットドメインをより大きな口径のデジタル一眼レフで撮った写真に設定し、これにおいても好結果を得ています。
![Screen Shot 2021-08-27 at 0.59.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/73c46261-b4ea-9015-7ca6-1f3eb3c9ac47.png)

###### ーComparison with Gatys et al Image style transfer using convolutional neural networks
neural style transfer（ニューラルスタイル転送）においても比較を行います。
![Screen Shot 2021-08-27 at 1.19.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/c8489f54-f85e-b3e4-f19e-63e7711c6052.png)
Image style transferは各列で初めに、2つの代表のアートワークをスタイルの参考画像として使用します。
CycleGANsでは包括のコレクションとしてのスタイルの写真を生成できます。

比較を行うため、ターゲットドメインでのグラム行列平均（？）（average Gram Matrix）を算出し、Image style transferを用いたaverage styleの変換を行うのに使用します。

また次の画像では他の変換における同じような比較を行っています。
![Screen Shot 2021-08-27 at 2.10.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/d2f57b6d-d439-55dd-696a-4e092f313c66.png)
Image style transferでは望んだ出力に近くマッチするような、ターゲットであるスタイルの画像の発見を必要と思われます。
CycleGANsがリアルな見た目の出力に成功している一方でImage style transfeは度々にリアルな写真の生成に失敗しています。

###6. Limitations and Discussion
制限と議論について

CycleGANは多くにケースで良い結果を出しますが、もちろん完全無欠とは言えません。
典型的なミスとしてこれらがあります。
![Screen Shot 2021-08-27 at 15.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412949/670e8f6e-2085-19c9-d5dd-4f0b28ae4715.png)
色彩や質感が関与するような変換において、これまでで示したように、望んだ出力の成功傾向にあります。
しかし、幾何学的な変化を要するタスクにおいてはそうではありません。
画像にある犬→猫の変形では入力に対する変化がほとんどないことが見て取れます。

大きな変化や究極な変形での扱いに問題があります。


また、訓練データを用いるメソッドとそれを用いないCycleGANsでの成果ではやはり差が生じます。
この"差"時に解決不可能に近いものになり得ます。
例えば、CycleGANsでは写真→ラベルでのタスクで、樹木と建物のラベルの順序を間違えたりします。これを解決するには何らかの形で多少の**教師**を要します。
しかし、部分的な教師あり学習を行うなどでフルの教師あり学習より低コストでパワフルな成果を生み出すように工夫もできます。

こういった問題もありますが、CycleGANsは多くのタスクにおいてペアなしデータでの学習で良い成果を生み出します。


##感想まとめ


はい、ということで想定より短い文字数で終えることができました。
ほとんど翻訳作業のようなものになってしまいこれに満足して良いのかは少し疑問ですが、個人的にはこの作業を通して得るものはあったと思います。
用語などを詳しく調べたり（関係ないところまで気になったり）翻訳、書き起こし作業からより深い理解を得た部分もありました。

次は実装編として実際にCycleGANsを使用したモデルの作成を記事にしたいと思っています。


***関連記事***
[本論文](https://arxiv.org/pdf/1703.10593v1.pdf)
[CycleGANsの論文を理解する（１）]
(https://qiita.com/RyugaMisono/items/a999616bda642ec28031)
[CycleGANsの論文を理解する（２）]
(https://qiita.com/RyugaMisono/items/59fd5ab7e27f03b14a89)
CycleGANsの論文を理解する（実装編）準備中…