深度学习-目标检测评估指标P-R曲线、AP、mAP

转载自:https://blog.csdn.net/qq_41994006/article/details/81051150

基本概念

P-R曲线中,P为图中precision,即精准度,R为图中recall,即召回率。

Example

下面通过具体例子说明。

首先用训练好的模型得到所有测试样本的confidence  score,每一类(如car)的confidence   score保存到一个文件中(如comp1_cls_test_car.txt)。假设共有20个测试样本,每个的id,confidence  score和ground  truth  label如下:​​
接下来对confidence  score排序,得到:


P-R曲线:

我们得到top-5的结果,前score最高的前5个样本,预测label为1,即:

此例中采用top-5评估,也可采用其他评估,如AP50,即当预测框与真实框的IoU值大于这个阈值时,该预测框才被认定为真阳性(True Positive, TP),反之就是假阳性(False Positive,FP)。
在这个例子中,true   positives就是指第4和第2张图片,false   positives就是指第13,19,6张图片。是相对于方框内的元素而言,在这个例子中,confidence   score排在top-5之外的元素为false   negatives和true  negatives,即:

其中,false   negatives是指第9,16,7,20张图片,true   negatives是指第1,18,5,15,10,17,12,14,8,11,3张图片。
那么,这个例子中Precision=2/5=40%,意思是对于car这一类别,我们选定了5个样本,其中正确的有2个,即准确率为40%;Recall=2/6=30%,意思是在所有测试样本中,共有6个car,但是因为我们只召回了2个,所以召回率为30%。此时为下图中第5个样本点。同理图中第一个样本点:P=1,R=1/6,第二个样本点,考虑前两个样本,P=1,R=2/6= 1/3。。。
这个例子的precision-recall曲线如下:
实际多类别分类任务中,我们通常不满足只通过top-5来衡量一个模型的好坏,而是需要知道从top-1到top-N(N是所有测试样本个数,本文中为20)对应的precision和recall。显然随着我们选定的样本越来也多,recall一定会越来越高,而precision整体上会呈下降趋势。把recall当成横坐标,precision当成纵坐标,即可得到常用的precision-recall曲线。

AP计算:

接下来说说AP的计算,此处参考的是PASCAL  VOC  CHALLENGE的 2010年之前 计算方法。 首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于recall大于每一个阈值(比如recall>0.3),我们都会得到一个对应的最大precision。这样,我们就计算出了11个precision。AP即为这11个precision的平均值。这种方法英文叫做11-point interpolated average precision。​
当然PASCAL VOC CHALLENGE自 2010年后 就换了另一种计算方法。新的计算方法假设这N个样本中有M个正例,那么我们会得到 M个recall值(1/M, 2/M, ..., M/M),对于每个recall值r ,我们可以计算出对应(r' > r)的最大precision,然后对这 M个precision值取平均即得到最后的AP值 。计算方法如下:​

相应的Precision-Recall曲线(这条曲线是单调递减的)如下:​

AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。

参考:https://blog.csdn.net/zdh2010xyz/article/details/54293298

补充一点关于IOU的内容,PASCAL VOC比赛默认IOU为0.5,即计算的是mAP@0.5,coco比赛增加了IOU阈值,包括mAP@0.5,mAP@0.75,AP(IOU at 0.5:0.05:0.95)。这里IOU的意思是,当预测框和gt box之间的IOU大于设定的阈值时标注该预测框为正例

那么完整的检测结果评估过程应该为:

  1. 使用自己的算法得到了检测结果,获取了图像集中各检测框包含的目标的类别置信度及其位置信息;

  2. 对每个类别的检测框应用NMS消除过于重叠的结果,这个NMS阈值可以自己设定;

  3. 对每一个类别:

    若某检测框与gt box之间的IOU超过了设定阈值(VOC就是0.5,COCO就是0.5:005:0.95)则将这样的检测框标注为正类,否则标注其为负类;

    按照分类置信度从高到底排序,设定不同的score阈值时,求取查准率P和查全率R;

    根据数据集的规则,求取当前类别的AP值,如按照VOC数据集2010之后的规则,就是R取 [ 1 N , ⋯   , N N ] [\frac{1}{N},\cdots,\frac{N}{N}] [N1,,NN]时的各最高P值的均值;

  4. 对所有类别的AP求均值,得到mAP;

  5. 如果是COCO数据集,上面的mAP也只是针对某一IOU阈值的mAP,还应该对不同的IOU值重复1- 4的过程,最终再求均值,得到mAP@[.5,.95]。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值