SMPL: A Skinned Multi-Person Linear Model论文解读

SMPL

paper title: SMPL: A Skinned Multi-Person Linear Model
paper link: http://files.is.tue.mpg.de/black/papers/SMPL2015.pdf
oral or demo video:https://www.youtube.com/watch?time_continue=98&v=kuBlUyHeV5U&feature=emb_logo
project: https://smpl.is.tue.mpg.de/
github: https://smpl.is.tue.mpg.de/signup
conf & anthor: ACM ToG 2015; Matthew Loper et. al (MPII & ILM)

相关知识链接:

MPII Human Shape

what is blendshape

what is ‘bake’ in CG?

what is rigging?

whta is shape displacement?

一、主要内容

这篇文章的主要内容是要通过学习得到一个模型可以根据一些输入的参数创建人体动画模型,可以做到

  • 可以表示不同身形;
  • 随着不同姿势自然变形;
  • 能够展现软组织运动;
  • 模型渲染快速、部署简单、适配现有渲染引擎;

SMPL: A Skinned Multi-Person Linear Model论文解读_第1张图片

目标函数:自己生成的model和registered meshes之间每个顶点的差异

训练数据:1786个高分辨率3D扫描模型(为了学习到人在不同的姿势下模型是如何变形的),将自己的模型与3D扫描模型一一align得到训练集;

二、相关工作

  • (1) blend skinning: 骨骼子空间变形方法,又称blend skinning。mesh中得每一个顶点会受到其相邻骨骼的加权影响,当这种影响是线性的时候就是LBS. how it works-LBS。这篇文章就是要修正blend skinning的局限性。
  • (2) auto-rigging: 给定一个mesh的集合,推算出骨骼、关节和blend权重。
  • (3) blend shapes: 姿态空间变形模型(PSD:Pose Space Deformation)。
  • (4) learning pose models
  • (5) learning pose and shape models

三、模型构建

手工设计的人体mesh:顶点数 N = 6890 N = 6890 N=6890; 关节点数目 K = 23 K = 23 K=23;
根据标准蒙皮操作,模型可以通过一个平均模板形状来定义,并由以下元素来表示:

  • N vertices T ‾ ∈ R 3 N \overline{T} \in \mathbb{R}^{3N} TR3N
  • zero pose θ ∗ ⃗ \vec{\theta^*} θ
  • blend wights W ∈ R N × K \mathcal{W} \in \mathbb{R}^{N \times K} WRN×K
  • shape parameter β ⃗ \vec{\beta} β
  • pose parameter θ ⃗ \vec{\theta} θ
  • blend shape function B s ( β ⃗ ) : R ∣ β ⃗ ∣ ↦ R 3 N B_s(\vec{\beta}):\mathbb{R}^{|\vec{\beta}|} \mapsto \mathbb{R}^{3N} Bs(β ):Rβ R3N
  • K joint location predict function J ( β ⃗ ) : R ∣ β ⃗ ∣ ↦ R 3 K J(\vec{\beta}):\mathbb{R}^{|\vec{\beta}|} \mapsto \mathbb{R}^{3K} J(β ):Rβ R3K
  • pose-dependent blend shape function B p ( θ ⃗ ) : R ∣ θ ⃗ ∣ ↦ R 3 N B_p(\vec{\theta}):\mathbb{R}^{|\vec{\theta}|} \mapsto \mathbb{R}^{3N} Bp(θ ):Rθ R3N

三个主要变换函数:

  • blend shape 函数 B s ( β ⃗ ) B_s(\vec{\beta}) Bs(β )的输入是形状向量,输出是刻画人物(subject)形体的blend shape;
  • joint location 回归函数 J ( β ⃗ ) J(\vec{\beta}) J(β )的输入是形状向量,输出是K个关节点的位置;
  • pose-dependent blend shape函数 B p ( θ ⃗ ) B_p(\vec{\theta}) Bp(θ )的输入是姿态向量,用来实现’姿态-依赖’的变形;

上述这些函数生成的corrective blend shapes都加到rest pose上。最后,一个标准的blend skinning函数 W ( ⋅ ) W(·) W()用来在以joint location回归函数 J ( β ⃗ ) J(\vec{\beta}) J(β )估计的这些关节点为中心旋转顶点,并使用blend weights进行平滑。 最后的结果是一个模型,根据形状和姿态参数向量映射得到一个顶点集合:
M ( β ⃗ , θ ⃗ ; Φ ) : R ∣ θ ⃗ ∣ × ∣ β ⃗ ∣ ↦ R 3 N M(\vec{\beta},\vec{\theta};\Phi) : \mathbb{R}^{|\vec{\theta}| \times |\vec{\beta}|} \mapsto \mathbb{R}^{3N} M(β ,θ ;Φ):Rθ ×β R3N
其中 Φ \Phi Φ是学习到的一个参数,下文详述。这里做一个说明,变换符号(如上面的 M M M)所带的参数列表中,分号后面的是通过训练学习得到的( Φ \Phi Φ),而分号前面的是系统已知的或是由外部输入的( β ⃗ , θ ⃗ \vec{\beta},\vec{\theta} β ,θ )。

