mAP是mean of Average Precision的缩写,意思是平均精确度(average precision)的平均(mean),是目标检测中模型性能的衡量标准。
一、正确率和召回率
TP(True Positive):正确预测为正样本(真正例)
FP(False Positive):错误预测为正样本(假正例)
FN(False Negative):错误预测为负样本(假负例)
TN(True Negative):正确预测为负样本(真负例)
准确率:正确预测为正样本数量/预测为正样本数量
召回率:正确预测为正样本数量/实际正样本数量
二、AP指标(Average Precision)和mAP指标(mean Average Precision)
AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。
TP:如果一个预测框与某一个GT(Grounding Truth)的IoU大于阈值,即认为这个预测框正确(真正例),标记为TP。在实际预测中,经常会出现多个预测框与同一个GT的IoU都大于阈值,这时通常只将这些预测框中置信度最大的算作TP,其它算作FP。
FP:除TP之外的标记为FP (假正例,一般都只设置一个TP标志位,如果当前预测框正确,那么这个标志位设置为1代表TP,否则设置为0代表FP)。
计算某一类别(A类别)的AP:
以数据集(所有图片)为单位计算PR曲线,以图片为单位计算TP、FP,所以我们需要建立一个数组记录每个图片中所有预测框的TP和置信度。
①标记所有图片中的预测框(标记为TP或FP,即1或0)
所有预测框都是Positive(正例),要区分TP和FP(真正例和假正例)。将一个预测框分别与同一张图片、同一类别的所有GT计算IoU,取最大IoU所对应的GT。若IoU大于阈值,则标记为TP,否则标记为FP。同时还需要判断GT是否被访问过,若未被访问过,则标记为TP,否则标记为FP。
假设现在数据集中一共有3张图片,第1张图片中有2个A类别的GT,有3个A类别的预测框,置信度分别为(0.3, 0.5, 0.9),发现置信度为0.3和0.9的与GT相匹配,则将这两个记为TP。建立用于计算PR曲线的数组metric和记录A类别gt总数的变量n_GT,向数组中加入(0.3, 1), (0.5, 0), (0.9, 1)三组数据(置信度,是否为TP),并将n_GT累加2;第2张图片中没有A类别的物体(GT数量为0),则n_GT+=0,但有一个关于A类别的预测框,置信度为0.45,则向metric中加入(0.45, 0);第3张图片中有1个A类别的物体,但没有预测框,则n_gt+=1。
②按置信度排序所有预测框
最终将得到的A类别的n_GT=6,metric按置信度从大到小进行排序为(0.9, 1), (0.85, 1), (0.8, 1), (0.7, 1), (0.5, 0), (0.45, 0), (0.35, 0), (0.3, 1), (0.1, 0) 共9个预测框,依次去掉metric中最后一组数据,可以得到(5/8, 5/6), (4/7, 4/6), (4/6, 4/6), (4/5, 4/6), (4/4, 4/6), (3/3, 3/6), (2/2, 2/6), (1/1, 1/6) 共9组PR值。
③计算AP值
因为A类别一共有6个GT,所以Recall的值应该是从1/6~6/6共6个,也就是要取6组PR值计算平均Precision,因为这个例子中没有出现Recall=6/6的情况,所以R=6/6时的Precision算作0,即类别A的AP=(1/1 + 2/2 + 3/3 + 4/4+ 5/8 + 0) / 6 = 0.7708。按照同样的方式计算其他类别的AP,最后求所有AP的均值,即可得到mAP。
PR曲线:
设总数为N的样本,分别将Top-1,TOP2,…Top-N预测为正样本,则可以获得N组PR值。以Precision值为纵坐标,以对应的Recall值为横坐标,将这N组PR值在图上画出来,就是P-R曲线,如下图。