3D人体姿态与形态估计CVPR 2020的一篇论文笔记,VIBE: Video Inference for Human Body Pose and Shape Estimation(CVPR 2020)
Paper:https://arxiv.org/pdf/1912.05656.pdf
Code:https://github.com/mkocabas/VIBE
动机
问题
- 缺乏带标注的3D人体姿态和形态估计的数据集
- 现有的方法不够完善
- 无法捕获到人类实际运动的复杂性和可变性以及准确而又自然的运动序列
- 预测的形态不够逼真,在运动学上也不够合理
解决方案
- 利用大型动作捕捉数据集(AMASS[2])来训练基于视频的人体姿态和形态的GAN模型
贡献
- 改进了回归器model-based fitting-in-the-loop的训练方法,并应用到视频上
- 使用了AMASS数据集来进行对抗训练,来使回归器产生更加逼真与合理的人体形态
- 通过定量实验比较了3D人体形态估计方法的不同temporal结构
- 通过使用运动捕捉数据的大型数据集来训练鉴别器,实现了SOTA的性能
相关工作
有一篇做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。
3D人体的表示
时间编码器
- 输入:图片序列
- 输出:SMPL的82个参数序列
- CNN层,GRU层,回归层
运动鉴别器
- 输入:生成器的输出序列,82个SMPL的输入参数。AMASS数据集
- 输出:0或1
- GRU层,self-attention
自注意力机制
Self-attention是接在鉴别器GRU层的后面,将GRU的输出通过一个可训练的FC层得到score并与该输出相乘。
Motion Prior (MPoser)
该模块是拿来代替motion discriminator来做消融实验的,来显示提出的算法优越性。原方法是叫VPoser[5],这篇文章把它扩展成可以解决序列问题。
Loss
网络结构
- CNN编码器: ResNet-50
- Temporal编码器: 2层GRU
- SMPL回归层: 2层FC
- Motion鉴别器: 2层GRU + 2层FC的self-attention
实验
数据集
- 训练
- Human3.6M: 室内
- MPI-INF-3DHP: 室外
- AMSS: 用来对抗训练
- 测试
- Human3.6M: 室内
- MPI-INF-3DHP: 室外
- 3DPW: 用来做消融实验并显示模型在室外数据集的泛化能力
评价指标
由于用了3个数据集,又是Pose又是Mesh的,所以用的评价指标也比较多吧。
- Mean Per Joint Position Error (MPJPE): Protocol 1,关节点坐标误差的平均值
- 网络输出的关节点坐标与ground truth的平均欧式距离(通常转换到相机坐标)
- Procrustes analysis MPJPE (P-MPJPE): Protocol 2,基于Procrustes分析的关节点坐标误差的平均值
- 先对网络输出进行刚性变换(平移,旋转和缩放)向ground truth对齐后,再计算MPJPE
- Percentage of Correct Key-points (PCK),正确关键点的百分比
- 如果预测关节与ground truth之间的距离在特定阈值内,则检测到的关节被认为是正确的
- Per Vertex Error (PVE),顶点误差
- SMPL的Vertex为6890×3,计算其与ground truth之间的距离
- Acceleration error,加速度误差
- 预测的3D坐标与ground truth的加速度平均差 (mm/s2),用来衡量平滑性,在论文[6]中提出
- 加速度误差计算代码如下,来源于human_dynamics
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)
与SOTA方法的对比
消融实验
- Motion discriminator
- Self-attetion的FC层数与隐藏单元个数
结论
- 引入了循环网络架构来处理序列问题
- 使用AMASS数据集来进行对抗训练
- 在鉴别器中引入了自注意力机制
- 从AMASS中学习了一个新颖的human sequence prior (MPoser) ,并显示了它不如鉴别器更有效
- 通过消融实验评估了每个模块与参数选择对性能的影响
未来工作
- 探索使用视频来监督单帧的方法
- 探索dense motion cues(如光流)是否可以提供更多信息
- 解决多人问题
- 解决遮挡问题
- 尝试使用其他注意力架构(如transformers)
代码运行
我用的Ubuntu16,但是OpenGL报错,无法得到渲染后的视频输出。好像是Ubuntu18可以运行,16不行?见VIBE_issuses47(https://github.com/mkocabas/VIBE/issues/47)。
参考文献
- Kocabas M, et al. VIBE: Video Inference for Human Body Pose and Shape Estimation, CVPR 2020.
- Mahmood N, et al. AMASS: Archive of motion capture as surface shapes, ICCV 2019.
- Wandt B, et al. Repnet: Weakly supervised training of an adversarial reprojection network for 3d human pose estimation, CVPR 2019.
- Kanazawa A, et al. End-to-end recovery of human shape and pose, CVPR 2018.
- Pavlakos G, et al. Expressive body capture: 3d hands, face, and body from a single image, CVPR 2019.
- Kanazawa A, et al. Learning 3d human dynamics from video, CVPR 2019.
作者:知乎—Vegetabird
地址:https://www.zhihu.com/people/vegetebird