目标检测中的mAP及代码实现

mAP定义及相关概念

下面只简要介绍必需的基础知识,来自文章翻译,推荐阅读。

  • mAP: mean Average Precision, 即各类别AP的平均值;
  • AP: PR曲线下面积,后文会详细讲解;
  • PR曲线: Precision-Recall曲线;
  • Precision: TP / (TP + FP);
  • Recall: TP / (TP + FN);
  • TP: IoU>0.5的检测框数量(同一Ground Truth只计算一次);
  • FP: IoU<=0.5的检测框,或者是检测到同一个GT的多余检测框的数量;
  • FN: 没有检测到的GT的数量;

举例计算mAP

假设有3张图如下,要求算法找出face。蓝色框代表标签label,绿色框代表算法给出的结果pre,旁边的红色小字代表置信度。设定第一张图的检出框叫pre1,第一张的标签框叫label1。第二张、第三张同理。

图1
图2
图3

根据IOU(阈值)计算TP、FP

首先我们计算每张图的pre和label的IOU,根据IOU是否大于0.5来判断该pre是属于TP还是属于FP。显而易见,pre1是TP,pre2是FP,pre3是TP。

排序

根据每个pre的置信度进行从高到低排序,这里pre1、pre2、pre3置信度刚好就是从高到低。

在不同置信度阈值下获得Precision和Recall

首先,设置阈值为0.9,无视所有小于0.9的pre。那么检测器检出的所有框pre即TP+FP=1,并且pre1是TP,那么Precision=1/1。因为所有的label=3,所以Recall=1/3。这样就得到一组P、R值。

然后,设置阈值为0.8,无视所有小于0.8的pre。那么检测器检出的所有框pre即TP+FP=2,因为pre1是TP,pre2是FP,那么Precision=1/2=0.5。因为所有的label=3,所以Recall=1/3=0.33。这样就又得到一组P、R值。

再然后,设置阈值为0.7,无视所有小于0.7的pre。那么检测器检出的所有框pre即TP+FP=3,因为pre1是TP,pre2是FP,pre3是TP,那么Precision=2/3=0.67。因为所有的label=3,所以Recall=2/3=0.67。这样就又得到一组P、R值。

绘制PR曲线并计算AP值

根据上面3组PR值绘制PR曲线如下。然后每个“峰值点”往左画一条线段直到与上一个峰值点的垂直线相交。这样画出来的红色线段与坐标轴围起来的面积就是AP值。

在这里 A P = 1 ∗ 0.33 + 0.67 ∗ 0.33 ≈ 0.55 AP = 1 * 0.33 + 0.67 * 0.33 \approx 0.55 AP=10.33+0.670.330.55
在这里插入图片描述

计算mAP

AP衡量的是对一个类检测好坏,mAP就是对多个类的检测好坏(分别对每一类计算AP)。就是简单粗暴的把所有类的AP值取平均就好了。比如有两类,类A的AP值是0.5,类B的AP值是0.2,那么   m A P = ( 0.5 + 0.2 ) / 2 = 0.35 \ mAP=(0.5+0.2)/2=0.35  mAP=(0.5+0.2)/2=0.35

计算mAP的工具:https://github.com/Cartucho/mAP

mAP的计算的两种方式

在VOC2010以前,只需要选取当Recall >= 0, 0.1, 0.2, …, 1共11个点时的Precision最大值,然后AP就是这11个Precision的平均值。

在VOC2010及以后,需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,然后计算PR曲线下面积作为AP值。

代码实现

References

  • https://datascience.stackexchange.com/questions/25119/how-to-calculate-map-for-detection-task-for-the-pascal-voc-challenge
  • https://www.zhihu.com/question/53405779 推荐
  • https://blog.csdn.net/hsqyc/article/details/81702437
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值