[論文メモ] DyStyle: Dynamic Neural Network for Multi-Attribute-Conditioned Style Editing

arxiv.org

GANの生成結果を操作する系の論文。
f:id:Ninhydrin:20210929092344p:plain
StyleGANなどは高精細な画像の生成を可能にしたが、生成結果のコントロールが難しい。
生成結果のコントロールするためにスタイル編集ネットワーク(StyleGANのlatent codeを生成する)を作成する手法がある。
しかしlatent codeを変化させると意図しない部分も同時に変化してしまい狙った箇所のみを変化させるのが困難。

GANSpaceやSeFaなどの手法ももあるがPCAを使ったデータドリブンな方法。
これらの手法はlatent spaceが線形であるという仮定。
実際はlatent spaceで複数要素がentangleしていて一つの属性を変化させると他のセマンティクスが予期せず変化してしまう。
latent spaceを線形に分離は限界がありStyleRigやStyleFlow、Hijack-GANなどはlatent codeを非線形な編集を行う。
StyleRigの結果は良いが顔の属性の詳細な制御はできない。
StyleFlowは学習時に属性の制御が明示的に課せられてはおらず、データの偏りの影響を受ける。
Hijack-GANは属性が直行しているという仮定をしている。

スタイル編集ネットワークは多様な属性に対応できる必要があり、学習時に操作する属性の構成に偏りがあるとそれの影響を受ける。
例えば実画像の編集を例で髪の色と年齢をを変えたいとした時、この属性構成が同じ確率でサンプリングされてほしい。
データセットで髪の色と年齢に相関があると片方を編集するともう一方も予期せず変化してしまうかもしれない。
これを避けるためには学習時、各属性が独立にサンプリングされてほしい。

そこで提案するDyStyleでは
1) 静的な学習データセットではなく、属性構成を均等にサンプリング
2) 各属性操作に特化したエキスパートで構成
を行う。

手法

提案するDynamic Style Manipulation Network(DyStyleNet)のアーキテクチャと学習方法について。
全体図は図3を参照(論文では図3と図2の画像が間違っていそう)
f:id:Ninhydrin:20210929101156p:plain
DyStyleではlatent codeとして \textbf{W}+を扱う。 \textbf{W}+は18個の512次元ベクトルでStyleGAN2の各層に利用される。
 \textbf{W}+はMapping Networkの出力か学習済みのimage to code network(図3のEncoder)の出力。
DyStyleNetは \textbf{W}+を受け取り、操作後のlatent code  \hat{\textbf{W}}+を生成。この \hat{\textbf{W}}+をStyleGAN2に入れて編集後の画像 \textbf{I}_Mを得る。また \textbf{W}+からも編集なしの画像 \textbf{W}_Uを得る。
 \textbf{I}_M \textbf{I}_Uと指定した属性は変化しながらもアイデンティティは一致してほしく、そういった制約を課す。これらの制約は学習済みモデル( N_{attr} N_{id})によって行う。

Dynamic network architecture

アーキテクチャは図2を参照。
f:id:Ninhydrin:20210927094704p:plain
編集する属性構成情報は A_n \textbf{W}_l+を1つずつ処理する。
このとき属性構成 A_nを単体で処理するのではなく \textbf{W}_lとインタラクションすることで、各層で適当なstyle codeを生成できる(図2の緑の四角内部。 A_n W_lをFCに通したあとでアダマール積をとっている)。
各属性情報で処理したあと、Cross-Attentionで1つのfused proxy codeを得る。
Cross-Attentionの恩恵は2つ
1) 各属性とのインタラクション(顔画像に対しヨーとピッチを変更したとき、鼻や目の変化は両方の影響を受ける)
2) 可変な入力に対応できる(編集する属性数は可変)
またCross-Attentionの前にスイッチ(図だと赤字のdynamic)があり、編集する属性のみ入力する。
Cross-Attentionは式1を参照。
f:id:Ninhydrin:20210928092822p:plain

Training method

Training losses

lossは3つのlossの和。
f:id:Ninhydrin:20210928093030p:plain
 L_{id}は編集前の画像とのアイデンティティを保つためloss。学習済みのface identifierを使ったコサイン類似度を採用。
