shimopino / papers-challenge

Paper Reading List I have already read
30 stars 2 forks source link

Image-to-Image Translation with Conditional Adversarial Networks #29

Open shimopino opened 4 years ago

shimopino commented 4 years ago

論文へのリンク

[arXiv:1611.07004] Image-to-Image Translation with Conditional Adversarial Networks

著者・所属機関

Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, Alexei A. Efros

投稿日時(YYYY-MM-DD)

2016-11-21

1. どんなもの?

画像変換のタスクに初めてGenerative Adversarial Network(GAN)を適用した論文になる。

GeneratorとしてU-Netな構造を採用し、Discriminatorは画像全体ではなく画像の一部の領域を本物か偽物なのかを識別するPatchGANを提案した。同じモデル構造と損失関数を使用して、さまざまな画像変換ができることを示した。

image

2. 先行研究と比べてどこがすごいの?

画像変換タスクに対する従来の手法は、いわば職人芸によってタスク固有の損失関数を定義することが重要だった。

しかし、本論文では敵対的損失関数を利用したGANを使用することで、タスクに依存しない損失関数を画像変換タスクに応用し、様々なタスクで本物のような画像を生成することに成功した。

3. 技術や手法の"キモ"はどこにある?

通常のGANではなく、ラベル情報を使用して生成される画像のクラスを操作できるcGANの構造を採用している。

image

損失関数も基本的なものであり、cGANで提案された生成画像を操作可能な敵対的損失関数と、生成された画像が本物画像から大きくずれてしまうことを防ぐL1損失関数を使用している。

以下がクラス情報を付与した敵対的損失関数になる。

image

生成された画像と正解画像に対してL1損失関数を計算する。

image

全体としては以下の損失関数で構成される。

image

3.1 Generator

cGANと異なる点としては、単純に入力のノイズと同時にクラス情報を与えると、Generatorはノイズを無視して画像を生成するようになってしまうため、入力ではなくGeneratorのConv層にDropoutとしてノイズを導入している。

また入力に近い層で補足できた特徴量を使用するために、通常のEncoder-Decoder構造ではなく、U-NetのようなSkip-Connectionを導入した。

3.2 Discriminator

L2損失やL1損失をそのまま使用すると、全体がぼやけた画像が生成されることがわかっている。これは画像においてエッジなどの高周波成分をとらえることはできないが、背景や構造といった画像全体にわたる低周波成分の特徴は捉えることができていることを表している。

image

そこでDiscriminatorの役割として、高周波な成分をとらえるために、画像全体ではなく画像内の小領域を偽物か本物なのかを判断するPatchGANを提案した。

4. どうやって有効だと検証した?

まずは既存のL1損失関数やEncoder-Decoder構造を使用した場合との比較を行った。

結果からわかるように今回提案したモデルが最も精度が高いことがわかる。

image

PatchGANを使用する際に、入力される画像のどの程度の領域を判定させるのかを検証すると、画像全体やピクセル単位では精度が出ておらず、ある程度広い領域を見ている70x70のPatchの場合が最も精度が高くなっている。

image

image

複数種類の画像ペアに対して提案したモデルを適用し、その効果を検証した。

image

5. 議論はあるか?

6. 次に読むべき論文はあるか?

論文情報・リンク

shimopino commented 4 years ago

junyanz/pytorch-CycleGAN-and-pix2pix