MAP的计算方法(简单总结)
MAP的计算方法
在计算MAP之前,要对TP/TN/FP/FN,precision/recall的计算有一定的了解。
一句话概括AP:recall在【0-1】范围内的平均precision值
一句话概括MAP:所有类别的平均AP
得出PR曲线
一般来说,p-r曲线是p越大,r越小;p越小,r越大,跟具体的计算方式有关。
需要的内容:预测值,标签值
过程:
1.首先将所有的预测框按照得分从高到低排序
2.分别与同一张图片、同一类别的所有GTs计算IOU
3.根据阈值,判断这个预测框属于TP或者FP
4.得出当前阶段的precision和recall.(意思就是在遍历过程中,每判断一个预测框,就计算一次p、r)计算方法与以往有所不同:
precision = 当前遍历所检测的TP预测框个数 / 当前遍历检测到的TP和FP
recall = 当前遍历所检测的TP预测框个数 / 所有GT的个数
主要区别就在当前,目的是为了模仿取不同阈值每次遍历所有框计算pr曲线,用这种方法的时间复杂度是O(n).
所以一开始recall很低,precision很高,因为precision的分母基数小。
计算AP
现在不同的数据集计算AP方式略有不同,但总体都是一个微分计算PR曲线面积的思想。
voc2007的计算方式是先平滑曲线,对于每个点取其右边最大的precision值,连成直线。(也叫插值AP法)
然后取11个点(在recall坐标轴每个0.1取一个点),直接平均11个点的precision的和。
voc2012的方法是直接计算平滑后的曲线与recall轴围成的面积。结果更加准确。
COCO map
coco计算ap的时候采用的是101个插值点,考虑更为精细。
并且还计算了不同iou阈值的ap,下面结果的第一行就是iou阈值在(0.5-0.95)内每个0.05取一个值计算ap,然后取平均
还计算了不同的尺度对应的 ap,下图三行到六行是包括small 、medium 、large.
以下图为例是coco的结果指标:
参考:
pytorch物体检测实战---董洪义
https://zhuanlan.zhihu.com/p/60834912