SMPL的原理
首先,博主不做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的tensor
- J_regressor:一个 24 ∗ 6890 24*6890 24∗6890的tensor
- shapedirs:一个 6890 ∗ 3 ∗ 10 6890*3*10 6890∗3∗10的tensor
- posedirs:一个 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
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。