GANの基礎からStyleGAN2まで

この記事について

この記事では、GANの基礎から始まり、StyleGAN、そして”Analyzing and Improving the Image Quality of StyleGAN “で提案されたStyleGAN2を解説します。記事の目次は以下の通りです。

— 2.1. Frechet Inception Distance

— 2.2. Perceptual Path Length

— 3.1. Progressive Growing

— 3.2. AdaIN

— 3.3.StyleGANのネットワーク構造

— 3.4. Mixing Regularization

— 5.1. 概要とkey insights

— 5.2. StyleGAN2の画像生成手法

— — 5.2.1. AdaINに代わる正規化手法

— — 5.2.2. Progressive Growingに代わる高解像画像生成手法

— — 5.2.3. 潜在空間を滑らかにするPath Length Regularization

— 5.3. Results

1. GANとは?

GANとはGenerative Adversarial Networksの略で、教師なし学習で画像を生成するフレームワークです。

登場するネットワークはノイズから画像を生成するGeneratorと, Generatorが生成した画像と本物の画像を見分けるDiscriminatorと呼ばれる2つです。

GANでは、以下の目的関数を使ってGenerator、Discriminatorを交互に学習させていくことを特徴としています。ここでGeneratorはノイズzを入力として本物の画像と同じ次元をもつ画像データを生成し、Discriminatorは最終層のsigmoid関数によって0~1の値を出力します。

Discriminator学習時はGeneratorのパラメータを固定して、本物の画像を入れたときに1を出力(式の第1項)、Generatorの生成画像を入れた時は0を出力(式の第2項)させるように学習させます。つまり目的関数全体を最大化するように学習させます。

一方Generator学習時は、Discriminatorのパラメータを固定し、式の第2項を0にするように、つまりD(G(z))の値を1にするように学習させます。第1項は固定値になるので、目的関数全体を最小化するように学習を行います。

このようにGeneratorとDiscriminatorがお互い切磋琢磨するような学習を繰り返していると、最終的にGeneratorは本物の画像と見紛う偽画像を生成することができるようになります。

2. GANの評価指標

GANは教師なし学習であるため、教師あり学習のAccuracy, F1 scoreのように確立した評価指標がありません。ここではよく使われるFrechet Inception Distanceという評価指標とStyeGANで提案されたPerceptual Path Lengthを紹介します。

Frechet Inception Distance(FID)は、生成された画像の分布と元の画像の分布がどれだけ近いかを測る指標です。

しかし、画像は高次元空間に埋め込まれているので簡単に分布の距離を計測することができません。そこで、近年人間を超える画像認識精度をもつモデルを使って、画像を低次元空間に埋め込んでもらい、その空間で分布の距離を測ろうというのがFIDの基本的なコンセプトです。

定義式は下記のとおりで、Inception V3というネットワークで低次元空間に埋め込まれたベクトル(Poolingの出力)でWasserstein-2距離を算出しています。m,cは埋め込み空間上でん平均ベクトル、共分散行列で、添字wがついているものが生成画像、ついていないものは実画像です。分布の距離なので、値は小さいほど実画像っぽい偽画像が生成できている、つまりGenerator性能が良いことを示します。

Frechet Inception Distance

Perceptual Path Length(PPL)は、「知覚」的に、つまり我々の感覚で見て潜在空間上で画像が滑らかに変化するか、という指標です。FIDと同様に学習済みモデルで埋め込まれる画像の距離を使います。

ざっくり説明すると、「画像を生成する種となる潜在空間上で、画像の変化は『知覚的』に短距離で変化しているか」の指標です。それを図で説明したのが下の図です

PPLの概念図。

白い犬を生成する潜在変数z1と黒い犬を生成する潜在変数z2があったとします。色以外の要素は変化させていないので、その中間データをとると、白と黒の間の色、つまり灰色の犬が出てくるように変化するような経路で潜在変数が移り変わっていくこと理想的です。つまり、色のみを変化させる青色経路が「知覚的」に最短距離となります。逆に、色だけを変化させたのに、物体の形が変化して一度寝室のような画像を経由する緑の経路は、「知覚的」に長い距離となります。

これを数値化したのがPPLで、定義式は下記のとおりです。2つの潜在変数z_1, z_2を比率tで混ぜ合わせた潜在変数で生成した画像と、比率t+εで混ぜ合わせた潜在変数で生成した画像の距離の期待値となっています。

