Human Pose Estimation姿态估计调研

介绍

姿态估计的目标是在RGB图像或视频中描绘出人体的形状,这是一种多方面任务,其中包含了目标检测、姿态估计、分割等等。有些需要在非水平表面进行定位的应用可能也会用到姿态估计,例如图形、增强现实或者人机交互。姿态估计同样包含许多基于3D物体的辨认。给定一幅图像或一段视频,人体姿态估计就是去恢复其中人体关节点位置的过程。

方法

 多人姿态跟踪方法,其主要方法和多人姿态检测一样,也可以分为自顶向下和自下而上。

       1.自顶向下是:在每帧中   检测 人的proposals →关键点→相邻帧相似性 跟踪整个视频;

       2.自下而上是:在每帧中   生成  关键点候选点→时空图→求解整数线性规划将时空图分为子图→每个子图对应人体姿势轨迹。

      目前,自顶向下的方法在精度(map和mota)和跟踪速度上都大大优于自下而上的方法,因为自下而上的方法由于仅仅利用二阶身体部件依赖而失去了全局姿态视图,这直接导致了对关键点的模糊分配。

Top-down的框架是先检测人,人抠出来之后,再去做姿态估计。所以有必要对person detection(行人监测器)做一定的分析。首先解释一下非最大值抑制。现在有两种主流的方式:软非最大值抑制(Soft NMS)和硬非最大值抑制(Hard NMS),软非最大值抑制是对所有的候选框去做重新的估分,对比较差的框保留但会抑制分数。硬非最大值抑制就是将IOU超过阈值之后的分数比较差的那些框过滤掉。所以两种方式最终实现的结果是Hard NMS保留的框比较少,而Soft NMS对框的分数做了一个修改,保留了较高的召回率(recall)。

六种姿态估计的方法及代码汇总

https://modelzoo.co/blog/deep-learning-models-and-code-for-pose-estimation

DensePose

六种人体姿态估计的深度学习模型和代码总结

创作这篇文章的初衷就来源于Facebook研究所的DensePose,上周,Facebook公布了这一框架的代码、模型和数据集,同时发布了DensePose-COCO,这是一个为了估计人类姿态的大型真实数据集,其中包括了对5万张COCO图像手动标注的由图像到表面的对应。这对深度学习研究者来说是非常详细的资源,它对姿态估计、身体部位分割等任务提供了良好的数据源。

DensePose的论文中提出了DensePose-RCNN,这是Mask-RCNN的一种变体,可以以每秒多帧的速度在每个人体区域内密集地回归特定部位的UV坐标。它基于一种能将图像像素通过卷积网络映射到密集网格的系统——DenseReg。模型的目标是决定每个像素在表面的位置以及它所在部分相对应的2D参数。

DensePose借用了Mask-RCNN的架构,同时带有Feature Pyramid Network(FPN)的特征,以及ROI-Align池化。除此之外,他们在ROI池化的顶层搭建了一个全卷积网络。想了解DensePose更多的技术细节,请阅读原论文。

论文地址:arxiv.org/abs/1802.00434

GitHub地址:github.com/facebookresearch/Densepose

数据集地址:github.com/facebookresearch/DensePose/blob/master/INSTALL.md#fetch-densepose-data

OpenPose

六种人体姿态估计的深度学习模型和代码总结

OpenPose是由卡内基梅隆大学认知计算研究室提出的一种对多人身体、面部和手部形态进行实时估计的框架。

OpenPose同时提供2D和3D的多人关键点检测,同时还有针对估计具体区域参数的校准工具箱。OpenPose可接受的输入有很多种,可以是图片、视频、网络摄像头等。同样,它的输出也是多种多样,可以是PNG、JPG、AVI,也可以是JSON、XML和YML。输入和输出的参数同样可以针对不同需要进行调整。

OpenPose提供C++API,以及可以在CPU和GPU上工作(包括可与AMD显卡兼容的版本)。

GitHub地址:github.com/CMU-Perceptual-Computing-Lab/openpose

数据集地址:domedb.perception.cs.cmu.edu/

Realtime Multi-Person Pose Estimation

六种人体姿态估计的深度学习模型和代码总结

这一模型和上面的OpenPose高度相关,同时特征模型能与多种框架相关联。论文的作者提供了一种自下而上的方法,对多人的姿态进行实时估计,不需要用任何人物探测器。

