reference:https://github.com/rafaelpadilla/Object-Detection-Metrics
计算mAP的github:https://github.com/Cartucho/mAP
1.IoU
就是交并比,衡量bounding-box和ground Truth的重合程度。
2.TP、TN、FP、FN
True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数;
False positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
False negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。
在目标检测中:
TP:预选框检测检测正确,即IoU>=0.5的预选框
FP:预选框检测检测错误,即IoU<0.5的预选框
FN:未被检测到的ground Truth
TN:不使用。这将代表纠正错误检测。在目标检测任务中,有许多可能的边界框在图像中不应被检测到。因此,TN将是所有可能未被检测到的边界框(图像中有如此多的可能框),这就是指标不使用它的原因。
3.Precision&Recall
精度 :
召回率:
4.Precision-Recall curve
根据预测的结果对样例进行排序,本文使用置信度confidence作为预测结果,排在前面的是模型认为”最可能“是正例的样本,排在最后的则是模型认为”最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的精度和召回率。以精度为纵轴,以召回率为横轴,就可以获得“P-R曲线”。
P-R曲线是评估对象检测器性能的好方法,因为通过绘制每个对象类的曲线可以改变置信度。如果一个特定类别的物体探测器的精度随着召回的增加而保持高水平,则被认为是好的,这意味着如果改变置信度阈值,精度和召回率仍然很高。
5.Average Precision
AP是在0和1之间的所有召回值的平均精度。就是P-R曲线的曲线下面积。
由于曲线难以计算,所以我们采用11点插值法来求得,2012年后采用8点对应的Percision最大值,求取曲线面积即为AP值。
11点插值试图通过平均一组11个等间距召回级别[0,0.1,0.2,...,1]的精度来总结Precision x Recall曲线的形状:
其中:就是Percision对应点的最大值。
面积计算方法见下文。
mAP计算
有7个图像,其中15个ground-Truth由绿色边界框表示,24个预选框由红色边界框表示。每个检测到的对象都具有置信水平,并由字母(A,B,...,Y)标识。
1.计算出bounding-box与ground-Truth的IoU的值,利用阈值把预选框分为TP&FP
如果IOU>=30%,则考虑TP ,否则为FP。在一些图像中,存在多于一个与地面实况重叠的检测(图像2,3,4,5,6和7)。对于这些情况,采用具有最高IOU的检测,丢弃其他检测。“例如,单个对象的5个检测(TP)被计为1个正确检测和4个错误检测。
2.计算累计精度和召回率
这里:按置信度的从小到大,逐个把样本作为正例进行预测,则每次可以计算出当前的精度和召回率。
ground-Truth=15
3.绘制P-R曲线图
可以发现随着选定的样本越多,召回率一定会越高,而精度则呈下降趋势。如果一个特定类别的物体探测器的精度随着召回的增加而保持高水平,则被认为是好的。
4.计算AP值
11点插值平均精度的想法是在一组11个召回级别(0,0.1,...,1)处平均精度。插值精度值是通过采用其召回值大于其当前调用值的最大精度获得的,如下所示。即Recall=[0,0.1,0.2,...,0.9,1]的11处Percision的最大值:[1,0.6666,0.4285,0.4285,0.4285,0,0,0,0,0,0]。
面积法:
平均精度(AP)可以解释为P-R曲线的近似AUC(面积)。
Recall=[0,0.0666,0.1333,0.2,0.2666,0.3333,0.4,0.4666],选取Percision对应点的最大值:[1,1,0.6666,0.4285,0.4285,0.4285,0.4285,0.3043],然后求曲线的面积。
看一下上图,我们可以将AUC划分为4个区域(A1,A2,A3和A4):
计算总面积,我们有AP:
5.计算mAP
AP衡量的是对一个类检测好坏,mAP就是对多个类的检测好坏。就是简单粗暴的把所有类的AP值取平均就好了。比如有两类,类A的AP值是0.5,类B的AP值是0.3,那么mAP=(0.5+0.3)/2=0.4