标签:精准 带来 func 基本 意义 map 误差 平面 ota
SMPL(Skinned Multi-Person Linear Model)是一种裸体的(skinned),基于顶点(vertex-based)的人体三维模型,能够精确地表示人体的不同形状(shape)和姿态(pose)。
SMPL适用于动画领域,可以随姿态变化自然的变形,并伴随软组织的自然运动。SMPL与现有的许多图形渲染管线都是兼容的。
SMPL是一种可学习的模型,通过训练可以更好地拟合人体的形状和不同姿态下的形变。
它将身体形状分为identity-dependent shape和non-rigid pose-dependent shape。人体可以理解为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数——形状参数(shape);同时,使用运动树表示人体的姿势,即运动树每个关节点和父节点的旋转关系,该关系可以表示为三维向量,最终每个关节点的局部旋转向量构成了SPML模型的姿势参数(pose)。
这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。
在SMPL文章中介绍了SMPL的总体模型,这个模型是通过训练得到,就是一些参数, 该模型中β和θ是其中的输入参数,其中β代表人体高矮胖瘦、头身比等比例的10个参数,是一个10-D的vector。θ是代表人体整体运动位姿和24个关节相对角度的75(24*3+3;每个关节点3个自由度,再加上3个根节点)个参数,是一个3K-D的vector(代表pose,其中K为骨架节点数,3是每个关节具有的3个自由度)。 β参数是Shape Blend Pose参数,可以通过10个增量模板控制人体形状变化: 具体而言:每个参数控制人体形态的变化可以通过动图来刻画。
SMPL骨架的节点个数为24,标注了人体影响姿态的几个主要关节,即:
smpl_names = [
‘Left_Hip‘, ‘Right_Hip‘, ‘Waist‘, ‘Left_Knee‘, ‘Right_Knee‘,
‘Upper_Waist‘, ‘Left_Ankle‘, ‘Right_Ankle‘, ‘Chest‘,
‘Left_Toe‘, ‘Right_Toe‘, ‘Base_Neck‘, ‘Left_Shoulder‘,
‘Right_Shoulder‘, ‘Upper_Neck‘, ‘Left_Arm‘, ‘Right_Arm‘,
‘Left_Elbow‘, ‘Right_Elbow‘, ‘Left_Wrist‘, ‘Right_Wrist‘,
‘Left_Finger‘, ‘Right_Finger‘
]
加上position的三个维度,则该模型最终总的输入就是10+3+3x24=85-D的数据。
根据输入的数据,对标准模型进行一步步的变化,大概流程就是:
1. Add shape blend shapes(缩放)
2. Infer shape-dependent joint locations.(根据shape调整joint)
3. Add pose blend shapes(胖瘦变形)
4. Get the global joint location(摆pose)
5. Do skinning(给骨架包裹外皮)
最终生成的模型是具有6980个顶点的mesh。
smpl 10个shape参数分别对应的物理意义:(实际有50个参数,开源的只有10个)smpl官网的unity模型可以用slider 控制参数变化
0 代表整个人体的胖瘦和大小,初始为0的情况下,正数变瘦小,负数变大胖(±5)
1 侧面压缩拉伸,正数压缩
2 正数变胖大
3 负数肚子变大很多,人体缩小
4 代表 chest、hip、abdomen的大小,初始为0的情况下,正数变大,负数变小(±5)
5 负数表示大肚子+整体变瘦
6 正数表示肚子变得特别大的情况下,其他部位非常瘦小
7 正数表示身体被纵向挤压
8 正数表示横向表胖
9 正数表示肩膀变宽
顶点 vertical: N=6890
关节 joint: K=23
网格对男女具有相同的拓扑结构,空间分辨率可变,干净的四元数结构,分割成多部分,有初始混合权重和骨骼蒙皮。
模型生成的函数:
\(M(\vec \beta ,\vec \theta ;\Phi ) = W\left( {{T_P}(\vec \beta ,\vec \theta ),J(\vec \beta ),\vec \theta ,{\cal W}} \right)\mathbb{R}{^{\left| {\mathop \theta \limits^ \to } \right| \times \left| {\mathop \beta \limits^ \to } \right|}} \mapsto {\mathbb{R}^{3N}}\), SPML function: 将形状和位姿参数映射成顶点。$\Phi $表示学习到的参数。
\(W(\overline{\mathrm{T}}, \mathbf{J}, \vec{\theta}, \mathcal{W}): \mathbb{R}^{3 N \times 3 K \times|\vec{\theta}| \times|\mathcal{W}|} \mapsto \mathbb{R}^{3 N}\): the standard linear blend skinning function. 标准线性混合蒙皮.从模板smpl模型中取vertics in the rest pose \(\overline{\mathrm{T}}\),joint locations J,a pose \(\vec{\theta}\) and the blend weights $ \mathcal{W}$ , 输出posed vertices.
\(B_{P}(\vec{\theta}): \mathbb{R}^{|\theta|} \mapsto \mathbb{R}^{3 N}\):a pose-dependent blend shape function. 一个取决于位姿的混合模型函数。输入是$\mathop \theta \limits^ \to $:一系列位姿参数向量,代表位姿的相关形变。它会和blend shapes加在一起,施加到rest pose上。
\(B_{S}(\vec{\beta}): \mathbb{R}^{\mid \beta \mid} \mapsto \mathbb{R}^{3N}\):a blend shape funchtion. 混合变形函数。输入是形状参数向量(shape parameters)\(\vec{\beta}\),输出是塑造了目标身份的混合形状(a blend shape sculpting the subject identity),也就是人体模型。
\(B_D\): Dynamic blendshapes function
\(J(\vec{\beta}): \mathbb{R}^{\mid \beta \mid} \mapsto \mathbb{R}^{3K}\): a function to predict K joint locations. 一个预测K个关节位置的函数.
模型输入的参数:
\(\beta\):\(\vec{\beta}=\left[\vec{\beta}_{1}, \ldots, \overrightarrow{\beta_{\mid \beta \mid} }\right]^{T}\),形状参数(shape parameter) 其中,\(\mid \beta \mid\)是线性形状系数(linear shape coefficients)的数量
\(\theta\):,\(\vec{\theta}=\left[\vec{\omega}_{0}^{T}, \ldots, \vec{\omega}_{K}^{T}\right]^{T}\)姿态参数(pose parameter).其中,\(w_k\)指关节k相对于运动树(kinematic tree)中的父关节点的旋转轴角度,\({\omega _{\rm{k}}} \in {R^3}\)
$\mathop \omega \limits^ \to $: Scaled axis of rotation; the 3 pose parameters corresponding to a particular joint
\(\vec{\theta}^{*}\):原始姿态(zero pose)
$\overrightarrow \phi $: Dynamic control vector
$\overrightarrow \delta $: Dynamic shape coefficients
要通过训练集训练获取的参数:
\(\overline{\mathrm{T}} \in \mathbb{R}^{3 N}\):Mean shape of the template.平均模型,由N个串联的顶点表示(a mean template shape represented by a vector of N concatenated vertices)
\(\mathcal{S}=\left[\mathbf{S}_{1}, \ldots, \mathbf{S}_{|\vec{\beta}|}\right] \in \mathbb{R}^{3 N \times|\vec{\beta}|}\): shape blend shapes. 所有207个姿势混合形状组成的矩阵 (由姿势引起位移的正交主成分)
\(\mathcal{P}\): Pose blend shapes
\(\mathcal{W} \in \mathbb{R}^{N \times K}\): blend weights. 一组混合权重,BS/QBS混合权重矩阵,即关节点对顶点的影响权重 (第几个顶点受哪些关节点的影响且权重分别为多少) (a set of blend weights)
\(\mathcal{J}:\) Joint regressor matrix. 将rest vertices转换成rest joints的矩阵(获取T pose的关节点坐标的矩阵)[完成顶点到关节的转化]
训练数据:
\(V\): A registration
\(V^P\): Pose dataset registration
\(V^S\): Shape dataset registration
\(\hat{\mathbf{T}}^{P}\):Pose dataset subject shape; body vertices in the template pose
\(\hat{\mathbf{J}}^{P}\):Pose dataset subject joint locations in the template pose
\(\hat{\mathbf{T}}_{\mu}^{P}\):Mean shape of a pose subject; body vertices in the template pose
\(\hat{\mathbf{T}}_{\mu}^{S}\):Shape dataset subject shape; body vertices in the template pose
\(\hat{\mathbf{T}}_{\mu}^{S}\):Mean shape of a subject in the shape dataset; body vertices in the template pose
每个关节j绕轴的旋转角用罗德里格斯公式转换成旋转矩阵:
其中,\(\vec{\theta}=\left[\vec{\omega}_{0}^{T}, \ldots, \vec{\omega}_{K}^{T}\right]^{T}\),参数通过\(|\vec{\theta}|=3 \times 23+3=72\)定义
\(\bar{\omega}=\frac{\vec{\omega}}{|\mid{\omega}| \mid}\):为旋转的单位范数轴(the unit norm axis of rotation)
\(\hat{\omega}\):斜对称矩阵,通过三维向量\(\bar{\omega}\)组成
\(\mathcal{I}\):3x3单位矩阵
每个\(\overline{\mathrm{T}}\)中的顶点\({\overline t _i}\)被转换成\(\overline{t}_i^{‘}\)(都是齐次坐标系下的列向量):
其中,\({\omega _{k,i}}\)是混合权重矩阵\(\mathcal{W}\)的元素,代表第\(k\)部分的旋转角度有多少程度影响了第\(i\)个顶点。
\(\exp \left(\vec{\theta}_{j}\right)\)为局部\(3\times 3\)旋转矩阵,对应结点\(j\)。
\(G_{k}(\vec{\theta}, \mathbf{J})\) 是关节\(k\)的世界变换
\(G_{k}^{‘}(\vec{\theta}, \mathbf{J})\)是移除了变换后的相同变换(the same transformation after removing the transformation due to the rest pose.)
\(\mathbf{J}\):关节回归函数。Predict points from surface. Each 3-element vector in \(J\) corresponding to a single joint center \(j\), is denoted \(\mathbf{j}_j\).
\(A(k)\)定义了关节k的有序集合。
注意,为了与现有的渲染引擎兼容,我们假设\(\mathcal{W}\)是稀疏的,最多允许四个部分影响一个vertex。
为了保持兼容性,我们保留了基本的皮肤函数,而是以一种附加的方式修改模板,并学习一个预测关节位置的函数。
\(B_{S}(\vec{\beta}),B_{P}(\vec{\theta})\)表示由shape和pose引起的相对于SMPL标准模板的顶点向量\({\overline t _i}\)的偏移量:
进行进一步的细化,初始顶点不能直接用平均形状下的顶点,还要考虑到体型与姿势的影响,同样关节也会因为体型而发生改变。于是得到以下扩展:
其中,\(\mathbf{b}_{S, i}(\vec{\beta}), \mathbf{b}_{P, i}(\vec{\theta})\) 分别\(B_{S}(\vec{\beta}),B_{P}(\vec{\theta})\)的顶点,表示相对于顶点\({\overline t _i}\)的偏移量。关节中心是身体形状的函数,通过混合蒙皮变形的模板网络是姿态和形状的函数。
不同人的身体形状可以被以下的线性函数表示:
\(\vec{\beta}=\left[\beta_{1}, \ldots, \beta_{|\vec{\beta}|}\right]^{T}\),\(|\vec{\beta}|\)是线性形状系数的数量。
\(\mathbf{S}_{n} \in \mathbb{R}^{3 N}\): 形状位移的标准正交主分量(orthonormal principal components of shape displacements )
\(\mathcal{S}=\left[\mathbf{S}_{1}, \ldots, \mathbf{S}_{|\vec{\beta}|}\right] \in \mathbb{R}^{3 N \times|\vec{\beta}|}\)为形状位移矩阵。线性函数\(B_{S}(\vec{\beta} ; \mathcal{S})\)能够完全被矩阵\(\mathcal{S}\)定义,通过注册训练网络学习。
右边的值表示学习过的参数,而左边的值是动画器设置的参数;为了便于标记,当学习的参数在训练中没有得到明确的优化时,通常忽略这些参数。
定义\(R:\mathbb{R}^{|\vec{\theta}|} \mapsto \mathbb{R}^{9 K}\)为把一个位姿向量映射到连接部分相对旋转矩阵的向量上\(\vec{\theta}\),由于我们的骨骼(rig)有23个关节,则\(R(\vec{\theta})\)是一个23x9=207维的向量。它的元素是关节旋转角的sin和cos函数,因此它是一个对于\(\vec{\theta}\)的非线性函数。
但是作者又定义了一个可以让pose blend shape线性的函数:\(R^{*}(\vec{\theta})=(R(\vec{\theta})-R(\vec{\theta}^{*}))\),其中,\(\vec{\theta}^{*}\)定义了rest pose. 定义\(R_n(\vec{\theta})\)为\(R(\vec{\theta})\)的第n个向量,则与静止模板的偏差为:
上式代表将姿势带来的形状位移正交分解,进行计算,不过要减去休息状态的姿势的影响,这样可以保障pose blend shapes在静止状态时贡献为0。
其中,\(\mathbf{P}_{n} \in \mathbb{R}^{3 N}\)表示顶点偏移的向量。
\(\mathcal{P}=\left[\mathbf{P}_{1}, \ldots, \mathbf{P}_{9 K}\right] \in \mathbb{R}^{3 N \times 9 K}\)是所有207个pose blend shape组成的矩阵。\(B_{P}(\vec{\theta})\)完全被矩阵\(\mathcal{P}\)定义。
不同的体型有不同的关节位置,每个关节由其在静止位姿(rest pose)中的3D位置表示。至关重要的是,这些数据必须是准确的,否则在使用皮肤化方程建立模型时将会出现伪影关节。关节3D位置相对于身体形状的函数如下:
其中,\(\mathcal{J}\)是将rest vertices转换成rest joints 的矩阵,我们从不同的人在不同的姿势的例子中学习回归矩阵\(\mathcal{J}\)。这个矩阵models哪些网格顶点是重要的,以及如何结合它们来估计关节位置。
SMPL模型的模型参数定义为:$\Phi = { \overline T , \mathcal{W}, \mathcal{S}, \mathcal{J}, \mathcal{P}} \(,通过变换\)\vec{\beta}, \vec{\theta}$可以得到不同的人体形状和姿态。SMPL最后被定义为:
每个顶点被转换成:
其中,
代表施加blend shapes后的顶点i,\(\mathbf{s}_{m, i}, \mathbf{p}_{n, i} \in \mathbb{R}^{3}\)是shape and pose blend shapes对应模板顶点\(\bar{\mathbf{t}}_{i}\)的元素.
最后,文章用LBS,DQBS去训练参数,分别为SMPL-LBS,SMPL-DQBS,然后默认SMPL-DQBS为它们研发的好模型,因此后边都叫SMPL
训练目标是训练\(\Phi = \{ \overline T , \mathcal{W}, \mathcal{S}, \mathcal{J}, \mathcal{P}\}\) 的参数来最小化数据集上最小顶点的重建误差。因为这个模型分解了shape和pose,因此可以分开训练。先用多姿态数据集训练 \(\{\mathcal{W}, \mathcal{J}, \mathcal{P}\}\),再用多形状数据集训练 \(\{ \overline T , \mathcal{S}\}\)
参考:
https://blog.csdn.net/weixin_45915902/article/details/108654466
https://blog.csdn.net/qq_34296627/article/details/103158923
标签:精准 带来 func 基本 意义 map 误差 平面 ota
原文地址:https://www.cnblogs.com/sariel-sakura/p/14321818.html