这种方法运用了一种非参数表示,我们称为Part Affinity Fields(PAFs),用它可以学习将图中人物和其身体部位联系到一起。有关该技术的具体细节和理论,可以阅读原文。

另外,这一方法最棒的特征之一就是它可以在多种不同的框架中实现,针对不同框架,已经公开了相关代码和模型:

论文地址:arxiv.org/abs/1611.08050

GitHub地址:github.com/ZheC/Realtime_Multi-Person_Pose_Estimation

AlphaPose

六种人体姿态估计的深度学习模型和代码总结

AlphaPose是一款精准的多人姿态评估工具,并声称是第一款开源系统。AlphaPose既可以在图片、视频或多图中进行姿态估计,也能在画面中对动作进行追踪。它的输出形式非常广泛,包括PNG、JPG和AVI等具有关键点的图片形式,也有JSON格式的输出,这一特点也使其成为众多应用受欢迎的工具。

六种人体姿态估计的深度学习模型和代码总结

目前,这一工具支持TensorFlow和PyTorch两种实现。AlphaPose利用一种区域性的多人动作估计框架将不精准的人类边界框该进程精确的动作估计。这里有三种元素:对称空间转换网络(SSTN)、参数化姿态非极大抑制(NMS)以及姿态导向的生成器(PGPG)。更多技术细节请查看原论文。

论文地址:arxiv.org/abs/1612.00137

GitHub地址:github.com/MVIG-SJTU/AlphaPose

Human Body Pose Estimation

六种人体姿态估计的深度学习模型和代码总结

该模型利用MPII人类姿势数据集进行训练,这是一个内容十分丰富的数据集,专门针对人类姿态估计。目前只有TensorFlow的实现。

这项研究将人类姿态估计的任务应用到真实的图片中,他们的方法既解决了动作识别,也能进行估计,与之前先检测人类动作在对此进行推测的技术有所区分。在实施过程中用到了基于CNN的探测器和整数线性规划法。

ArtTracker论文:arxiv.org/abs/1612.01465

DeeperCut论文:arxiv.org/abs/1605.03170

网站地址:pose.mpi-inf.mpg.de/

GitHub地址:github.com/eldar/pose-tensorflow

DeepPose

六种人体姿态估计的深度学习模型和代码总结

相比于前面几种方法来说,DeepPose算是比较“古老”的了,论文发布与2014年,提出了一种基于深度神经网络的姿态估计方法,是基于DNN向身体关节回归的问题。它以一种整体的方式估计姿态,并且表述起来非常简洁强大。

随着 DeepPose 工作的提出,人们把姿态估计的目光从一些传统方法转向了深度网络。 DeepPose 是直接对人体的关节点的坐标 x,y 进行回归。

目前网上还没有官方实现过程。但是有人做出了复现结果:

DeepPose是第一个将深度学习应用到人类姿态估计上的应用,并且取得了当时顶尖的结果,成为了其他方法的baseline。

论文地址:static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/42237.pdf

 

数据集


LSP 
地址:http://sam.johnson.io/research/lsp.htm 
样本数:2K 
关节点个数:14 
全身,单人

FLIC 
地址:https://bensapp.github.io/flic-dataset.html 
样本数:2W 
关节点个数:9 
全身,单人

MPII 
地址:http://human-pose.mpi-inf.mpg.de/ 
样本数:25K 
关节点个数:16 
全身,单人/多人,40K people,410 human activities

MSCOCO 
地址:http://cocodataset.org/#download 
样本数:>=30W 
关节点个数:18 
全身,多人,keypoints on 10W people

AI Challenge 
地址:https://challenger.ai/competition/keypoint/subject 
样本数:21W Training, 3W Validation, 3W Testing 
关节点个数:14 
全身,多人,38W people

PoseTrack 
地址:https://posetrack.net/ 
来源:CVPR2018 
关键数据:>500 video sequences,>20K frames, >150K body pose annotations
 

评价标准


主要评价标准包括以下两种,PCK的评价标准多出现在单人的姿态估计上,多人的姿态估计评价标准基本上为mAP,比赛和学术论文中mAP成为衡量结果的必须指标。

PCK 


Percentage of Correct Keypoints (PCK),reports the percentage of keypoint detection falling within a normalized distance of the ground truth. 
For FLIC, distance is normalized by torso size, and for MPII, by a fraction of the head size (referred to as PCKh).

