mAP详解

1、理解各类名词

在了解mAP时,需要先了解一些名词:

IOU
I O U = p r e ⋂ t a r p r e ⋃ t a r IOU = \frac{pre\bigcap tar}{pre\bigcup tar} IOU=pretarpretar pre表示预测出来的框,tar表示目标框(准确的框)

True Positive: I O U > 0.5 IOU>0.5 IOU>0.5 0.5为阈值(可自行调整),在IOU的值大于一定阈值时,就设为定位准确,表示定位成功
False Positive: 0 < I O U < 0.5 0<IOU<0.5 0<IOU<0.5 0.5为阈值(可自行调整),在IOU的值小于一定阈值时,就设为定位不准确,表示定位失败
True Negative: 没有目标却检测出了目标
False Negative: 有目标却没有检测出目标

Precision: 表示框出目标的准确率
T P T P + F P \frac{TP}{TP+FP} TP+FPTP
Recall: 表示找到目标的概率
T P T P + F N = T P 实 际 目 标 个 数 \frac{TP}{TP+FN}=\frac{TP}{实际目标个数} TP+FNTP=TP

注意:
precision和recall都是一个长度为N的序列,N表示N个检测到的目标。之所以为N是因为每判断一个检测框是TP/FP/TN/FN,都会计算一下precision和recall,所以检测到N个框就对应N个precision和recall。

举例说明:
(来源:https://github.com/rafaelpadilla/Object-Detection-Metrics)

实际有15个目标,检测出来个24目标(下图detections的个数),正确的有7个(下图TP的个数):
在这里插入图片描述
按照confidence排序,并且计算precision和recall
按照下图的列表名:
p r e c i s i o n = A c c T P A c c T P + A c c F P precision= \frac{Acc TP}{Acc TP+Acc FP} precision=AccTP+AccFPAccTP r e c a l l = A c c T P 15 recall = \frac{Acc TP}{15} recall=15AccTP
Acc TP 和Acc FP是TP和FP的累计值

在这里插入图片描述
最终得到的precision和recall都是N=24的列表

2、IOU的计算

可以使用max和min来求,可以根据下面的方式自己画图,能够包含所有情况

#pre框[xmin_1,ymin_1,xmax_1,ymax_1] , target框 [xmin_2,ymin_2,xmax_2,ymax_2] 
 if(xmin_2 > xmax_1 or xmax_2 < xmin_1 or ymin_2 > ymax_1 or ymax_2 < ymin_1):
      b_xmin, b_ymin, b_xmax, b_ymax = 0,0,0,0
 else:
      b_xmin, b_ymin, b_xmax, b_ymax = max(xmin_1,xmin_2), max(ymin_1,ymin_2), min(xmax_1,xmax_2), min(ymax_1,ymax_2)
      I = (b_xmax-b_xmin)*(b_ymax-b_ymin)
      U = (xmax_1-xmin_1)*(ymax_1-ymin_1)+(xmax_2-xmin_2)*(ymax_2-ymin_2)
      IOU = I/(U-I)

3、AP的计算

首先要注意的是AP是对一个类别进行计算。所以如果是对多张图片做检测要算mAP的话,在计算AP时,要将所有test图片中的检测结果都拿出来,按照类划分,按类计算AP值。

计算方法有两个:11点采样法和P-R曲线法

3.1 11点采样法

将Recall分为{0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}这11个点。取recall在这些点到1区间内最大的precision,相加。除了1,是recall=1对应的precision
这样的原因是因为计算AP要满足precision不下降的原则。
举例说明
上述的例子
1、recall取[0,1]区间内最大的precision precision=1
2、recall 取[0.1,1]区间内最大的precision precision=0.6666
3、recall 取[0.2,1]区间内最大的precision precision=0.4285
4、recall 取[0.3,1]区域内最大的precision precision=0.4285
5、recall 取[0.4,1]区域内最大的precision precision=0.4285
6、recall 取[0.5,1]。
按照上述的例子,最大的recall值是0.4666 也就是 7/15 所以这之后的区间precision=0
7、最后recall=1时 precision也为0

所以 A P = ( 1 + 0.666 + 0.4285 + 0.4285 + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0 ) / 11 AP=(1+0.666+0.4285+0.4285+0.4285+0+0+0+0+0+0)/11 AP=(1+0.666+0.4285+0.4285+0.4285+0+0+0+0+0+0)/11

3.2 P-R曲线法

根据得到的precision和recall得到每个类别的P-R曲线图,如下图所示:
在这里插入图片描述
(图片来自:https://blog.csdn.net/weixin_41006390/article/details/106086210)

每条P-R曲线所围的面积就是AP值。

3.3 mAP的计算

mAP是对各类AP求均值: m A P = 1 m ∑ i = 1 m A P mAP=\frac{1}{m}\sum_{i=1}^{m}AP mAP=m1i=1mAP,m为类别数。

参考链接:
https://blog.csdn.net/weixin_41006390/article/details/106086210
https://github.com/rafaelpadilla/Object-Detection-Metrics

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值