MixNMatch: Multifactor Disentanglement and Encoding for Conditional Image Generation
===
![](https://i.imgur.com/xnDMeoS.png)
## 0. あいさつ
[彌冨研 Advent Calendar 2019](https://adventar.org/calendars/4371) の 6 日目の記事になります.皆さんこんにちは!ばくれつパンチ!どうもばくれつパンチです.GAN とかよく分からないけどまとめてみました.
## 1. どんなもの?
MixNMatch は mix-and-matchな画像生成のために画像から背景,物体,形状,テクスチャなどを disentangle でエンコードするための4つのエンコーダと disentangle latent code から画像を生成する FineGAN[[36](https://arxiv.org/abs/1811.11155)] で構成される.
FineGAN により段階的に (背景→形状→テクスチャ) 画像生成を学習 ( latent code → image ).
ただし,FineGANは latent codes によってのみ条件付けされているため,実際の画像から背景,オブジェクトのポーズ,形状,テクスチャを制御する latent code を抽出する encoder が必要となる.
エンコーダは ALI [[7](https://arxiv.org/abs/1606.00704)] や BiGAN [[3](https://arxiv.org/abs/1809.11096)] のように,敵対的に image-code distribution matching を利用して画像から latent factor への encoder を学習 ( image → latent code )する.
## 2. 先行研究と比べてどこがすごいの?
latent code → image の生成 (FinGAN) から image → latent code → image にすることで
様々なreal imageから変換した disentangle latent code を組み合わせることで,多様な合成画像を生成できる.
これを応用して合成動画も生成可能.
## 3. 技術や手法の"キモ"はどこにある?
一つのクラスの画像集合 $\mathcal L = \{x_1,x_2, ... , x_n\}$を仮定すると
MixNMatchの学習の目的は
- (1) $\mathcal L$ 内の画像に結び付いている背景,物体のポーズ,形状,テクスチャを disentangled latent code space へエンコードすること
- (2) 本物のデータ分布$P_{data}$に一致する画像を生成すること
![](https://i.imgur.com/lqtA853.png)
### 3.1. [FineGAN](https://hackmd.io/@Yf8NTYF4S3WzqpJfVmh3Zg/Hy_e4vzpB) (画像生成部)
FineGAN はランダムにサンプルされた latent codes $(z,b,c,p)$を入力として,$b$ から背景のみを生成する background stage,$p$ から物体の形状のみを生成する parent stage,$c$ から物体のテクスチャ child stage を生成するの3段階に分けて画像を生成する.
parent stage と child stage は適切な形状とテクスチャの詳細を取得するためにマスクも生成し,背景を disentangle にするために object detector によって得られる boundary box を利用する.
また,unsupervised で他の要因を disentangle にするために InfoGAN [[4](https://arxiv.org/abs/1606.03657)] と同様に information theory を利用して latent codes 間に制約を課す.
FineGAN の loss は各ステージつき 1 つで以下のようになる.
$$
\mathcal L_{finegan} = \mathcal L_{b} + \mathcal L_p + \mathcal L_c
$$
それぞれの詳細は FineGAN 見てねって書いてある...
### 3.2. Paired image-code distribution matching (エンコーダ)
FineGAN はサンプリングされた latent cod を入力としているため,現実の画像を入力とすることはできない.そのため,入力された real image から disentangled representations $(z,b,c,p)$ へエンコードする必要がある.
そこで,4つのエンコーダを学習することを提案する.
しかし,普通の学習では FineGAN の disentanglement を維持できないため,4つのコードをそのまま生成器に入力しても再構成することはできない.(単純なオートエンコーダに劣化する?)
そのため,ALI や BiGAN のアイデアを活用し,エンコーダが inverse mapping できるように学習を助ける.
**エンコーダ ($x~P_{data}, \hat{y}~E(x)$) によるペアの image-code の分布と
生成器 ($\hat{x}~G(y), y~P_{code}$) によって生成されたペアの image-code の分布が一致するように敵対的に学習を行う.**
$$
\mathcal L_{bi_adv} = \min_{G,E}\max_{D} \mathbb{E}_{x \sim P_{data}}\mathbb{E}_{\hat{y}\sim E(x)}[logD(x,\hat{y})] +
\mathbb{E}_{y \sim P_{code}}\mathbb{E}_{\hat{x}\sim G(y)}[log(1-D(x,\hat{y}))]
$$
ここでの $E$ はエンコーダ,$G$ は FineGAN の生成器,$y$ は $(z,b,c,p)$ のための place holder,$P_{data}$ はデータ ( real image ) ,$P_{code}$ は latent code distribution.
discriminator $D$ への入力はimage-codeのペア.
これによって
- (1) 生成された画像$\hat x \sim G(y)$が real に見えるように
- (2) real image から抽出された latent code $\hat y \sim E(x)$が必要な要因を捉えるように
強制される.
### 3.3. Relaxing the latent code constraints
抽出された latent code の disentanglement を保つために対処しなければならないいくつかの問題がある.
FineGAN では厳しい制約を課し,任意の disentanglement へと誘導しているが,すべての real image では実現できない.
具体的に,FineGAN では,学習中にサンプルされた chaild code を互いに素なグループになるように制約を課し,各グループが同じ一意の parent code を持ち,そして生成された,各画像のサンプリングされた背景と chaild code が同じになるように強制している.
しかし,real image の場合,厳密に同一である関係を保持できない (ex. 背景に木がある,空に鳥が飛んでいるなど).そのため,エンコードされたコードで行うのは困難な上, image と code のペアが real か fake か discriminator が簡単に識別できるため,学習に問題が生じる.
対策として,discruminator を4つの code type ごとに分けて学習した.これによりそれぞれのdiscriminator が他の code から学習するのを防ぎ,それぞれの code の関係性によって識別されることを防ぐ.
また,エンコーダを学習するときにランダムにサンプルした code から生成した画像を fake image として入力する.
fake imageと一致する対応したサンプルコードを予測するようにエンコーダを学習する.(cycle consistency的な感じ)
$$
\mathcal L_{code\_pred} = CE(E(G(y)),y)
$$
## 4. どうやって有効だと検証した?
データセット
- (1) CUB [39]: 11,788 bird images from 200 classes
- (2) Stanford Dogs [21]: 12,000 dog images from 120 classes
- (3) Stanford Cars [22]: 8,144 car images from 196 classes.
generate 128 x 128 images
### 4.1. Qualitative Results
- Conditional mix-and-match image generation
![](https://i.imgur.com/C8u1oy1.jpg)
- Disentanglement of factors.
![](https://i.imgur.com/XuVxtnL.png)
- Latent code interpolation
Fig. 5 参照略
- sketch2color / cartoon2img
Fig.6 参照略
- img2gif
![](https://i.imgur.com/QusZukf.png)
### 4.2. Quantitative Results
- 30K randomly generated images
![](https://i.imgur.com/7jGAzt5.png)
評価指標: Inception Score [34] and FID [14]
FineGANと比べISはよくなってる,FIDは悪くなっている
- Fine-grained object clustering
MixNMatch’s p (shape) and c (texture) encoders を特徴量抽出器と使用した結果.
評価指標: Normalized Mutual Information(NMI) [43] and Accuracy [9]
より正確にクラスタリングできていることが確認できる.
JULEとDEPICTは詳細な情報よりも背景や大まかな形状に注目することに重点を置いているため精度が低い.一方,FineGANは高いパフォーマンスだが,real image からの特徴抽出のために,fake image から事後的にエンコーダを学習し,latent code を学習するため,real image とのドメインギャップが存在する.MixNMatchはreal image と fake image の両方から特徴抽出するようにを学習するため,そのようなドメインギャップの影響がない.
![](https://i.imgur.com/tFG1731.png)
- Shape and texture disentanglement
5000個の画像ペア(A,B)をランダムにサンプリングし,画像Aからテクスチャと背景(コードc,b)を画像Bから形状とポーズ(コードp,z)を取得する新しい画像Cを生成します.
もし,disentangle model なら Bの部品のキーポイントの位置はCの位置に近く,Aのこれらのキーポイントのテクスチャは Cの中になる.Fig.9参照
これを計測するために CUB で keypoint detector [13]を学習し,生成された画像Cで15 point の keypoint を検出し,画像Bの keypoint との L2 距離を計測する.
また,テクスチャの保持を計測するために,画像AとCの各 keypoint を中心とした $16 \times 16$をトリミングし,L1正規化カラーヒストグラムの$X^{2}$距離を計算する.
![](https://i.imgur.com/aM8723V.png)
![](https://i.imgur.com/BLdUKL9.png)
### 論文情報・リンク
- [Yuheng Li, Krishna Kumar Singh, Utkarsh Ojha, Yong Jae Lee,"MixNMatch: Multifactor Disentanglement and Encoding for Conditional Image Generation",2019](https://arxiv.org/abs/1911.11758)
###### tags: `paper survey `