PPLの定義。gはGenerator, fはStyleGANにおいて潜在変数zをスタイルwにする関数、lerpは線形補完を示す。

図説明すると下記のようになります。tで混ぜたデータと、t+εで混ぜたデータが「知覚的」に近ければ、小さな値をとります。

z1とz2の混合比率tに微小変化ε1, ε2を与えた潜在変数で画像を生成した例です。「知覚的」な最短距離である青い経路は、微小変化を与えても同じような灰色の犬が出てくるので、我々の感覚では「画像間の距離が近い」と感じます。つまり「知覚的」な距離は短いです。しかし、「知覚的」に遠回りしている緑の経路では、寝室の画像が出てきています。感覚的には、灰色の犬と寝室の違いは大きいので、知覚的な距離は大きいです。

ここでは学習済みのVGGという画像認識ネットワークを使用し、それが算出する特徴量ベクトルの距離を「知覚的」な距離にしています。解析的に求めることはできないので、多くの画像でこの計算を行なって期待値をとった結果が、PPLの値になります。この値が小さいほど潜在空間が「知覚的」に滑らかだということになります。

3. StyleGAN

GANの研究は数多くありますが、一際有名なものが2018年に発表されたStyleGAN[1]です。下の図はStyleGANで生成された画像ですが、本物と見紛うような高解像度画像が生成されているのがわかると思います。

StyleGANのネットワークでは、Progressive Growingを用いた高解像画像生成、AdaINを用いて各層に画像のStyleを取り込む、という2つの特徴があります。まずこの2つを説明して、StyleGANの詳細構造に移ります。

StyleGANで生成された画像

3.1. Progressive Growing

Progresive GrowingはProgressive-Growing GAN[2]で提案された高解像度画像を生成する手法です。ざっくり言うと『低解像画像の生成から始め、徐々に高解像用のGenerator,Discriminatorを追加していくことで高解像度画像を生成する手法』です。下の図はPG-GANの模式図です。

上の図では,4x4の画像生成から始め、徐々に解像度を上げて最終的には1024x1024の高解像度画像を生成しています。解像度を上げるネットワークを追加しても、低解像画像を生成するGと判別するDはパラメータを固定せずに学習させ続けることが特徴です。

3.2. AdaIN

AdaINはXun Huangらによって2017年に提案されたスタイル変換用の正規化手法で、表式は以下の通りです[3]。オリジナルの論文では、コンテンツ入力xとスタイル入力yを平均と分散を用いて正規化します。

AdaINを用いたスタイル変換の例。上のビル群がコンテンツ画像(スタイル変換したい画像)で、下の絵画がスタイル入力

AdaINの特徴は、Instance Normalizationなどの正規化手法と異なり、スタイルとコンテンツ画像の統計量のみで正規化を行い、学習パラメータを使用しない点です。これにより訓練データでみたことがないスタイルでもスタイル変換が可能になっています。

StyleGANの中でAdaINは下の表式で使われています。正規化されたコンテンツ情報にスタイルを使った線形変換をかけるというコンセプトは変化してないですが、スタイルの標準偏差と平均値の代わりに後述するスタイルベクトルWに線形変換を加えたy_s, y_bという2つの値を使っています。

3.3. StyleGANのネットワーク構造

StyleGANのネットワークは以下のようになっています。特徴は下記の3つです。

  • Progressive Growingを使用し、各Generatorで段階的に解像度を上げていく。
  • PG-GANのように確率的に生成される潜在変数から画像を生成せず、固定値から画像を生成する
  • 確率的に生成される潜在変数は8層ニューラルネットで非線形変換されてStyleベクトルWとなり、各解像度でAdaINを通して入力される。

図の(a)はPG-GANで、(b)がStyleGANです。両者とも段階的に解像度を上げていくProgresive Growingを採用しています。しかし、PG-GANでは潜在変数zから画像を生成しているのに対し、StyleGANでは固定の4x4x512のテンソルから画像を生成し、潜在変数はStyleとして取り込んでいるという部分が異なります。また潜在変数はそのまま使用されるのではなく、Mapping networkと呼ばれる全結合ニューラルネットによって非線形変換されてからStyleとして取り込まれています。

