首先,博主不做3D建模的工作(尽管这项工作真的很酷),学习blender也仅是出于兴趣,因此,这篇博文中对SMPL模型的理解会有部分不足,内容仅供参考。
《SMPL: A Skinned Multi-Person Linear Model》的作者在文章中写到,一个3D人体mesh由6890个网格顶点和23个关节点组成:
N = 6890 N=6890 N=6890,3D人体mesh的网格顶点总数 K = 23 K=23 K=23,3D人体mesh的关节点总数同时,作者指出,SMPL将3D人体mesh的状态分为shape和pose:
shape影响人体mesh的形状(高矮胖瘦)pose影响人体mesh的姿态(动作姿势)因为是在三维空间,一个点有三个坐标( x , y , z x,y,z x,y,z),故一个标准3D人体mesh的6890个mesh顶点可表示为:
T T T,一个 6890 ∗ 3 6890*3 6890∗3的矩阵。注意,这个矩阵是常数值(对于单独一种性别的mesh来说)同理,一个标准3D人体mesh的23个关节点可表示为:
J J J,一个 24 ∗ 3 24*3 24∗3的矩阵,23个关节点+1个root orientation。注意,这个矩阵是常数值(对于单独一种性别的mesh来说)另外,还有blend weight,也就是每一个关节点的坐标变化对每一个mesh顶点坐标变化的影响:
W W W,一个 6890 ∗ 24 6890*24 6890∗24的矩阵。注意,这个矩阵的值需要训练得到接下来,文章作者定义了影响shape和 pose的两组参数:
shape,影响高矮胖瘦: β \beta β,10个参数,值在-1到1之间pose,影响动作姿势: θ \theta θ,72个参数,后69个值在-1到1之间,3*23 + 3,影响23个关节点+1个root orientation的旋转。前三个控制root orientation,后面每连续三个控制一个关节点这10+72个参数,便是以一个标准3D人体mesh为基础,生成不同shape、不同pose的3D人体mesh所需要的参数
如上图,左一是一个标准3D人体mesh,也就是由 T T T、 J J J生成,而颜色代表 W W W 左二,是改变了shape后的3D人体mesh,也就是由 T T T、 J J J,外加 β \beta β的影响生成 右二,是改变了shape和pose后的3D人体mesh,也就是由 T T T、 J J J,外加 β \beta β、 θ \theta θ的影响生成 右一,是在右二的基础上,加入了 W W W的影响后的结果
SMPL模型,神经网络通过学习得到的什么?
四个权重:
weigth:一个 6890 ∗ 24 6890*24 6890∗24的tensorJ_regressor:一个 24 ∗ 6890 24*6890 24∗6890的tensorshapedirs:一个 6890 ∗ 3 ∗ 10 6890*3*10 6890∗3∗10的tensorposedirs:一个 6890 ∗ 3 ∗ 207 6890*3*207 6890∗3∗207的tensor(207=23*9,23是关节点的个数,9是旋转矩阵的元素个数)至于怎么通过这四个权重,联合 T T T和 J J J得到3D人体mesh,原文中有相关公式。感兴趣的朋友自行阅读
最后,作者给出了训练得到的权重,给出了标准3D人体mesh的 T T T和 J J J,我们只需要改变 β \beta β和 θ \theta θ,就能得到不同的3D人体mesh了
改变 β \beta β对3D人体mesh的影响:(shape,影响高矮胖瘦,10个参数)
β \beta β值:[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
β \beta β值:[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
β \beta β值:[0. 0. 0. 0. 0. 0.5 0. 0. 0. 0.5]
改变 θ \theta θ对3D人体mesh的影响:(pose,影响动作姿势,72个参数)
第1个参数是 π \pi π,第2个参数是1,其他参数是0 第1个参数是 π \pi π,第4个参数是1,其他参数是0 第1个参数是 π \pi π,第72个参数是1,其他参数是0如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。 手打很辛苦,如果我的文章对您有帮助,转载请注明出处。