基于SMPL模型人体三维重建总结整理

SMPL相关问题与学习过程

    • SMPL model
    • python3下使用SMPL和SMPLify
    • SMPL代码的源码解读
    • 一些没搞懂的问题
  • 补充
  • 参考

前期的调研过程中,一直都听说SMPL模型,以及很论文中都使用了他,例如Frankmocap 和Eazymocap 等论文项目中,然后我去看了SMPL的原文,文章中很多公式推导,看的眼花缭乱目前也没有完全搞懂每个公式和参数的意义,不过我已经准备进入下一阶段,先看SMPL源码的使用,用起来缺什么补什么。以下是一些总结笔记
Blending Skinning蒙皮算法,常用的有两种LBS和DQS,是用骨骼操控面上的顶点。

SMPL model

参考https://www.cnblogs.com/sariel-sakura/p/14321818.html

python3下使用SMPL和SMPLify

pyton3.x上的SMPLify运行:源码是python2版本,python3的实现参考这篇博客,博主真的很耐心,算是指导我入门了,感谢

SMPL代码的源码解读

文件结构和代码解读参考:https://blog.csdn.net/xxw23/article/details/121906847#comments_21658163
博主写了文件之间的调用关系,以及参数的意义,不过我很多参数具体意义还是看不懂,自己太菜了,不过我主要知道了SMPL的模型的输入是β和θ
基于SMPL模型人体三维重建总结整理_第1张图片
β也就是m.betas是一个包含10个参数的列表,θ是m.pose我debug的时候看到它只有72个参数,但是参考了不少博客都说有75个,后来在https://blog.csdn.net/weixin_42145554/article/details/112251942这篇博客看到应该确实只有72个,这篇博客较为详细的介绍了各个参数的意义还有公式推导。SMPL顶点、关节点的计算流程参考
基于SMPL模型人体三维重建总结整理_第2张图片
我的理解拿这张图举例,0代表root 根有3个参数,其余还剩23个关节,每个关节又有3个参数代表相对父节点的旋转(这个旋转我不知道描述的准不准确)SMPL原论文中是这么描述的
基于SMPL模型人体三维重建总结整理_第3张图片
这个父子节点也参考上面的博客,0是root,没有父节点,它的子节点是1,2,3,以此类推


一些没搞懂的问题

基于SMPL模型人体三维重建总结整理_第4张图片m.r我没有在pkl文件中找到这个参数,我不知道这个参数从哪来的.可能对pkl文件的读取没有搞清楚,debug的时候也无法在IDE里定位到这个变量。很头疼。
还有就是对模型各个参数计算的过程没有详细推导,也不知道需不需要完全深入了解,留作以后在看。


补充

debug的时候发现m.r,在导入m的时候就有m.r了,然后修改m.pose和m.betas后,m.r会实时更新。
将smplify中的fit_3d.py改成如下

    with open(out_path, 'wb+') as outf:
        pickle.dump(params, outf)

能将获得的参数保存下来,然后读取其中的m.pose和m.betas到hello_smpl.py中
基于SMPL模型人体三维重建总结整理_第5张图片
最后生成的.obj文件能在mesh中查看
基于SMPL模型人体三维重建总结整理_第6张图片
不过生成的是个倒着的人,好像要旋转点云,不太懂点云数据的操作,暂时先放一放,有需求再改。

参考

1.https://blog.csdn.net/weixin_43955293/article/details/121685987
2.https://blog.csdn.net/xxw23/article/details/121906847#comments_21658163
3.https://blog.csdn.net/weixin_42145554/article/details/112251942
4.SMPL论文

你可能感兴趣的:(三位重建,图像处理,计算机视觉,python,矩阵,算法)