3D-GANの論文要約

# Learning a Probabilistic Latent Space of Object Shapes via 3D Generative-Adversarial Modeling

* Jiajun Wu, Chengkai Zhang, Tianfan Xue, William T. Freeman, Joshua B. Tenenbaum
* NIPS 2016

* リンク 
    * [プロジェクトサイト](http://3dgan.csail.mit.edu/)
    * [arxiv](https://arxiv.org/abs/1610.07584)
        * この記事で読んでいるのはv2
    * [github](https://github.com/zck119/3dgan-release)


![スクリーンショット 2020-03-30 22.49.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/9e72f3b1-4c3f-2520-37b1-82d81ab8a15e.png)


## abst

* 確率空間から3Dオブジェクトを生成する3D-GANを提案した
* 強みが３つある
    * 敵対的学習により，generatorが物体の構造を明示的に高品質に捉える
    * generatorが低次元確率空間から3D物体空間へのマッピングを作るので，参照画像やCADモデルがなくても物体をサンプリングできるし，3D物体の多様体を探索できる
    * discriminatorが強力な「3D形状記述子」になる．3D物体認識に応用できる
* 生成物は高品質で，(discriminatorを用いた)3D物体認識においても教師あり手法と同等の性能

## 6. conclusion

* 3D物体生成のための3D-GANと，画像-3Dモデル間マッピングのための3D-VAE-GANを提案した
    * 新しい物体の生成と，画像から3Dオブジェクト再構成の両方が可能なことを示した
* GANのdiscriminatorは3D物体の特徴表現として使うことができ，形状分類で良い性能を示した
* 物体ベクトルの潜在空間を探索し，物体補完，形状の足し引き，ニューロンの可視化を行った

## 1. intro

* 良い生成モデルは，多様で，リアルな3Dオブジェクトを生成できるはず
    * 多様：暗記や事前定義されたパーツの組み合わせではない
        * 過去の3D物体合成はメッシュかスケルトンベースで，多くが既存のCADライブラリからパーツを組み合わせていた
            * そのため新しく見えても概念としては新しくなかった
    * リアル：生成サンプルが詳細である

　

* ボクセルベースのdeep表現学習(Girdhar et al., 2016, Su et al., 2015a, Qi et al., 2016)は，表現学習とShapeNet(Chang et al., 2015, Wu et al., 2015)などの大規模CADデータベースにより台頭した
    * これらの手法は学習された物体表現を元に新しい物体を生成しており，パーツの概念は明示的にモデリングしていない
        * 3D物体は，2Dでこれをやるよりなお難しく，まだ物体中に穴や断片ができる

　

* 本論文ではGANを用いて，新しく，かつリアルな物体生成を試みる
    * GANのdiscriminatorが次のメリットをもたらす
        1. discriminatorなら２つの物体(本物オブジェクトと合成オブジェクト)の構造的違いがわかるかもしれない(voxelごとにルールで生成する方法では鳥瞰できない)
        2. adversarial lossを使用すると，mean squaredのように中間的なぼんやりした形状しか生成できないという状況に陥らない
    * その他のメリット：
        * 新しい3Dオブジェクトを確率的潜在空間からサンプルできる(ガウス，一様など)
        * discriminatorが3D物体認識に有用な特徴をもたらす
            * 他の教師あり手法と同等，他の教師なし手法を上回る性能

　

* 学習されたgenerativeおよびdiscriminative表現は応用が効く
    * VAEと組み合わせて2次元画像から3D物体を再構成できることを示す
        * 物体表現の空間を探索して，その表現が物体の意味的な情報を豊かに持っていることを示す


## 2. Related Work

### 3D形状のモデリングと合成

* 従来の多くの手法はメッシュとスケルトンに基づいていた
    * 形状合成アルゴリズムはノンパラメトリックで，データベースからパーツを組み合わせて形状を作る
* Huan et al. 2015.はpre-trainedなテンプレートを用いた3D形状の生成を試みている(未読だがテンプレートメッシュからの変形具合を学習させて形状を作るやつだろうか?)
    * 本手法はデータベースからパーツを組み合わせたりせず，教師なしで訓練される

### 3Dデータのディープラーニング

(網羅していません．他にもたくさん出ている)

* Li et al. 2015， Su et al. 2015b， Girdhar et al. 2016，は3Dオブジェクト認識において，3D形状と合成画像のjoint embeddingを学習する手法を示した
* Wu et al. 2016， Xiang et al.2015， Choy et al. 2016，はin-the-wildな画像からreccurent networkでの3Dオブジェクト復元について議論した
* Girdhar et al. 2016，Sharma et al. 2016，オートエンコーダベースのボクセル表現の学習
 Kar et al., 2015， Bansal et al., 2016， Girdhar et al., 2016，教師ありで，１枚の画像から3D物体の復元
    * 本手法は教師なしで，確率空間から物体を生成．

### 敵対的学習

* GANの従来手法は2D画像に着目していたが，本論文は3D物体のモデリングの文脈で議論する


## 3. Models

* volumetric convolutional networksとgenerative adversarial netsを利用した，3D-GANの構成を述べる
* また，本手法が2D画像から3D物体へのマッピングを学習できるように，同時にVAEを訓練する方法を述べる

### 3.1 3D Generative Adversarial Network(3D-GAN)

* 3D-GANのgenerator Gは200次元潜在ベクトルzを，3Dボクセル空間を表す64x64x64のキューブにマッピングする
    * zは確率的潜在空間からランダムサンプルされる
    * discriminator Dは，3D物体 x が本物か，合成か，に関する確信度$ D(x)$を出力する
    * 二値クロスエントロピーを使って次式で誤差関数を定義する
        * $ L_{3D-GAN} = log D(x)  + log(1-D(G(z))) \tag{1}$
            * xは64x64x64空間中の本物の物体，
            * zは分布p(z)からランダムサンプルされたノイズ
            * 本研究ではzの各軸はi.i.dな$ \left[0,1\right] $の一様分布

#### Network structure

* generatorは，Radford et al. 2016にならい，all-convolutional なネットワークを設計した
    * 5つのvolumetric fully convolutionalレイヤ(kernel size = 4x4x4, strides = 2)
        * それぞれのレイヤ間にBNとReLUがあり，最後はSigmoid
* discriminatorはgeneratorを反対向きにしたものだが，ReLUではなくLeaky ReLUを使用
* ネットワーク中にpoolingや線形レイヤはない

#### Training details

* generatorの学習はdiscriminatorより遅い
    * discriminatorの訓練が進みすぎて，いつも正しい分類をするようになると，generatorは誤差関数から改善のための信号を得るのが難しくなる
        * 訓練のペースをあわせるために，各バッチにおいて，discriminatorのaccuracyが80%以下だったときしかdiscriminatorを更新しないことにした
            * これにより訓練が安定してより良い結果を得た
* 学習率はGが0.0025, Dが$ 10^{-5}$，バッチサイズは100，ADAMを$ \beta = 0.5$で使用した


### 3.2 3D-VAE-GAN

* 3D-GANの潜在ベクトルzを2D画像から作ることで，3Dオブジェクトを2D画像から作り出せるように拡張して3D-VAE-GANとする
    * 2D画像を入力して潜在ベクトルzを出力する画像エンコーダEを追加する
        * GANとVAEのデコーダを共有したVAE-GAN(Larsen et al. 2016)にインスパイアされている
    * 3D-VAE-GANは画像エンコーダE, デコーダ(3D-GANのgeneratorと同じもの)，discriminator Dの３つで構成
        * encoderは5つのconvolution layer(それぞれkernel size = {11, 5, 5, 5, 8}, strides = {4, 2, 2, 2, 1})を持つ
            * BNとReLUレイヤがそれぞれの間にあり，最後にサンプラーがある(3D-GAN部分に渡す200次元ベクトルをつくる)
        * generatorとdiscriminatorは先述の通り

　

* 誤差関数は３つの部分からなる
    * $ L = L_{3D-GAN} + \alpha_{1}L_{KL} + \alpha_{2}L_{recon} \tag{2}$
        * $ L_{3D-GAN} $: 3D-GANの誤差
        * $ \alpha_{1}L_{KL} $: encoderの出力の分布を制限するKLダイバージェンス
        * $ \alpha_{2}L_{recon}$: 物体復元誤差
        * αは重み
    * $ L_{3D-GAN} = log D(x) + log(1-D(G(z))) \tag{3} $
    * $ L_{KL} = D_{KL}(q(z|y) || p(z)) \tag{4}$
    * $ L_{recon} = ||G(E(y)) - x||_{2} \tag{5}$
        * xは訓練セットの3D形状
        * yは対応する2D画像
        * q(z|y)は潜在表現zの変分分布
            * KLダイバージェンスは，generatorが潜在表現zを同じ分布p(z)からサンプルできるように，変分分布を事前分布p(z)に近づける
                * p(z)は多次元ガウス分布(ゼロ平均，単位分散)を選んだ
                    * 詳細はLarsen et al. 2016参照

　

* 訓練には2D画像と，それに対応する3Dモデルが必要
    * SUN databaseの16,913の室内画像を背景として3D形状を72のview(24アングル，3段階の高さ)でレンダリングした
    * $ \alpha_1 = 5, \alpha_2 = 10^{-4}$を使用．訓練は先述のもの同様


## 4. Evaluation

* 生成された3D物体の質的評価
* 訓練済みdiscriminatorを3D物体分類に使う特徴として評価
* データセットはModelNet(Wu et al. 2015)
*  3D-VAE-GANはIKEA dataset(Lim et al. 2013)で質的・量的評価

### 4.1 3D Object Generation

![スクリーンショット 2020-03-31 1.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/0d12ad07-d70f-f86e-9f31-8a158c2ce8fc.png)


* 図２．生成された3Dオブジェクトは，各オブジェクトの中で最も大きい連結部分をレンダリングした
    * 3D-GANをstate of the artのWu et al.2015 と比較した
        * 彼らは確率的潜在空間とvolumetric autoencodeで生成している
            * オートエンコーダは潜在空間の分布に制約を課さないので，すべての訓練例の潜在ベクトルzの経験分布$ p_0(z)$を計算し，ガウス分布$ g_0$を$ p_0$にフィッティングし，その$ g_0$からサンプルした
            * (AEは訓練サンプルの3Dモデルをencodeして潜在空間に落とせるので，その分布を測ってガウス分布g0を作り，GANの入力はg0から取った．これにより，AEが3Dモデルを入力して訓練できるのに対してGANはできないことの不公平を解消したという意味だと思う．)
                * 本手法の結果のほうが詳細で高品質だった
                    * 本手法は従来手法よりも高解像度な物体を生成できる
                    * 低解像度で生成するより，高解像度は空間のvoxel増加が速いので困難だが，そうしなければ物体の詳細は得られない
* 単純にデータを暗記しているのではないことを示すために，生成物を最近傍サンプルと比較した
    * l2距離で物体を比較すると，クエリと結果の見た目が全然異なるので，discriminatorの最後のconvレイヤの出力(2倍プーリングで)を比較に使った．
        * 生成物と最近傍は似ているが同一ではないことがわかる(図2)

### 4.2 3D Object Classification

* discriminatorが学習した表現を，分類用の特徴として使うことで評価する
    * 入力3Dオブジェクトの特徴を得るのに，２，３，４番めのconvレイヤの出力を結合する
        * そのために，それぞれkernel size = {8, 4, 2}のmax poolingを適用する
            * 分類器には線形SVMを使う

#### Data

* 3D-GANをShapeNetの7つのカテゴリ(椅子，ソファ，テーブル，ボート，飛行機，ライフル，車)で訓練する
    * テストにはModelNet(ModelNet10, ModelNet40)を使う．これはSharma et al.2016，Maturana and Scherer 2015，Qi et al. 2016，に従った
        * テストカテゴリは学習カテゴリと同一ではないので，3D-GANのout-of-category 一般化の能力を見ることができる

#### Results

![スクリーンショット 2020-03-31 1.37.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/251a2045-0a03-86e4-814d-8ec63927fcc6.png)


* sotaの手法と比較し，クラスごとのaccuracyを表1に示した
    * 他の教師なしの手法を大差で上回った．
        * 教師あり手法のいくつかよりも分類accuracyが高い
            * sotaの教師ありvoxelベース手法と近い
* 本手法は限られたデータでもうまく動作する
    * クラスごとに25程度しか訓練データがないが，クラスごとに80データ以上使った他の教師なし手法を凌いでいる

### 4.3 Single Image 3D Reconstruction

* 3D-VAE-GANが単体画像からの3D物体復元で良い結果を出すことを示す
    * データセットはIKEA (Lim et al. 2013)

#### Data

* IKEAはIKEA家具の画像データセット．
    * オブジェクトが画像の中心に来るようにクロップした
        * test setは1039オブジェクト
        * bed, bookcase, chair, desk, sofa, tableの６カテゴリ
            * このデータセットは家具が屋内で使用された状態(隠れている部分がある)を撮影しているのでチャレンジングである

#### Results


![スクリーンショット 2020-03-31 10.26.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/f9a2f46b-871a-51f4-12ee-e16c7f2f1ff2.png)
![スクリーンショット 2020-03-31 10.26.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/367ff9fa-dee9-8ae7-f984-107d10fa7efc.png)


* 結果は表２．
    * ６カテゴリ同時に訓練した１個の3D-VAE-GANと，1カテゴリずつ訓練した6個のモデルでの結果を示した
    * 評価は20x20x20の解像度で，average precisionを評価指標にした
        * IKEAの正解オブジェクトはまっすぐな視点から見たものではないので，予測結果は移動・反転等で10%まで位置を合わせた
            * すべてのカテゴリで従来のsotaを上回る結果


## 5. Analyzing Learned Representations 

### 5.1 The Generative Representation



* 物体生成のためのベクトルの潜在空間を理解するための３つの方法：
    * ベクトルの各次元が何を表すのか可視化
    * ２つのオブジェクトベクトルの間の補完を行い，生成オブジェクトがどう変わるか観察
    * 潜在空間における形状の足し引き

#### Visualizing the object vector


![スクリーンショット 2020-03-31 10.48.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/3bf85686-279c-2959-8cb2-bcdf0f13d29b.png)


* ベクトルの各次元の値を次第に増加させ，生成オブジェクトを観察した
    * 図５の各列がそれぞれ１つの次元に対応
        * いくつかの次元は，厚さや幅といった意味的な情報を持っていることがわかる

#### Interpolation

* ２つの物体(同カテゴリ間，異カテゴリ間)の間の補完
    * 潜在空間を移動するとオブジェクトはなめらかに遷移する

#### Arithmetic

* 潜在空間でベクトルの足し引きを行う
* Girdhar et al.2016 は3Dオブジェクトの学習された表現が意味的な情報をencodeしていることを示した
    * 彼らは本研究とはことなり，既存の3D CADモデルを入力にしている




### 5.2 The Discriminative Representation

![スクリーンショット 2020-03-31 10.55.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/62e0b891-7eba-84bb-7159-4f6212bfd7f5.png)


* discriminatorのニューロンを可視化する
    * 入力オブジェクトが何なのかと，それらのどの部分が最も高い反応をニューロンに引き起こしたのかを示す
 * すべての訓練オブジェクトを入力して実験し，2番目と最後のconvレイヤの各ニューロンを調べた．
    * それらのニューロンが最も強い反応を示したオブジェクトを示す
        * さらに，guided back-propagation(Springenberg et al. 2015)を使ってそのactivationを引き起こしたパーツを可視化した(図９)
            * 図９から，２つのことがわかる
                1. 単一のニューロンについては，最も強いactivationを示す物体は非常に似た形状をしており，ニューロンが形状について選択的であることがわかる
                2. ニューロンをactivateするパーツはこれらの物体において一貫しており，ニューロンがパーツの意味的な情報を学習していることがわかる