【图像处理】A Skinned Multi-Person Linear Model(SMPL)浅解析
SMPL的原理
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200630224957446.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
首先,博主不做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所需要的参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701002959222.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
如上图,左一是一个标准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.]
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701013527155.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
-
β
\beta
β值:[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070101360395.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
-
β
\beta
β值:[0. 0. 0. 0. 0. 0.5 0. 0. 0. 0.5]
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701013818201.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
改变
θ
\theta
θ对3D人体mesh的影响:(pose,影响动作姿势,72个参数)
- 第1个参数是
π
\pi
π,第2个参数是1,其他参数是0
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701014138255.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
- 第1个参数是
π
\pi
π,第4个参数是1,其他参数是0
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070101424049.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
- 第1个参数是
π
\pi
π,第72个参数是1,其他参数是0
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701014414732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1poYW5nX0NoZW5f,size_16,color_FFFFFF,t_70#pic_center)
结语
如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)