关键点检测算法(三)多人2D关键点检测算法之OpenPose
发布网友
发布时间:2024-09-25 17:37
我来回答
共1个回答
热心网友
时间:2024-10-02 12:54
一、总体介绍
创新点:提出2D向量Part Affinity Fields(衡量两两关节点的亲和度)
效果:COCO 2016年人体关键点检测第一名,test-dev AP=61.8
关键词:
PCM: Part confidence maps(关节点置信图),表示像素在关节点的高斯响应,离关节点越近的像素,响应值越大。
PAF: Part Affinity Fields(关节亲和场), 表示骨架位置和骨架上像素的方向,某骨架预测出来的PAF与真实的PAF越接近,则两两关节点联接更亲密。
二、算法流程
(a) 输入整张图片,经过backbone后feed到并列路径(b)、(c);
(b) 预测关节点置信图PCM;
(c) 预测两两关节点亲和度PAF;
(d) 统计两两关节点匹配亲和度;
(e) PAF相关值作为边权,利用匈牙利算法得到最优的多人关节点联接结果;
三、网络结构
每个stage的loss计算方式:
最终总loss计算方式:
四、PCM(Part confidence maps)
关节点置信图[公式] ,表示第k个人的第j个关节点存在于p像素的置信度。计算公式如下:
如果一个像素点存在多个响应,意味这一张图中有多个人,见下图:
上图表示j关节点的置信图,2条高斯曲线表示像素p对2个人j关节的响应,出现这种情况时,我们取最大响应值,即图中的虚线。
因此,单个像素只对一个人的关节产生响应,最终,一张图对应的PCM为[公式] ,其维度为W ×H × J。
在测试阶段,通过non-maximum suppression进行处理,实际操作就是在一定范围的邻域内的,只保留一个最大值,比如有两个峰值是挨着的,那么只取一个就可以,取那个最大值的那个。
五、PAF(Part Affinity Fields)
对于某类给定的肢体c, 与其相关联的两类关键点是 j1, j2 (比如肢体c为小臂,则j1, j2分别为肘部关键点和腕部关键点),对于某一个人 k, 训练时的每一点的亲和度向量label为: 如果点在肢体上, 则为两个关键点连线方向单位向量(模长为1), 否则为零向量。
其中:
那么如何从数学上描述一个点p在肢体lamb c,k上呢?从直觉上来说有两点:点p与起始关键点在肢体方向(即两个关联关键点的连线方向)的距离不能超过终止关键点,在垂直肢体方向的距离不能超过肢体的宽度。
这个式子的含义很明显,将p与x的组成的向量,在v和v的垂直方向上的投影的长度做了限制。对于多个人, 对单个人的label累加取平均。
在测试阶段,通过沿着不同的候选结点之间,计算PAF的线积分,得到结点之间的联系性。
其中,两个d为两个候选结点,将方向单位化,而p为两个结点连线上的点。即两个关键点间的亲和度为这两个点连线上的点的亲和度向量与两点连线方向的单位向量的路径积分。
六、关键点聚类
在模型inference阶段,我们可以得到关节置信图和关节亲密场的预测值,还需要将各个人的关节点联接起来,本文使用了最大边权的匈牙利算法进行二分图匹配。