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 人体模型简要相关推荐

  1. SMPL STAR人体模型系列

    SCAPE: 人体模型 SMPL: 人体模型 SMPL-H: 人体+手 SMPL-X: 人体+手+人脸(FLAME) STAR: SMPL的改进版 人体模型主要思想是将pose, shape解耦,用参 ...

  2. ICON: 从单张图片重建穿衣服人体模型

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨人脸人体重建 来源丨人脸人体重建 马普所最新文章,穿衣服人体重建新方法 ICON (Implic ...

  3. densepose与SMPL之IUV坐标转XYZ坐标

    具体流程 一.SMPL模型 SMPL模型拥有6890个XYZ坐标的3D人体点,目前第一步需要将这6890个人体点进行分析,并将不同部位的点位进行归并,具体分为以下几个部分:头部,胸部,腰部,左臂,右臂 ...

  4. 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020

    作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的.尽管目前已经在单图像3D姿势和动作估计方面取得 ...

  5. 今日 Paper | 跨模态行人重识别;对抗时尚迁移;学会注意错误等

    2020-03-11 15:11:09 目录 跨模态行人重识别:共享与特异特征变换算法cm-SSFT GarmentGAN:具有图片真实感的对抗时尚迁移 学习将纹理从服装图像转移到3D人体 学会注意错 ...

  6. CVPR2020|无需3D运动数据训练,最新SOTA人体姿势估计方法

    点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的 ...

  7. 科学怪物!3D人体全身运动捕捉系统,港中文联合Facebook出品

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者 | VVingerfly 编辑 | 陈大鑫 3D人体姿态和形状估计在最近几年是一个重要的研究热点 ...

  8. 《SMPLicit: Topology-aware Generative Model for Clothed People》论文解读

    作者和机构 解决的问题 使用线性模型对衣服进行编码 左边四幅图展示的是3D身体和服装重建的应用.右边三幅图展示的是服装编辑和姿势重建. 难点 需要找到一种参数量较少的服装模型表示 在人体上生成宽松衣服 ...

  9. 【报错解决】为Blender构建Python模块

    在构建smpl人体模型时,涉及到需要将.pkl转换成.fbx,转换程序中涉及到了bpy的使用,一直安装不上.记录下踩坑过程(满纸辛酸泪..) –搭建环境为双系统linux18.04 –主要参考的是这三 ...

  10. 基于vc的freetype字体轮廓解析_MulayCap:基于多层表达的单目彩色相机的人体动作捕捉新方案...

    MulayCap: Multi-layer Human Performance Capture Using A Monocular Video Camera 最近几年,深度学习的发展为基于单目RGB相 ...

最新文章

  1. lambda表达式树
  2. 字符串的最大相似匹配
  3. Class.forName(xxx.xx.xx) 解耦
  4. shell里面比较大小
  5. how is odata metadata request served 故意把configuration file里的GM6改成GM61之后
  6. iOS正则表达式(亲测,持续更新)
  7. 上传文件Base64格式(React)
  8. containerd与安全沙箱的Kubernetes初体验
  9. java 0xf0_java 中类似js encodeURIComponent 函数的实现案例
  10. 每天至少保证4个小时的学习时间
  11. ntp-redhat 同步时间配置
  12. 简述div标签和span标签的不同,div和span标签之间的区别
  13. mysql空间数据类型的使用_MYSQL 空间数据类型用法
  14. 运维工程师的生存法则
  15. 机器学习算法基础1-数据的特征工程
  16. 2020-2-6 蓝桥杯阶段模拟总结
  17. 市区对应的编码获取入库过程
  18. Github中文汉化插件—亲测可用
  19. C++求解组合数的具体实现
  20. POWERSHELL脚本编写利器:PowerGUI Visual Studio Extension

热门文章

  1. 考研作息时间安排表(19通信考研党)
  2. OSPF LSA内容解析及SPF算法分析
  3. 理解 BLS 签名算法
  4. yabailv 运放_运放块压摆率单位增益频宽和逻辑器件传输延时
  5. 分布式会议系统中的服务器,多功能会议系统分配服务器质量过硬
  6. 什么是bug(软件缺陷)
  7. 计算机c盘内存怎么转给d盘,C盘空间太大怎么把空间转到D盘或E盘
  8. java 过载_java语言中基础类的覆盖与过载
  9. MySQL聚集索引和非聚集索引
  10. html 两个表合并,html如何合并表格