1. Blend skinning
人物模型(body)的姿态采用标准的skeletal rig(what is rigging)。这里使用的rig有 K = 23 K=23 K=23个关节点,第 k k k个部位的绕坐标轴的局部旋转为 w ⃗ k ∈ R 3 \vec{w}_k \in \mathbb{R}^3 w kR3;那么前面提到的pose parameter的形式就是:
θ ⃗ = [ w ⃗ 0 T , . . . , w ⃗ K T ] T \vec{\theta} = [\vec{w}_0^T,...,\vec{w}_K^T]^T θ =[w 0T,...,w KT]T
参数数目为 3 × 23 + 3 = 72 3 \times 23 + 3 = 72 3×23+3=72,其中加的3为根关节的位置。
对每个关节 j j j关于各个轴的旋转角度可以使用罗德里格公式转换为旋转矩阵:
e x p ( w ⃗ j ) = I + w ‾ j ^ s i n ( ∣ ∣ w ‾ j ∣ ∣ ) + w ‾ j 2 ^ c o s ( ∣ ∣ w ‾ j ∣ ∣ ) exp(\vec{w}_j) = \mathcal{I} + \hat{\overline{w}_j}sin(||\overline{w}_j||) + \hat{\overline{w}_j^2}cos(||\overline{w}_j||) exp(w j)=I+wj^sin(wj)+wj2^cos(wj)
其中:

  • w ‾ = w ⃗ ∣ ∣ w ⃗ ∣ ∣ \overline{w} = \frac{\vec{w}}{||\vec{w}||} w=w w 是单位旋转角;
  • w ‾ ^ \hat{\overline{w}} w^ w ‾ \overline{w} w的斜对称矩阵;
  • I \mathcal{I} I 3 × 3 3 \times 3 3×3的单位矩阵;

那么,标准的LBS(Linear Blend Skinning)函数为:
W ( T ‾ , J , θ ⃗ , W ) : R 3 N × 3 K × ∣ θ ⃗ ∣ × ∣ W ∣ ↦ R 3 N W(\overline{T},J,\vec{\theta}, \mathcal{W}) : \mathbb{R}^{3N \times 3K \times |\vec{\theta}| \times |\mathcal{W}|} \mapsto \mathbb{R}^{3N} W(T,J,θ ,W):R3N×3K×θ ×WR3N
其中:

  • T ‾ \overline{T} T为rest pose;
  • J J J 为关节位置;
  • θ ⃗ \vec{\theta} θ 为pose参数;
  • W \mathcal{W} W是blend weight;

