这些天看论文很多处用到mAP,一直只是知道这是一个评估指标,但具体怎么得来的不太清楚,现在有空学习一下~
Mean Average Precision(mAP)用于评估目标检测模型的物体分类和定位性能,由于该类问题中每一个图片都可能包含许多不同类别的物体,故图像分类问题的标准指标precision并不适用。
Ground Truth
对于目标检测问题,真实标签数据应包括图像中物体的类别以及该图像中每个物体的真实边界框。
鉴别正确的检测结果并计算precision和recall
首先需得到True Positives、False Positives、True Negatives、False Negatives。
为了得到TP和FP,需要使用IoU,即预测框与ground truth的交集与并集之比,从而确定一个检测结果是正确的还是错误的。最常用的阈值为0.5,即IoU>0.5,认为是TP,否则FP(当然在一些数据集的评估指标中常采用不同的阈值)。
计算Recall需要得到负样本的数量,但由于图片中并未预测到物体的每个部分都视作Negative,故很难得到TN。但可以只计算FN,即模型漏检的物体数。
另一个需要考虑的是模型所给出的各个检测结果的置信度。通过改变置信度阈值可以改变一个预测框是属于Positive还是Negative。阈值以上的所有预测(Box + Class)均被认为是Positve。
对于每一张图片,ground truth数据会给出图片中各个类别的实际物体数,计算每个Positive预测框与ground truth的IoU,并取值最大的预测框。然后根据IoU阈值,可以得到各个类别的TP和FP。由此,可计算出各个类别的precision。
由TP,可以计算得到漏检的物体数,即FN。由此,可以计算出各个类别的recall。
计算mAP
mAP有许多不同的定义,在这里以PASCAL VOC竞赛的评估指标为例。
在这里,可以注意到,至少有两个变量会影响precision和recall,即IoU和置信度阈值。在PASCAL VOC竞赛中,IoU采用0.5。但置信度在不同模型中差异较大,会导致precision-recall曲线变化。于是,他们提出计算AP的一种方法。
首先对模型预测结果进行排序,按预测值置信度降序,给定一个rank,recall和precision仅在高于该rank值的预测结果中进行计算。改变rank会导致recall值的变化,共选择11个不同的recall值,分别为0,0.1,0.2,…,1.0,可认为选择了11个rank。由于按照置信度排序,实际就等价于选择了11个置信度阈值。
另外,在计算precision时,采用了插值的方法,对于某个recall值r,precision值取所有recall>=r中的最大值,以保证PR曲线是单调递减的,减少由于样本排序中小的变化引起的PR曲线的抖动。AP就定义为在这11个recall下的precision的平均值,表征整个precision-recall曲线,也就是曲线下的面积。average是对recall取平均,mean是对所有类别取平均(每一个类别当做一次二分类任务)。
对于各个类别,用上述方法计算AP,求所有类别平均即得到mAP。
在COCO数据集中,采用的是更严格的计算方式,计算了不同IoU阈值和物体大小下的AP(详情见COCO Detection Evaluation)。
举个例子加深自己的理解:
一个二分类问题,每个类分别五个样本,如果分类器性能足够好的话,那么根据预测的置信度降序排序,ranking结果应该是+1, +1, +1, +1, +1, -1, -1, -1, -1, -1。然而实际情况中,分类器预测的label和score都不可能如此完美;按score降序,加入根据给定的rank值,选择了前四个score(这个置信分数可能由softmax、SVM等方式计算得到),认为这四个是正样本,由此来计算recall和precision。而实际上这四个样本中只有两个是正样本,那么此时的recall=2(选择中包含的正样本数)/5(总共的正样本数)=0.4,precision=2(选择中的正样本数)/4(认为是正样本的个数)=0.5。
可以看出,recall和precision均和rank值有关,也就是由此选择前k个样本,关于k的函数。那么根据rank取值的不同,这里总共可以计算10对precision-recall值,recall依次为为1/,将它们画出来,得到的就是PR曲线。
观察可以得到PR曲线的一个趋势就是,recall值越高,precision就越低。假如我选择所有样本来计算,那么当然包括了所有的正样本,此时的recall=1(此处认为ground truth所有框均被检测出来。这里有个问题需要思考下,在实际的目标检测问题中,是根据检测出的bbox来计算其与ground truth的IoU以判断bbox是否为正确检测,这样判定出的正确样本数为bbox的数量,往往不等于ground truth的数量;不过bbox的数量是需要经过NMS处理的,处理后基本与检测的目标数差不太多,),precision就等于所有样本中正样本占比,当负样本占比很大时,那么precision就很小了。
内容参考:
博客:Measuring Object Detection models - mAP - What is Mean Average Precision?
代码:VOC数据集的mAP实现、COCO数据集mAP计算API
论文:End-to-end training of object class detectors for mean average precision