Preface
SMPL主要是人体三维重建常用模型,本文主要对模型及源码进行了解读(自己的理解不一定正确),为以后更好的利用此模型进行人体重建打好基础!
一、模型解读
二、源码解读
SMPL模型网格顶点数N=6890,关节点数K=23,关节点具体位置如图所示
SMPL源码的结构在上一篇源码实现中已经进行了说明,这里就不再赘述!
1、hello_smpl.py
这个文件主要是举了一个应用SMPL实例,包括加载模型、编辑pose和shape参数产生一个新的人体模型以及保存模型为.obj文件格式。为我们利用smpl模型做了一个很好的示范!输入主要是m.pose以及m.betas(pose和shape参数):
m.pose共计72个参数(23X3+3,23个三维关节点,加上根关节点的3个参数);
m.betas共计300个参数(等于线性形状系数的个数);
我们将得到得的pose和shape参数送入模型即可得到三维人体重建的模型。当设置参数为:
m.pose[:] = 0
m.betas[:] = 0
这就是论文中所述的零姿态(zero pose)如图所示:
2、serialization.py
这是模型的序列化函数,主要功能是加载SMPL模型和保存SMPL模型。其中一些参数分别代表
v_template:顶点模板
J:关节坐标
weight:关节权重
kintree_table:关节树
f:相机参数
bs_type:蒙皮方法LBS还是DQBS
3、 posemapper .py
主要实现关节点角度Θ到姿态混合形状的映射。
Rodrigues类利用Rodrigues’ rotation formula计算每个关节点轴线角的旋转矩阵;
lrotmin函数将Pose矢量映射到连接相关部分旋转矩阵的矢量。
4、LBS.py
这个文件主要是实现文中所述的线性蒙皮(LBS)的。定义了骨骼和混合形状对模板网格顶点的影响。
global_rigid_transformation函数计算模型的全局刚体变换,包括旋度和平移量,实现了论文里的公式4。
verts_core:计算关节点影响后每个顶点的位置,实现了论文里的公式2。
5、vert.py
这个文件主要定义骨骼和混合形状对模板网格顶点的影响。
verts_decorated:创建了继承SMPL模型属性的另一个SMPL模型。
verts_core:计算蒙皮中关节点对每个顶点的影响。
现在对模型的理解还十分肤浅,后续会持续更新,望志同道合的朋友来一起学习!
Citation
[1]https://blog.youkuaiyun.com/nbxuwentao/article/details/100177159
[2]https://52zju.cn/?p=471
[3]Matthew Loper, Naureen Mahmood, Javier Romero, Gerard Pons-Moll, and Michael J. Black. 2015. SMPL: a skinned multi-person linear model. ACM Trans. Graph. 34, 6, Article 248 (November 2015), 16 pages. DOI:https://doi.org/10.1145/2816795.2818013