OK,到这里就可以计算 T ‾ \overline{T} T中的第 i i i个顶点的变换:
t ‾ i ′ = ∑ k = 1 K w k , i G k ′ ( θ ⃗ , J ) t ‾ i \overline{t}_i^{'} = \sum_{k=1}^Kw_{k,i}G_k^{'}(\vec{\theta},J)\overline{t}_i ti=k=1Kwk,iGk(θ ,J)ti
G k ′ ( θ ⃗ , J ) = G k ( θ ⃗ , J ) G k ( θ ∗ ⃗ , J ) − 1 G_k^{'}(\vec{\theta},J) = G_k(\vec{\theta},J)G_k(\vec{\theta^{*}},J)^{-1} Gk(θ ,J)=Gk(θ ,J)Gk(θ ,J)1
G k ( θ ⃗ , J ) = ∏ j ∈ A ( k ) [ e x p ( w ⃗ j ) j j 0 ⃗ 1 ] G_k(\vec{\theta},J) = \prod_{j \in A(k)} \left[ \begin{matrix} exp(\vec{w}_j) & j_j \\ \vec{0} & 1 \end{matrix} \right] Gk(θ ,J)=jA(k)[exp(w j)0 jj1]

其中:

  • w k , i w_{k,i} wk,i是blend wight矩阵 W \mathcal{W} W中的一个元素,表示第 i i i个顶点受到第 k k k个部位的影响权重;
  • j j j_j jj J J J中第 j j j个关节点的位置,由三个元素的向量构成;
  • e x p ( w ⃗ j ) exp(\vec{w}_j) exp(w j)是第 j j j个关节的局部旋转矩阵;
  • G k ( θ ⃗ , J ) G_k(\vec{\theta},J) Gk(θ ,J)是第 k k k个关节的世界变换矩阵;
  • G k ( θ ∗ ⃗ , J ) G_k(\vec{\theta^{*}},J) Gk(θ ,J)是第 k k k个关节初始变换;
  • G k ′ ( θ ⃗ , J ) G_k^{'}(\vec{\theta},J) Gk(θ ,J)是第 k k k个关节去除初始变换后的变换(offset量);
  • A ( k ) A(k) A(k)表示第 k k k个关节点的父节点集合;

至此,再看模型 M ( β ⃗ , θ ⃗ ; Φ ) M(\vec{\beta},\vec{\theta};\Phi) M(β ,θ ;Φ):
M ( β ⃗ , θ ⃗ ) = W ( T p ( β ⃗ , θ ⃗ ) , J ( β ⃗ ) , θ ⃗ , W ) M(\vec{\beta},\vec{\theta}) = W(T_p(\vec{\beta},\vec{\theta}),J(\vec{\beta}),\vec{\theta},\mathcal{W}) M(β ,θ )=W(Tp(β ,θ ),J(β ),θ ,W)
T p ( β ⃗ , θ ⃗ ) = T ‾ + B s ( β ⃗ ) + B p ( θ ⃗ ) ) T_p(\vec{\beta},\vec{\theta}) = \overline{T} + B_s(\vec{\beta}) + B_p(\vec{\theta})) Tp(β ,θ )=T+Bs(β )+Bp(θ ))
有了上面的定义, t ‾ i ′ \overline{t}_i^{'} ti可表示为:
t ‾ i ′ = ∑ k = 1 K w k , i G k ′ ( θ ⃗ , J ( β ⃗ ) ) ( t ‾ i + b S , i ( β ⃗ ) + b P , i ( θ ⃗ ) ) \overline{t}_i^{'} = \sum_{k=1}^K w_{k,i} G_k^{'}(\vec{\theta},J(\vec{\beta}))(\overline{t}_i + b_{S,i}(\vec{\beta}) + b_{P,i}(\vec{\theta}) ) ti=k=1Kwk,iGk(θ ,J(β ))(ti+bS,i(β )+bP,i(θ ))
其中:

  • b S , i ( β ⃗ ) b_{S,i}(\vec{\beta}) bS,i(β ) b P , i ( θ ⃗ ) b_{P,i}(\vec{\theta}) bP,i(θ )分别是 B S ( β ⃗ ) B_{S}(\vec{\beta}) BS(β ) B P ( θ ⃗ ) B_{P}(\vec{\theta}) BP(θ )中的顶点,表示的是顶点 t ‾ i \overline{t}_i ti的shape blend和pose blend的偏移量。

2. Shape blend shapes
不同人的体型(body shape)可以用一个线性函数 B S B_S BS表示为:
B S ( β ⃗ ; S ) = ∑ n = 1 ∣ β ⃗ ∣ β n S n B_S(\vec{\beta};\mathcal{S}) = \sum_{n=1}^{|\vec{\beta}|}\beta_{n}S_{n} BS(β ;S)=n=1β βnSn
其中:

  • β ⃗ = [ β 1 , . . . , β ∣ β ⃗ ∣ ] \vec{\beta} = [\beta_1,...,\beta_{|\vec{\beta}|}] β =[β1,...,ββ ],code中, β ⃗ \vec{\beta} β 的长度为10;
  • S n ∈ R 3 N S_n \in \mathbb{R}^{3N} SnR3N 表示shape displacement的正交主成分;whta is shape displacement
  • S = [ S 1 , . . . , S ∣ β ⃗ ∣ ] ∈ R 3 N × ∣ β ⃗ ∣ \mathcal{S} = [S_1,...,S_{|\vec{\beta}|}] \in \mathbb{R}^{3N \times |\vec{\beta}|} S=[S1,...,Sβ ]R3N×β S \mathcal{S} S是通过配准的mesh训练得到的;

3. Pose blend shapes
从上面可以知道,姿态向量 θ ⃗ \vec{\theta} θ 包含K个关节的旋转角度和根关节的位置,这里现将姿态向量 θ ⃗ \vec{\theta} θ 映射为旋转矩阵,每个关节的的旋转转换为一个 3 × 3 3 \times 3 3×3的旋转矩阵:
R : R ∣ θ ⃗ ∣ ↦ R 9 K R:\mathbb{R}^{|\vec{\theta}|} \mapsto \mathbb{R}^{9K} R:Rθ R9K
现在定义pose blend shape:
R ∗ ( θ ⃗ ) = ( R ( θ ⃗ ) − R ( θ ∗ ⃗ ) ) R^*(\vec{\theta}) = ( R(\vec{\theta}) - R(\vec{\theta^*}) ) R(θ )=(R(θ )R(θ ))
那么通过姿势作用得到的顶点与rest template之间的偏差为:
B P ( θ ⃗ ; P ) = ∑ n = 1 9 K ( R ( θ ⃗ ) − R ( θ ∗ ⃗ ) ) P n B_P(\vec{\theta};\mathcal{P}) = \sum_{n=1}^{9K}( R(\vec{\theta}) - R(\vec{\theta^*}))P_n BP(θ ;P)=n=19K(R(θ )R(θ ))Pn
其中:

  • P n ∈ R 3 N P_n \in \mathbb{R}^{3N} PnR3N是vertex displacement向量;
  • P = [ P 1 , . . . , P 9 K ] ∈ R 3 N × 9 K \mathcal{P}=[P_1,...,P_{9K}] \in \mathbb{R}^{3N \times 9K} P=[P1,...,P9K]R3N×9K 23 × 9 = 207 23 \times 9=207 23×9=207个pose blend shape;
  • R ( θ ∗ ⃗ ) R(\vec{\theta^*}) R(θ )在rest pose下pose blend shape的贡献是0,这对于动画是很重要的;

4. Joint locations
不同的body shape的关节位置不同,每个关节在rest pose中是一个3D的位置。这里,将关节定义为body shape β ⃗ \vec{\beta} β 的函数:
J ( β ⃗ ; J , T ‾ , S ) = J ( T ‾ + B S ( β ⃗ ; S ) ) J(\vec{\beta};\mathcal{J},\overline{T},\mathcal{S}) = \mathcal{J}(\overline{T}+B_S(\vec{\beta};\mathcal{S})) J(β ;J,T,S)=J(T+BS(β ;S))
其中:

  • J \mathcal{J} J是从rest vertices到rest joints的变换矩阵, J \mathcal{J} J是从很多来自不同人的pose中学习得到的;

5. SMPL model
介绍完以上这些可以,可以正式写出SMPL模型 Φ \Phi Φ的所有参数:
Φ = { T ‾ , W , S , J , P } \Phi = \{{\overline{T},\mathcal{W},\mathcal{S},\mathcal{J},\mathcal{P}}\} Φ={T,W,S,J,P}
再来回顾一下这些符号:

  • T ‾ \overline{T} T是顶点集合;
  • W \mathcal{W} W是blend weight;
  • S \mathcal{S} S是shape displacement矩阵,由体型差异造成;
  • J \mathcal{J} J是rest pose下顶点到关节点的变换矩阵;
  • P \mathcal{P} P是和 S \mathcal{S} S类似的shape displacement,由姿态差异造成;
    这些参数通过训练学习得到,一旦训练完成之后这些参数就固定下来。后面通过变化 β ⃗ \vec{\beta} β θ ⃗ \vec{\theta} θ 来创建特定体型的任务模型和驱动动画。

到这里可以写出SMPL模型的定义:
M ( β ⃗ , θ ⃗ , Φ ) = W ( T P ( β ⃗ , θ ⃗ ; T ‾ , S , P ) , J ( β ⃗ ; J , T ‾ , S ) , β ⃗ , W ) M(\vec{\beta},\vec{\theta},\Phi)=W(T_P(\vec{\beta},\vec{\theta};\overline{T},\mathcal{S},\mathcal{P}),J(\vec{\beta};\mathcal{J},\overline{T},\mathcal{S}),\vec{\beta},\mathcal{W}) M(β ,θ ,Φ)=W(TP(β ,θ ;T,S,P),J(β ;J,T,S),β ,W)
那么对于mesh中的一个顶点(序号为i),所做的变换为:
t i ′ = ∑ k = 1 K w k , i G k ′ ( θ ⃗ , J ( β ⃗ ; J , T ‾ , S ) ) t P , i ( β ⃗ , θ ⃗ ; T ‾ , S , P ) {t}_i^{'}=\sum_{k=1}^{K}w_{k,i}G_k^{'}(\vec{\theta},J(\vec{\beta};\mathcal{J},\overline{T},\mathcal{S})) t_{P,i}(\vec{\beta},\vec{\theta};\overline{T},\mathcal{S},\mathcal{P}) ti=k=1Kwk,iGk(θ ,J(β ;J,T,S))tP,i(β ,θ ;T,S,P)
其中 w k , i w_{k,i} wk,i是blend weight, G k ′ G_k^{'} Gk前面提到是从父关节到当前关节“累计”旋转变换并除去初始变换的一个“变换偏移量”, t P , i t_{P,i} tP,i顶点初始状态+体型(shape)差异变形+姿态(pose)差异变形
t P , i ( β ⃗ , θ ⃗ ; T ‾ , S , P ) = t ‾ i + ∑ m = 1 ∣ β ⃗ ∣ β ⃗ s m , i + ∑ n = 1 9 K ( R n ( θ ⃗ ) − R n ( θ ∗ ⃗ ) ) p n , i t_{P,i}(\vec{\beta},\vec{\theta};\overline{T},\mathcal{S},\mathcal{P}) = \overline{t}_i+\sum_{m=1}^{|\vec{\beta}|}\vec{\beta}s_{m,i}+\sum_{n=1}^{9K}(R_n(\vec{\theta})-R_n(\vec{\theta^*}))p_{n,i} tP,i(β ,θ ;T,S,P)=ti+m=1β β sm,i+n=19K(Rn(θ )Rn(θ ))pn,i
其中 s m , i , p n , i ∈ R 3 s_{m,i},p_{n,i} \in \mathbb{R}^3 sm,i,pn,iR3分别是顶点 t ‾ i \overline{t}_i ti的shape和pose blend shape。

四、训练

SMPL参数的训练过程是在shape和pose数据集上最小化重建误差得到的。

  • multi-pose数据集用来训练 S \mathcal{S} S,包含40个人的1786个registration(registration是指对齐好的mesh)。
  • multi-shape数据集用来训练 P \mathcal{P} P,数据来自数据集CAESA,包含1700个男性registration和2100个女性registration。

现分别使用 V j P V_j^P VjP V j S V_j^S VjS表示multi-pose和multi-shape数据集中的第 j j j个mesh。

  • 需要优化的参数是: Φ = { T ‾ , W , S , J , P } \Phi=\{{\overline{T},\mathcal{W},\mathcal{S},\mathcal{J},\mathcal{P}}\} Φ={T,W,S,J,P}
  • 优化目标是最小化顶点重建误差;
    文章中首先使用multi-pose数据集优化 { J , W , P } \{{\mathcal{J},\mathcal{W},\mathcal{P}}\} {J,W,P},然后用multi-shape数据集优化 { T ‾ , S } \{{\overline{T},\mathcal{S}}\} {T,S};男性和女性的模型分别优化,分别得到 Φ m \Phi_m Φm Φ f \Phi_f Φf

1. Pose parameter training
pose parameter主要是训练 { J , W , P } \{{\mathcal{J},\mathcal{W},\mathcal{P}}\} {J,W,P}(joint location predict, blend weight和pose displacement)。
前面已经说过multi-pose数据集包含了40个人的1786个registration,这里用下标 i i i表示第 i i i个人,下标 j j j表示第 j j j个registration。在pose数据集中,不同的registration的姿态是不同的,表示为 θ ⃗ j \vec{\theta}_j θ j;
根据前面说的 W ( ⋅ ) W(·) W()
M ( β ⃗ , θ ⃗ ) = W ( T p ( β ⃗ , θ ⃗ ) , J ( β ⃗ ) , θ ⃗ , W ) M(\vec{\beta},\vec{\theta}) = W(T_p(\vec{\beta},\vec{\theta}),J(\vec{\beta}),\vec{\theta},\mathcal{W}) M(β ,θ )=W(Tp(β ,θ ),J(β ),θ ,W)
这里可以写出在pose数据集上的 W ( ⋅ ) W(·) W()的形式为:
W ( T ^ s ( j ) P + B P ( θ ⃗ ; P ) , θ ⃗ ) , J ^ s ( j ) P , θ ⃗ , W ) W(\hat{T}_{s(j)}^P + B_P(\vec{\theta};\mathcal{P}),\vec{\theta}),\hat{J}_{s(j)}^P,\vec{\theta},\mathcal{W}) W(T^s(j)P+BP(θ ;P),θ ),J^s(j)P,θ ,W)
其中:

  • T ^ s ( j ) P \hat{T}_{s(j)}^P T^s(j)P表示pose数据集中第j个mesh所对应的人物的rest template;
  • J ^ s ( j ) P \hat{J}_{s(j)}^P J^s(j)P表示pose数据集中第j个mesh所对应的人物的joint location;
  • B P ( θ ⃗ ; P ) B_P(\vec{\theta};\mathcal{P}) BP(θ ;P)前面说过,是在 θ ⃗ , P \vec{\theta},\mathcal{P} θ ,P作用下的顶点变形(blend);

