0
0

More than 1 year has passed since last update.

論文まとめ:Lions and Tigers and Bears: Capturing Non-Rigid, 3D, Articulated Shape from Images

Last updated at Posted at 2021-10-14

はじめに

CVPR2018より以下の論文
[1] S. Zuffi, et. al. "Lions and Tigers and Bears: Capturing Non-Rigid, 3D, Articulated Shape from Images".CVPR2018
のまとめ

CVF open access:
https://openaccess.thecvf.com/content_cvpr_2018/html/Zuffi_Lions_and_Tigers_CVPR_2018_paper.html

著者のコード:
https://github.com/silviazuffi/smalr_online

概要

  • 動物の3D-shapeを推定するモデル
  • SMALモデルに対し、動物の画像を用いてrefineすることで、より詳細なモデルを作成した
  • 具体的には、画像中の動物におけるlandmarkとシルエットが推定した3D-shapeを画像にprojectしたものに適合するように、3D-shapeをrefineする
  • texture mapも生成できる

以下の図で下行が対象の画像、中央行がそれに対する推定したshape、上行がそれにtextureを貼ったもの。

SMALR_img20.png

背景

気になったところだけざっくりまとめ。
- 人の場合と異なり、動物のリアルなshape推定、motion captureなどは現状ではない
- 人の場合は3D-scannerを用いて形状のデータを得るが、野生動物だとそれが難しいからだ
- これがあると、アニメでリアルな動きを再現したり、実験室の場で実験動物の動きを理解したり、動物の動きを真似たロボットを作成するのに役立つだろう

提案手法

SMALモデル

開始点のSMALモデル[2]について。このモデルは5種類の動物(猫・犬・馬・牛・カバ)の計41toysをスキャンして、それに適合するようにパラメータを調整することで作られている。

出来上がった全ての動物に対するテンプレートの頂点群を ${\bf v}_{template}$ として、ある特定の種類の動物(例えば猫)の典型的な頂点は

{\bf v}_{shape}(\beta) = {\bf v}_{template, 0} + B_s \beta \tag{1}

で得られる。ここで
$\beta$ :PCAで次元圧縮したshapeを表すベクトル
$B_s \in \mathbb{R}^{20}$ :βからshapeの変形ベクトルを復元するdeformation matrix

これで得られるのはrootの位置がworld座標上で (0,0,0) かつ典型的な姿勢(いわゆるT-bone)をしたもの。これに対して任意の位置、姿勢における頂点群を表現するには

${\bf r}$ :33個ある関節の親関節に対するロドリゲス角度。rootの関節はglobalなrotationを表す
${\bf t} = (t_x, t_y, t_z)$ :root関節のtranslation
として、

{\bf v}(\beta, {\bf r}, {\bf t}) \tag{2}

となる。

SMALモデルを画像に割り当てる

ここは3step。
1)$f_x = 1000$ と想定してtranslationのz軸の値を求める
2)translationのz軸の値からtranslationとrotationを求める
3)求めたtranslationとrotationを初期値として、エネルギー方程式を解き、βを求める

1) translationのz軸の値を求める

まず各変数の定義
$I^{(i)}$ :N枚ある動物が映った画像の i 番目
$S^{(i)}$ :i 番目画像内の動物のシルエット
${\bf v}(\beta^{(i)}, {\bf r}^{(i)}, {\bf t}^{(i)})$ :i 番目の画像内の動物の(2)式で表された頂点群のworld座標
${\bf K}^{(i)}$ :n_k個ある画像上のlandmarkの座標の集合
${\bf k}^{(i)}_j, (1 \leq j \leq n_k)$ :j 番目の landmarkの座標
${\bf v}_{K, j}, (1 \leq j \leq n_k)$ :landmark の j に関連した頂点群の K 番目
$n_{H(j)}$ :j 番目のlandmarkに関連した頂点の個数
${\bf f} = (f_x, f_y)$ :focal length。1stepでは 1,000とする。
${\bf c}({\bf f}^{(i)}, {\bf r}^{(i)}, {\bf t}^{(i)})$ :カメラ関連のパラメータ。r_cはカメラのrotation, t_cはカメラのtranslation。

z 軸のtranslationを求める。これは以下のようなものとする。

\hat{t_z^{(i)}} = f_x^{(i)} median \left( [\frac{\| {\bf v}_{K, h} - {\bf v}_{K, j} \|_2}{\| {\bf k}_{h}^{(i)} - {\bf k}_{l}^{(i)} \|_2}] \right) \tag{3}

