首先给出一幅图:
图中绿色部分为人工标注的Ground Truth边界框,红色部分为模型预测的Bounding Box边界框(下边的图像中的红绿框也是这个意思)。
那么自然就会存在一个问题: 目标检测怎样才算正确?
- IoU大于指定阈值?
- 类别判断正确?
- cofidence大于指定阈值?
下面开始介绍上面的问题所涉及到的概念:
IoU:
IoU (Intersection over Union)即交并比,如图:
TP:
TP(True Positive):IoU > 0.5(并不一定是0.5,根据情况设定) 的边界框数量(同一Ground Truth只计算一次) ;
FP:
FP(False Positive):IoU <= 0.5 的边界框数量(或者是检测到同一个GT的多余检测框的数量):
FN:
FN(False Negative):没有检测到的GT的数量
准确率(查准率)Precision:
Precision = TP/(TP+FP),即模型预测的所有目标中,预测正确的比例。
召回率(查全率)ReCall:
Recall = TP/(TP+FN),即所有真实目标中,预测到且预测正确的比例。
如此图,TP = 1, FP = 1,FN = 1,Precision = 0.5, Recall = 0.5.
那么,为什么有准确率的前提下还需要计算召回率呢?原因看下图:
在这张图中,我有 三辆车 ,仅检测到一辆且IoU > 0.5, 则准确率为为1,但是能说这个检测算法好么? 显然不可以,因为他把 我的 另外两台车漏检了。
AP: P-R曲线下面积
P-R曲线: Precision-Recall曲线
mAP: mean Average Precision, 即各类别AP的平均值
下面这部分转载知乎作者AICV对AP相关知识的介绍,个人认为讲的很清楚了:
假设我们有 7 张图片(Images1-Image7),这些图片有 15 个目标(绿色的框,GT 的数量,上文提及的
all ground truths
)以及 24 个预测边框(红色的框,A-Y 编号表示,并且有一个置信度值)
根据上图以及说明,我们可以列出以下表格,其中 Images 代表图片的编号,Detections 代表预测边框的编号,Confidences 代表预测边框的置信度,TP or FP 代表预测的边框是标记为 TP 还是 FP(认为预测边框与 GT 的 IOU 值大于等于 0.3 就标记为 TP;若一个 GT 有多个预测边框,则认为 IOU 最大且大于等于 0.3 的预测框标记为 TP,其他的标记为 FP,即一个 GT 只能有一个预测框标记为 TP),这里的 0.3 是随机取的一个值。
通过上表,我们可以绘制出 P-R 曲线(因为 AP 就是 P-R 曲线下面的面积),但是在此之前我们需要计算出 P-R 曲线上各个点的坐标,根据置信度从大到小排序所有的预测框,然后就可以计算 Precision 和 Recall 的值,见下表。(需要记住一个叫累加的概念,就是下图的 ACC TP 和 ACC FP)
- 标号为 1 的 Precision 和 Recall 的计算方式:Precision=TP/(TP+FP)=1/(1+0)=1,Recall=TP/(TP+FN)=TP/(
all ground truths
)=1/15=0.0666 (all ground truths 上面有定义过了
)- 标号 2:Precision=TP/(TP+FP)=1/(1+1)=0.5,Recall=TP/(TP+FN)=TP/(
all ground truths
)=1/15=0.0666- 标号 3:Precision=TP/(TP+FP)=2/(2+1)=0.6666,Recall=TP/(TP+FN)=TP/(
all ground truths
)=2/15=0.1333- 其他的依次类推
然后就可以绘制出 P-R 曲线
得到 P-R 曲线就可以计算 AP(P-R 曲线下的面积),要计算 P-R 下方的面积,一般使用的是插值的方法,取 11 个点 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] 的插值所得
得到一个类别的 AP 结果如下:
要计算 mAP,就把所有类别的 AP 计算出来,然后求取平均即可。
最后写一下COCO的评价指标
注意这里的AP就是mAP,但不是类别平均那个mAP,而是不同评价标准下的mAP.
参考:
[1] 霹雳吧啦Wz,《目标检测mAP计算以及coco评价标准》,Bilibili.
[2]《目标检测中的mAP是什么含义?》 , AICV的回答 , 知乎