综合上面所说的 W ( ⋅ ) W(·) W()的过程就是当前(第j个)mesh所属人物的在姿态 θ ⃗ \vec{\theta} θ 作用下产生的变形,而这个变形的过程涉及到一些参数是需要学习的,这里就是 P \mathcal{P} P W \mathcal{W} W。变形之后得到一个新的mesh,学习的目标就是找到最佳的参数是变形之后的结果mesh和数据集中对其好的mesh之间的差异最小。
为了完成这个学习过程,定义一个包含数据项和正则项的目标函数:
E = E D + λ Y E Y + λ J E J + λ P E P + E W E = E_D+\lambda_YE_Y+\lambda_JE_J+\lambda_PE_P+E_W E=ED+λYEY+λJEJ+λPEP+EW
其中:

  • E D E_D ED是数据项,就是上面说的经过变形后的mesh与已经对齐的mesh顶点之间的差异;
  • E Y E_Y EY是对称正则项;
  • E J E_J EJ是joint正则项;
  • E P E_P EP P \mathcal{P} P正则项;
  • E W E_W EW W \mathcal{W} W正则项;

下面对目标函数中的这几项分别进行阐述:
(1) E D E_D ED
E D ( T ^ P , J ^ P , W , P , Θ ) = ∑ j = 1 P r e g ∣ ∣ V j P − W ( T ^ s ( j ) P + B P ( θ ⃗ ; P ) , θ ⃗ ) , J ^ s ( j ) P , θ ⃗ , W ) ∣ ∣ 2 E_D(\hat{T}^P,\hat{J}^P,\mathcal{W},\mathcal{P},\Theta)=\sum_{j=1}^{P_{reg}}||V_j^P - W(\hat{T}_{s(j)}^P + B_P(\vec{\theta};\mathcal{P}),\vec{\theta}),\hat{J}_{s(j)}^P,\vec{\theta},\mathcal{W})||^2 ED(T^P,J^P,W,P,Θ)=j=1PregVjPW(T^s(j)P+BP(θ ;P),θ ),J^s(j)P,θ ,W)2
其中:

  • Θ = { θ 1 ⃗ , . . . , θ ⃗ P r e g } \Theta=\{\vec{\theta_1},...,\vec{\theta}_{P_{reg}} \} Θ={θ1 ,...,θ Preg}, P r e g P_{reg} Preg是pose训练集中的registration数目;
  • P s u b j P_{subj} Psubj是训练集中人物的数目;
  • T ^ P = { T ^ i P } i = 1 P s u b j \hat{T}^P = \{\hat{T}_i^P\}_{i=1}^{P_{subj}} T^P={T^iP}i=1Psubj,是训练集中的rest pose集合;
  • J ^ P = { J ^ i P } i = 1 P s u b j \hat{J}^P = \{\hat{J}_i^P\}_{i=1}^{P_{subj}} J^P={J^iP}i=1Psubj,是训练集中的joint集合;

