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=pre⋃tarpre⋂tar 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=m1∑i=1mAP,m为类别数。
参考链接:
https://blog.csdn.net/weixin_41006390/article/details/106086210
https://github.com/rafaelpadilla/Object-Detection-Metrics