赞
踩
https://zhuanlan.zhihu.com/p/136080490
3D人体姿态与形态估计CVPR 2020的一篇论文笔记,VIBE: Video Inference for Human Body Pose and Shape Estimation(CVPR 2020)[Paper][Code]
有一篇做3D姿态估计的论文[3] (CVPR 2019)也用到了对抗训练。这篇文章虽然使用了3D-ground truth来训练,但是没用2D-3D对来训练网络,所以是弱监督的。由于使用了未配对的数据,GAN的输出是比较杂乱的,所以将它投影到2D平面来保证输出的3D pose相对比较准确。这里,他们都使用了对抗训练,有一个好处就是泛化能力强,可以in the wild,在另外一个域进行测试也能有较好的性能。
还有一篇3D Pose and Shape的论文HMR[4] (CVPR 2018),VIBE的预训练模型就是用的他的。这项工作从单张RGB图片重建人体的mesh,而且是end-to-end的,不需要经过2D pose进行过渡。由于使用了个Discriminator,也不需要2D-3D数据对。VIBE这篇论文是这项工作的扩展,将图片扩展到了视频。从两者的总体框图可以看出,VIBE多了GRU,还有一个motion discriminator,同时还使用AMASS数据集进行对抗训练。
方法其实很简单,基本上看图就能明白。首先通过Resnet50提取图片的空间特征,然后经过GRU处理序列,学习它的时间特征。再通过回归层得到82个SMPL参数,将这些序列参数计算对抗损失,其中motion discriminator包含GRU并引入了自注意力机制。并通过SMPL的mesh vertices得到3D关节坐标,投影得到2D坐标,并分别计算Loss。
Self-attention是接在鉴别器GRU层的后面,将GRU的输出通过一个可训练的FC层得到score并与该输出相乘。
该模块是拿来代替motion discriminator来做消融实验的,来显示提出的算法优越性。原方法是叫VPoser[5],这篇文章把它扩展成可以解决序列问题。
论文中的公式没把权重写出来,在补充材料提到了
。这参数设置不在同个量级?
由于用了3个数据集,又是Pose又是Mesh的,所以用的评价指标也比较多吧。
- def compute_accel(joints):
- """
- Computes acceleration of 3D joints.
- Args:
- joints (Nx25x3).
- Returns:
- Accelerations (N-2).
- """
- velocities = joints[1:] - joints[:-1]
- acceleration = velocities[1:] - velocities[:-1]
- acceleration_normed = np.linalg.norm(acceleration, axis=2)
- return np.mean(acceleration_normed, axis=1)
我用的Ubuntu16,但是OpenGL报错,无法得到渲染后的视频输出。好像是Ubuntu18可以运行,16不行?见VIBE_issuses47。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。