⽬标检测评价指标汇总—mAP,PR曲线,F1分
数,FPPI,log-averagemiss。。。
再见邓紫棋吉他谱对于了解⽬标检测的评价指标是很重要的,否则⾃⼰不懂这个代表什么意思,如何调参。⽹上有太多资料,可是杂乱,甚⾄有⼀乱说,记录下⾃⼰所学,总结下,也分享出来,也便于⾃⼰⾃⼰复习。
分为三块,1、解释相关概念 2、 PR曲线与mAP 3、F1分数 4、FPPI 5、log-average miss rate 6、注意要点与评估模型
⼀、解释⼀些相关概念
1、IoU
IoU是预测框与ground truth(真实框)的交集和并集的⽐值,它可以作为评价边界框正确性的度量指标。其中蓝绿⾊部分是交集,⽽并集还包括橘⾊的部分。那么,IoU可以如下计算:
2、TP(True Positives)
即为真正例,我们需要计算IOU来决定⼀个检测结果是正确的还是错误的。⼀般来讲,如果IOU>0.5,我们则认为该检测结果为真正例。PASCAL VOC数据集所⽤的指标为0.5.
3、FP(Fal Positives)
即为假正例,同理,如果IOU<0.5,或者检测到同⼀个GT的多余检测框(意思是真实标签框检测出来有两个框或者多个框,置信度最⾼的那个作为了TP,那么剩下了为FP,即使这个检测框IOU⼤于0.5)。我们则认为该检测结果为假正例。
4、FN( Fal Negatives)
即为假反例,顾名思义,就是本来是真实框,可是没有检测出来。没有检测到的GT(真实框)的数量
5、precision(精准率或者查准率)
计算公式为:
6、Recall(召回率或者查全率)
计算公式为:
grass复数7、AP
PR曲线的⾯积。PR曲线为Precision(精准率或者查准率)与Recall(召回率或者查全率)的曲线,横轴是Recall,纵轴是Precision。
8、mAP
英⽂名:mean Average Precision, 就是所有类别AP的平均值
⼆、 PR曲线与mAP
1、计算⽅法
甲鱼做法⼀句话解释:把每个类别所有检测⽬标进⾏得分排序,检测⽬标得分从⼤到⼩依次算精准率和召回率,也就获得了PR曲线,最后精准率与召回率的曲线的积分就是ap,各个类别的ap平均就是map。
训练好的⽬标检测模型会给出⼤量的预测结果,但是其中⼤多数的预测值都会有⾮常低的置信度(confidence score),因此我们只考虑那些置信度⾼于某个阈值的预测结果。
将图⽚送⼊训练好的模型,就会预测出⼀系列框,然后根据置信度进⾏筛选,⼤于设置的那个置信度值就是预测的所有结果。根据前⾯的⼀些概念我们可以知道,⾄少有两个变量会影响Precision和Recall的计算结果,即IoU和置信度阈值,但是置信度却在不同模型会差异较⼤,可能在我的模型中置信度采⽤0.5却等价于在其它模型中采⽤0.8置信度,这会导致precision-recall曲线变化。为此,PASCAL VOC 组织者想到了⼀种⽅法来解决这个问题,即要采⽤⼀种可以⽤于任何模型的评估指标。所以推荐使⽤Average Precision(AP)。mAP就是对每⼀个类别都计算出AP然后再计算AP平均值就好了。
还有⼀个原因推荐使⽤AP若,想评估⼀个分类器的性能,⼀个⽐较好的⽅法就是:观察当阈值变化时,Precision与Recall值的变化情况。如果⼀个分类器的性能⽐较好,那么它应该有如下的表现:在Recall值增长的同时,Precision的值保持在⼀个很⾼的⽔平。⽽性能⽐较差的分类器可能会损失很多Precision值才能换来Recall值的提⾼。通常情况下,⽂章中都会使⽤Precision-recall曲线,来显⽰出分类器在Precision与Recall之间的权衡。相⽐较与曲线图,在某些时候还是⼀个具体的数值能更直观地表现出分类器的性能。通常情况下都是⽤Average Precision来作为这⼀度量标准。日日干夜夜骑
假设我们以Aeroplane类别为例⼦,只计算Aeroplane类别的AP.
⾸先要对模型预测结果进⾏排序(按照各个预测值置信度降序排列)这样形成⼀个排列rank。那么给定⼀个rank级别,计算Recall和Precision,Recall和Precision仅在⾼于该rank值的预测结果中计算,改变rank值会改变recall值。把这个排列rank全部计算完Recall和Precision。具体如何我在后⾯补充了⼀个计算例⼦,看着例⼦来理解⽐较好理解。
如此,以Recall值为横轴,Precision值为纵轴就可以绘制Precision-Recall曲线。获得曲线后就开始计算AP(曲线下⾯积)。
在VOC2010以前,只需要选取当Recall >= 0, 0.1, 0.2, ..., 1共11个点时的Precision最⼤值,即当recall>0时,Precision的最⼤值,当recall>0.1时Precision的最⼤值,依次类推。然后AP就是这11个Precision的平均值。
在VOC2010及以后,需要针对每⼀个不同的Recall值(包括0和1),选取其⼤于等于这些Recall值时的Precision最⼤值,然后计算PR 曲线下⾯积作为AP值。
这⾥,先介绍VOC2010以前的。如下就是AP计算公式:
其中:
式中,1/11代表着求平均值,因为0到1其中有11个数。P(r)代表着precision值取所有recall>r中的最
⼤值(这样保证了p-r曲线是单调递减的,避免曲线出现摇摆)。简单来说就是选取当Recall >= 0, 0.1, 0.2, ..., 1共11个点时的Precision最⼤值。
然后:按照上述⽅法计算AP,对于各个类别都计算,然后取所有类别的平均值就是mAP。
VOC2010以后的AP计算公式:
其中p代表Precision ,r代表Recall,p是⼀个以r为参数的函数
实际上这⼀积分极其接近于这⼀数值:对每⼀种阈值分别求(Precision值)乘以(Recall值的变化情况),再把所有阈值下求得的乘积值进⾏累加。公式如下:
郭海斌其中N为rank 级别数,P(k)表⽰每⼀级别数Precision的值,⽽ Delta r(k) 则表⽰rank级别数从k-1变化到k时(通过调整阈值)Recall值的变化情况。
2、例⼦
2010以前VOC。
这⾥借鉴别⼈的例⼦,我来解释下:
这⾥解释⼀下这些数字是如何计算的。 按照例⼦来讲,检测到了⼗个框,即有⼗个rank,rank1中,all=0.14如何计算呢?
我们看,rank1就是BB1所在层,在BB1中,检测到⼀个,且为真正例,按照Precision公式计算,1/1=1。然⽽recall计算公式为
1/(5+2)=0.14,注:计算recall时,分母要计算整个rank的数值,即为:5个真正例+两个假反例。
然后再看rank3层,在rank3层之前,我们检测到了两个真正例,⼀个为假正例。按照Precision公式计算,2/3=0.66。然⽽recall计算公式为2/(5+2)=0.29。以此类推,就可以把所有数据算出来了。这样PR曲线就可以得到。
对于上述PR值,如果我们采⽤:VOC2010之前的⽅法,我们选取Recall >= 0, 0.1, ..., 1的11处Percision的最⼤值:1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 0, 0。此时Aeroplane类别的 AP = 5.5 / 11 = 0.5。这⾥解释⼀下:
当recall>=0时,在之前算出的PR所有值中,Precision最⼤值为1,当recall>=0.3,在所有PR值中,⼤于0.3的recall中Precision最⼤值为0.5。以此类推。
这⾥也可以⽤VOC2010以后的⽅法,
对于Recall >= 0, 0.14, 0.29, 0.43, 0.57, 0.71, 1,我们选取此时Percision的最⼤值:1, 1, 1, 0.5, 0.5, 0.5, 0。此时Aeroplane类别的AP = (0.14-0)*1 + (0.29-0.14)*1 + (0.43-0.29)*0.5 + (0.57-0.43)*0.5 + (0.71-0.57)*0.5 + (1-0.71)*0 = 0.5。
这个⽅法待考察,我也不太确定。要是有⼈知道,⿇烦告知是否正确。
这是⼀种⽅法,还有另外⼀种⽅法,就是本⽂博客中提到的⽅法。即按照下⾯的公式来计算。
AP=(0.14-0)*1+(0.29-0.14)*1+(0.29-0.29)*0.66+(0.29-0.29)*0.5+(0.29-0.29)*0.4+(0.43-0.29)*0.5+(0.43-0.43)*0.43+(0.43-0.43)*0.38+(0.57-0.43)*0.44+(0.71-0.57)*0.5家书是什么
三、F1分数
这是⼀个权衡精准率与召回率指标,当然也可以画F1分数的曲线,这⾥只讲计算。
以下为更⼀般的公式,其中贝塔为1的时候,就是F1分数。
四、FPPI(miss rate versus fal positives per image )
优点:提出FPPI更加适合⾏⼈检测的评估。
且更加符合直观感觉,每张图⽚的误检情况。在我们进⾏测试的时候,⼀批测试集GT⽐较少,某⼀张
图⽚就有很多误检,但是这批数据集有很多⽆GT的数据,这就会导致mAP⽐较少。明显就不符合实际,其实该模型误检相对较少,这个时候⽤FPPI更合适。⾏⼈检测的时候⼤部分的时候是没有⼈的,故⽽⽐较合适。
FPPI = FP / N;N表⽰有多少数据量,即多少张图⽚,FP表⽰(假正例,即误检);
miss rate = 1- recall = FN / all_gt ; all_gt,即所有正样本数量,FN表⽰(即假反例);
各个fppi和miss rate的得到⽅式与AP中得到P、R值的⽅式⼀样,也是得到所有检测框的置信度,由⾼到低排列。从⽽可获得类似下⾯的曲线图。横轴为fppi(使⽤log来画图),纵轴为miss rate.
Miss rate-FPPI曲线
雨后春笋是成语吗那么如何量化这个曲线图,如何评判模型的好坏。 所以⼀开始,使⽤FPPI=1时的miss rate作为结果对⽐的参考点.
六、log-average miss rate(MR-2)
我们⽤log-average miss rate来评估探测器的性能。现在的计算⽅法是在9个FPPI值下(10的-2次⽅到10的0次⽅内以对数空间均匀间隔)的平均miss rate值。从概念上讲,log-average miss rate与⽬标检测的AP相似,因为它们都是⽤⼀个参考值表⽰整个曲线。
七、⽐较mAP注意要点
1、mAP通常是在⼀个数据集上计算。
2、我们可以看到,这个只是⼀种评价⽅法⽽已,⽬前来看是⽐较合理的,如果以后有新的研究发现,可能会有更好的评价标注。
3、mAP是所有类AP的平均值,只能代替总体效果。根据训练数据中各类的分布情况,mAP值可能在某⼀类具有很好的效果(有良好的训练数据),然⽽在其他类却⽐较不好(数据集不好或者缺少),这样你的mAP值是中等的,就是虽然mAP值是⼀样,可是有可能代表这不同的类有不同的好坏效果。可能你所训练的模型对有⼀些类好,所以我们不仅仅要看mAP,还需要看每个类的AP。看你的模型偏
好哪⼀类,分析是什么原因导致这⼀类好,哪⼀类坏,如此有助于你调参。
4、如果有⼀类AP较低,也许暗⽰你的这⼀类,是不是数据有问题,或者数据量太少。
>一去不复返是什么意思