ただし、ターゲットの画像が写真とかではない場合、既存のidentifierではアイデンティティを保つのが難しいのでLPIPSを採用する。
 L_{norm}は画像の質が落ちないようにする補正用のloss。 \hat{\textbf{W}}_lがStyleGAN2のもとの \textbf{W}の空間からはずれないようにする。
 L_{attr} A_nが各属性に対応するためのloss。属性に関してはピッチ等の量的変数と髪の色等の質的変数がありそれぞれに適したlossを提案。
量的変数に対しては式3で定義するcontrastive lossを利用。
f:id:Ninhydrin:20210928095407p:plain
A^i_M,  A^i_Uはそれぞれ学習済みモデル N_{A^i}で測定した I_M,  I_Uのi番目の属性の値。
 \Delta^{gt}_{A^i} I_Mから I_Uへの変化量。 T_{A^i}は定数のしきい値
質的変数については0か1の値を取る。これについても学習済みモデル N_{A^i}を利用する。lossは式4。
f:id:Ninhydrin:20210928100646p:plain
 \textbf{emb}_{M}^{A^i} Mを入力としたときの学習済みモデル N_{A^i}の最後から二番目の層の値。
なので A^i_{gt}==A^i_{U}のときはコサイン類似度が高くなるように、それ以外はcross entropyという感じ。

Two-stage training strategy

DyStyleは2ステージで学習を行う
1ステージ目は1つの属性編集のみの学習。これにより各属性のエキスパートの学習ができる。
2ステージ目では複数の属性をランダムにサンプリング・編集して学習を行う。これによりエキスパート同士のコミュニケーションができ複雑な属性編集に対応できるようになる。

実験

比較対象はInterFaceGANとStyleFlow。
実装はPyTorch1.6で学習はTesla V100が1台。
結果は表1を参照。その他の実験については論文を参照。
f:id:Ninhydrin:20210929091336p:plain

Ablation studies

dynamic architectureとtwo-stage trainingの効果を検証。
dynamicに対しstaticは操作する属性に関わらず全てのスイッチをオンにしておく。
結果が図4と図5。学習が進むとdynamic + two-stageのが良いことが確認できる。
f:id:Ninhydrin:20210929093347p:plain
f:id:Ninhydrin:20210929093443p:plain

Appendix

Layer selection strategy

既存手法で特定の属性は特定のlatent vectorにのみ相関しているという観測結果がある。なので属性ごとに関与するlayerが決まっている。表3を参照。
例えばyawとpitchに関しては1~2層の \textbf{W}+のみ編集する。
f:id:Ninhydrin:20210929092126p:plain

また、使用した属性については表4を参照。
f:id:Ninhydrin:20210929092653p:plain

所感

シンプルな手法で学習もそこそこ早そうなのは良さそう。

実験結果の画像を見ても悪くはなさそうだが、多分チェリーピックなので完全に信用はできない。
各属性ごとにエキスパートを作るMixture of Experts の戦略や、スイッチを作り必要ない部分は完全に関与させないといった手法は応用できそう。
今回は属性がラベル付けされ明示的に別れていたのでスイッチを用意するdynamicな手法が適用できたが、逆にエキスパートを明示的に分けられない場合はMode-Adaptive Neural Networks for Quadruped Motion Controlのようにすると良いのかもしれない(これはモーション生成の論文だが)。
http://homepages.inf.ed.ac.uk/tkomura/dog.pdf
複数のネットワークを用意し、これらを混ぜる割合を別のネットワークで予測して学習する。
明示的にエキスパートとして学習しているわけではないが学習中に各ネットワークがエキスパート化してくるといった感じ。

tow-stage trainingは少々面倒だが、実験結果を見る感じ個々のエキスパートを先に学習することでエキスパートがしっかり特化しているように見える(口の開き方とか)。
口の開き方や髪の色については実際にはバイナリではなく、口の開き方についてはmiddleや髪の色については赤だとしても薄い赤等連続的な値な気がする。
学習済みモデルを利用するならその出力をターゲットとして連続値で学習すれば良さそうな気もする。
図のミス等少々読みにくい論文ではあった。