Re:ゼロから始めるML生活

機械学習ド素人が、流行に乗ってニューラルネットとかその他いろいろ勉強してみるブログ

【論文メモ:PGGAN】Progressive Growing of GANs for Improved Quality, Stability, and Variation

論文

https://arxiv.org/abs/1710.10196

著者

Tero Karras, Timo Aila, Samuli Laine, Jaakko Lehtinen
NVIDIA

背景

生成的手法の中でも現在特に優れているものには、autoregressive models、variational autoencoders (VAE) そして generative adversarial networks (GAN)などが挙げられる。 これらにはそれぞれ長所・短所があり、現在も研究が進められている。

このうち、GANは生成する分布(画像など)の解像度が高くなるに連れてランダム要素の影響が色濃くなり、DiscriminatorはGeneratorの生成分布と教師データを区別することが容易になってしまい、ネットワーク全体の学習が不安定になる。 このように、GANは高解像度の画像を出力することが難しいという問題がある。

目的とアプローチ

目的

  • GANを用いた高解像度分布の生成

アプローチ

PGGAN(Progressive Growing of GANs)

  • 段階的にネットワーク層を増加させ、追加した層の影響を学習に度合に応じて比重を変化
  • ミニバッチ標準偏差を活用した多様性の向上
  • マルチスケールによるワッサースタイン計量を用いた統計的類似度の使用

提案手法

PGGAN(Progressive Growing of GANs)

PGGAN(Progressive Growing of GANs)の概念図を下記に示す。

f:id:nogawanogawa:20180528215414j:plain

PGGANでは、低解像度の画像(上では4×4)から学習を開始し、徐々に層を追加することで対象の画像の解像度を向上させる。 層を新しく追加する際には、学習がなされていないためランダム要素が強く、Generatorの出力にランダム要素が強く反映されてしまう。 そこで、PGGANでは下図のように、出力に対する新しく追加した層の影響度(α)を段階的に増やす。

f:id:nogawanogawa:20180528215600j:plain

これにより、ネットワーク全体の出力として学習が完了していない層のランダム要素を軽減することが可能になり、学習が安定化する。

ミニバッチ標準偏差を活用した多様性の向上

GANでは、学習データの範囲でしか特徴を学習できず、学習データの限られた特徴に大きく影響された学習をしてしまう恐れがある。 この問題を解決するために、ミニバッチの標準偏差を用いた正規化によってミニバッチのまとまりから得られる特徴を学習する方法を導入する。

はじめに、ミニバッチ内のテンソル(H×W×C)で同じ位置に対応する画素について標準偏差を計算し、H×W×Cのテンソルを一つ求める。 次にそのテンソル内のすべてのピクセルの平均を計算し、スカラ値を一つ得る。 最後にそのスカラ値を複製し、一つのテンソルを作成する。

この処理は、理論上ネットワークのどこにでも挿入することができるが、諸々の事情からDiscriminatorの最終層に挿入する。 (詳細は論文のAppendix参照)

補足

イメージとしてはこんな感じらしいです。

f:id:nogawanogawa:20180603112433j:plain

GeneratorとDiscriminatorの正規化

学習データに特徴的な学習データが含まれている際に、そのデータに学習結果が強く影響を受けてしまう問題がある。 一般にこの問題に対してはバッチノーマライゼーションを使用して対処することが多い。 しかし、我々はGANのネットワーク自体が問題なのではなく、学習信号の大きさとその評価に制限がないことに問題があると考えた。

そこで我々は下記の2つの成分を使用することでこの問題に対処する。

Equalized learning rate

従来のネットワークの重みの繊細な初期化は行わず、0~1の範囲での初期化に対して実行時にネットワークの重みを変化させる。 ネットワークの重みに下記の式を導入する。


\hat{\omega_i} = \omega_i / c

ここで、\omega_iはネットワークの重み、cはレイヤごとの標準化定数を表す。

通常Adamなどでは、入力パラメータとは独立に標準偏差をもとに勾配を決める。 そのため、ダイナミックレンジが大きいパラメータはそうでないパラメータよりも学習に時間を要する。 我々の手法では、ダイナミックレンジを考慮されるため、すべてのパラメータで均質の学習スピードを確保することができる。

Pixelwise feature vector normalization in generator

GeneratorとDiscriminatorがコントロールできなくならないように、Generatorの各畳み込み層のあとに各ピクセルごとにfeature vectorを正規化する処理を行う。

f:id:nogawanogawa:20180603122733j:plain:w280

ここで、\epsilon=10^{-8}はネットワークの重み、Nは特徴マップの数(チャンネル数)、abはそれぞれオリジナルと正規化された特徴ベクトルを表す。