この固定値テンソルによる画像生成とMapping networkによるStyle導入、そして後述するMixing RegularizationでFIDスコアが向上したようです。

3.4. Mixing Regularization

StyleGANでは、学習中にStyleに使われる2つの潜在変数をまぜるMixing Regularizationという正則化手法を用いています。例えば、潜在変数z_1, z_2からマッピングされたw_1, w_2というスタイルベクトルがあったとして、4x4の画像を生成するときはw_1を使い、8x8の画像を生成するときはw_2を使うというような感じです。

これをすると2つの画像のStyleを混ぜる下図のようなことができます。

上の画像では、Source A, SourceBの画像をそれぞれ生成する潜在変数を、最初はAの潜在変数を使い、ある解像度からBの潜在変数を使うとどのような画像ができるかを実験した結果です。切り替える解像度を低解像(4² ~ 8²)・中解像(16² ~ 32²)・高解像(64~1024²)の3つで実験をしています。

基本的に低解像から入れたStyleの影響が大きくなる傾向にあり、低解像からBの潜愛変数を使うと顔の形や肌の色、性別年齢などがBに近いものになります。しかし、高解像で入れると背景や髪の色程度にしか影響を与えることができません。

4. StyleGANの解析

今まで見てきたようにStyleGANでは綺麗な画像を生成することができますが、いくつかノイズや不自然な部分が発生することが知られています。

まず、下の図で発生している水滴のようなノイズ(droplet)について見ていきます。

このノイズは常に画像に出てくるわけではないですが、64x64程度の解像度で全ての特徴量マップに発生する問題のようです。著者たちは、この問題の原因は正規化層(AdaIN)にあると考えています。小さなスパイク型の分布をもった特徴量マップが入ってくると、元々の値が小さくても正規化によって、値が大きくなり大きな影響力をもってしまいます。実際、正規化を取り除くとdropletは消えるようです。

次は特徴の一部が顔の動きに追随しないというモードです。下の画像では、顔が横向きに変化していっても歯並びが追随しておらず、不自然になっています。著者たちによれば、このモードはProgressive growing形式の学習をしているために起こるとしています。各解像度の画像は対応するGeneratorで独立に生成されるため、頻出する特徴が出てしまうということのようです。

また、StyleGANで導入されたPerceptual Path Lengthですが、画像の質と関係があることが解析の結果わかってきました。StyleGAN2の著者たちは、GeneratorがDiscriminatorの選別を受けながら高品質画像の生成をするためには高品質な画像を作り出す潜在空間を広げていくことが重要となり、低品質画像を作る潜在変数は急速に変化するような空間に押し込まれるからではないか、と仮説を立てています。

PPL vs Image Quality

水滴ノイズ・追随しないモードを改善し、さらにPPLの性質を用いて画像生成の品質を改善したのがStyleGAN2[4]です。これからStyleGAN2がどのようにそれらを解決し、画像の質向上を図っているのかをみていきましょう。

5. StyleGAN2

StyleGAN2の概要とkey insightsは下記のようになっています。

StyleGANの改良。AdaINの代わりにCNNのWeightを正規化することでdropletの除去、Progressive Growingの除去で不自然なモードの改善、潜在空間で連続性を持たせることで画像品質向上を図る。StyleGANに比べてFID等が大きく向上。

  1. AdaINのように実際の統計量で正規化するのではなく推定の統計量で正規化することで、不要なモードの顕在化を防ぎdropletを除去する
  2. Progressive Growingの代わりにskip connectionを持った階層的なGeneratorを用いることで、低解像度から順々に学習させながらも目や歯の滞留を低減する。
  3. PPLを小さくして潜在空間を滑らかにすることによる画像品質向上

5.2. StyleGAN2の画像生成手法

このパートでは、実際にStyleGAN2で何をしているのかを見ていきます。

AdaINは実際に入ってきたデータの統計量を使って正規化していますが、それがdroplet発現に繋がっています。そこで著者たちは、実際のデータの統計量ではなく推定の統計量を使って畳み込みの重みを正規化することでdroplet発現を防いでいます。模式的に示したのが下図です。

まず、StyleGANのコアであるStyle block(図bの灰色部分)を単純化することから始めます。