ここで
${\bf v}_{K, h}$ :landmark の h に関連した頂点群の平均値
${\bf v}_{K, l}$ :landmark の l に関連した頂点群の平均値
としている。

括弧内の値を全てのlandmarkの組み合わせに関して計算し、そのmedianを求める。

まず(3)式右側カッコ内分子から考えると、landmarkのh に関連した頂点の3D座標の平均値と、別のlandmarkのkに関連した頂点の3D座標の平均値との間の距離を求めている。図にするとこんな感じか。

SMALR_img31.png

一方でカッコ内分母はlandmarkのkおよびhの座標を画像にprojectし、その画像内の距離を求めている。図にするとこんな感じか。

SMALR_img30.png

この(分子):(分母)の比が (z軸のtranslation):(焦点距離)と大体一致すると考えると、(3)式が導かれるだろう。

2) translationと rotationを求める

次に translationとglobal rotationを以下の最適化問題を解くことでで求める。

\newcommand{\argmin}{\mathop{\rm arg~min}\limits}
\hat{{\bf t}^{(i)}}, \hat{{\bf r}^{(i)}_{0}} = \argmin_{{\bf t}^{(i)}, {\bf r}^{(i)}_{0}} \alpha_z (t^{(i)}_z - \hat{t^{(i)}_{z}}) + \sum^{\tilde{n^{(i)}_{K}}}_{j=1} \| {\bf k}^{(i)}_{j} - \frac{1}{n_{H(j)}} \sum^{n_{H(i)}}_{h=1} \Pi ({\bf v}({\bf r}^{(i)}, {\bf t}^{(i)})_{K,j,h}, {\bf c}^{(i)}) \|_2 \tag{4}

ここで $\Pi$ はprojectするオペレーター。

1つ1つ見ていく。

まず右辺第1項は求めるtranslationのz成分と先で求めた(3)式のtranslationのz成分との差。$\alpha_z$ に関しては論文中に言及が無いが、第2項との比重を考えた掛け率か。

右辺第2項はlandmark(的な値)を画像座標にprojectしたものと、実際にアノテーションされた画像上のlandmarkとの差。

より細かく見ると、

{\bf v}({\bf r}^{(i)}, {\bf t}^{(i)})_{K,j,h}

はlandmark 「j」に関する頂点 h をrotateとtranslateしてworld座標にしたもの。($K$ は何を意味してる??)

これとカメラパラメータ ${\bf c}^{(i)}$ とで画像上にprojectする。それの全てのlandmark 「j」に関する平均値を求める。

これがアノテーションした画像上の landmark 「j」の位置と一致しているだろうから、その差を求める。これを全ての landmarkに関して足す。

3) βを求める

以下のエネルギー方程式を解くことでβを求める。

