StyleGAN一問一答
StyleGAN[1]について勉強したのでメモ。
なぜStyleGAN?
- [2]のTable 1でも示されているように、現状では多くの研究がStyleGANをベースにして発展を遂げている。
Z-SpaceとW-Spaceの違いは?
- Zの元をmapping networkと呼ばれる8層の全結合層で変換してWの元とする。
Z-SpaceとW-Spaceの次元は?
- 一般にどちらも512
zを変換して得たwをどうやって使う?
- まず、画像生成過程の各解像度において、それぞれ学習されたアフィン変換によってwを変換する。この変換結果をこの文脈で一般にstyleと呼び、像空間をS-Spaceと呼ぶ。
- 次に、AdaINと呼ばれる操作によってこれを生成中の画像に注入する。
zはどうやって生成する?
- 論文内での記述は見つけられていないが、著者実装や一般的な実装[5]を見た感じおそらく標準正規分布。
zとwが同じく512次元なら、全結合層で変換する理由は何?
- zが標準正規分布だと、確率が一定以上になる領域は球になるが、タスクによっては球だとdisentanglementをそもそも達成できないことがある。
- ある属性が球の中の1本のベクトルとして表現できなくて、湾曲する
- タスクによらずdisentangledな空間が欲しくて、これがWにあたる。
- [1]のFig6参照
- zが標準正規分布だと、確率が一定以上になる領域は球になるが、タスクによっては球だとdisentanglementをそもそも達成できないことがある。
Disentanglementはどの程度達成される? なぜ?
- [1]のTab3,4のseparabilityが低いほうが、あるattributeの有無を線形な分類器で判定できることを意味する。StyleGANのW-Spaceは従来よりdisentangledではある。
- 理由は一つ前のQA以外に[1]の本文には書いていない?
- 自分の考察として、まず各層でwを挿入する部分があり、Style Mixing Regularizationの工夫もあり、挿入する箇所ごとに担当する属性が独立しやすい。
- それぞれの挿入箇所で大域的な特徴や詳細なテクスチャなどを決定するが、これらはwの線形変換で求められたスタイルに依存しているので、wの空間では線形にdisentangleしやすいのでは?
従来の生成器では最初にzを入力するが、StyleGANでは?
- 4x4x512の定数を入力する。潜在変数zによる画像の操作はwとAdaINを介して行われる。
もっと詳しくW-SpaceからS-Spaceへの変換を教えてほしい
- [3]がかなり詳しい。Appendix Aとか
wをsに変換するアフィン変換で2つに分岐しているのは何?
- AdaINの引数であるscaleとbiasをそれぞれ計算している。
Style Mixing Regularizationとは何? どんな効果がある?
- z1とz2を生成し、n層まではw1で、n+1層以降はw2で生成するもの。隣接する層のアフィン変換が近いものになって、スタイルが相関することを防ぐ狙いがある。
- 基本的にはすべての層でアフィン変換への入力に同じwが用いられるうえ、隣接する層は生成過程のfeatureも近いはずなので:入出力が類似している学習なので、似たようなスタイルが学習されてしまうと考えるのは自然。
W+ Spaceとは?
- GAN Inversion[2] の分野でよく使われる。学習済みのStyleGANの表現力を向上させてInversionの質を上げるために、層毎に異なるwを用いる技法で、これをW+の元とする。[4]
W+の次元は?
- 一般に18x512。StyleGANの生成器の18箇所のw挿入箇所にそれぞれ1x512を使用する。
GAN Inversionとは?
- 学習済みのGAN生成器を用意して、適当な画像に対応する潜在変数を求める試み。画像の編集に活用できてうれしい。
- 生成器を使って対応する潜在変数を推論時に求めるoptimization-basedな方法は、再構成の品質が高い傾向がある。一方で、画像に対応する潜在変数を出力するEncoderを学習するlearning-basedなアプローチは、より高速に潜在変数を求めることができる。質と時間のトレードオフが存在するといわれる。[2]
StyleGANとStyleGAN2の違いは何?
- アーキテクチャと誤差を見直して生成品質を向上させた。
HFGI[6]は画像Xからどんな潜在変数を求めている?
- E_0でW+を求める。
- \tilde_\Delta = G(E_0(X)) - X が失われた情報。
- 別のエンコーダE_cでC = E_c(\tilde_\Delta)を計算する。
- CをAdaINに類似の方法で生成器の各層に挿入する。Cは拡張されたW+とみなせる。
- 編集はW+に対してベクトルを足すことで行い、デコードしてこれを\hat X_editとする。残念ながら、\tilde_\Deltaが編集に置いていかれる。
- ADA(X_edit, \tilde\Delta)で\tilde\Deltaにも編集を適用する。ADAの学習には視点を変換しただけの雑なデータを用いるが、うまくいくとのこと。
スタイルを編集する方法は?
- 一般的にはその手法で考えている潜在空間にベクトルを重み付きで足す線形な操作が行われる
- HFGIではInterFaceGAN[7]の結果が用いられている。
- InterFaceGANでは、無数に生成した潜在変数から画像を生成し、これに識別器が属性ラベルを付与する。潜在空間で属性ラベルを用いて対応する潜在変数を線形識別すると、対応する単位法線ベクトルが属性を操作する方向となる。
[1] Tero Karras, Samuli Laine, Timo Aila. A Style-Based Generator Architecture for Generative Adversarial Networks. CVPR, 2019.
[2] Weihao Xia, Yulun Zhang, Yujiu Yang, Jing-Hao Xue, Bolei Zhou, Ming-Hsuan Yang. GAN Inversion: A Survey. https://arxiv.org/abs/2101.05278
[3] StyleSpace Analysis: Disentangled Controls for StyleGAN Image Generation. https://arxiv.org/abs/2011.12799
[4] Image2StyleGAN: How to Embed Images Into the StyleGAN Latent Space?. ICCV, 2019
[5] https://github.com/rosinality/stylegan2-pytorch/blob/master/generate.py
[6] High-Fidelity GAN Inversion for Image Attribute Editing. CVPR, 2022.
[7] Interpreting the Latent Space of GANs for Semantic Face Editing. https://github.com/genforce/interfacegan