本文以开源项目VIBE
[1-2]为例,介绍下采用深度学习和SMPL
模板的从图片进行三维人体重建算法的整体流程。如有错误,欢迎评论指正。
一.算法流程
包含生成器模块和判别器模块,核心贡献就在于引入了GRU
模块,使得当前帧包含了先前帧的先验信息,从而动作更加连贯和合理(VIBE
的思路其实还是很清晰的,几张图足以概况,更多的还是在于工程实现,感兴趣的话还是得去看下源码)。
注: 这里是整个训练流程,训练结束后会拿掉判别器的部分,只需要生成器部分进行推理。
二.具体步骤
数据集
- MPI-INF-3DHP: 8个个体,每个个体16个视频序列,大多为室内环境采集,包含3d关节点,SMPL参数
- Human3.6M: 使用了7个个体,每个个体15个动作序列,受控环境下采集,包含3d关节点,SMPL参数
- 3DPW: 60个视频序列,室内室外均有,包含3d关节点,SMPL参数
- PennAction: 2326个视频序列,15种不同的动作,包含2d关节点及其置信度,2d包围盒
- Insta Variety: 共计长达24个小时的视频序列,Instagram上收集得到,利用openpose生成伪2d关节点
- PoseTrack: 1337个视频序列,包含2d关节点
- Kinetics-400: 具体信息不清,利用openpose生成伪2d关节点
- AMASS: 300个个体,11000个动作种类,共计40小时的视频,包含SMPL参数
网络结构
1) 生成器模块
输入图片序列,输出SMPL系数和相机参数。
2) 判别器模块
输入SMPL系数,输出动作的合理概率。
注:以上两张图还是挺好理解的,可参考GRU[4],对抗学习[6],自注意力模型[5]进行理解。
- 输入
图片序列。
注:基于单张图片进行SMPL重建的模型最大的问题在于忽视了帧间的联系,若采用这种模型应用于视频序列,其中存在的一个问题就是人体会很抖动。
- 输出
SMPL系数(全局姿态: 3, 关节点节点姿态: 23*3,形状系数: 10),相机参数(尺度: 1,平移: 2)
注:指推理阶段的输出,也就是生成器的输出
损失函数
1)生成器损失
式2)、式3)含义自明;
式4)中,对于形状系数 β ^ \hat{\beta} β^,是通过对每一帧的 β t \beta_t βt做average pooling得到的;
式5)中, Θ ^ = { θ ^ 1 , . . . , θ ^ , β ^ } \hat\Theta=\{\hat\theta_1,...,\hat\theta,\hat\beta\} Θ^={θ^1,...,θ^,β^}, D M \mathcal{D}_M DM表示判别器,输出的是动作的合理概率。
2)判别器损失
式6)中, Θ \Theta Θ为来自AMASS的SMPL模型的GT系数。
三.实现
注:1)目前的开源实现[2]在训练阶段,生成器开始利用CNN提取特征和最后利用回归器生成SMPL参数的步骤,是单独利用已训练好的SPIN模型实现的,而不是联合GRU模块一起训练的,训练流程如下所示(感觉一起训练的话效果应该会更好)
2)推理流程为
四.其它
除了VIBE之外,后续有一篇改进的论文TCMR[8]。简单看了下主要是对网络结构进行了改动,但重建效果要比VIBE平滑很多,代码也开源了[9],感兴趣的读者可以自行研究下。
五.参考
[1]VIBE: Video Inference for Human Body Pose and Shape Estimation
[2][GitHub - mkocabas/VIBE: Official implementation of CVPR2020 paper "VIBE: Video Inference for Human Body Pose and Shape Estimation"](https://github.com/mkocabas/VIBE)
[3][Guided lecture: VIBE: Video Inference for Human Body Pose and Shape Estimation](https://www.youtube.com/watch?v=hErK0MamTY4&list=TLPQMTIwMjIwMjLEOfLIHvqppA&index=2)
[4][阿力阿哩哩:通熟易懂RNN|RNN与RNN的变种结构 | 上](https://zhuanlan.zhihu.com/p/105383343)
[5][soccer:Attention注意力机制与self-attention自注意力机制](https://zhuanlan.zhihu.com/p/265108616?utm_source=qq)
[6][一文读懂对抗生成学习(Generative Adversarial Nets)[GAN]](https://www.cnblogs.com/Mang0/p/10129284.html)
[7][CVPR2020论文解读 | VIBE:Video Inference for Human Shape](https://cloud.tencent.com/developer/article/1645354)
[8]Beyond Static Features for Temporally Consistent 3D Human Pose and Shape from a Video
[9][GitHub - hongsukchoi/TCMR_RELEASE: Official Pytorch implementation of "Beyond Static Features for Temporally Consistent 3D Human Pose and Shape from a Video", CVPR 2021](https://github.com/hongsukchoi/TCMR_RELEASE)
[10][python中logging日志模块详解 - 咸鱼也是有梦想的 - 博客园](https://www.cnblogs.com/xianyulouie/p/11041777.html)
[11][十指透兮的阳光:yacs的使用小记](https://zhuanlan.zhihu.com/p/366289700)
[12][GitHub - mkocabas/multi-person-tracker: Simple Multi Person Tracker implementation in PyTorch](https://github.com/mkocabas/multi-person-tracker)