これにより、変化の小さな学習の際には影響は小さく、変化の大きな学習の際には必要に応じて信号を減衰させることができる。

マルチスケールにおける統計的類似性の使用

異なるGANのモデルを評価するには、膨大な数の生成画像を評価する必要があり、主観的になってしまう。 したがって、これらの評価には画像から得られる指標を用いて自動的に評価する必要がある。 これまでも、multi-scale structural similarity (MS- SSIM)のような手法もあったが、色や形状の多様性による細かな効果には影響しにくい。

我々は、優れたGeneratorはどんなスケールにおいても学習データと類似した局所的画像構造を生成するものだと考えている。 そこで、教師データとラプラシアンピラミッドによって得られる局所イメージを統計的に比較する手法を用いる。 連続するピラミッド階層において、前のレベルをアップサンプリングしたものと次のレベルとの差分を見ることで、これを実現する。

各層は7×7の画素近傍によって表現される記述子(各層128個)で表現される。 それぞれの記述子を正規化し、標準偏差を計算、その後ワッサースタイン計量によって類似度を判定する。 これにより、小さい解像度部分で見たときの差分は画像全体の大まかな構造を捉え、高解像度部分で見たときの差分は輪郭やノイズといった部分まで表現する。

補足

イメージとしてはこんな感じみたいです。

f:id:nogawanogawa:20180603153152j:plain

評価

実際に生成された画像はこちら。

youtu.be

統計的類似度に関する評価

sliced Wasserstein distance (SWD) とmulti-scale structural similarity (MS- SSIM)に関する評価を行う。

条件は下記のとおり。

  • 最新のloss function (WGAN-GP)と学習の設定を使用
  • 学習データ : CelebA, LSUN BEDROOM
  • 解像度 : 128×128

次の表は数値的にSWDとMS-SSIMに関してワッサースタイン計量とMS-SSIMを計算した結果である。

f:id:nogawanogawa:20180528215914j:plain

また、提案手法によって提案された画像を下記に示す。

f:id:nogawanogawa:20180528220113j:plain

直感的に、良い評価指標では様々な色や形状、視点が反映されたもっともらしい画像が良い評価とされるべきである。 つまり、(h)の行が最も値が小さくなるはずである。 しかし、今回それがMS-SSIMには見られない。 そのため、MS-SSIMより提案手法のSWDのほうが良い指標と考えられる。

収束及び学習スピード

収束と学習速度に関する評価結果を下記に示す。

f:id:nogawanogawa:20180528220454j:plain

図(a)はprogressive growingがない場合、(b)はprogressive growingがある場合を示している。 これらを比較すると、progressive growingを使用したほうが収束時のSWDの値が小さく、学習時間を短縮できている事がわかる。

progressive growingなしだとマクロな視点とミクロな視点の両方の学習を同時にこなす。 一方progressive growingありの場合は低い解像度の学習は終わっているため、解像度を大きくしたときに安定して学習できている。

図(b)より、各ラプラシアンピラミッドの層において、はじめの低解像度のときはまっすぐSWDが減少している。 解像度が向上しても、一貫してSWDは減少傾向を示している。 一方、図(a)ではすべての各ラプラシアンピラミッドの層で似たカーブの動きを見せ、データによって共鳴した学習をたどっている。

図(c)より、progressive growingを使用した場合は1024×1024の画像について収束するまでに96時間要したのに対し、progressive growingを使用しなかった場合には520時間を要した。 そのため、progressive growingを使用したほうが約5.4倍高速化する事がわかる。

CelebAを用いた高解像度画像の生成

本論文で1024×1024の高解像度の画像を生成した結果を下記に示す。

f:id:nogawanogawa:20180528220626j:plain

これらの画像を生成するのに、Tesla V100 GPUを8機使用して、4日計算した。

LSUNの結果

LSUNのBED-ROOMについて、生成画像を比較したものを下記に示す。 f:id:nogawanogawa:20180528220756j:plain

また、下記には別のLSUNカテゴリの図を示す。

f:id:nogawanogawa:20180528221024j:plain

全般的に生成画像の質は高いが、先行研究と大差ない。

実装

著者の方が実際に書いてくれているので、こちらをご参照。

https://github.com/tkarras/progressive_growing_of_gans

コードを眺めるだけならいいけど、実際に計算は勘弁してください。 論文の実装では100万くらいのGPU8機使ってるし、GitHubのREADMEによるとGPUは1000万超えるみたいですし。 ここまでくると一般人では、予算的に実行することすら不可能ですね。

おまけ

書いてる途中で超わかりやすいブログで見つけました。 すごい参考にさせていただきました。 ありがとうございます。

st-hakky.hatenablog.com