要训练的参数数目:

  • P : 207 × 3 × 6890 = 4 , 278 , 690 \mathcal{P}:207 \times 3 \times 6890 = 4,278,690 P:207×3×6890=4,278,690
  • W : 4 × 3 × 6890 = 82 , 680 \mathcal{W}:4 \times 3 \times 6890 = 82,680 W:4×3×6890=82,680
  • J : 3 × 6890 × 23 × 3 = 1 , 426 , 230 \mathcal{J}:3 \times 6890 \times 23 \times 3 = 1,426,230 J:3×6890×23×3=1,426,230;

上面的 W \mathcal{W} W中的4是因为这里使用了Sparse SMPL,也就是每个顶点最多受到4个关节的影响。

(2) E Y E_Y EY
E Y E_Y EY是对称正则项,也就是激励template mesh和joint为对称的,对左右不对称的情况进行惩罚:
E Y ( J ^ P , T ^ P ) = ∑ i = 1 P s u b j λ U ∣ ∣ J ^ i P − U ( J ^ i P ) ∣ ∣ 2 + ∣ ∣ T ^ i P − U ( T ^ i P ) ∣ ∣ 2 E_Y(\hat{J}^P,\hat{T}^P)= \sum_{i=1}^{P_{subj}}\lambda_U||\hat{J}_i^P-U(\hat{J}_i^P)||^2+||\hat{T}_i^P-U(\hat{T}_i^P)||^2 EY(J^P,T^P)=i=1PsubjλUJ^iPU(J^iP)2+T^iPU(T^iP)2
其中 U ( T ) U(T) U(T)的作用是沿着矢状面(sagittal plane 指将躯体纵断为左右两部分的解剖平面)左右翻转人体;

