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
官网是这么解释的,重新写一下
需要注意的是,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