【論文読み】Learning Shape Abstractions by Assembling Volumetric Primitives

# 記事概要

勉強の中で読んだCVPR2017のLearning Shape Abstractions by Assembling Volumetric Primitivesという論文について、簡単にまとめる。

# 論文情報

論文名：Learning Shape Abstractions by Assembling Volumetric Primitives
著者：Tulsiani, Shubham, et al.
掲載誌：CVPR2017

論文URL：https://arxiv.org/abs/1612.00404
プロジェクトページ：https://shubhtuls.github.io/volumetricPrimitives/
GitHub：https://github.com/shubhtuls/volumetricPrimitives

※ 本記事に使用する画像は、上記の論文から引用

# どんな手法なのか？

* 3次元立体プリミティブを用いてオブジェクトのパーツ分割
→ 複雑な形状を抽象化

* 形状コレクションのインスタンス間で一貫した分割を行い、解釈可能な形状類似性尺度を構築するために活用できる形状表現を予測
→ 画像に基づく予測と形状操作への応用

* 教師なしかつデータドリブン(データを根拠とした)なアプローチ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/f458e83c-0634-6c77-1ee1-801b40f22a55.png)

上図は、シンプルな直方体を合成して組み立てた椅子や動物の形状の例
→ 各オブジェクトの解釈可能な表現が可能 & 形状を超えて一貫した分割が可能
（椅子の座面はカテゴリを超えて同じプリミティブで捉えられる）

# 提案手法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/682b4d4f-843b-d24f-fe62-0c676fb9deee.png)
## 概要
* 入力信号 I を与えられたオブジェクト O を組み立てる問題
→ (最大)M個の異なる予測パーツを組み立てて、最終的な形状を出力する問題と定式化

* オブジェクト$O$に対応するボリューム(ボクセルモデル)を入力
→ CNN(畳み込みニューラルネットワーク)を用いて各部位のプリミティブ形状および変形のパラメータ$\lbrace(z_{m}, q_{m}, t_{m})\rbrace$を予測
→ パーツの構成と「何を」「どこで」という情報の独立性を利用


$z$：パーツの形状
$q, t$：空間遷移（回転と移動）

### CNNの学習
教師なしタスクでｍターゲットオブジェクトを最もよく表現するプリミティブパラメータのアノテーションがない

が、直接の教師データがなくても、組み立てられたオブジェクトが **ターゲットオブジェクトと一致するかどうか** をチェック
→ **予測されたプリミティブの構成が良いかどうか** を測定

### ネットワークの構造
入力：ターゲット形状の離散化された表現（ボクセルモデル）
出力：予測されたプリミティブを暗黙的に組み合わせた形状

層：5つの3次元畳み込み層(ReLU)と2つの全結合層(ReLU)

ニューラルネットワークhθによって予測される組み立てられた形状
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/be0f232e-29cf-4235-6562-fe8b34b1d989.png)
形状をパーツの集合として表現することでできる事
→ 椅子の脚や座面など、**意味的に分離したユニット**に関する独立した推論

例）「大まかな飛行機の翼」→ 形状によって捉えられる
　　「傾いた椅子の背」→ 変換によって捉えられる


## 損失関数
$O$に対するGTメッシュと予測されたパラメータによって暗黙的に定義される組み立てられた形状との間の不一致を最小化

### 表記の定義
$P_m$：$z_m$に従って予測された変換前のプリミティブ
$\bar{P}_m$：$(q_m, t_m)$に従って変換した後のプリミティブ
→ $\cup_m \bar{P}_m$：予測されたプリミティブの合成によって生じる最終的な形状

$S(·)$：引数の表面
$p ∼ S(·)$：その上でサンプリングされたランダムな点
例）$p ∼ S(\bar{P}_m)$：m番目のプリミティブの表面でサンプリングされた点

$T (p, t)$：点pをtだけ平行移動させた結果