AdaINは詳細に記述すると、2つの手順に分解できます。1つ目はコンテンツ情報を自身の統計量で正規化すること、2つ目は正規化されたコンテンツ情報をスタイルの情報を用いて線形変換すること、です。StlyleGAN(a)のAdaIN部分をそれに従って展開すると(b)のようになります。AdaIN内部の操作としては、コンテンツの正規化→スタイルベクトルによる線形変換となっていますが、Style blockの中ではスタイルベクトルによる線形変換→(Conv→)→コンテンツの正規化、という順序になっているいことに注意してください。

次に平均値を使った操作は不要と考えて、正規化の操作を標準偏差によって割り算するだけにとどめ、スタイルの線形変換も係数の掛け算だけにします。そしてノイズ挿入部はstyle blockの中にある必要は特にないので、style blockの外に出します。(c )

これでStyle block内の操作を単純化できました。ここで、最初のStyleベクトルによる線形変換を、畳み込みの内部の処理で実施することを考えます。Style block内では、スタイルベクトルWを線形変換したy_sという係数をかけていました。コンテンツ画像にsをかけたものを畳み込みの重みw_ijkで処理するという操作は、コンテンツ画像を重みw_ijkとsの積で畳み込むことと等価です。よってこの操作は下記のように書き換えることができます。(上図(d)のModの操作)

次に正規化の操作(ここでは標準偏差で割るだけになっています)を畳み込み内部の処理で実施することを考えます。

ここで、入力が標準正規分布に従っていると仮定すると出力画像の標準偏差は、重みのL2ノルムになります。

やりたいことは、畳み込んだ出力に標準偏差の逆数をかける、という操作です。そして畳み込んだ出力に標準偏差の逆数をかける操作は、重みw_ijkに標準偏差の逆数をかけたもので畳み込みをすることと等価です。よってこの正規化の操作は以下のようにかけます。(上図dのDemod)

これで、スタイルによる線形変換→畳み込み→出力の正規化、というStyle blockの操作を1つの畳み込み処理で表現することができました。正規化の部分は、出力が正規分布だと仮定して正規化する、という処理になっており、ここで分布の仮定をしています。つまり、実際の分布を使った正規化しておらず、これによってdropletを誘発するようなモードが正規化によって大きく顕在化してしまうという問題を防ぐことができます。実際にこれを使うとdropletが出てこなくなっています。

元々のStyleGANのGeneratorはskip connection等がないシンプルな構成です。それのまま高解像画像生成をするとうまくいかないのでProgressive Growingを使っていたわけですが、GeneratorとDiscriminatorの表現力を上げることによりProgressive Growingを使わずとも高解像度生成ができるようにしています。

Progressive growingは徐々に高解像度用のGeneratorとDiscriminatorを追加していく手法で、高解像度画像生成で頻繁に用いられる手法の1つです。しかし、個々のGeneratorが独立しているので頻出する特徴を生成する傾向にあり、その結果顔が動いても歯が追随していかないという結果に繋がっています。

そこで著者達はProgressive Growingを使用しない、つまり画像の解像度を上げるために徐々にGeneratorとDiscriminatorを追加していく手法ではない、高解像度画像生成手法を提案しています。下図に示すそれがMSG-GANに似た機構をもつネットワークです。

この(b)-typeのGenerator/Discriminator、(c)-typeのGenerator/Discriminator、全部の組み合わせで実験を行い結果的によかったものを採用すると言う戦略をとっています。実験結果が下記表です。

この結果を見ると、(b)-typeのGeneratorを使うとPerceptual Path Lengthが大きく改善し、(c )-typeのDiscriminatorを使うとFIDが改善するという傾向が見て取れます。よって著者たちはこれらのネットワークを採用しています。

Progressive Growingでは、まず低解像度画像を生成してから徐々に高解像度画像を生成していくという学習方法になっていました。しかし、この新しいネットワークはそのような学習をしているのでしょうか?それを確かめた実験が下の図です。

(b)-typeのGeneratorは各解像度の生成画像を足し合わせているため、最終的に生成される画像への貢献度を各解像度毎に算出することができます。その解像度毎の貢献度を縦軸、学習時間を横軸にとっています。新しいネットワークを採用した(a)では、訓練時間の経過に従い徐々に高解像側の貢献度が大きくなっており、よりネットワークサイズを大きくした場合(b)では、学習の最後の方でさらに高解像度側の貢献度が上昇しているのがわかります。

