OpenPose论文笔记《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》
OpenPose最新论文《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》笔记
摘要
能有效检测图像中多个人的2D姿态。使用PAFs (Part Affinity Fields),来学习关键点和肢体。这种结构对global context(全局上下文)进行编码,自下而上进行解析。特点:多人,高精度,实时。通过序列结构神经网络的两个分支来联合学习:关键点位置、关键点之间的联系即PAF。该方法取得了2016关键点检测挑战赛冠军,准确率与效率都大大超过了MPII基准。
一、 简介
难点:1.每张图中,人的数量、位置、大小,都未知。 2.人与人之间的行为(接触、遮挡等)会干扰不同身体关键点的联系。 3.人数多使得运算复杂性增加,保证实时性很困难。自上而下的方法(先检测出人,再进行单人的姿态估计)会因为人越多计算量越大,而且严重依赖检测效果。
该论文解决了以上难点,并发明了PAFs(Part Affinity Fields,Affinity指两点配对的关联程度,个人翻译:关键点亲和场,表示关键点配对的置信程度),是二维矢量场的集合,表示肢体的位置和方向。基于PAFs与关键点位置,可以计算出两个关键点的关联程度。
二、 方法
执行过程如下图所示,一张输入图像w*h,经过两个分支,一个得到confidence maps (表示关键点位置,该集合记为S),一个得到PAFs(表示关键点的关联,该集合记为L)。然后转化成图上的匹配问题:边权值最大的二分图匹配(后文使用匈牙利算法解决)。
2.1Simultaneous Detection and Association(检测与关联)其实是介绍了整体的网络结构
原图经过VGG-19,得到feature maps,记为F,经过如图所示的网络,该网络分上下两个分支,每个分支都有t个阶段(表示越来越精细),每个阶段都会将feature maps进行融合。其中ρ φ 表示网络。
为了引导网络不同的分支做不同的预测任务,使用不同的损失函数,如下所示。其中带上标*的是ground truth,带上标t的是不同阶段的预测值,p是每一个像素点,W(p)=0代表该点缺失标记,防止惩罚了true positive predictions(真阳性的预测)。每个阶段的中间监督通过定期补充梯度来解决消失的梯度问题(其实就是每个阶段都有损失函数,这样就不会梯度弥散)。
2.2 Confidence Maps for Part Detection(人体区域检测的置信图)
训练阶段,ground truth的置信度图S*,每一张置信度图是对特定关键点的2D表示(如果图像中只有一个人且关键点可见,则每个置信度图应存在单个峰值;若图像中有k个人,其中该关键点可见的有j个,比如j个脖子,则应该有 j 个峰值)。S的意义理解为对于图像属于关键点j的概率。
['nose', 'neck', 'Rsho', 'Relb', 'Rwri', 'Lsho', 'Lelb', 'Lwri', 'Rhip', 'Rkne', 'Rank', 'Lhip', 'Lkne', 'Lank', 'Leye', 'Reye', 'Lear', 'Rear', 'pt19'] 19种关键点,J=19,一张图像有19张关键点置信图。
首先对第k个人产生部位j的置信度图。其中是图中第k个人部位j的位置,p是图像坐标,表示了峰值的蔓延程度,
总置信度图的计算公式为:
取最大置信度图而不是平均值,是为了峰值附近的精确度保持不同,如下图所示。神经网络的上半区域则是用于预测该置信图。(代码:置信图的极值点就是关键点)。
注解:(非极大值抑制:假设有N个候选框,(1)将所有框的得分排序,选中最高分对应的框,(2)遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。3)从未处理的框中继续选一个得分最高的,重复上述过程。。。以此来保留各个待检测的区域,最佳的检测框。)
2.3 PAFs
已知关键点,如何形成未知人数的全身姿态?需要对每一种关键点的连接进行置信度的度量,图a是所有的连接候选;另一种方式是附加每对连接的中点,如图b,检查中点的发生率,这样错误率依然很高。错误的原因是:1.只编码位置信息,没有方向信息;2.将一个区域只用一个点去表示。
PAFs是一个2D矢量场,保留了位置和方向,如图c所示,表示一个肢体,在肢体上的每个点是从一个关键点到下一个关键点的2D单位矢量。令和表示ground truth中的关键点j1,j2的坐标,这两个关键点组成第k号人的一个肢体c,如果一个点P在这个肢体上面,如图所示,则的值为j1指向j2的单位矢量;其他点都是零向量,如公式8。每一个点上都有一个向量,L可以理解为对于图像中肢体的单位向量表示。
Ground-truth的PAF计算方法如下:C=38
在肢体上的点P满足下式(其实代表的就是P在肢体对应的矩形内)
其中,L是肢体的长度,是肢体的宽度,v-是垂直矢量。
(注解:点乘 又叫向量的内积、数量积,是一个向量和它在另一个向量上的投影的长度的乘积;是标量。点乘 反映着两个向量的“相似度”,两个向量越“相似”,它们的点乘 越大。)
一张图像中肢体c的PAFs是(重叠处,多个人的同一肢体)所有人物进行平均得到(此情况很少出现)
Nc(P)是P点处所有非0向量的个数,即k个人重叠肢体在像素上的平均。
在测试时,沿着“关键点对”组成的线段计算上面PAF的线积分,来度量这对“关键点对”的关联程度。换句话说,关联程度是通过度量这两者的对齐程度得到:预测的PAF,通过关键点连接形成的肢体。具体的=来说,对于两个候选关键点,位置是和,沿着线段采样预测出的PAF值(即Lc),表示这两个关键点相关联的置信度E。
其中p(u)是两个部位(关节点)和之间内插的位置。
在实践中,通过对u的均匀间隔采样来近似求积分。
2.3 多人的PAFs
对检测出来的置信度图执行非极大值抑制,获得离散的关键点位置候选集。由于图中有多人,对于每种关键点,有若干候选。因此有很多可能的肢体,如图6b所示。通过计算PAF上的线积分(公式10)评估每一个候选肢体的置信度。找到最优肢体是一个NP问题,在本文中使用一个贪心松弛策略(匈牙利算法?),使得每次都能产生高质量的匹配,其根据是:由于PAF网络的大感知场,成对关联分数隐含地编码了全局上下文(下文蓝字体)。
首先,得到一系列关键点候选(整张图像多个人),记为Dj={},表示关节j的图中第m个候选关键点。这些关键点候选需要跟同一个人的其他关键点进行关联,找到关键点的成对关系,即肢体。定义变量={0或1}表示关键点候选和是否关联。算法目标:找到所有最佳关联,记为Z。
考虑一对关键点j1,j2(例如脖子,右臀)组成肢体c,找到最佳匹配,是最大权重二分图匹配问题:节点是候选集Dj,边的权值由公式10计算,二分图匹配选择最大权重的边(匹配就是从边中选子集),使得没有边共享节点(由公式13-14强制要求,没有同类肢体共享一个关键点,比如一个脖子只连接一个右臀)。找最佳二分图匹配使用匈牙利算法。
当找到多人的全身姿势时,确定出Z是NP Hard问题并且存在许多优化之处。专门针对这个领域,该论文有两个优化策略:1.选择边的最小数目,来构造人体姿态骨架,而不使用完全图,如图6c(只需要考虑有关系的两种关键点,对于单个人的骨架而言是一个生成树)2.将这个匹配问题进一步分解成一个个的子问题,独立地确定相邻树节点的匹配,如图6d。(其实这两个策略是递进地解决了该问题)。在3.1节展示了详细的比较结果,证明最小贪心推理可以近似全局最优解,而计算消耗却大大减少。原因在于相邻树节点之间的关系由PAF明确建模,在内部,非相邻节点之间的关系由CNN隐式建模。此属性的出现是因为:使用大型感知场训练CNN网络,而非相邻树节点的PAFs也影响预测的PAF。(?使用CNN,预测出的PAFs包含了所有点对的信息?)
通过这两个松弛策略,该优化目标为:
因此,我们独立地使用公式12-14获得每种肢体类型的肢体候选。通过所有肢体连接候选,将共享相同关键点的不同肢体组装成人的全身骨架姿态。树结构上的优化方案比完全连通图上的优化要快很多。
三、 结果
在两个基准上评估:1.MPII human mutil-person dataset 2. COCO 2016 keypoints challenge dataset . 包含了不同场景、拥挤、遮挡、接触、比例变化。
3.1 MPII Multi-Person
使用参考论文22的工具包来测量基于PCKh阈值的所有身体部位的mAP.简单的说,准确率高,运行极快。
在全部测试集上,3种尺度(0.7,1,1.3),大大提高准确率。
表2.说明贪心策略可行,效率提高很多,且效果更好(收敛更快)。
3.2 COCO key points challenge
在此数据集上不是所有指标都最好,原因是该数据集人员突出,自上而下方法裁取单个人的变化尺度很小。自上而下的单人CPM(也是该团队的工作)有更好的指标。
3.3 运行时间分析
自顶向下的方法:人体检测+CPM,与该方法比较。本方法快。