791 Views
August 15, 19
スライド概要
2019/08/05
Deep Learning JP:
http://deeplearning.jp/hacks/
DL輪読会資料
2019.08.05 StyleGANとBigGANのStyle mixing, morphing m.yokoo 1
目次 1. 2. 前文 StyleGAN 1. 2. 3. 4. 5. 6. 3. BIgGAN 1. 2. 3. 4. 5. 4. BigGANとは 学習コスト Truncation tric その他 Colabratoryでの操作 PGGAN 1. 2. 5. StylGANとは Style mixing Truncation trick その他のtrick 学習コスト Colaboratoryでの操作 PGGANとは Code VQ-VAE-2 1. VQ-VAE-2とは 2
前文 選択動機 • 前回、1年前にSAGANの実装を行いましたが、当時、AWSの GPUのP1を1つ使用しました。 • それでも4日間かかりました。 • その後の、GANではもう、そのレベルを超えて学習させようと 思うと、手を出すことができないレベルになっております。 • 今回、Googl colaboratoryを使用して、転移学習で生成の部分 だけでも色々と動かしてみました。 • 超解像度のStyleGAN(1024*1024)その基礎となった、PGGAN、 そしてBigGAN(512*512) を触ってみての内容です。 • また、多様面で、BigGANを追い抜いたというVQ-VAE-2が出て きました。 3
前々回はSAGAN(Self-Attention Generative Adversarial Networks)を実装しました。 GANから出発し、DCGANを基に wassesutainGANを基に、spectral正則化、さらにTTURを実装、 さらにself- attensionを追加して完成していることから、いろい ろと経験できるのではないかと思い選択しました。 4
• しかし、実装にあたっては、どうしてもGPUを使用することが 必要だったため、AWSのDeepLarning AMIを使って実装しまし た。 • EC2 インスタンス リージョン: 米国東部(バージニア北部) プライマリインスタンスタイプ: p2.xlarge • NVIDIA K80 GPU 1個を使用。それでも、動かすのに2万円以 上かかりました。 • データとしては、celebFacesDataset 200K (めいめい40の attribute アノテーションを持つ)を使っています。 • 次の画像は、SAGANで生成した画像です。100万回 iterateし ても、中には崩れた画像もあり、決して素晴らしい成果ではあ りませんでした。 5
実装結果 SN on G/D+TTUR 100万回 6
StyleGAN 7
StyleGANとは • A Style-Based Generator Architecture for Generative Adversarial Networks Tero Karras (NVIDIA), Samuli Laine (NVIDIA), Timo Aila (NVIDIA) • https://github.com/NVlabs/stylegan • https://github.com/Puzer/stylegan-encoder • https://github.com/skmhrk1209/StyleGAN • [DL輪読会]A Style-Based Generator Architecture for Generative Adversarial Networks 土居健人 詳しく説明されています。 8
要約 • 高解像度(1024x1024)の画像を生成するGANです。 • 敵対的生成ネットワークにおける 新しいジェネレータを提案しています。 • 以前の論文で提案されている“Progressive-Growing of GANs”のgenerator部分を発 展させたもので、discriminator, lossはそのままです。 • 新たな顔画像データセット,“Flickr- Faces-HQ, FFHQ”を公開しています。 • 興味深い操作として、Style Mixing、Truncation Trickを行なっています。 • 今回の内容の中心です。 • 高レベルな属性を教師なしで分離し, 生成画像に確率的な変動(例、そばかす, 髪など)を含めることを可能にしています。 • スケールに応じた直感的な画像生成の制御を可能にしています。 • 優れた補間特性をもたらし,また変動の潜在的要因をより良く解きほぐしています。 9
• 次の図は、(a)今までのGAN(ProgressiveGAN) と(b) StyleGANのネッ トワーク構造を比較した図です。 • StyleGANは今までとは構造をがらりと変えて、Mappingnetwork と Synthesis network の2つで構成されています。 • Mapping network は8層の全結合層から成り、潜在変数を潜在空間にマッ ピングします。 • Synthesis networkは18層から成り、入力は4×4×512の定数で、そこへ 「スタイル」(潜在変数にアフィン変換を掛けAdaIN処理を行ったもの) と 「ノイズ」が各層に入力されます。 • 「スタイル」が主に画像生成をコントロールし、「ノイズ」は画像の見た 目に大きな影響を与えない特徴(髪質や髪の流れ、ヒゲ、そばかす、肌質 など)をコントロールします。 • Synthesis networkの解像度は4×4から順次アップサンプリングし、最終 的には1024×1024になります。 10
Network概要図 11
• Mapping networkの目的は入力のベクトルz∈ℤz∈Zを別の空間 𝕎Wに射影することです。 つまり,f:ℤ→𝕎f:Z→Wでエンコード後のベクトルは w∈𝕎w∈W. • これにより,features entanglement(これを解消 (disentanglement)しないと,生成画像の操作が難しい)を 解消することができています。 12
PGGANのnetwark 13
14
15
• Mapping Network • StyleGANにおいては潜在ベクトルz∈Zz∈Zはネットワークの 入力ではなく,各レイヤーにおいてスタイル制御のために用い られる. 潜在ベクトルはMapping Networkによってスタイル 制御のための潜在空間へマッピングされる.(f:Z→Wf:Z→W) Mapping Networkは論文では8層のMLPとして実装されている. 16
• Adaptive Instance Normalization • Mapping Networkによって得られたw∈Ww∈Wは各畳み込み層の後にア フィン変換されたのち, Adaptive Instance Normalization(AdaIN) (Hung et al., 2017)のパラメータとして用いられる. AdaINは以下の式 で与えられる. • AdaIN(xi,yi)=yi,sxi−μ(xi)σ(xi)+yi,bAdaIN(xi,yi)=yi,sxi−μ(xi)σ(xi)+yi, b • ここでxixiは特徴マップ,yiyiはアフィン変換された潜在ベクトルである. これはInstance Normalizationによって特徴マップ毎に正規化した後,ス タイル変換のためのスケールとバイアスをMLPでモデル化している. こ れを各畳み込み層の後に行うことで,各スケール毎にスタイルを変化させ ることができる. ここでいうスケールは特徴の意味的なレベルとも捉え られる. • AdaINによるスタイル制御はスケールに対してローカルである.つまりあ るスケールにおけるスタイルの変更は他のスケールのスタイルに影響を及 ぼさない. これはAdaIN操作は,その後に続く畳み込みのために,特徴 マップ間の相対的な重要性を変更するが,正規化処理により,元の特徴 マップの統計には依存しないからである. 17
• このAdaINは、cGANs with Projection Discriminator(Miyato et al. 2018),Spectral Normalization(Miyato et al. 2018) 以降でよく用いられている Conditional Batch Normalization (de Vries et al., 2017)ともかなり近いものです。 18
• StyleGANでは潜在ベクトルはもはやネットワークの入力であ る必要はなく,代わりにあらかじめ最小解像度のマップ用意し ておき,常にこれをネットワークの入力とする. このマップは パラメータとして最適化されます。Constant inputです。 • Removing traditional input • 画像の生成のために従来のgeneratorにrandom inputを定数 (赤枠,4x4x512)に変更. wwやAdaINで生成画像を操作できるということを発見したため 定数に変更。 20
• PGGANとの比較 • Mapping networkを導入することで,データセットのfeatures entanglementを解消する。 • coarse, middle, fineなレベルのstyleを操作可能。 • ノイズで(シワ,そばかす,毛先のような)小さなバリエー ションをつけることが可能。 21
• 人間の(シワ,そばかす,毛先のような)小さなバリエーショ ンは,各層のサイズにスケーリングされたノイズで実現. Bのlearned per-channel scaling factors to the noise inputでス ケーリング後に入力。Stochastic variation 22
面白い操作 • Style Mixing • まずMapping Networkに2つの潜在ベクトルz1,z2∈Zz1,z2∈Zを入力し, w1,w2∈Ww1,w2∈Wを得る. generatorのあるレイヤーまではAdaINの パラメータとしてw1w1を用いて,そこから先のレイヤーではAdaINのパ ラメータとしてw2w2を用いる. • これはスタイルのスイッチングであり,w1w1は高レベルのスタイルを, w2w2は低レベルのスタイルを担っていると考えられる. スイッチするレ イヤーは毎回ランダムに選ばれる. • この正則化によって隣接するスタイルが相関していると,ネットワーク が仮定するのを防ぐとあります。 • 下図のように潜在ベクトルをコピーすることはスタイルをコピーすること であり,様々なレベルでスタイルを操作することが可能であリます。 •. 23
24
Colaboratoryでの操作 Generaterのcode 25
• 「我々の開発したジェネレーターは、画像を『スタイル』のコレクションとして 考えています。各スタイルは特定のスケールでエフェクトをコントロールしま す」とのこと。 • スタイルは以下のように分類されています。 Coarse styles(粗いスタイル):ポーズ、髪型、顔の形 Middle styles(中間のスタイル):顔の特徴、目 Fine styles(細かいスタイル):色の概要 • さらに、NVIDIAのジェネレータは、ポーズやアイデンティティといった高レベ ルの属性から重要でない変化を「ノイズ」として自動的に分離することも可能で す。 • ノイズの定義は以下の通り。 Coarse noise(粗いノイズ):大きな髪の毛のカール Fine noise(中間のノイズ):細かいディテール、質感 No noise(ノイズなし):特徴のない絵画のような見た目 ジェネレーターが生成した以下の画像のノイズを自由に変更します。 26
Style mixingのcode 27
Noiseのcode 28
29
Truncation trickのcode 30
Style mixingを動かす code 31
• Truncation trick in W • generatorはデータセットにあまり含まれていないスタイルを学習するこ とが難しい(似た画像を生成するようになる,mode collapse) これを防ぐためにTruncation trickを導入します。 𝕎Wの平均w¯=𝔼z∼p(z)[f(z)]w¯=Ez∼p(z)[f(z)]を求めて,wwを • w′=w¯+ψ(w−w¯)w′=w¯+ψ(w−w¯) • とする. ψψでどれだけ平均画像から離れた画像を生成するかを操作できる • 32
以下は,Truncation trickのψψの値を変えたときの比較画像. w′=w¯+ψ(w−w¯)w′=w¯+ψ(w−w¯) ψ=0ψ=0のときwwは平均w¯w¯になる. ψψの変化(-1 ~ 1)とともに視点,メガネの有無,年齢,色,髪の長さ,性別が反転しているとこ . ろが面白い 33
その他のtricks • Low-Pass Filtering • 本家の実装を見るとblur2dとかいう見慣れない関数があったの で,論文を見てみるとnearest-neighbor samplingをローパス フィルタを用いたbilinear samplingに置き換えたと書いてあり ました。これはICLR2019に投稿されているMaking Convolutional Networks Shift-Invariant Againで提案されてい る ダウンサンプリング前にローパスフィルタをかけておくこと で,シフト不変性を保つアプローチです。 • ダウンサンプリングではナイキスト周波数以上の高周波成分が エイリアシングとなって現れるので,ローパスフィルタによっ て高周波成分を除去することで,シフト不変性を保っています。 34
• Zero-Gradient Penalty • StyleGANではWhich Training Methods for GANs do actually Converge?で提案されている Zero-Centered Gradient Penaltyを正 則化項として用いている. この論文によるとWGAN(Arjovsky et al., 2017),WGAN-GP(Gulrajani et al., 2017)は必ずしも収束し ないらしく, Zero-Centered Gradient Penaltyは常に収束するらし いです。 • ちなみにWGAN-GPはOne-Centered Gradient Penaltyである. 論 文では以下で示される2種類のZero-Centered Gradient Penaltyが提 案されている. • R1(ψ):=γ2Ep (x)[‖∇Dψ(x)‖2R1(ψ):=γ2EpD(x)[‖∇Dψ(x)‖2 ] • R2(θ,ψ):=γ2Epθ(x)[‖∇Dψ(x)‖2R2(θ,ψ):=γ2Epθ(x)[‖∇ Dψ(x)‖2 ] • これらはそれぞれデータ分布,generator分布に対するgradient penaltyで StyleGANではlossはNon-Saturating Loss(Goodfellow et al., 2014)とし,R1-regularizerのみを用いているます。 35
A画像からB画像へトランジションさせる • 2つのベクトルと、その間を線形補間したベクトルを使って、A画像からB画像へのトランジ ションをやってみます。 • 補間ベクトルは、latents0 と latents6 の差を39分割して作成しています。全部で40枚の画像 (png)が生成され、results フォルダーに保存されます。このコードをコピペして実行しま す。 • results フォルダー内にある40枚の画像(png)を gif 動画に変換するコードです。gif動画は styleganフォルダーの直下に、stylegan.gif という名前で保存され、このコードをコピペして 実行します。 • latents6 から latents0 へのトランジションです。StyleGANが凄いのは、ベクトル補完の画像 を細かく見ても、実に自然な変化をするということです。 • なお、コードを実行して出来るオリジナルの gif 動画は1024×1024(45MB)と大きいので、 ここでは500×500(11MB)に縮小したものを表示しています。 36
A画像からB画像へトランジションさせる 37
学習コスト • StyleGANの学習は、とてつもなくヘビーです。データセット は1024×1024の画像70,000枚を使って行うのですが、V100と いうかなりハイグレードのGPUを8台並列で使っても6日と14 時間掛かるらしく、 • もしGTX1060でやるとすれば4~5ヶ月掛かるレベルです (GPUのメモリの制約から実際にはやれませんが)。 • The FFHQ dataset • Flickr-Faces-HQ (FFHQ) は,1024x1024の顔画像70000枚で 構成される 38
BigGAN 39
LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS • ABSTRACT • Despite recent progress in generative image modeling, successfully generating high-resolution, diverse samples from complex datasets such as ImageNet remains an elusive goal. To this end, we train Generative Adversarial Networks at the largest scale yet attempted, and study the instabilities specific to such scale. We find that applying orthogonal regularization to the generator renders it amenable to a simple “truncation trick,” allowing fine control over the trade-off between sample fidelity and variety by reducing the variance of the Generator’s input. Our modifications lead to models which set the new state of the art in class-conditional image synthesis. When trained on ImageNet at 128×128 resolution, our models (BigGANs) achieve an Inception Score (IS) of 166.5 and Frechet Inception Dis- ´ tance (FID) of 7.4, improving over the previous best IS of 52.52 and FID of 18.65. [DL輪読会]Large Scale GAN Training for High Fidelity Natural Image Synthesis Kohei Nishimura DeepX,Inc 詳しく説明されています。 40
BigGANとは • BigGAN は、最大512×512ピクセルの高解像度画像を条件付きで生 成するモデルで、学習には Imagenet の画像を使っており、1000カ テゴリーの画像を生成出来ます。 • 作ったのは、DeepMind。 • ベースはSA-GAN(Self Attention GAN)で、学習時のバッチサイ ズを8倍(256→2048)に、全ての層のチャンネル数を1.5倍 (64→96)にして大幅なスケールアップを図っています。 • また画像生成においては多様性と画質がトレードオフになりますが、 これを Truncated Trick という手法で上手く両立させています。 41
学習コスト • BigGAN はそのスケールの大きさから、学習コストも相当かか るようです。 • 512×512ピクセルの学習には Google TPUコアを512個使用し て48時間掛る模様で、 • 1TPUで4.5$/hなので4.5$×512×48=110,592$ (たった1 回の学習に100万円以上かかる!)学習コストもBigです 42
• ここで提案されているBigGANは、512×512の高解像度条件付 き画像生成(例えばImageNetを学習してImageNetのラベルを入 力ノイズに付随して与え、そのラベルに相当する画像を生成す るタスク)を行いますが、そのスコアが驚くものでした。 • GANの評価指標として用いられているInception Score(IS)と FIDの値がそれぞれ166.3と9.6と、従来のSoTAである52.52と 18.65を大きく更新するものになったのです。 43
• ベースライン構造について述べます。ベースラインはSelfAttention GAN(SA-GAN)です。この構造は従来のSoTAです。 • 単にバッチサイズとネットワークの層のチャンネル数を増やし ました。以下にその結果を示します。青い枠は、ベースライン からバッチサイズを8倍(256→2048)、緑枠はそこから更にチャ ンネル数を全層に対して1.5倍にしたものです。最終的にこれだ けの変更で、大幅にスコアを更新していることが分かります。 やはり計算資源が全て 44
45
• 論文中では更に3つの手法を加えることで更にスコアを更新し ます。 • Shared Embedding、Hierarchical latent spaces、Orthogonal Regularization(上表のShared、Hier.、Ortho.にそれぞれ対応) です。 • 特にHierarchical Latent Spacesは、下図はGeneratorを表して います。一般的なcGANでは入力ノイズを最初の層にのみ与え ますが、この図ではまずその入力ノイズをsplitして各ResBlock に与えています。これをHierarchical Latent Spacesと論文中 では呼んでいます。 46
Network概要図 47
Truncated Trick • 次に行ったことは、Truncated Trickです。cGANに限らずGANでは入力ノイズは N(0,I)からサンプリングしますが、このサンプリングした値のうちThresholdを 超えるものは再サンプリングしてThresholdの中に収めるというものです。 • これをTruncated Trickと論文中では読んでいます。 • 従って、Thresholdが小さくなればなるほどノイズの分布としては狭いものに なっていきます。 • では、このThresholdの値を変えながらFIDやISを求めるとどうなるか? • それを表したのが下図です。これはThresholdの値を変えながらGeneratorの出 力を見たものです。Thresholdの値を2.0から0.04と変え、右にいくにつれ Thresholdの値が小さくなっていきます。 • Thresholdの値が最も小さい時は多様性(Variety)が失われ、最も大きい時は質 (Fidelity)が失われています。 48
49
• GANにおける学習の安定性はこれまでに様々議論されています。 • その中で安定性を与えるものの一つに、Zero-Centered Gradient Penaltyがあります。 • 比較的最近出てきたもので、ICLR2019にもこれについて議論 した論文があります。 • Discriminatorの損失関数にこの項を加えると安定するというも のですが、勿論この論文でも試されています。 50
Colabotraryでの操作 51
52
• Load a BigGAN generator module from TF Hub です。 Web から BigGAN の学習済みモデルをダウンロードします。 少し時間がかかります。 • 53
画像生成 54
画像間補完 • 画像Aから画像Bへのいわゆるモーフィング画像を生成します。 • num_samples はモーフィングを何回やるかの指定。 • num_interps はモーフィングを何枚の画像でやるかの指定。 truncation と noise_seed は先程と同様ですね。 55
56
57
• 学習は既に終わっていて画像生成するだけなのに、9.20GB の GPUが必要。 58
truncation(閾値)を変化させてみる 59
60
• モデル内部でこれをどう活用しているかと言うと、学習時は入 力に正規分布のランダムノイズを使いますが、学習完了後の画 像生成時は入力の正規分布のランダムノイズの幅を狭める(幅 が大きいランダムノイズは使わずに再度発生させる)ことで、 多様性と画質の両立を図っています。どの程度ランダムノイズ の幅を狭めるかの指定に使っているのが閾値なのです。また、 この手法を論文では、Truncated Trick と呼んでいます。 61
• 3行目の truncation = … は先頭に#を付けてコメントアウト (無効化)し、category = … から下の行に先程のコードを上 書きします。閾値は、0.1, 0.4, 0.7, 1.0 と4段階に変化させ、各 閾値毎に5枚の画像を生成させます、noise_seed は 9 で、 category は282トラ猫です。 • 62
画像生成の結果です。左端の数字が閾値で、閾値が大きくなるに従って、多様性は大きくなる 一方で画質は低下するというトレードオフの関係があることが分かると思います。 63
64
65
PGGAN 66
PGGANとは • StyleGANが2018年12月、PGGANが2017年10月に発表された ものであるため、StyleGANと比べると劣る • By default, config.py is configured to train a 1024x1024 network for CelebA-HQ using a single-GPU. This is expected to take about two weeks even on the highest-end NVIDIA GPUs. • 67
Networkの構成図 68
69
Networkのcode 70
71
72
73
VQ-VAE-2 74
VQ-VAE2とは • BigGANを超えた!DeepMind、史上最強の非GANジェネレー タVQ-VAE-2を提案 • BigGAN は「歴史上最強のGANジェネレータ」として知られて います。 • 最大512×512ピクセルの高解像度画像を条件付きで生成するモ デルで、1000カテゴリーの画像を生成出来ます。従来のスコア を大幅に更新し話題になりました。 • DeepMindが最近発表した論文では、VQ-VAEを使用した画像 生成に取り組んでいます。現在の最良のGANモデル(BigGANdeep)に匹敵する画像を生成することに成功しました。さらに 画像の多様性がBigGAN-deepより優れていることが分かりまし た。 75
• VQ-VAE-2は潜在変数にベクトル量子化を使ったVQ-VAEに、 階層潜在変数を追加、データの潜在変数の周辺分布を生成する ような事前分布を自己注意機構付きの自己回帰モデルで学習す る。BigGanに匹敵する高精度を達成しながら多様性のある画像 生成を実現 • https://arxiv.org/abs/1906.00446 76
Networkの構造 77
• VQ-VAE-2はVQ-VAEの進化系です。 • VQ-VAEでは中間表現として、ベクトル量子化を用いて情報を 離散的な潜在空間に圧縮していました。 • VQ-VAE-2はオリジナルのVQ-VAEと同様にシンプルかつ軽量 に保たれていますが、さらに解像度を上げるために階層型の潜 在マップを使用しています。潜在表現を異なるスケール毎に階 層的に学習します。 • 中間表現は元の画像よりも30倍ほど以上小さくなりますが、デ コードして非常にリアルな画像に再構築することができます。 これらの離散表現の事前分布をPixelCNN(自己注意機構を持 つ)を用いて学習しサンプリングします。 78
• VQ-VAE-2は、観測された情報を離散的な潜在変数のセットに マッピングするエンコーダとこれらの離散変数の情報を再構築 するデコーダで構成されています。 • システムは大きく2段階の過程に分かれており、第1段階では、 階層構造を利用し、局所的(テクスチャ)な情報との大域的な 情報を分けてモデリングします。 • ローカルの詳細を表現するボトム潜在マップとグローバル情報 をモデル化するトップ潜在マップを持ち、それぞれに基づいて 調整されます。 79
• 次にデコーダは、この2つの潜在マップを用いて、局所的およ び大域的な情報を含んだ、元の図と同じ大きさの再構成図を作 成します。階層内の各レベルを個別にピクセルに依存させるこ とにより、デコーダでの再構成エラーを減らすことができます。 80
第二段階では、オートエンコーダ付きのPixelCNNを用い てこの潜在変数の事前分布を学習し、サンプリングします。 81
これら画像はImageNet 256×256で訓練されたモデルが生成した画像 です。 品質は高く、さらに多様性の観点から、BigGAN-deep(現在のSOTA GANモデル)を超える画像を生成しています。以下の比較からわかる ように、VQ-VAEはGANの忠実度に匹敵するサンプルを生成していま すが同時に様々な多様性も持ち合わせています。 82