### 損失を計算する上での問題点
予測とGTは異なるため比較が困難(GT：三角メッシュ⇔予測：パラメータ化した形状）
→ **単純なプリミティブによるパラメトリック化** により、両者の合成によって生じる形状のいくつかの特性を効率的に計算可能
→ 組み立てられた形状の **距離場** を計算することが可能

#### 距離場
**符号付距離場**
* 3次元空間の各点に、「その点から向き付き曲面としての物体表面までの絶対値距離に、その点が面の裏表(物体の内外）のいずれにあるかを表す正負の符号をつけた符号付距離(+または-の距離）」を対応させたスカラー場
* ボリューム形状の記述方法として符号付距離場を用いる
→ 滑らかなメッシュによる形状モデルを生成可能

**本手法における距離場 $C(\cdot;O)$**
オブジェクトの最も近い点までの距離を計算する関数 $\mathbb{R}^3\rightarrow\mathbb{R}^+$（オブジェクト内部では0として評価）
定義式：$C(p;O)=\min _{p\in O} {\lVert p-p^{'} \rVert}_2$
<br>
以上の事を踏まえ、本手法では2つの損失関数を定義している。


### Coverage Loss
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/861e3987-9b6f-fc2f-cd91-22d7955f807b.png)
オブジェクトOが予測した組み立てられた形状に包含されることを強制（$O\subseteq \cup_m \bar{P}_m$）
→ 組み立てられた形状の距離場が、$O$の表面上の全ての点に対して **0** と評価される
#### プリミティブの距離場
* 原点を中心とする立方体： $z=(w, h, d)$
→ 距離場は以下のように計算（$\max(0, x) ≡ x_+$を使用)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/9602d6e8-9c4d-d3ba-8aee-7553bbd495df.png)
* オブジェクト$O $ ($C( - ; O)$)が回転R (四元数qでパラメタライズ) と並進tを受ける
→ 変換されたオブジェクトに対する点pでの距離場
 ≒ $p~'=R^{-1}(p-t)$ の正則オブジェクトに対する距離場
→ $C(p;\bar{P}_m)$を以下のように定義可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/2bd11622-ea00-b8ba-dcf2-4796a84754e5.png)



### Consistency Loss（再構成損失）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/5c5a02e3-13fb-4c77-d766-effce4054aa2.png)
オブジェクトOが予測された形状を包含することを強制（$\cup_m \bar{P}_m \subseteq O$）
→ オブジェクト$O$の距離場が、個々のプリミティブ$P_m$の表面上の全ての点に対して **0** と評価される


### プリミティブ数を可変にする拡張
ここまで紹介したフレームワーク：オブジェクトを**固定数**M個のプリミティブで再構成
→ オブジェクトカテゴリ内の異なるインスタンスは**異なる数のプリミティブ**を持っている
例）椅子には取っ手がついているものとついていないものがある

→ 各プリミティブの形状や変形を予測するだけでなく、その**存在確率**$p_m$を予測

#### プリミティブ表現
存在確率であるパラメータ$p_m$を取り入れる
→ プリミティブ形状$z_m$を２つの要素 $-(z_m^s,z_m^e )$に分解

$z_m^s$：プリミティブの次元（直方体の高さ、幅、深さ）
$z_m^e\sim Bern(p_m)$：プリミティブが実際に存在するかどうかを示す2変数
例）$z_m^e=0$の場合、m番目のプリミティブが存在しないと判断

以上の処理後のCNNの予測
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/0c2d3c1b-11d2-d1b1-7edf-3d30b5a4bb7c.png)


CNNは$p_m$（パーツ存在変数$z_m^e$がサンプリングされるベルヌーイ分布のパラメータ）を予測
→ 例えば椅子が $k<M$ 個のプリミティブを使って最もよく説明される場合、ネットワークはk個のプリミティブだけに対して**高い**$p_m$を予測し、残りの$(M-k)$個のプリミティブに対して**低い**$p_m$を予測

※ベルヌーイ分布とは…
「成功か失敗か」「表か裏か」といった２種類のみの結果しか得られない実験の結果を0と１で表した確率分布

#### 学習
* CNNの出力
変更前：一意に組み立てられた形状
変更後：$m^{th}$番目のプリミティブが確率$p_m$で存在する可能性のある形状の分布
→ 可能な組み立て全体の期待損失を最小に最適化

* $z_m\equiv(z_m^s,z_m^e )$を取り込むために、consistency lossとcoverage lossを修正
→ 変換前のプリミティブ$P_m$は立方体（$z_m^e=1$）または空（$z_m^e=0$）になる
→ 空のプリミティブはconsistency lossをスキップ可能となり以下の式のように修正できる

変更前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/71d70186-5cdd-b2d5-4ffa-1b3a5170e30d.png)


変更後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/d0f32e6f-95a9-2f15-7f47-e2b69c171891.png)
→ coverage lossに取り込める

