目标检测指标主要有两项一个是AP一个就是mAP。
一、 AP(Average Precision)
1、我们就拿faster rcnn预测出的bounding box进行举例。
a. 首先将模型预测的结果进行置信度筛选,选择置信度高的bounding box。
b. 第二步,我们会对预测结果通过置信度进行降序排列,形成排列rank。
c. 第三步, 给定rank级别,计算recall以及precision。
d. 第四步, 计算AP
* 这里需要强调的是第四步计算AP的过程:
VOC | 计算过程 |
---|---|
VOC2010以前 | 只需要选取当Recall >= 0, 0.1, 0.2, …, 1共11个点时的Precision最大值,即当recall>0时,Precision的最大值,当recall>0.1时Precision的最大值,依次类推。然后AP就是这11个Precision的平均值。 |
VOC2010之后 | 需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,然后计算PR曲线下面积作为AP值。 |
TP IOU>0.5检测框的数量
FP IOU<0.5的检测框
FN 没有检测的GT数量
TP+FN 为总GT数量
Precision = TP / (TP + FP)
Recall = TP / (TP + FN)
参考链接: https://www.bilibili.com/video/BV1ez4y1X7g2/?spm_id_from=333.337.search-card.all.click&vd_source=d308c0d18acce00fe04e14a7b7c80f00
相同的recall 保留最大的precision
2. 示例
Rank | Rrecision | Recall | 计算过程 |
---|---|---|---|
Rank = 1 | Precision = 1.00 | Recall = 0.14 | 表示只预测出来了一个框BB1,这个框BB1恰好是和ground truth的IoU > 0.5,所以可以作为一个TP。TP=1,没有预测出错误的飞机,所以FP=0,但是实际上一共有5+2=7个真值飞机(这里的2没有表示出来,是confidence score低于0.5即还有BB10 以及BB11),所以相当于漏检了6个飞机,即FN=6,。因此,可以计算出Precision=1/1=1;Recall=1/7=0.14 |
Rank=2 | Precision=1.00 | Recall=0.29 | 表示预测出来了两个框BB1和BB2,BB1和BB2和ground truth的IoU > 0.5,所以都可以作为TP。TP=2,没有预测出错误的飞机,所以FP=0,但是实际上一共有5+2=7个真值飞机,所以相当于漏检了5个飞机,即FN=5,。因此,可以计算出Precision=2/2=1;Recall=2/7=0.29 |
Rank=3 | Precision=0.66 | Recall=0.29 | 表示预测出来了三个框BB1、BB2和BB3,BB1和BB2和ground truth的IoU > 0.5,所以都可以作为TP。TP=2,BB3预测错误,所以FP=1,但是实际上一共有5+2=7个真值飞机,所以相当于漏检了5个飞机,即FN=5,。因此,可以计算出Precision=2/3=0.66;Recall=2/7=0.29 |
Rank=4 | Precision=0.50 | Recall=0.29 | ... |
Rank=5 | Precision=0.40 | Recall=0.29 | ... |
Rank=6 | Precision=0.50 | Recall=0.43 | ... |
Rank=7 | Precision=043 | Recall=0.43 | ... |
Rank=8 | Precision=0.38 | Recall=0.43 | ... |
Rank=9 | Precision=0.44 | Recall=0.57 | ... |
Rank=10 | Precision=0.50 | Recall=0.71 | ... |
- VOC2010之前的做法
Recall 条件 | Prercision最大值 |
---|---|
Recall >= 0时 | Percision最大为1 |
Recall >= 0.1时 | Percision最大为1 |
Recall >= 0.2时 | Percision最大为1 |
Recall >= 0.3时 | Percision最大为0.5 |
Recall >= 0.4时 | Percision最大为0.5 |
Recall >= 0.5时 | Percision最大为0.5 |
Recall >= 0.6时 | Percision最大为0.5 |
Recall >= 0.7时 | Percision最大为0.5 |
Recall >= 0.8时 | Percision最大为0 |
Recall >= 0.9时 | Percision最大为0 |
Recall >= 1时 | Percision最大为0 |
此时Aeroplane类别的 AP = 5.5 / 11 = 0.5。
-
VOC2010之后的做法
对于Recall >= 0, 0.14, 0.29, 0.43, 0.57, 0.71, 1,我们选取此时Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0。此时Aeroplane类别的 AP = (0.14-0)1 + (0.29-0.14)1 + (0.43-0.29)0.5 + (0.57-0.43)0.5 + (0.71-0.57)0.5 + (1-0.71)0 = 0.5
mAP(mean Average Precision)
mAP 就是所有类别的 AP 的均值.
当我们计算 mAP 值时,需要注意一些 “点”:
mAP 的计算通常都是在一个数据集上计算的。尽管很难去解释模型的绝对性能,但 mAP 作为一个较好的相对指标,有助于评价模型。当我们在一些流行的公开数据集上计算该指标时,可以很容易地使用 mAP 去比较目标检测新旧算法的性能。
根据训练集的类别分布情况,不同类别的 AP 值可能会出现较大差异(训练数据较好的类别有较高的 AP 值,训练数据不好的类别有较低的 AP 值)。所以你的 mAP 可能是稳健的,但是你的模型可能对某些类别的效果较好,对于某些类别的效果不好。因此在分析模型时,建议去查看下各类别的 AP 值。这些值可以作为添加训练数据的一个参考指标。