この機構を使って生成した画像が下記のものになります。StyleGANでは目や歯が不自然になっているのに対し、新しい機構では顔の向き変化と一緒に目や歯が自然に移動していることがわかります。

StyleGAN ( use Progressive Growing)
New Training Method( No Progressive Growing)

潜在空間の知覚的な滑らかさを示すPerceptual Path Lengthと画像の品質に相関がありそうなことがわかってきたので、それを正則化項としてモデルに組み込みます。表式は下記の通りです。aは定数でyは正規分布から生成されるランダムな画像です。

この正則化は潜在変数の摂動に対するGeneratorの出力値の変化をなるべく小さくするよう仕向けています。定数aは第1項の移動平均によって動的に変化させながら学習を行い、それによって最適な値が学習中に設定されるようになっています。

5.3. Results

まずは、それぞれの手法導入によるスコアの変化を2つのデータセットでみてみます。

それぞれ、(A)ベースラインとなるStyleGAN, (B)AdaINに変わる正則化の導入, (D) 潜在空間を滑らかにするための正則化導入, (E) Progressive Growingを使わない画像生成です。それぞれの手法が良く機能していることがわかります。

Cに関しては説明を省きましたが、正則化項の更新はあまり頻繁に実施しなくてもよいようで、それを”Lazy”な正則化と呼んでいます。結果をみるとLazyにしてもスコアに悪影響はないことがわかります。Fはこれまで説明した手法全てに加えてネットワークの規模を大きくしたという水準です。

Lasyな正則化とAdaINを畳み込み内部に取り込んだことにより学習時間が高速になり(37→61 images/sec )、そのおかげでネットワーク規模をさらに大きくすることができたようです(31 images/sec )。

PPLの分布を見てみます。PPLが小さい≒生成画像の質が良いなので、StyleGAN2では画像の質が全体的に改善傾向にあることがわかります。

次に生成画像を見てみましょう。非常に素晴らしい高品質な生成画像です。

最後に、画像から潜在空間に落とし込むという手法で解析してみた結果です。下のヒストグラムはLPIPS距離という、元画像と一度潜在空間に射影した後に再びGeneratorを通して画像を最生成したものとの距離を、実画像、StylegGAN, StyleGAN2でおいて可視化した結果です。(実画像も疑似的に潜在空間に落とし込むということができる)

StyleGAN2はStyleGAN, 実画像よりも潜在空間への射影がうまくいっていることがわかります。PPLに関する正則化項で潜在空間を滑らかにしたことで、このような結果になっていると考えられます。実際に元画像→潜在空間への射影→Generatorで再構成、というプロセスを経た画像が下の図です。StyleGAN, 実画像は所々元画像と異なる特徴を持っていますが、StyleGAN2ではかなり正確に再現されていることがわかります。

6. まとめ

今回はGANの基礎とStyleGAN、そしてStyleGAN2を紹介しました。StyleGAN2では、正規化の改善と潜在空間を滑らかにする制約を加えることで画像の品質を向上させています。しかし、8 GPU(V100)を使っても、FFHQデータセットでは 9日、LSUN CARでは13日の学習時間が必要のようです。パラメータの多さ=性能であることはBigGANs等でも実証済みですが、個人PCでも扱えるような高性能GANが出てくると個人的には嬉しい限りです。。。。

Reference

  1. Tero Karras, Samuli Laine, Timo Aila, A Style-Based Generator Architecture for Generative Adversarial Networks, CVPR2019
  2. Tero Karras, Timo Aila, Samuli Laine, Jaakko Lehtinen, Progressive Growing of GANs for Improved Quality, Stability, and Variation,ICLR2018
  3. Xun Huang, Serge Belongie, Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization,ICCV2017
  4. Tero Karras, Samuli Laine, Miika Aittala, Janne Hellsten, Jaakko Lehtinen, Timo Aila, Analyzing and Improving the Image Quality of StyleGAN, arXiv:1912.04958
  5. StyleGAN2, https://www.youtube.com/watch?v=c-NJtV9Jvp0

Data Scientist (Engineer) in Japan Twitter : https://twitter.com/AkiraTOSEI LinkedIn : https://www.linkedin.com/mwlite/in/亮宏-藤井-999868122