#### 最終的な損失関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/d06ed85f-5f2b-c5d6-d872-d1ab462bbc4f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/d63ad580-d4a0-1604-9645-163bb547d35c.png)
※ $p_m$に従って$z_m^e$をサンプリングした場合の期待損失 

* $\lbrace(z_{m}^s, q_{m}, t_{m})\rbrace$の勾配の計算
→ 分布パラメータ$p_m$の勾配を計算するために、基本的に全体の誤差が低い（報酬が高い）場合は正のフィードバック、そうでない場合は負のフィードバックを与えるREINFORCEアルゴリズムを使用
* $p_m$の勾配の計算
→ parsimony reward（より少ないプリミティブを選択した場合の報酬）を含む

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/f306fbad-f244-a10b-ba59-a62f5fa1a11d.png)

Coverage($L_1$)とConsistency($L_2$)の損失を学習反復数に対してプロット

* 学習初期（20,000回まで）は両損失とも減少
* parsimony報酬によりプリミティブの数を変化させると、最初は損失が増加する
→ 表現の単純さと再構成精度のトレードオフ

# 実験
## 使用したデータセット
* ShapeNet：飛行機と椅子カテゴリーを選択
* 4足歩行の動物に対応する１００個のモデル（手動でダウンロードし前処理済）

## 実験結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/e9aeb828-dbdf-0242-aa4e-71162b2b90e8.png)
椅子、動物、飛行機に対する予測結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/ed3a4c91-7c6f-f0b9-d889-8f2eb15a4f57.png)
学習の過程の可視化
* 動物と椅子の2種類のインスタンスに対して、１万回イテレーションごとに予測値を可視化。
* 最後の列：他パーツと大きく重なる冗長な部分を取り除く後処理を行った後の結果
* 最初の学習段階（2万回まで）では全てのプリミティブを使用
→ その後はより少ないプリミティブを使用するようにネットワークに学習
→ 予測が徐々に解析的に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/7d81f458-333b-aa51-567e-443bdccbc9e9.png)
予測されたプリミティブを元の形状に投影
* オリジナル形状の各点pを、距離場$C(p,\bar{P}_m)$が最小になるプリミティブに割り当て
→ 割り当てられたプリミティブに応じて各点を色付け
→ パーツ分割の様子を可視化

* 飛行機の翼やいすの座面など、似たような部位は同じ色付けをされている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/329a542c-4205-3a3d-ee65-a89f35ae8b4b.png)
様々な距離尺度を用いて計算した埋め込み
　a) ボリュームIoUに基づく距離
	　　椅子の細かい構造(取っ手の有無)が異なるものを混在させている
　b) 提案手法(すべてのプリミティブ）
	　　細かい構造も別々に符号化
　c) 提案手法(椅子の背もたれ、座面のプリミティブ)
　d) 提案手法(椅子の背もたれの向き）

* 提案手法：類似度測定の制御が可能
例) 椅子の背もたれと座面のみ必要と言った形で、特定のプリミティブのみを考慮することが選択可能
→ 椅子のハンドルを無視できる
* 椅子の背もたれの向きなど、特定の性質に注目可能
→ 1次元多様体が出現することが確認されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/0b1b8d1b-fb42-3758-b0fb-c96bdf4c4504.png)
実画像データを使った形状抽象化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1590483/5c458a42-9c4e-f493-2f56-38f8d5aaa8a0.png)
推定されたプリミティブ表現を用いて、元のメッシュ(上)をターゲットメッシュ(下)に変形させる。

元メッシュの各点には、最も近いプリミティブの枠にローカル座標(3次元空間内の個々のオブジェクトがもつ座標系)が割り当て
→ プリミティブをソースからターゲットの形状に変形すると、変形されたメッシュが取得（中段のメッシュ）

# 何が凄いのか？
* 3次元オブジェクトの単純で幾何学的に解釈可能な説明を生成
* 教師なし手法で、様々なカテゴリやインスタンスへの汎用性
* データ中の一貫した構造を自動的に発見し利用することも可能

# 今後の展望
* 色々な種類の基本的なパラメトリックなプリミティブ使用などの、世界の根本的な3次元構造の理解へつながる
* プリミティブ形状の使用により、パーツ発見、画像ベースの抽象化、形状操作など様々なタスクへの応用

# 参考サイト
符号付き距離場
http://www.am.sanken.osaka-u.ac.jp/~sagawa/pdf/cvim04range_survey.pdf
ベルヌーイ分布
https://ai-trend.jp/basic-study/bernoulli-distribution/bernoulli-distribution/