(3) E J E_J EJ
文中将人体分割为24个部分,根据这个分割情况可以得到不同部分之间的连接的一个“顶点序列”,是一个环状的顶点集合,使用一个回归器 J I \mathcal{J}_I JI计算joint的初始中心,实际上就是对这个顶点集合里面的顶点的坐标做平均。当估计joint中心的时候,锁甲的正则项就是让估计的中心接近这个初始中心:
E J ( T ^ P , J ^ P ) = ∑ i = 1 P s u b j ∣ ∣ J I T ^ i P − J ^ i P ∣ ∣ 2 E_J(\hat{T}^P,\hat{J}^P) = \sum_{i=1}^{P_{subj}}||\mathcal{J}_I\hat{T}_i^P-\hat{J}_i^P||^2 EJ(T^P,J^P)=i=1PsubjJIT^iPJ^iP2

(4) E P E_P EP
为了防止pose-dependent blend shape的过拟合,这里对 P \mathcal{P} P也做了一个正则化,使其趋向于0:
E P ( P ) = ∣ ∣ P ∣ ∣ F 2 E_P(P)=||\mathcal{P}||_F^2 EP(P)=PF2
其中 ∣ ∣ ⋅ ∣ ∣ F ||·||_F F是Frobenius范数,实际上就是矩阵中对应元素的平方和再开平方.

