人体关键点检测评价指标oks/Precision/AP/mAP/Recall/AR/IoU

1、OKS(Object Keypoint Similarity)

主要指标就是OKS(Object Keypoint Similarity),这个指标启发于目标检测中的IoU指标,目的就是为了计算真值和预测人体关键点的相似度。

2、OKS矩阵

OKS是计算两个人之间的骨骼点相似度的,那一张图片中有很多的人时,该怎么计算呢?这时候就是构造一个OKS矩阵了。

假设一张图中,一共有M个人(groudtruth中),现在算法预测出了N个人,那么我们就构造一个M×N的矩阵,矩阵中的位置(i,j)代表groudtruth中的第i个人和算法预测出的第j个人的OKS相似度,找到矩阵中每一行的最大值,作为对应于第i个人的OKS相似度值。

3、AP(Average Precision)

平均精度

根据前面的OKS矩阵,已经知道了某一张图像的所有人(groundtruth中出现的)的OKS分数,现在测试集中有很多图像,每张图像又有一些人,此时该如何衡量整个算法的好坏的。这个时候就用到了AP的概念,AP就是给定一个t,如果当前的OKS大于t,那就说明当前这个人的骨骼点成功检测出来了,并且检测对了,如果小于t,则说明检测失败或者误检漏检等,因此对于所有的OKS,统计其中大于t的个数,并计算其占所有OKS的比值。即假设OKS一共有100个,其中大于阈值t的共有30个,那么AP值就是30/100=0.3。

4、mAP(mean Average Precision)

AP的均值

具体计算方法就是给定不同的阈值t,计算不同阈值情况下对应的AP,然后求个均值就ok。

5、Recall

召回率

6、AR(Average Recall

平均召回率

6、IoU(Intersection-over-Union)

目标检测中使用的一个概念
是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,它们的交集与并集的比值。最理想情况是完全重叠,即比值为1。

=================================================

其实,准确率Precision,召回率Recall,这个翻译很蛋疼。。。很长时间我都没有理解,直到我看到了某篇博客

recall最合理的翻译应该是 查全率:实际检测出某种类的个数占该种类总数的百分比。
precision
的最合理的翻译应该是查准率:检测到某种类的总数中的正确数量的百分比。

最大的区别就是分母,recall是某种类的总数(多数情况都是已知的),precision是实际检测的总数(是会变化的)

豁然开朗了吧!

我们来举个栗子:假设一个班级有10个学生,5男5女
你用机器找女生,机器返回了一下结果:
| 男 | 女 | 女 | 男 | 女 | 男 |

那么,女生的查准率(准确率)为:3/6 = 0.5(实际检测总数:6个,结果只有3个正确
女生的查全率(召回率)为: 3/5 = 0.6 (实际女生的总数:5个,结果只有3个正确

这下ok了吧,我们在来看个栗子,检查下是否真的理解了,顺便带上mAP、AP

图片名称

query1:一共有5个

recall:分母是5

1/5=0.2 1/5=0.2  2/5=0.4  2/5=0.4  2/5=0.4  3/5=0.6  3/5=0.6  3/5=0.6  4/5=0.8  5/5=1.0

precision:分母是会变化的,注意是实际检测的次数总数1->10

1/1=1.0 1/2=0.5  2/3=0.67  2/4=0.5  2/5=0.4  3/6=0.5  3/7=0.43  3/8=0.375  4/9=0.44  5/10=0.5

AP1:    (1.0+0.67+0.5+0.44+0.5)/5=0.62  AR同理,这个情况肯定是1

query2:一共有3个检测目标

recall:分母是3

0/3=0.0   1/3=0.33   1/3=0.33   1/3=0.33   2/3=0.67    2/3=0.67   3/3=1.0   3/3=1.0    3/3=1.0    3/3=1.0

precision:分母是会变化的,注意是实际检测的次数总数1->10

0/1=0.0   1/2=0.5   1/3=0.33   1/4=0.25   2/5=0.4    2/6=0. 33   3/7=0.43   3/8=0.375   3/9=0.3   3/10=0.3

AP2:    (0.5+0.4+0.43)/3=0.44,AR同理,这个情况肯定是1

综上:mAP = (AP1+AP2)/2 = (0.62+0.44)/2=0.53

=================================================

coco

1、https://cocodataset.org/#keypoints-2020

2、工具

3、https://cocodataset.org/#keypoints-eval

官网是这么解释的,重新写一下

                                                                  OKS=\frac{\mathrm{\sum _{i}}e\tfrac{-d_{i}^{2}}{2*s^{2}k_{i}^{2}}\delta(v_{i}> 0)}{\mathrm{\sum _{i}} \delta(v_{i}> 0) }

需要注意的是,v的范围是0,1,2 . v is a visibility flag defined as v=0: not labeled, v=1: labeled but not visible, and v=2: labeled and visible

这里还有别人的其他解释,大家可以看看https://zhuanlan.zhihu.com/p/48601321

  • 16
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PyTorch关键点检测是使用PyTorch框架进行关键点检测任务的一种方法。在关键点检测任务中,我们的目标是识别和定位图像中的特定关键点,例如人脸的眼睛、鼻子、嘴巴等部位。关键点检测在计算机视觉领域有广泛的应用,例如人脸识别、姿态估计等。 使用PyTorch进行关键点检测的过程通常包括以下几个步骤: 1. 数据准备:收集和标注包含关键点的图像数据集。关键点可以是一些特定位置的像素坐标,这些坐标对应于图像中的感兴趣部位。 2. 模型设计:使用PyTorch构建一个适用于关键点检测的深度学习模型。可以使用卷积神经网络(CNN)或其他适用的模型结构,以提取图像中的特征并预测关键点的位置。 3. 模型训练:使用标注好的数据集对模型进行训练。在训练过程中,通过最小化预测关键点和实际关键点之间的差异,来优化模型的参数。 4. 模型评估:使用评估指标(如均方误差或平均准确率)来评估模型的性能。可以使用预定义的系数数组(kpt_oks_sigmas)来评估预测关键点与真实关键点的匹配程度。 5. 模型应用:使用训练好的模型对新的图像进行关键点检测。可以使用预测结果来提取有关关键点的信息,如位置、姿态等。 需要注意的是,以上步骤是一个基本的框架,具体的实现方法会因任务需求、数据集特点和模型选择而有所不同。可以参考引用中的链接,了解更详细的关键点检测模型训练方法。 提供了关于关键点检测数据集中关键点可见性的信息。 是一篇关于使用PyTorch训练自定义关键点检测模型的中文博客。 是一个使用Python脚本进行图像关键点检测的示例。 提供了关于使用pycocotools评估预测关键点与真实关键点匹配程度的说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值