mAP 


人体骨骼关键点的评价指标类比通用的物体检测评价方式,将最终的mAP(mean Average Precision)值作为评价依据。物体检测任务中使用IoU(Intersection over Union)来评价预测与真实标注之间的差异,在人体骨骼关键点检测任务中,我们使用OKS(Object Keypoint Similarity)代替IoU,对选手预测的人体骨骼关键点位置与真实标注之间的相似性进行打分。
 

面临的挑战和难点

  1. 人体的肢体运动比较灵活

  2. 视角的变化

  3. 衣着的变化

基于CNN得单人姿态估计方法


2015年之前都是直接回归出关节的坐标(Deep pose),效果并不理想。其主要原因有两方面:一方面是人体运动比较灵活,另一方面,回归模型的可扩展性较差,比较难于扩展到不定量的人体姿态识别问题中。因此,目前大家普遍使用的过渡处理方法是将其看作检测问题,从而获得一张热点图谱。

[1] Convolutional Pose Machines CVPR 2016

源码:https://github.com/shihenw/convolutional-pose-machines-release“>github

COCO2016 Keypoints Challenge的冠军

2016 年提出的 CPM 方法具有很强的鲁棒性,CPM 的贡献在于使用顺序化的卷积架构来表达空间信息和纹理信息。算法在每一个尺度下,计算各个部件的响应图,对于每个部件,累加所有尺度的响应图,得到总响应图,在每个部件的总响应图上,找出相应最大的点,为该部件位置。作者用各部件响应图来表达各部件之间的空间约束,模型能有效解决遮挡问题。

[2] Stacked Hourglass Networks for Human Pose Estimation

论文解读:姿态估计Hourglass 网络

源码:https://github.com/umich-vl/pose-hg-train“>github

16,17年之后出现的大多单人姿态估计算法都是基于这个模型结构进行改进。MPII2016冠军。

一种沙漏型的网络结构,首先进行卷积处理,并进行下采样操作,获得一些分辨率较低的特征,从而使计算复杂度降低。为了使图像特征的分辨率上升,紧接着进行上采样。上采样操作使得图像的分辨率增高,同时更有能力预测物体的准确位置。通过这样一种处理,相较于其他网络,该网络结构能够使同一个神经元感知更多的上下文信息。

作者提到在12 GB NVIDIA TitanX GPU 训练用时3天,每一幅图片前向运算用时75ms,每一副图片测试用时130ms,比CPM方法有显著优势。

[3] Learning Feature Pyramids for Human Pose Estimation ICCV2017

源码:基于CNN的多人姿态估计方法

多人估计方法一般分为两大类,即Top-down和Bottom-up,其中Top-down是指先把人框出来,然后再用单人的方法去定位人的关节,而Bottom-up的方法是先把所有关节位置弄出来,然后再区分关节属于谁。前者运算时间会随着图像中人的个数而显著增加,Bottom-up所需计算时间基本不变。

Top-down
[1] G-RMI Towards accurate multi-person pose estimation in the wild (CVPR 2017 Google)

论文采用top-down的结构,分为两个阶段: 第一阶段使用faster rcnn做detection,检测出图片中的多个人,并对bounding box进行image crop; 第二阶段采用fully convolutional resnet对每一个bonding box中的人物预测dense heatmap和offset;最后通过heatmap和offset的融合得到关键点的精确定位。
[2] MASK-RCNN (ICCV 2017, Facebook,Kaiming He)

2017年何凯明的Mask R-CNN,Mask R-CNN 是用于目标检测分割的框架,即对一张图片,既输出图片中已有的目标,还能为每一个实例生成一个高质量的分割掩码。mask RCNN是在 faster R-CNN 的基础上,在每一个 RoI 都增加一个预测分割的mask,这和分类以及 bounding box 回归是并行的一条分支。它的训练简单,仅仅比 faster RCNN多一点计算开销。它易于泛化到多个任务上,例如人体姿态估计。应用到pose estimation,将分割系统中的目标改为K个one-hot,m*m的二进制mask。

准确率比COCO 2016 冠军高0.9个点,速度达到5 FPS。

[3] RMPE: Regional Multi-Person Pose Estimation (ICCV 2017)

源码:github

AlphaPose:上海交大卢策吾团队和腾讯优图工作,COCO2017 Keypoints Challenge亚军。

