目标检测评价指标汇总—mAP,PR曲线,F1分数,FPPI,log-average miss rate等

对于了解目标检测的评价指标是很重要的,否则自己不懂这个代表什么意思,如何调参。网上有太多资料,可是杂乱,甚至有一乱说,记录下自己所学,总结下,也分享出来,也便于自己自己复习。

分为三块,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(False Positives)

即为假正例,同理,如果IOU<0.5,或者检测到同一个GT的多余检测框(意思是真实标签框检测出来有两个框或者多个框,置信度最高的那个作为了TP,那么剩下了为FP,即使这个检测框IOU大于0.5)。我们则认为该检测结果为假正例。

4、FN( False Negatives)

即为假反例,顾名思义,就是本来是真实框,可是没有检测出来。没有检测到的GT(真实框)的数量

5、precision(精准率或者查准率)

计算公式为:

6、Recall(召回率或者查全率)

计算公式为:

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中,Precision=1.recall=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 false 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较低,也许暗示你的这一类,是不是数据有问题,或者数据量太少。

参考文献:https://www.jianshu.com/p/ba1f7895b429

http://huchaowei.com/2018/01/11/%E8%AF%A6%E8%A7%A3%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E4%BB%BB%E5%8A%A1%E4%B8%AD%E7%9A%84%E8%AF%84%E4%BB%B7%E6%8C%87%E6%A0%87/

  • 14
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值