Skip to main content

SMPL and Human Body Models

SMPL は、人間の body shape と pose を parameter で表す parametric body model です。Human pose estimation、mesh recovery、avatar reconstruction、motion capture で広く使われます。

SMPL の基本

SMPL は、shape parameter β\beta と pose parameter θ\theta を入力として human mesh を出力します。

M(β,θ)body meshM(\beta, \theta) \to \text{body mesh}
  • β\beta: 身長、体格、体型などの shape を表します。
  • θ\theta: 各 joint の rotation を表します。

なぜ parametric model が必要か

Image から直接 mesh を推定するだけでは、人体としてありえない形状が出ることがあります。SMPL は、

  • Skeleton 構造
  • Body shape prior
  • Pose-dependent deformation

を持つため、human body として妥当な reconstruction を得やすくします。

関連する model

Model対象
SMPLBody
SMPL-XBody + hands + face
MANOHands
FLAMEFace / head

Whole-body avatar では、SMPL-X のように body、hand、face を統合した model が使われます。

Pose estimation での使い方

Human Mesh Recovery では、image から SMPL parameter を回帰します。

2D keypoint loss、3D joint loss、silhouette loss、pose prior などを組み合わせて training します。

数式で見る SMPL の body model

SMPL は、shape parameter β\boldsymbol{\beta} と pose parameter θ\boldsymbol{\theta} から human mesh を生成する differentiable model です。概念的には次のように書けます。

V=M(β,θ)\mathbf{V}=M(\boldsymbol{\beta},\boldsymbol{\theta})

ここで、V\mathbf{V} は mesh vertices です。SMPL では、template mesh に shape blend shape と pose blend shape を足し、linear blend skinning によって関節変形を行います。

vi=kwikGk(θ,J(β))v~i\mathbf{v}_i=\sum_k w_{ik}\mathbf{G}_k(\boldsymbol{\theta},\mathbf{J}(\boldsymbol{\beta}))\tilde{\mathbf{v}}_i

wikw_{ik} は vertex ii が joint kk に従う重み、Gk\mathbf{G}_k は joint transformation、v~i\tilde{\mathbf{v}}_i は shape / pose 補正後の canonical vertex です。この式の気持ちは、「人体 mesh の各頂点を、複数の関節変換の重み付き平均で動かす」というものです。

画像から SMPL を推定する場合は、2D keypoint reprojection loss がよく使われます。

L2D=jcjπ(Jj(β,θ))uj2\mathcal{L}_{2D}=\sum_j c_j\left\|\pi(\mathbf{J}_j(\boldsymbol{\beta},\boldsymbol{\theta}))-\mathbf{u}_j\right\|^2

ここで、cjc_j は keypoint confidence です。Confidence が低い観測は、optimization に与える影響を小さくします。

関連ページ

主なソース