论文主要考虑的是top-down的关键点检测算法在目标检测产生Proposals的过程中,可能会出现检测框定位误差、对同一个物体重复检测等问题。检测框定位误差,会出现裁剪出来的区域没有包含整个人活着目标人体在框内的比例较小,造成接下来的单人人体骨骼关键点检测错误;对同一个物体重复检测,虽然目标人体是一样的,但是由于裁剪区域的差异可能会造成对同一个人会生成不同的关键点定位结果。本文提出了一种方法来解决目标检测产生的Proposals所存在的问题,即通过空间变换网络(STN)将同一个人体的产生的不同裁剪区域(Proposals)都变换到一个较好的结果,如人体在裁剪区域的正中央,这样就不会产生对于一个人体的产生的不同Proposals有不同关键点检测效果。检测使用的是SSD-512,识别人体姿态使用的是Stacked Hourglass方法。

网站挂出来的在各个数据集的评测结果比论文好很多,应该是后来调整的。已经开源了,不过速度只有5fps,实时的版本还没有出来。

[4] Cascaded Pyramid Network for Multi-Person Pose Estimation

源码: github

讲解:旷视研究员解析

旷视提出来CPN模型,COCO2017 Keypoints Challenge的冠军,目前COCO榜单也是最好的。

先生成人体边界框,利用mask-rcnn的detection结构检测人体(FPN+ROIAlign),之后通过CPN实现关键点检测。有效的级联金字塔网络CPN包括GlobalNet和RefineNet两部分。GlobalNet是特征金字塔网络,可以定位简单的关键点,如眼睛和手,虽然无法识别被遮挡的关键点,但是可以提供上下文信息,用于推断被遮挡的关键点。RefineNet通过整合GlobalNet所有级别的特征来处理比较难识别的关键点。

该网络以ResNet50作为骨架网络在8卡Titan上要训练1.5天。利用ResNet-Inception作为骨架网络,在COCO test-dev数据集上取得了极好的效果,远超OpenPose和Mask-RCNN。文章没有提到速度,想必速度没有5fps。(MASK RCNN直接进行人体姿态估计5fps)。

Bottom-up
[1] open-Pose:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields (CVPR 2017 Oral, CMU)

源码:github

Part Affinity Fields(PAF)能够针对多人做到实时检测,它采用的却是Bottom-up的方法,网络框架分为两路;一路使用 CNN,根据置信图进行关节点预测,另一路使用CNN 获得每个关节点的 PAF,PAF 可以看作是记录 limb 位置和方向的 2D 向量。两路进行联合学习和预测。最后就是如何将这些节点两两连接不重复,这转换为图论问题。

评测数据集:COCO 2016关键点检测数据集+MPII。对于MPII多人pose,本文无论是准确度还是精度上都有质的飞跃。对于一个含有19个人的video,速度可以达到8.8fps。目前开源最好的demo效果可以达到15fps。

[2] Joint Multi-Person Pose Estimation and Semantic Part Segmentation ( ICCV 2017, UCLA)

论文对人体进行不同部位分割,而关键点都落在分割区域的特定位置,通过部位分割对关键点之间的关系进行建模,既可以显式的提供人体关键点的空间先验知识,指导网络的学习,同时在最后对不同人体关键点进行聚类时也能起到相应的连接关键点的作用。该方法耗时太久,一张图片用时8s。
[3] Associative Embedding (Associative Embedding:End-to-End Learning for Joint Detection and Grouping) (rejected by ICCV2017 , UMICH Jia Deng)

源码:github

MPII总体评价精度上榜首位置

论文提出了一种single-stage,将检测和分组合并到一个过程,end-to-end的关节点检测和分组方法,这不同于以往的multi-stage的关节点检测方法。

基本方法是在检测环节直接给检测结果编号,表明它属于哪个物体,所得到的这些编号标签就代表了分组。因为这重新将神经网络回到了黑盒时代——让神经网络去得到准确的编号标签,所以在训练的时候需要特别设计loss function,促使统一物体有相同标签,不同的物体不同。因为ground truth中并没有现成的这种标签,所以不用在‘标签号大小’上对ground truth负责。而且重点不是标签的大小,而是保证他们是不同的就好了,所以网络可以自己决定标签号大小,只要符合ground truth分组。在多人姿态识别时,用到了堆叠Hourglass网络的方法,由此产生每一个关节的位置heatmap和关节点的标签heatmap,然后将关节使用相同标签分组。文章没有提到速度。