\newcommand{\argmin}{\mathop{\rm arg~min}\limits}
\hat{\Theta^{(i)}} = \argmin_{\beta, {\bf r, t, f}} \sum^N_{i=1} (E_{kp} (\Theta^{(i)}) + E^{(i)}_{\beta}(\beta) + E_{cam}({\bf f}) + E_{sil} (\Theta^{(i)}) + E_{lim}({\bf r}^{(i)}) + E_{pose}({\bf r}^{(i)}) + E_{shape}(\beta^{(i)}) \tag{5}

ここで

\hat{\Theta^{(i)}} = (\beta^{(i)}, {\bf r}^{(i)}, {\bf t}^{(i)}, {\bf f}^{(i)})

以下1つ1つみていく。

$E_{kp}$ は推論した3D上のkeypointを画像上にprojectし、それと正解との差とする。

E_{kp}(\Theta^{(i)}) = \alpha_{kp} \sum^{\tilde{n_K^{(i)}}}_{j=1} \rho (\| {\bf k}^{(i)}_j - \frac{1}{n_{H(j)}} \sum^{n_{H(j)}}_{h=1} \Pi ({\bf v}(\beta^{(i)}, {\bf r}^{(i)}, {\bf t}^{(i)})_{K, j, h}, {\bf c}({\bf f}^{(i)}) \|_2) \tag{6}

先程の(4)式と同様だが、ここではβに加えて ${\bf r}^{(i)}, {\bf t}^{(i)}, {\bf f}^{(i)}$ が最適化対象の変数となっている。

次に $E_{\beta}^{(i)}$ だが、これは同じビデオに出てくる同じ馬はshapeが同じだろうという事前知識でβ同士で差をとる。

E_{\beta}^{(i)} = \alpha_{\beta} | \beta^{(i-1)} - \beta^{(i)} | \  for \  i>1 \tag{7}

$E_{cam}$ はf_xとf_yとの差をとるもの。

$E_{sil}$ はシルエットに関するloss。

E_{sil}(\Theta^{(i)}) = \alpha_{sil} \left( \sum_{{\bf x} \in \hat{S(i)}} \mathcal{D_S}({\bf x}) + \sum_{{\bf x} \in S(i)} \rho (\min_{\hat{\bf x} \in \hat{S^{(i)}}} \| {\bf x} - \hat{\bf x} \|_2 ) \right) \tag{8}

右辺カッコ内第1項の $\mathcal{D_S}$ はL2距離で、点 x がシルエット内であれば 0 とする。

右辺カッコ内第2項の $\hat{S^{(i)}}$ はprojectしたシルエット。正解のシルエット内の全ての点とprojectしたシルエット内の全ての点とのL2を考え、そのうちの最小のものを求めているので、重なっている部分は 0、一方に対してはみ出している部分は、他方との近傍点との差となる。

$E_{lim}$ は関節の角度に関する事前知識を利用したもの。つまり、こちらには曲がらない、という可動域を利用している。

E_{lim} ({\bf r}^{(i)}) = \alpha_{lim} (\max({\bf r}^{(i)} - {\bf r}_{max}, 0) + \max ({\bf r}_{min} - {\bf r}^{(i)} , 0)) \tag{9}

関節角度が r_max を超えるとlossとなるし、r_min を下回っても lossとなる。

$E_{pose}, E_{shape}$ はtargetと推定値とで、meanとcovarianceをL1の2乗で計算する。

SMALR

SMALRは ${\bf dv}$ 値を使ってSMALをrefineする。

{\bf v}_{shape}({\bf dv}) = {\bf v}_{template, 0} + B_s \hat{\beta} + {\bf dv} \tag{10}

この ${\bf dv}$ 値もエネルギー関数を最小化させることで求めるが、その際に上記で求めたパラメータは固定させる。

E_{opt} ({\bf dv} = \sum^N_{i=1} \left( E_{kp}^{(i)} ({\bf dv}) + E_{sil}^{(i)} \right) + E_{arap}({\bf dv}) + E_{sym} ({\bf dv})  + E_{lap}({\bf dv}) \tag{11}

新たに出てきた項に関してみると、$E_{arap}$ は[3]に出てくるもので、変形するにも局所的には出来るだけ固定するようにするloss。

$E_{sym}$ は左右をできるだけ対象にするloss。

$E_{lap}$ は dv 値のlaplacianを取り、スムーズにするloss。

textureの復元

以下の手順で動物の画像が与えられた時にtexture mapを復元する
- SMAL modelに対して textureの座標系における UV mapを定義する
- 画像とそれに対応するmeshからtextureと各textureの位置におけるvisibility weight(ちゃんと見えてると1.0みたいな値?)を定義する
- (複数の画像における?)加重平均でtexture mapを計算する。この段階ではどの画像にも映っていないtextureの部分がある
- 左右の対称性を利用し、texture mapを更新する。具体的には1)左右の対応するtexture上の点においては平均の画素とする、2)一方がどの画像にもない(つまりtexture mapで定義されてない)場合、対応する側の点の画素とする
- この1)はシマウマ模様や斑点模様の部分には適応しない(おそらく左右で異なるだろうから)
- これでもtexture map上で定義されない点に関しては、texture map全体の平均画素を割り当てる

以下はtigerの例。

SMALR_img21_2.png

どの画像からも見えない(例えば体の下部分)などは平均的な色で埋められている。

実験と結果

合成データに対する結果

馬とサイで検証した。以下の図の左側では、左列がシルエット、中央列がSMALをfittingさせたもの、右列がSMALRでrefineしたもの。

SMALR_img23.png

右側のグラフは横軸が画像数、縦軸はloss。画像が増えるとSMALRのlossがSMALのlossを安定して下回っている。

実データに対する結果

以下はリアルなサイに対する推論結果。

SMALR_img24.png

左列はSMAL、中央列はSMALR、右列の最上部はその左のSMALRにtextureをハメたもの、下3つはrealな画像。

SMALRではツノの再現等、よりリアルになっている。

reference

[2] S. Zuffi, A. Kanazawa, D. Jacobs, and M. J. Black. 3D menagerie: Modeling the 3D shape and pose of animals. In IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), July 2017.

[3] O. Sorkine and M. Alexa. As-rigid-as-possible surface mod- eling. In Proceedings of the Fifth Eurographics Symposium on Geometry Processing, Barcelona, Spain, July 4-6, 2007, pages 109–116, 2007.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0