SMPL:数据增强之处理pose和3d点

article/2025/9/28 4:52:59

SMPL 是一个低维度的参数化人体模型,SMPL系数有pose和shape,在训练基于SMPL的3Dmesh重建任务时候,一般需要进行数据增强 例如旋转,镜像等,那当GT 中有pose和3d点的时候,怎么处理?

 

一 :关于3d点的数据增强:

          

        这里设置3d点坐标表示为(x,y,z),如图红色箭头表示x方向。

         注意在进行3d点监督的时候,使用的是相对于根节点的相对3d值。

       (1) 旋转,当图像发生旋转,3d点只需要全部乘以相应的旋转矩阵即可:

            

      (2) 镜像,当图像沿着x轴方向进行镜像的时候,主要影响3d点的x方向的数值。

                 第一步:将x方向向量乘以-1

                 第二步:将左右四肢的关节点交换。

         

                 可以发现只有x方向发生了变化。因为各个3d点是相对根节点的相对值,即根节点的坐       标是(0,0,0),当图像发生镜像后,x只有方向发生了变换,绝对值没有影响。

二  关于pose的数据增强:

      pose一般采用旋转向量表示,向量旋转公式最早由 Rodrigues(罗德里格斯) 提出,用一个三维向量来表示三维旋转变换,该向量的方向是旋转轴,其模则是旋转角度。pose 通常采用旋转向量,因为旋转矩阵和旋转向量之间是可以通过Rodrigues,

设旋转向量的单位向量为 r,模为 θ。三维点(或者说三维向量)p 在旋转向量 r 的作用下变换至 p′,则:

 

设旋转向量为(x,y,z)

1   旋转操作,当对含有目标人体的图像进行旋转操作的时候,只需要对SMPL的根节点做相应的旋转操作即可,类似相机外参操作。

         先将根节点旋转向量转为旋转矩阵,然后进行旋转操作,再还原到旋转向量。

     

2  镜像操作,当对含有目标人体的图像进行镜像操作的时候,则需要小心处理:

2.1 第一步: 直接交换左右双方的值

2.2 第二步:需要将每一个pose的旋转向量的第2和第3个值乘以-1。

具体实现代码:

为什么需要执行第二步?

 如下图,x方向为红色,y方向为绿线,z方向为黄线。图1经过镜像得到图2

 

                                图1                                                        图2

每一次旋转前均为初始T-pose

                                                    

                                                                  T-Pose 

动作1:   让左右手腕以x方向为轴方向,逆时针旋转90,可以发现旋转后方向一直,说明x向量是等价的,交换后不需要进行额外操作。

左右手均绕x向量方向旋转相同角,发生镜像,也不会影响这个旋转结果。

动作2:让左右手腕以y方向为轴方向,向顺时针旋转90

动作3:让左右手腕以y方向为轴方向,向逆时针旋转90

 

可以发现如果发生镜像,上面两个操作的结果将存在变化,这是因为尽管他们都是绕着y轴进行相同方向的旋转,但是因为初始方向相反,导致结果不一样。

动作4:让左右手腕以z方向为轴方向,顺时针旋转120,

动作5:让左右手腕以z方向为轴方向,逆时针旋转120

 

 可以发现如果发生镜像,上面两个操作的结果将存在变化,这是因为尽管他们都是绕着z轴进行相同方向的旋转,但是因为初始方向相反,导致结果不一样。

动作6 让3号点绕x轴逆/顺时针旋转60度

 动作7 让3号点绕y轴旋转逆时针60度

 

动作8 让3号点绕z轴顺时间旋转60度

 

附上:旋转矩阵和旋转向量之间的转换,opencv自带该函数Rodrigues()

或者:

from scipy.spatial.transform import Rotation as R   

alxe_pose=  np.zeros((24, 3))

rotmat_pose =  R.from_rotvec(alxe_pose).as_matrix()


http://chatgpt.dhexx.cn/article/QASINYaL.shtml

相关文章

SMPL源码实现及相关问题

SMPL源码实现及相关问题 SMPL模型代码结构SMPL实现具体步骤一、环境的配置二、相关库的安装三、运行SMPL CITATION SMPL模型 SMPL模型官网http://smpl.is.tue.mpg.de/,里面可以下载模型和观看演示视频,只不过要先注册一个账号。SMPL由Michael J. Black团…

smpl-x论文学习-部分翻译

论文地址:Expressive Body Capture: 3D Hands, Face, and Body from a Single Image 知乎大佬的讲解:https://zhuanlan.zhihu.com/p/137235901 另一位大佬的讲解:https://posts.careerengine.us/p/5f23a5898988c12b4302afb6 1. 定性结果 和 …

人体动作捕捉与SMPL模型 (mocap and SMPL model)