总结
目前单人的姿态识别技术已经很成熟,由于一张图只含有一个人,所以用时来说100ms左右。Open-pose的CPM模型采用的大卷积核来获得大的感受野,对于推断被遮挡的关节是很有效的,实现起来简单,只不过速度略慢一点。单人方法可以考虑CPM。

多人的姿态识别top-down的方法总体来说效果好于bottom-up的方法,而bottom-up的速度明显要优于top-down。取舍的话,Openpose是一个不错的选择。商用的话,感觉提速是必须的一个过程。
 

附:姿态估计相关实践

基于OpenCV使用OpenPose进行多个人体姿态估计

OpenPose:实时多人2D姿态估计 | 附视频测试及源码链接

OpenPose训练自己的数据集模型

OpenPose训练过程解析

关键点估计之 PCK, PCKh, PDJ 评价度量

论文解读
Convolutional Pose Machine总结

Cascaded Pyramid Network for Multi-Person Pose Estimation

Stacked Hourglass Networks for Human Pose Estimation

Paperreading之三Simple Baselines for Human Pose Estimation

【论文学习】Pose Flow: Efficient Online Pose Tracking

PC端实现
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/human_pose_estimation

https://github.com/CMU-Perceptual-Computing-Lab/openposecaffe版

https://github.com/ildoonet/tf-pose-estimationtensorflow版

OpenPose的简单实现:Windows版

https://github.com/xinghaochen/awesome-hand-pose-estimation

https://github.com/OpenGP/htrack

https://github.com/timctho/convolutional-pose-machines-tensorflow:CPM tensorflow版

deep-high-resolution-net.pytorch

https://github.com/chenyilun95/tf-cpn

https://github.com/bearpaw/pytorch-pose

https://github.com/mkocabas/pose-residual-network

移动端
https://github.com/edvardHua/PoseEstimationForMobileandroid版

https://github.com/tucan9389/PoseEstimation-CoreML ios版

Any plan to add a common body ID between video frames?

multi-object-tracking-paper-list

reid-strong-baseline

视频多目标跟踪高级版

OpenPose 关键点输出格式

https://github.com/PJunhyuk/people-counting-pose

Dataset
LSP:2k人,14points,全身,单人

FLIC:2w,9points,全身,单人

MPII Human Pose Dataset:25k images,40k pose,16points,~12GB.全身,单人/多人

MSCOCO:30W+,18points,全身,多人,keypoints on 10W people

AI Challenge:21W Training, 3W Validation, 3W Testing,14points,全身,多人,38W people

openpose输出关键点格式
 

 

性能对比:

各个开源框架在 COCO-Validation 上性能,时间在单卡 1080ti GPU 测出指标如下:

 

参考文献:

上海交大卢策吾团队实时多人姿态估计系统升级,挑战拥挤人群场景
如何看待上交大卢策吾团队最新开源的 AlphaPose?

六种人体姿态估计的深度学习模型和代码总结

Human Pose Estimation人体姿态估计综述调研

姿态估计 最佳实践

最精准!上海交大开源姿态估计和跟踪系统 AlphaPose
 

MSCOCO数据集资源

 

冠军论文

COCO2016 Keypoints Challenge的冠军:

CPM =====Convolutional Pose Machines CVPR 2016 

 

COCO2017 Keypoints Challenge的冠军 face++
CPN =====Cascaded Pyramid Network for Multi-Person Pose Estimation

COCO2017人体姿态估计冠军论文(PPT+视频) 

COCO2017 Keypoints Challenge亚军

AlphaPose:上海交大卢策吾团队和腾讯优图工作

RMPE: Regional Multi-Person Pose Estimation (ICCV 2017)

MSPN======2018年coco 关键点检测冠军

COCO2018 Keypoint冠军算法解读

Multi-Stage Pose Network (MSPN,由Face++提出) 

Rethinking on Multi-Stage Networks for Human Pose Estimation

 

 

2019:HRNet 刷新了三项COCO纪录,还中选了CVPR 2019,

HRNet在COCO数据集的关键点检测、姿态估计、多人姿态估计这三项任务里,HRNet都超越了所有前辈。

论文解读:https://blog.csdn.net/u011681952/article/details/88035348

 

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值