SMPL 人体模型简要
smpl是指2015 马普的一篇文章“SMPL: a skinned multi-person linear model”中构建的人体参数化三维模型,人体可以理解为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数——形状参数(shape);同时,使用运动树表示人体的姿势,即运动树每个关节点和父节点的旋转关系,该关系可以表示为三维向量,最终每个关节点的局部旋转向量构成了smpl模型的姿势参数(pose)。考虑到与目前的市面上的渲染器,SMPL模型使用得较多。总结:三维参数化人体模型被广泛使用,它是估计人体三维姿态和形状的有力先验。其主要思想是通过低维参数对三维人体(包括脸、手和身体)的变形进行建模 。SCAPE-》SMPL-〉SMPL-X等。
SMPL 源码
['v_template', 'weights', 'posedirs', 'pose', 'trans', 'shapedirs', 'betas', 'J']:
basicModel_m_lbs_10_207_0_v1.0.0.pkl
下图展示了SMPL模型的标准状态、加上形状参数后的Mesh、加上姿态参数后影响的肌肉的松紧状态、以及由姿态参数驱动关节动作后的Mesh。
(a )中的是由平均顶点集以及权重所描述的人体模型。
(b )中平均顶点集在体态的影响下发生了位移,同时体态对关节也产生了影响。
(c )平均顶点集在体态与动作的两重影响下发生的位移,注意此时的图并未有任何的pose。
(d) shape和pose双重影响下的SMPL模型;总共四项,分别为经过体型与姿势影响的顶点集、经过体型影响的关节,以及姿势和权重。
具体代码解析:Linear Blend Skinning
full_pose = torch.cat([global_orient, body_pose], dim=1)
vertices, joints = lbs(betas, full_pose, self.v_template,
self.shapedirs, self.posedirs,
self.J_regressor, self.parents,
self.lbs_weights, pose2rot=pose2rot, dtype=self.dtype)
betas: 体型pca对应的参数1 * 10,
global_orient: 1 * 3 根节点旋转向量
body_pose: 23 * 3 关节点旋转向量
shapedirs: 6890 * 3 * 10 形状位移矩阵PCA (由体型引起的位移形状位移的PCA)
posedirs: 6890 * 207 * 3 23 x 9 =207所有207个姿势混合形状组成的矩阵 (由姿势引起位移的pca)
j_regressor: 6890 * 24 , 是从不同的人在不同的姿势的例子中学习回归矩阵,从mesh中回归出关节点
parents: 24 每一个节点的父节点,显然根节点没有父节点
lbs_weights: 6890 * 24 混合权重矩阵,即关节点对顶点的影响权重 (第几个顶点受哪些关节点的影响且权重分别为多少) 6890个顶点,,每一个顶点受到24个关节点的影响
骨骼蒙皮算法
第一步:体型带来的位移偏差 图b
v_shaped = v_template + blend_shapes(betas, shapedirs)
J = vertices2joints(J_regressor, v_shaped) 获得各个关节的位置
第二步:pose带来的位移偏差(影响很轻微,考虑到速度的时候可以舍弃)图c
pose_feature = batch_rodrigues (full_pose)#旋转向量转旋转矩阵
pose_offsets = torch.matmul(pose_feature, posedirs)
v_posed = pose_offsets + v_shaped
第三步:基于运动树进行关节点变换 图d
J_transformed, A = batch_rigid_transform(rot_mats, J, parents, dtype=dtype)
J_transformed: 应用姿势旋转后关节的位置 24 * 3
A: 所有其他节点相对根节点的刚体变换矩阵 24* 3 * 3
第四步:线性蒙皮算法 图d
T= lbs_weights * A :6890 * 3 * 3 得到每一个顶点3*3
v_homo =T * v_posed 得到最终的6890 * 3 mesh顶点
J_transformed: 最终的关节点
第五步:有位移考虑位移
if apply_trans:
joints += transl.unsqueeze(dim=1)
vertices += transl.unsqueeze(dim=1)
目前SMPL模型也得到了长足的发展,但是因为市面的渲染器对应的接口还是SMPL,所以SMPL的使用还是比较普及。
SMPL SMPLH SMPLX
STAR此模型是发布SMPL模型的研究人员2020最新的科研成果,是对SMPL模型的有效改进。
参考SMPL论文解读和相关基础知识介绍 - 知乎
SMPL 人体模型简要相关推荐
- SMPL STAR人体模型系列
SCAPE: 人体模型 SMPL: 人体模型 SMPL-H: 人体+手 SMPL-X: 人体+手+人脸(FLAME) STAR: SMPL的改进版 人体模型主要思想是将pose, shape解耦,用参 ...
- ICON: 从单张图片重建穿衣服人体模型
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨人脸人体重建 来源丨人脸人体重建 马普所最新文章,穿衣服人体重建新方法 ICON (Implic ...
- densepose与SMPL之IUV坐标转XYZ坐标
具体流程 一.SMPL模型 SMPL模型拥有6890个XYZ坐标的3D人体点,目前第一步需要将这6890个人体点进行分析,并将不同部位的点位进行归并,具体分为以下几个部分:头部,胸部,腰部,左臂,右臂 ...
- 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的.尽管目前已经在单图像3D姿势和动作估计方面取得 ...
- 今日 Paper | 跨模态行人重识别;对抗时尚迁移;学会注意错误等
2020-03-11 15:11:09 目录 跨模态行人重识别:共享与特异特征变换算法cm-SSFT GarmentGAN:具有图片真实感的对抗时尚迁移 学习将纹理从服装图像转移到3D人体 学会注意错 ...
- CVPR2020|无需3D运动数据训练,最新SOTA人体姿势估计方法
点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的 ...
- 科学怪物!3D人体全身运动捕捉系统,港中文联合Facebook出品
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者 | VVingerfly 编辑 | 陈大鑫 3D人体姿态和形状估计在最近几年是一个重要的研究热点 ...
- 《SMPLicit: Topology-aware Generative Model for Clothed People》论文解读
作者和机构 解决的问题 使用线性模型对衣服进行编码 左边四幅图展示的是3D身体和服装重建的应用.右边三幅图展示的是服装编辑和姿势重建. 难点 需要找到一种参数量较少的服装模型表示 在人体上生成宽松衣服 ...
- 【报错解决】为Blender构建Python模块
在构建smpl人体模型时,涉及到需要将.pkl转换成.fbx,转换程序中涉及到了bpy的使用,一直安装不上.记录下踩坑过程(满纸辛酸泪..) –搭建环境为双系统linux18.04 –主要参考的是这三 ...
- 基于vc的freetype字体轮廓解析_MulayCap:基于多层表达的单目彩色相机的人体动作捕捉新方案...
MulayCap: Multi-layer Human Performance Capture Using A Monocular Video Camera 最近几年,深度学习的发展为基于单目RGB相 ...
最新文章
- lambda表达式树
- 字符串的最大相似匹配
- Class.forName(xxx.xx.xx) 解耦
- shell里面比较大小
- how is odata metadata request served 故意把configuration file里的GM6改成GM61之后
- iOS正则表达式(亲测,持续更新)
- 上传文件Base64格式(React)
- containerd与安全沙箱的Kubernetes初体验
- java 0xf0_java 中类似js encodeURIComponent 函数的实现案例
- 每天至少保证4个小时的学习时间
- ntp-redhat 同步时间配置
- 简述div标签和span标签的不同,div和span标签之间的区别
- mysql空间数据类型的使用_MYSQL 空间数据类型用法
- 运维工程师的生存法则
- 机器学习算法基础1-数据的特征工程
- 2020-2-6 蓝桥杯阶段模拟总结
- 市区对应的编码获取入库过程
- Github中文汉化插件—亲测可用
- C++求解组合数的具体实现
- POWERSHELL脚本编写利器:PowerGUI Visual Studio Extension