SMPL源代码实现和模型解读

对于SLAM的工作已经告一段落了,传统的人体动态三维重建也要告一段落了,由于课题研究的方向是基于图像\视频的人体三维重建,三维shape、pose的恢复:所以今天和大家交流的是SMPL模型,对于SMPL模型的理论部分欢迎大家交流提问!!留言第一时间回大家的疑惑

(一)今天研究的是SMPL模型
SMPL模型的官网是:http://smpl.is.tue.mpg.de/ ,今天和大家交流的是基于源代码的实现和模型理解—当然目前对于SMPL有各种版本的实现,比如说基于tensorflow、pytorch、hmr、C++等的实现,等下次和大家分享tensorflow版本的,但是你只要理解了SMPL模型的原理,我相信不管是什么版本的,你都可以实现!!!!

(二) SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法,该方法可以进行任意的人体建模和动画驱动。这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。

(三)在SMPL文章中介绍了SMPL的总体模型,这个模型是通过训练得到,就是一些参数, 该模型中β和θ是其中的输入参数,其中β代表是个人体高矮胖瘦、头身比等比例的10个参数,θ是代表人体整体运动位姿和24个关节相对角度的75个参数,β参数是ShapeBlendPose参数,可以通过10个增量模板控制人体形状变化: 具体而言:每个参数控制人体形态的变化可以通过动图来刻画,对于这个模型大家有什么不懂的随时留言交流,我会第一时间为大家解决SMPL模型中的问题,特别是文章中的理论部分

(四)源代码实现和解读:这个代码大家可以直接在官网上下载,记住下载代码的同时一定要把训练好的模型下载下来,以便于代码中调用训练好的模型----模型分成男士SMPL模型和女士SMPL模型

—整个代码的结构:下载下来的文件名字为smpl的文件夹
-------models文件夹:存放男女模型的文件夹
(1)女:basicModel_f_lbs_10_207_0_v1.0.0.pkl
(2)男:basicmodel_m_lbs_10_207_0_v1.0.0.pkl

-------smpl_webuser文件夹:整体的代码文件
—README.txt: 技术手册,方便实现查阅
—lbs.py: 线性蒙皮的实现
—posemapper.py: 旋转向量和旋转矩阵之间的转换模块
—serialization.py: 对于以上男女模型的保存和导入文件,导入之后就可以直接使用了
—verts.py: 关于网格模型顶点的转换模块

---------hello_world文件夹是模型测试文件:
(1)hello_smpl.py 是把SMPL模型保存成.obj格式的文件,可以用三维显示软件查看的obj文件
(2)render_smpl.py 显示SMPL模型的代码,通过给不同的shape pose参数就可以得到不同的SMPL模型,三维渲染显示

(五)SMPL源代码实现的具体步骤:
操作系统: ubuntu16 对于别人的项目代码的实现,我们一般是建立虚拟环境来实现的,这个好处就是,你在虚拟环境中安装任何的库和依赖对于外部的环境是没有影响的,对于自己其他的项目的依赖库也是没有影响的,直接进入主题:
(1)虚拟环境的建立:个人推荐使用conda: conda create -n smpl python=2.7
注意smpl的源代码是在python2.7上实现的
(2)相关库的安装: 首先激活上面建立的虚拟环境: source activate smpl 进入虚拟环境,然后就先相关的库的安装:
----(1)numpy的安装: pip install numpy
----(2)scipy的安装 : pip install scipy
----(3)opencv的安装: pip install opencv-python
----(4)chumpy的安装: pip install chumpy
以上都是一些基础的库的安装,在实现源代码之前还需要安装一个三维显示的库–opendr

—(5)opendr的安装: pip install opendr 但是这一步通常会出现依赖的问题,或者直接出现错误,对于这个错误的解决思路,我已经给大家准备好了
—opendr安装出错解决思路: https://blog.csdn.net/nbxuwentao/article/details/100146799 这里面有一个解决错误的链接,按照步骤做就可以了
安装完成之后,就是最后的实现阶段,一定要保证以上5个步骤都成功!!!!

(6)在虚拟环境中: 执行: cd smpl源码的路径:这个路径包含 hello_smpl.py、render_smpl.py

对于hello_smpl.py的测试: python hello_smpl.py-----执行成功后在该目录下生成了一个xxxx.obj文件—这个时候可以用三维软件查看,也可修改文件中的shape、pose的参数来得到不同的人体模型

对于render_smpl.py的测试: python render_smpl.py-----执行成功之后就可以看到渲染的smpl模型,如果你想深入理解这个模型,可以打印出模型训练出来的参数,看看这个参数的具体形式:以下是我跑出来的一些结果:
—[1]zero pose:
设置参数: m.pose[:]=0
m.beta[:]=0
m.pose[0] = np.pi

SMPL源代码实现和模型解读_第1张图片
SMPL源代码实现和模型解读_第2张图片
SMPL源代码实现和模型解读_第3张图片
设置参数:m.pose[:] = np.random.rand(m.pose.size)* .2
m.beat[:] = np.random.rand(m.beta.size)* .03

              m.pose[0] = np.pi

SMPL源代码实现和模型解读_第4张图片

SMPL源代码实现和模型解读_第5张图片SMPL源代码实现和模型解读_第6张图片到这里SMPL就介绍完毕----欢迎交流:下期更加精彩

你可能感兴趣的:(个人学习)