承接之前的博文:
A 2020 Human Pose Estimation Review (Part1:2D Single Person)
A 2020 Human Pose Estimation Review (Part2:2D Top-Down Multi-Person Pose Estimation)
A 2020 Human Pose Estimation Review (Part3:2D Bottom-Up Multi-Person Pose Estimation)
A 2020 Human Pose Estimation Review (Part4:3D Human Pose Estimation from Image)
目录
1 Human Pose Estimation
2 2D Single-Person Pose Estimation
3 2D Top-Down Multi-Person Pose Estimation
4 2D Bottom-Up Multi-Person Pose Estimation
5 3D Human Pose Estimation from Image
6 3D Human Pose Estimation from Video
6.1 3D Human Pose Estimation from Video
6.2 3D human pose estimation in video with temporal convolutions and semi-supervised
training, CVPR2019
6.3 Exploiting temporal information for 3d pose estimation, ECCV2018
6.4 VIBE: Video Inference for Human Body Pose and Shape Estimation, CVPR2020
6.5 Exploiting Spatial-temporal Relationships for 3D Pose Estimation via Graph
Convolutional Networks, ICCV2019
6.6 Motion Guided 3D Pose Estimation from Videos, Arxiv2020
6.7 XNect: Real-time Multi-Person 3D Motion Capture with a Single RGB Camera
6.8 3D Human Pose Estimation from Video小结
相比较于基于image的方法,基于video的方法可以为我们提供更多的时间、空间信息。现有的方法主要包括利用RNN或LSTM以及利用时域卷积来获取序列信息。在基于video的方法中,关节点轨迹、注意力机制也有很多应用。
文章的整体思路也是lifting,主要有三个关键点:一是提出了一种时域空洞卷积模型,可以利用时间信息更加准确地预测3D姿态;另一个是使用reprojection进行3D到2D地投影,以此来对只有2D标注地图像进行半监督学习;还有一个是预测了root joint的轨迹,作为弱监督,并引入了骨骼长度的软约束。
先看时域空洞卷积模型,网络结构是比较简单的,以图片为例,输入是243帧图片的2D坐标,因为有17个关节点,所以一张图片有34个坐标值(x,y),所以输入可以看成是243个34维的向量,由此可以使用1D卷积进行处理,减少了参数量。应用大小为W的卷积层来输出C个特征, 然后应用B个残差网络风格的残差块,来形成一个skip-connection。每个残差块执行过滤器大小为W的空洞因子为D=W^B的1D卷积操作,然后是线性映射,接下来是BN,ReLU和dropout。卷积核超参数的设置W、D使得对于任何输出帧的感受野形成一种树状,能够覆盖所有的输入帧。卷积核填充采用不填充或是临近帧填充,以避免边际效应。在上面的结构图中,采用的是不填充,因此在skip-connection,需要额外做slice保证尺寸和卷积之后的一致。最后一个输出包含所有输入序列的一个3D姿态,同时考虑了过去和未来的时间信息。
文章提出了一种半监督学习的方法,核心想法是,将2D到3D的预测作为编码器,然后再把3D姿态反向映射回2D姿态,并与一开始的2D姿态做loss的计算。
一共分为两个分支,上半部分是有监督学习,一个batch的一半是带2D和3D标注的视频,预测出3D姿态以及各个关节点的轨迹,然后与gt做loss的计算。下半部分是半监督学习,采用不带有任何标注的视频,先使用2D姿态估计器预测出2D的姿态,然后利用这个2D姿态预测3D姿态以及根关节点轨迹,然后利用3D姿态和轨迹反向映射成2D姿态,之后再计算这个反向映射的2D姿态与一开始的2D姿态的loss。这里反向映射是直接用的Human3.6M给的相机参数,使用root joint的轨迹是为了避免映射回2D时,图像都被映射到中央,可以把root joint看作是给了图像圆点的偏移量。
上下两个分支之间是有这个loss作为纽带的,作者的想法是,单单利用下半支的3D姿态做反向映射可能是不够完善的,因此在一个batch中,先去计算有标签的数据的平均骨骼长度,然后将其与没有标签数据预测出的3D姿态做loss,作为软约束,以此来使得预测出的3D姿态更加准确。最后单帧预测的MPJPE达到了51.8mm,如果采用243帧的模型,可以达到47.1mm的误差。
采用LSTM处理视频信息的文章,网络结构不复杂,将多帧的2D姿态输入到编码器,然后解码器输出预测的3D姿态。解码器采用了skip-connection,目的是使得网络去学习不同时刻3D姿态之间的差异,这比直接预测每一帧的3D姿态更容易。
Loss由两个部分组成,第一部分是所有时刻预测的3D pose与gt的L2 Loss。
第二部分是每个时刻的3D pose的导数的L2范数,作者认为,因为视频帧数很高,所以相邻时刻的姿态变化是非常小的,因此这个loss的加入并不会对性能影响很大,同时它也可以作为一种限制,使得网络的输出更加平滑。作者在这里把不同关节点归入不同类别,把简单关节点和困难关节点分开,设置不同的超参数,使得网络可以更加专注于困难关节点的预测。
最后在Human3.6M上跑出了51.9mm的MPJPE(不用GT),然而有人去用他们给的代码只跑出了58.9mm的MPJPE。
VIBE是这篇文章Human mesh recovery from monocular images via a skeleton-disentangled representation, ICCV2019的改进。作者认为现有的in-the-wild的3D pose预测性能不足主要是数据集不足引起的,因此作者采用了大规模的运动捕捉数据集AMASS以及不成对的in-the-wild的2D标注,结合对抗生成的方法,训练一个时域模型,来预测SMPL格式的参数。SMPL是一种人体模型表示方法,包括pose和shape参数,用它来作为视频序列的输出,视觉上更好,具体可见:A Skinned Multi-Person Linear Model, ACM2015。
整个结构比较直观,输入是视频序列,对于每一帧采用CNN进行特征提取,然后使用双向GRU进行编码,输出隐藏元来回归这个视频序列的SMPL参数。这些SMPL参数和来自数据集的真实3D姿态的SMPL参数一起送入判别器,判别器来判别是否是真实的3D姿态的SMPL参数。
在判别器部分,引入了自注意力机制,Self-attention是接在鉴别器GRU层的后面,将GRU的输出通过一个可训练的FC层得到score并与该输出相乘。这篇文章这里只是作为综述写一下核心方法,后续还会写一个精读笔记。
采用时空图卷积来处理时间、空间信息。网络整体结构如图,先使用预训练的CPN进行2D pose的预测,然后将其送入时空图卷积网络。时空图卷积在时间上,将每个关节与其相邻帧中的对应关节连接起来;在空间上,将每个帧中有直接和间接运动学上依赖关系(相邻,对称)的关节点连接起来。并将关节点分为六个类,针对不同的节点类使用不同的卷积核进行训练。
来重点看其中的时空图卷积网络,这里贴一张别人的图,这张图画的很清楚了。这里采用了U-Net的结构,包含两个图池化和图上采样,使得网络可以提取不同层次的特征,最后输出T个时刻的3D pose,这些3D pose还会再过一个refinement进行调整得到更精确的3D pose结果。
最后使用T=7时,在Human3.6M上跑到了48.8mm的MPJPE,单帧也达到了50.6mm的误差。
今年四月的文章,主要有两个点,一个是设计了motion loss,另一个是设计了U-shaped GCN。整个网络以video作为输入,使用2D姿态估计器预测2D pose,并采用图模型来表示。然后经过UGCN模块得到3D pose。
Loss包含两个部分,一个是3D pose与gt的L2 loss,另一个就是作者自己设计的motion loss。这个m相当于是对不同时刻的3D pose进行一种编码,星号代表编码方式,作者说这里可以用any dierentiable binary vector operator, such as subsection, inner-product and cross-prodcut。
最后的loss就是两个loss结合起来,对于motion loss,设置超参数来调整其影响大小。最后在Human3.6M上跑到了42.6mm的MPJPE,非常高,达到了SOTA,并且没有用gt。
是VNect的改进版,作者也是同一批人。工作面对的人多人的3D pose问题,网络分为三个stage。第一阶段是CNN,用于估计2D和3Dpose的特征。作者设计了一种新的架构,称为SelecSLS Net,这种架构可以选择性采用长距离和短距离skip-connection来改善信息流,在不影响准确性的情况下大大加快网络速度。第二阶段根据每个人的2D姿态和3D特征,预测出每个人体的3D pose。第三阶段则是根据2D和3D pose,采用时空骨骼模型来拟合,进一步优化姿态的预测,使得预测的姿态更加平滑。
在这一章节中,我更多的是去描述每篇文章的核心方法,对于这些方法的细节,描述的不是很详细,后面考虑对这些文章另外写精读笔记,以供有需要的人使用。在这些文章中,我们也可以看到很多比较成熟的方法。
基于video的3D pose预测,核心在于如何去利用时空信息,一种方法是RNN(LSTM)建模不同帧的信息,另一种是使用卷积去建模,我个人觉得这两种方法没有好坏之分。此外,对于video的情况,图模型或者人体动力学模型是非常重要的,它们是把不同帧之间的关节点信息连结在一起的纽带,有了他们,我们对于序列的建模才可以更加充分的构建出时间、空间上的变化。
我个人觉得,基于video的工作还有很大的挖掘点,现在各种各样新颖的网络结构还在不断涌现,尤其是针对多人的3D video预测,现有的工作还比较少,思路也比较单一,可以作为一个研究方向。