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

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()

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值