(5) E W E_W EW
根据人体的分割结果,通过"diffus"可以得到一个初始的blend weight于 W I \mathcal{W}_I WI,现在添加一个正则项使 W \mathcal{W} W趋向于 W I \mathcal{W}_I WI:
E W ( W ) = ∣ ∣ W − W I ∣ ∣ F 2 E_W(\mathcal{W})=||\mathcal{W}-\mathcal{W}_I||_F^2 EW(W)=WWIF2
分别说完了上面的数据项和正则项,现在可以写出目标函数的更详细的形式:
E ( T ^ P , J ^ P , Θ , W , P ) = E D + λ Y E Y + λ J E J + λ P E P + E W E(\hat{T}^P,\hat{J}^P,\Theta,\mathcal{W},\mathcal{P}) = E_D+\lambda_YE_Y+\lambda_JE_J+\lambda_PE_P+E_W E(T^P,J^P,Θ,W,P)=ED+λYEY+λJEJ+λPEP+EW
其中,根据经验 λ Y = 100 , λ J = 100 , λ P = 25 \lambda_Y=100,\lambda_J=100,\lambda_P=25 λY=100,λJ=100,λP=25。由于模型的参数较多,这些正则项能够有效防止模型过拟合。

Joint Regressor
通过上面的优化过程可以得到训练集中每个人物的template mesh和joint location。但是如果我们想为新的人物预测其关节位置呢?文章中通过学习一个regressor matrix J \mathcal{J} J预测Joint位置。 J \mathcal{J} J通过非负最小二乘计算得到,并使权重加起来为1。这种方法使得计算joint的顶点是稀疏的,同时权重非负和加起来为1又使得预测的joint不会出现在mesh的外侧。

2. Shape parameter training
shape 空间是通过"mean and principal shape direction" { T ‾ , S } \{\overline{T},\mathcal{S}\} {T,S}来定义的。计算方法multi-pose数据集中shape做一个pose归一化,然后再运行PCA得到。
pose归一化的过程是将数据集中的registration V j S V_j^S VjS转换为一个处于rest pose θ ∗ ⃗ \vec{\theta^*} θ 下的registration T ^ j S \hat{T}_j^S T^jS;转为rest pose这一步保证了pose和shape的建模不会相互影响。那么如何进行pose归一化呢?对于数据集中的一个一个registration V j S V_j^S VjS,首先要估计它的姿势,也就是要寻找一个姿势表示 θ ⃗ \vec{\theta} θ 使得经过这个参数变换后的mesh和原始的mesh的误差最小,也就是优化:
θ ⃗ j = arg ⁡ min ⁡ θ ⃗ ∑ e ∣ ∣ W e ( T ^ μ P + B P ( θ ⃗ ; P ) ) , J ^ m u P , θ ⃗ , W − V j , e S ∣ ∣ 2 \vec{\theta}_j = \mathop{\arg\min}_{\vec{\theta}} \sum_{e}||W_e(\hat{T}_{\mu}^P+B_P(\vec{\theta};\mathcal{P})),\hat{J}_{mu}^P,\vec{\theta},\mathcal{W} - V_{j,e}^S||^2 θ j=argminθ eWe(T^μP+BP(θ ;P)),J^muP,θ ,WVj,eS2
其中:

  • T ^ μ P \hat{T}_{\mu}^P T^μP是multi-pose数据集中的mean pose;
  • J ^ μ P \hat{J}_{\mu}^P J^μP是multi-pose数据集中的mean joint location;
  • W e ( ⋅ ) , V j , e S ∈ R 3 W_e(·),V_{j,e}^S \in \mathbb{R}^3 We()Vj,eSR3“an edge of the registration”,是通过一对相邻顶点之间相减得到的,就是当前shape和mean shape的对应顶点坐标相减。通过对mesh中的所有的edge求和,可以在不知道人物具体的shape的情况下求得一个姿态的较好估计。

