几款模型目前来看的精度:CPM < DeeperCut < CMU OpenPose < AlphaPose
模型 | 大体框架 | 多人估计的应对措施 |
---|---|---|
CPM | CPM是一个cascaded网络,多个stage反复去定位、修正响应图 | center map,为一个高斯响应,因为cpm处理的是单人pose的问题,如果图片中有多人,那么center map可以告诉网络,目前要处理的那个人的位置。 |
DeeperCut | 采用了自顶向下的方法针对多人进行姿态估计,所谓自顶向下的方法就是先使用CNN检测人体,即body part candidates,再判断这些关节点属于哪一个人。最后使用ILP优化模型进行姿态估计 | DeepCut是利用自适应的Fast R-CNN来进行人体部分的检测 |
CMU OpenPose | 两条线,经过卷积网络提取特征,得到一组特征图,然后分成两个岔路,分别使用 CNN网络提取Part Confidence Maps 和 Part Affinity Fields ,得到这两个信息后,我们使用图论中的 Bipartite Matching 将同一个人的关节点连接起来得到最终的结果 | |
AlphaPose | 跟deeperCut比较像:对称空间变换网络(Symmetric STN)找人体位置; detection proposal用于训练姿态估计网络,从而获得大量符合真实测试场景数据分布的训练数据;第三个组成部件为参数化的姿态非极大值抑制器(Parametric Pose NMS),通过使用新的姿态距离度量来比较姿态相似性,来消除冗余姿态 |
timctho/convolutional-pose-machines-tensorflow
cpm是CMU开源项目OpenPose的前身,整个framework还是比较清晰的,Pose estimation任务属于FCN的一种,输入是一张人体姿势图,输出n张热力图,代表n个关节的响应。
参考:Convolutional Pose Machines、convolutional pose machines, CVPR 2016、【人体姿态】Convolutional Pose Machines
github: ZheC/Realtime_Multi-Person_Pose_Estimation
ildoonet/tf-pose-estimation 一些调整:mattzheng/tf-pose-estimation-applied
用Part Affinity Fields来学习如何将身体关键和个人匹配起来。主要思想是利用贪心算法自下而上的解析步骤从而达到高准确率和实时性。身体部位定位和关联是在两个分支上同时进行的。该方法获得了COCO2016 keypoints challenge中夺得第一名。
文章代码总共分为两条线,经过卷积网络提取特征,得到一组特征图,然后分成两个岔路,分别使用 CNN网络提取Part Confidence Maps 和 Part Affinity Fields ,得到这两个信息后,我们使用图论中的 Bipartite Matching 将同一个人的关节点连接起来得到最终的结果。
循环直至收敛
循环直至收敛
根据前边两个阶段得到的两个热图,计算哪两个点连接比较好。这就要根据关节区域和点的位置来计算每个像素的小法向。生成一个法向图。
参考:
行人姿态估计–Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields、
姿态估计论文思路整理 – Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields、
基于部分亲和字段PAF(Part Affinity Field)的2D图像姿态估计、
Paper reading: Realtime Multi-person 2D Pose estimation using Part Affinity Fields(1)
github:eldar/pose-tensorflow 一些调整:mattzheng/pose-tensorflow-detailed
首先使用CNN提取body part candidates,每一个候选区域对应的是一个关节点, 每一个关节点作为图中的一个节点,所有的这些候选关节点组成代表的节点组成一副完整的图,正如上图dense graph所示。节点之间的关联性作为图中的节点之间的权重。这时,可以将其看作是一个优化问题,将属于同一个人的关节点(图中的节点)归为一类,每一个人作为一个单独的类。同时,另一条分支,需要对检测出来的节点进行标记,确定他们属于人体的哪一个部分。最后,使用分类的人结合标记的部分构成最终的每个人的姿态估计。
前一个版本DeepCut:
具有以下几个优势:
不过同样地,因为使用了自适应的Fast R-CNN来进行人体部分的检测,又使用ILP来进行多人的人体姿态估计,导致DeepCut的计算复杂度比较高。
DeeperCut 改进了:
参考:
DeepCut及DeeperCut:基于Tensorflow的人体姿态估计
论文阅读:Deepcut&Deepercut:Joint Subset Partition and Labeling for Multi Person Pose Estimation
——来源:姿态估计相比Mask-RCNN提高8.2%,上海交大卢策吾团队开源AlphaPose
上海交通大学卢策吾团队,今日开源AlphaPose系统。该系统在姿态估计(pose estimation)的标准测试集COCO上较现有最好姿态估计开源系统Mask-RCNN相对提高8.2%,较另一个常用开源系统OpenPose(CMU)相对提高17%。同时,卢策吾团队也开源了两个基于AlphaPose的工作:
开源github:https://github.com/MVIG-SJTU/AlphaPose
训练框架:torch
预测框架:tf+torch
交大MVIG组提出RMPE的两步法框架(ICCV 2017论文),并基于此开发了AlphaPose这一人体关键点检测系统。
RMPE框架采用自顶向下的方法,先检测人,再去做姿态估计。该框架有三个主要组成部分:
利用了姿势(pose)信息的,使用表情信息, RGB 和光流信息。同时,他们构建了对应的数据集:ADHA,这一数据集标注了视频中人物的位置、动作和可以描述这一动作的副词,我们还为数据用户提供了人物的 tracking 结果。
主页(包括代码):http://mvig.sjtu.edu.cn/research/adha.html
数据:http://mvig.sjtu.edu.cn/research/adha/adha.html
笔者这边用的是:mattzheng/pose-tensorflow-detailed,还算好,原作中写了用自己数据做训练的方式,
但是,mattzheng/tf-pose-estimation-applied 这个方法,原作用的是coco,封装的太好。
mattzheng/convolutional-pose-machines-tensorflow,别人用过,貌似也不错的样子。
这大兄弟在玩 AI challenger人体骨骼关节点赛题的时候,同样自己训练并开源出来。
但是,该比赛的关键点只有:14个(参考:赛题与数据),该作者在生成时候(ai2coco_art_neckhead_json.py),拼凑成17个点,与coco一致,然后就可以完全使用coco框架训练(多人模式),同时共享pairwise stat。
该作者在比赛数据上当时迭代了60W次,最终的得分为:0.36,而原来的coco数据集,多人关键点定位需要180W次。
笔者自己fork的几个项目,只玩了两个: