目标检测指标--mAP
我们都知道在目标检测任务中,常用的指标有mAP,那么我们在进行目标检测时为什么要使用mAP这个指标?什么是mAP呢?
必备小知识
-
IoU
IoU(Intersection-over-Union)表示目标真实框与预测框的交并比,如下图所示:PB表示预测框,GT表示真实框I o U = P B ∩ G T P B ∪ G T IoU = \frac{PB∩GT}{PB∪GT} IoU=PB∪GTPB∩GT
-
TP FP FN
以上三个词大家初看可能容易混淆,但是解释各个字母的意义后就会很容易的分清楚:- T和F分别表示True和False代表正确识别还是错误识别
- P和N分别表示Positive和Negative代表正样本和负样本
TP:IOU大于一定阈值的检测框,被认为是正确识别为正样本
FP:IOU小于一定阈值的检测框,被认为是错误的识别为正样本
FN:被错误的识别为负样本,也就是被漏检的数量,这里需要注意漏检指的是没有被识别为正样本的目标个数,如果一张图像上有3个目标,仅有一个目标被正确识别为正样本,那么FN=2
以下图为例:
假设阈值为0.5,图中蓝色框表示真实标签,绿色框和红色框为被 识别为猫的预测框,其中绿色框与蓝色框的IOU>0.5,则绿色框表 示被正确识别的正样本,红色框与蓝色框的IOU<0.5,则红色框表 示被错位识别的正样本,因此TP = 1,FP = 1, FN = 1。 -
Precision(准确率)和Recall(召回率)
Precision指模型所有的预测结果中,预测正确的比例是多少,公式如下,其中TP表示识别对的样本数,TP+FP表示所有的预测框
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
Recall指所有的样本中,有多少被正确识别出来,公式如下,其中TP表示识别对的样本数,TP+FN表示所有的正样本
R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP对于上图:
Precision = 1 / (1+1) = 1/2
Recall = 1 / (1+1) = 1/2
为什么要使用mAP
Precision和Recall两个指标相对比较片面,不足以说明模型好坏,以下图举例,图像中共有三只小猫,蓝色表示真实标签,绿色表示预测框,模型预测下面这张图像结果如下:
按照置信度从高到底排序如下:
目标ID | 置信度 | 样本(IoU=0.5) |
---|---|---|
3 | 0.99 | 正样本 |
1 | 0.86 | 正样本 |
2 | 0.85 | 正样本 |
2 | 0.80 | 负样本 |
倘若我们选取置信度为0.9,那么对应的Precision和recall为:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
1
1
+
0
=
1
Precision = \frac{TP}{TP + FP} = \frac{1}{1 + 0} = 1
Precision=TP+FPTP=1+01=1
R e c a l l = T P T P + F N = 1 1 + 2 = 1 3 Recall = \frac{TP}{TP + FN} = \frac{1}{1 + 2} = \frac{1}{3} Recall=TP+FNTP=1+21=31
倘若我们选取置信度为0.8,那么对应的Precision和recall为:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
3
3
+
1
=
3
4
Precision = \frac{TP}{TP + FP} = \frac{3}{3 + 1} = \frac{3}{4}
Precision=TP+FPTP=3+13=43
R e c a l l = T P T P + F N = 3 3 + 0 = 1 Recall = \frac{TP}{TP + FN} = \frac{3}{3 + 0} = 1 Recall=TP+FNTP=3+03=1
以上可以看出不同的置信度对准确率和召回率的影响很大,我们不能单纯的仅依据其中一个指标来判断模型的好坏,因此mAP就出来啦。
如何计算mAP
好啦,下边开始进入正题,什么是mAP呢?在讲解mAP之前要先说一下AP,mAP是所有类别的AP均值,那么这个AP是什么呢?
AP(Average Precision) 指的是以Recall为横坐标,Precision为纵坐标的曲线下面积。由上文我们也知道在计算模型指标的时候,选取不同的置信度会得到不同的准确率和召回率,那么当我们选取多个置信度时,就会得到很多的准确率和召回率,我们以召回率为横坐标,以准确率为纵坐标画的曲线就是面积就是我们要求的AP啦。
代码
后续完善