SMPL、SMPLify
SMPL(Skinned Multi-Person Linear (SMPL) Model)Keep it SMPL: Automatic Estimation of 3D Human Pose and Shape from a Single Image,2015
SMPL
关节点数量:K=23,其中0号节点(不在K之中)为root,其角度值为人体的Global Orientation
顶点数量:N=6890
将人体建模为一个线性混合蒙皮模型。
- Tp为T-pose与Shape和Pose的线性叠加
- Shape为Shape基与Shape参数的线性叠加,其中Sn为扫描的数据经过PCA得到的10个主成分
- Pose也会影响mesh的成型,如行走、奔跑等会影响到跨部的mesh
Pose的计算如下
其中R为通过Rodrigues公式,将旋转角转为旋转矩阵
Pn为9K=207维(K=23,root的旋转只影响朝向,不影响mesh, 9K= 23 * 9=207)个混合成型的基本pose模版
这个Pn实际上也是一个学习到的矩阵,用以将pose与静默pose之间的差异映射到N个顶点上
- Shape为Shape基与Shape参数的线性叠加,其中Sn为扫描的数据经过PCA得到的10个主成分
- J是一个线性回归器,用于从mesh顶点回归24个关节点的坐标
其本质上也是一个变换矩阵,N * 3 -> ( K + 1 ) * 3
- w为混合权重(blend weights) 表示顶点i受到关节k的旋转的影响权重
- W ( . ) 为标准混合蒙皮函数(standard blend skinning function)
可以是线性的,也可是双四元素,被用于平滑关节中心的混合权重来旋转顶点
SMPLify
从单张无约束的图片中估计3D人体的pose和shape的方法,是一种基于优化的方法。
首先使用DeepCut来预测2D身体关节位置,然后将统计人体模型SMPL拟合到2D关节。同时提出了利用3D模型来抑制身体部位互穿现象的方法。
- Loss
-
E
J
E_J
EJ: 关节重投影损失
R θ R_{\theta} Rθ对Joints进行旋转, Π k {\Pi_k} Πk为相机投影, ρ {\rho} ρ是Geman-McClure惩罚函数, w i w_i wi为关键点的置信度 -
E
θ
E_{\theta}
Eθ: 先验pose损失,其中的参考对象为CMU数据集训练的pose先验:用MoSh算法从CMU的marker数据上得到对应的SMPL参数,得到大约100万个姿态的高斯分布。为了计算效率进行了近似。
-
E
α
E_{\alpha}
Eα:膝盖和肘部的弯曲惩罚项
i i i表示与肘部和膝盖弯曲有关的pose参数,当这些部位的旋转角为正( 关节反弯曲)时,会收到较大的惩罚。 -
E
s
p
E_{sp}
Esp:互穿惩罚。把人体的各部分近似成一个胶囊( 重心在
C
(
θ
,
β
)
C(\theta, \beta)
C(θ,β),半径为
σ
(
β
)
\sigma(\beta)
σ(β)),
- -
E
β
E_{\beta}
Eβ:shape的正则
-
E
J
E_J
EJ: 关节重投影损失
- 优化过程
- 第一步,估计相机的平移参数和人体方向(Pose[:3])
- 先通过躯干长度(肩部和臀部的关节点距离)和2D关键点距离之间的比例关系,以及默认焦距和相机距离之间比例关系,估算相机距离(相机平移的Z轴项):est_d = focal_length * (mean_height3d / mean_height2d)
- 通过最小化躯干长度的投影损失,估算相机平移参数和人体全局方向
- 第二步,通过迭代的方式,按照上面的loss,优化SMPL模型的 β \beta β和 θ \theta θ参数。
- 其中,若2D关键点的左右肩膀的距离小于预定的阈值,将会对第二步中的人体朝向进行翻转,分别进行优化,并以loss较小的朝向进行参数更新。
- 第一步,估计相机的平移参数和人体方向(Pose[:3])