人体动作捕捉与SMPL模型 (mocap and SMPL model) FesianXu 2020.7.5 前言 笔者最近在做和motion capture动作捕捉相关的项目,学习了一些关于人体3D mesh模型的知识,其中以SMPL模型最为常见,笔者特在此进行笔记,希望对大家有帮助&a…

blender 绘制离散顶点, SMPL骨架绘制

给定一些点,如何绘制出来,借助 blender 看下效果。纠结于 unity 还是 blender, 最终还是 blender 了。 目前还都不太满意,思路一比较靠谱,但是需要更复杂的计算 思路一,第二版,已完成&#xff…

SMPL-CN

paper-reading 为方便理解smpl文章的主要实现思想,此文为论文中文解读,资料来源zju。 日后有空,会写出论文的主要推导过程以及值得注意的重点。 摘要: 我们提出了一个人体形状和姿势相关的形状变化的学习模型,它比以前…

SMPL源码解读

这是源码的整体结构,先简单说一下各个文件里面是什么。 一、models文件 包含3个模型的.pkl文件,.pkl文件是python提供的可以以字符串的形式记录对象、变量的文件格式。这个模型里面包括了: 1.J_regressor_prior:关节回归矩阵的先验,保存形…

SMPL 人体模型简要

smpl是指2015 马普的一篇文章“SMPL: a skinned multi-person linear model”中构建的人体参数化三维模型,人体可以理解为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数——形状参数&#xff08…

SMPL-论文解读

文章目录 创新点算法shape blend shape:pose blend shapeJoint locationSMPL model 训练过程Pose Parameter Trainingjoint regressorShape Parameter TrainingOptimization summary DMPL实验结论 论文: 《SMPL: A skinned multi-person linear model》…

SMPL模型进阶

SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法,该方法可以进行任意的人体建模和动画驱动。这种方法与传统的LBS的最大的不同在于其提出的人体姿态影像体表形貌的方法,这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。…

SMPL源代码实现和模型解读

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

SMPL简析

SMPL模型是一种参数化人体模型,是马普所提出的一种人体建模方法。这种方法可以模拟人的肌肉在肢体运动过程中的凸起和凹陷。因此可以避免人体在运动过程中的表面失真,可以精准的刻画人的肌肉拉伸以及收缩运动的形貌。 该模型可以通过身体形状参数和姿势参…

SMPL学习笔记

文章目录 前言一、SMPL概述1.形状参数( β \beta β)2.姿态参数( θ \theta θ) 二、体姿转换过程原理1.基于形状的混合成形(Shape Blend Shapes)2.基于姿态的混合成形 (Pose Blend Shapes)3.蒙皮 (Skinning) 三、具体过程分析1.基于形状的混合成形2.基于姿态的混合成形3.骨骼点…

Java的生产者消费者模型

前言 学完了线程后,我又去找了一些线程相关的练习题来练手,其中印象最深的就是生产者消费者模型这一块,为什么呢,因为它每一篇练习题里都有,开始没看懂,后面就去仔细研究了一下,哦,…

多线程之生产者消费者模型

生产者消费者模型 1.为什么要使用生产者和消费者模式2.案例 1.为什么要使用生产者和消费者模式 在线程开发中,生产者就是生产线程的线程,消费者就是消费线程的线程。在多线程开发中,如果生产者如理数据很快,消费者处理数据很慢&am…

生产者消费者模型(多线程工作)

目录 1.模型前提 2.阻塞队列(消费场所) 3. 实验 4.有关效率 1.模型前提 以单生产者对单消费者为例子: 前提一:有一个缓冲区作为消费场所。 前提二:有两种功能不同的线程分别具有消费与生产的能力。 前提三&…

生产者消费者模型的实现(线程通信)

✅作者简介:我是18shou,一名即将秋招的java实习生 🔥系列专栏:牛客刷题专栏 📃推荐一款模拟面试、刷题神器👉 [在线刷题面经模拟面试](在线面试刷题) 目录 实现一: 实现二: 实现一…

生产者消费者模型【新版】

目录 啥是生产者消费者模型? 生产者消费者模型存在问题??如何进行解决呢?? 生产者消费者模型导致的问题 什么是阻塞队列 生产者消费者模型优点 生产者消费者模型实现 Message MessageQueue 获取消息get方法 生产消息take方法 测试生产者消费者模型 啥是生产者消…

【Linux】生产者消费者模型

文章目录 一. 什么是生产者消费者模型1. 基本概念2. 三种关系3. 再次理解生产者消费者模型 二. 生产者消费者模型的优点三. 基于BlockingQueue的生产者消费者模型1. 准备工作2. 阻塞队列实现3. 测试阻塞队列4. 阻塞队列完整代码5. 关于改进阻塞队列的几点补充5.1 多生产者多消费…

生产者与消费者模型

1、【什么是生产者与消费者模型呢?】 一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点&…

生产者消费者模型——C语言代码详解

概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据…