得到姿态 T ⃗ j S \vec{T}_j^S T jS之后,可以求 T ^ j S \hat{T}_j^S T^jS:
T ^ j S = arg ⁡ min ⁡ T ⃗ ∣ ∣ W ( T ^ + B p ( θ ⃗ j ; P ) , J T ^ , θ ⃗ , W ) − V j S ∣ ∣ 2 \hat{T}_j^S = \mathop{\arg\min}_{\vec{T}}||W(\hat{T}+B_p(\vec{\theta}_j;\mathcal{P}),\mathcal{J}\hat{T},\vec{\theta},\mathcal{W}) - V_j^S||^2 T^jS=argminT W(T^+Bp(θ j;P),JT^,θ ,W)VjS2
然后在 { T ^ j S } j = 1 S s u b j \{\hat{T}_j^S\}_{j=1}^{S_{subj}} {T^jS}j=1Ssubj上运行PCA,得到 { T ‾ , S } \{\overline{T},\mathcal{S}\} {T,S},PCA这一步是为了最大大rest pose下顶点偏移的可解释方差(explained variance),同时使shape direction的数目较少。

3. Optimization summary
优化过程:
(1)首先通过最小化model和registration的edge差异求得 θ ⃗ j \vec{\theta}_j θ j;
(2)通过交替的方式最小化目标函数 E ( T ^ P , J ^ P , Θ , W , P ) E(\hat{T}^P,\hat{J}^P,\Theta,\mathcal{W},\mathcal{P}) E(T^P,J^P,Θ,W,P),得到对各参数的估计;
(3)然后从 { J ^ P , T ^ P } \{\hat{J}^P,\hat{T}^P\} {J^P,T^P}估计joint回归矩阵 J \mathcal{J} J;
(4)在 { T ^ j S } j = 1 S s u b j \{\hat{T}_j^S\}_{j=1}^{S_{subj}} {T^jS}j=1Ssubj上运行PCA,得到 { T ‾ , S } \{\overline{T},\mathcal{S}\} {T,S}
上述步骤中除了PCA这一步,其他优化步骤使用通过gradient-based算法求解,使用chumpy框架。

五、SMPL评估

1.quantitative evaluation
定量评价包括两个方面:

  • Model generation:是指模型适配新的人物的动作和姿态的mesh的能力;
  • Pose generalization:是指模型生成同一个人物的不同的姿势的shape的能力;

2.Sparse SMPL
常规的SMPL的pose blend shape不是稀疏的,mesh中的一个顶点会受到其他所有任一关节的旋转的影响,为了是手部的动画更加直观并避免关节“长距离影响”,手动使模型稀疏,在求导的时候,让顶点最多受到4个关节的影响。
稀疏SMPL的精度比常规的SMPL稍差,但是降低了模型大小并能有效用于动画制作。

3.visual evaluation
如下图,是SMPL生成的的不同shape和pose的结果:
SMPL: A Skinned Multi-Person Linear Model论文解读_第2张图片

4.run-time analysis
系统的run-time如下图,包括shape的pose两个部分的耗时;其中横坐标是body shape的系数;测试使用的是2014 Macbook Pro。
SMPL: A Skinned Multi-Person Linear Model论文解读_第3张图片

5.Compatibility with rendering engines
SMPL使用的是标准蒙皮,可与现有的动画软件适配。SMPL可导出FBX格式的装配好模型。Pose blend weight可以bake到模型中,也可以在在运行时根据pose θ t ⃗ \vec{\theta_t} θt 计算。在Maya,Unity,Blender中测试,均可以直接加载。

你可能感兴趣的:(Human,Pose,Estimation)