PDF

タスク

  • 画像の生成にGANが広く用いられている
    • GANの潜在状態は等方ガウス分布
    • 全ての方向に等しく分布しているため, 潜在状態を可視化しても情報が得られない
  • 出力の画像に任意の変化を加える (例: 顔画像を回転させる, 性別や髪の長さを変える)には, GANの潜在ベクトルをどの方向に変化させたらいいか?が知りたい

既存手法

  • 画像合成モデルとして, BigGAN [ICLR ‘19]やStypleGAN [CVPR ‘19]が提案されている
    • BigGANではランダムサンプルした潜在ベクトルを生成器の最初の層だけでなく全ての層に入力する
    • StyleGANも同様に潜在空間を仮定
      • Mapping networkで潜在ベクトル \({\bf z}\)を中間表現 \({\bf w}\)に変換し, \({\bf w}\)を生成器の全層に入力
    • これらの手法は, 潜在ベクトルの調整による出力画像の編集が難しい
  • これを解決するため, 教師あり学習が提案されている
    • 入力画像の一部にラベルがついている
    • GANの生成器に顔の画像とともに眼鏡のあるなし, 回転等のラベルを入力
    • しかしこれらの方法は人手によるラベル付けが必要

提案手法

  • 画像生成の出力画像を修正するための教師なしアプローチを提案
  • StyleGAN, BigGANの潜在ベクトルに主成分分析 (PCA)をかけることで, 潜在空間における重要な方向 (軸)の特定に役立てる
  • StyleGANへの適用
    • StyleGANでは等方ガウス分布から潜在ベクトル \({\bf z}\)をサンプリングし, Mapping networkで中間状態 \({\bf w}=M({\bf z})\)にマッピングする
      • 中間状態ベクトル \({\bf w}\)を入力とする生成器 \(G({\bf w},{\bf y}_0)\)から画像 \(I\)を生成
      • ここで, \(p({\bf w})\)をどう記述するかが問題
    • 提案手法では, まず\(p({\bf w})\)から \(N\)つのサンプルを生成
      • 生成したサンプル \({\bf w}_{1:N}\)にPCAをかけて新しい基底 \({\bf v}_{1:D}\)を得る
      • 新たな \({\bf w}\)に対し, PCAの \(k\)番目の基底を加えて \({\bf w}'={\bf w}+\alpha{\bf v}_k\)と修正
      • この \({\bf w}'\)を用いて画像を生成してみる
    • 各々の成分 \(k\)について生成した画像を見てみると, PCAの各成分が画像の様々な操作 (回転, 影をつける, 色を変える等)に対応しているのがわかる
      • これはPCAの正規直交性によるもの
        • ある方向の変化は他の方向の変化を含まないと仮定
    • ここまでは生成器の全層への入力を \({\bf w}'\)で置き換えていたが, 一部の層への入力のみ置き換えたらどうなるか?
      • 先行研究で生成器の最初の方の層は画像全体の配置を決め, 最後の方の層は色や影などの特徴を決めるということがわかっている
      • 配置を変えたかったら最初の方の層のみ置き換え, 色や影を変えたかったら最後の方の層の \({\bf w}\)を置き換えれば良い
        • 予想通り, 0〜3層目までの\({\bf w}\)を \({\bf w}'\)に置き換えると色や影は変わらず物体の種類が変わる
        • 4〜6層目の中間層で置き換えを行うと背景が変わる
        • 7〜9層目の最後の方の層で置き換えをすると色や反射が変わる
  • BigGANへの適用
    • BigGANの潜在状態 \({\bf z}\)は等方分布なのでPCAが適用できない
    • 入力の潜在ベクトルの代わりに生成器の \(i\)番目の層の潜在ベクトルにPCAをかける
    • BigGANでは \(N\)個のサンプル \({\bf z}_{1:N}\)を生成器に入力し, \(i\)番目の層におけるテンソル特徴量 \({\bf y}_{1:N}\)を得る
    • \(N\)個のテンソル特徴量 \({\bf y}_{1:N}\)にPCAをかけ, 低次元の基底行列 \({\bf V}\)を得る
    • 規定行列 \(V\)とテンソル特徴量 \({\bf y}_j\)に基づいてPCAの基底ベクトル \({\bf x}_j\)を計算
    • 生成器に入力する潜在ベクトル \({\bf z}_j\)を基底ベクトル \({\bf x}_j\)で回帰
    • 回帰行列を \(U\)とおく
    • 各層における入力を \({\bf z}'={\bf z}+U{\bf x}\)で置き換え
    • StyleGANと同じ設定で実験を行ったところ, BigGANとStyleGANで似た傾向が見られた