shimopino / papers-challenge

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

SinGAN: Learning a Generative Model from a Single Natural Image #1

Open shimopino opened 4 years ago

shimopino commented 4 years ago

論文へのリンク

著者・所属機関

Tamar Rott Shaham , Tali Dekel, Tomer Michaeli

投稿日時(yyyy/MM/dd)

2019/05/02

1. どんなもの?

たった1枚の画像から教師なし学習で画像生成を行うSinGANを提案した。SinGANでは画像のパッチ領域の分布を多様なスケールで学習することで、全体の構造と細部の情報を保持したまま、様々なサイズやアスペクト比の画像を生成させることに成功した。また画像を編集したりスタイル変換させることも可能である。

image

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

複数の物体が存在する非常に多様性のあるデータ(ImageNet)の分布を学習させることは難しく、通常はラベルなどの追加情報を使用するか、特定のタスクに合わせて学習を行う必要があった。

本手法は1枚の画像を教師なしで学習させるものであり、学習時に使用した画像に似ているが、構造などが異なる画像を生成することに成功した。

画像のパッチ領域の分布を学習させることで、多くの画像編集タスクに適用することができる。

image

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

3.1 ネットワークの全体像

自然な画像を生成するためには、物体の異なるスケールの特徴を学習する必要がある。例えば空や地面などの広い範囲での特徴と、物体のテクスチャなどの局所的な特徴を学習させる。

GANとしてPatchGANを採用することで、受容野とモデルのサイズに制限を設け、1枚の画像を完全に記憶してしまわないようにしている。

image

3.2 Multi-scale Architecture

Generaotorの構成としては、複数のスケールに対応した入力となる画像とGeneratorを使用する。最も小さい画像から学習をはじめ、2層目以降ではノイズベクトルと前のGeneraotorからの出力をアップスケールしたを入力とし、対応するスケールでの画像を生成していく。

image image

アップサンプルした画像とノイズベクトルは、それぞれを足し合わせることでモデルがノイズを無視して画像を生成しないようにしている。また出力部分で残差接続を導入している。

image

mata

3.3 学習方法

採用する損失関数には敵対的損失関数と再構成損失関数を使用する。

image

敵対的損失関数ではWGAN-GPを採用しており、最終的な損失は全パッチ領域での平均を計算する。あくまで1枚の画像に対して損失を計算するのは、今回の実験では重要な境界条件を学習させるためである。

以下のように各層でPaddingを行うと、モデルは画像の端で発生する人工的な操作も学習してしまい、生成される画像の境界部分が不安定になる。そこで各層ではなく入力される画像に対してPaddingを行っている。

image

またDiscriminatorの構造はGeneratorと同じものを採用しており、3x3の畳み込み層が5つで構成されるため、入力画像に対する受容野は11x11の領域になる。

再構成損失を計算する際には、各層での入力に採用するノイズベクトルは、以下のように最初の入力のみ固定しておき、後はノイズベクトルを使用せずに画像を再構成していく。

image

そのため各層で計算される再構成損失は以下の数式で表現できる。再構成された画像は、各層でのノイズベクトルの標準偏差を計算する役割もある。再構成画像と正解画像との平均2乗誤差に比例する標準偏差は、各層で導入された画像の細部の情報を含んでいる。

つまりこの偏差が各層で導入された情報(物体の形状やテクスチャなど)がどのようなものなのかを示す役割になっている。

image

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

学習させたSinGANから画像を生成すると、物体の新たな形状や情報が導入されており、それぞれの細部の情報は保たれていることはわかる(パッチ内の分布を保持できている)。

また畳み込み層を使用しているため、任意の画像サイズやアスペクト比の入力に対しても画像を生成することができている。

image

SinGANで使用している各スケールのGeneratorから生成された画像を比較すると、最も粗い画像から解像度を徐々に上げていくにしたがって、物体の形状は変化せずにより詳細な島縞模様を生成できていることがわかる。

image

次に学習時に使用したGeneratorの数(スケール数)によって生成される画像がどのように変化するのか見ていく。以下のように、スケールを増加させるほどに風景全体の物体の形状などを捉えることができている。

image

超解像に使用した結果を見てみると、画像1枚から学習する既存の手法よりも細部の情報を再現しており、外部データセットを使用して学修されたEDSRよりも性能で優っていることがわかる。

image

画像変換タスクに応用すると、既存の手法よりも全体の形状や細部のテクスチャ情報などを保持できていることがわかる。

image

画像内の一部のパッチ領域を編集した入力に対して生成される画像を調べた。既存の手法よりも岩の形状やテクスチャ情報が保持されている。

image

また画像に追加した物体と元の画像とを調和させる実験に対しても、外見やテクスチャを変化させながら物体の形状は保っていることがわかる。

image

5. 議論はあるか?

あくまでも1枚の画像をもとに学習しているため、画像内に出現していないクラス情報を生成することはできない(画像内にに1種の犬しかいない場合、それ以外の犬種を生成することはできない)。

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

Patch-GANs(Markovian Discriminator)

論文情報・リンク

shimopino commented 4 years ago
shimopino commented 4 years ago

pdf version Supplementary Material

shimopino commented 4 years ago

再現実装する際は公式よりも以下のほうがきれい (というか公式コードきたなすぎでは) https://github.com/FriedRonaldo/SinGAN