前言:该博客没有进行IOU Precision Recall等指标的计算讲解,默认这些基本知识已经掌握,这里只对 map 中比较难懂且和其他博客中存在歧义的部分进行讲解。
目标检测中的 map 计算:
举个栗子:
Image 1:预测出了5个框(在一定的阈值下,且经过了NMS等处理),真实的标注信息只有三个框(也就是只能有3个correct 框),将5个预测框通过置信度进行排序,然后分别从上至下计算 precision 和 recall ,得到这些值就可以绘制 P-R 曲线了,计算面积就是最终的AP值(这里计算的就是该张图像的AP值,一般以batch为单位计算)。
上面提到的说计算P-R曲线围成的面积,这里有一点需要注意,直接计算面积比较麻烦,常见的作法是进行平滑,recall的值不动(x 轴),将precision 的值用其之后的最大值进行替换,类似下面这样:
原始 P-R 曲线:
平滑后 P-R 曲线:
使用 11 点法进行 AP 的计算(或者直接计算也可以):
11点法的计算: (41+60.75+0.6*1)/11 = 0.827
note: 一个 batch 内的怎么计算,将所有图像的 预测框输出按照 置信度 进行排序,然后进行同样的计算。
二、图像检索中的 map 计算:
map@5:其表达的意思和 top-5 相同,前五个预测概率输出的 map
计算方式和上述一样,但是有一点不一样的是:预测输出和真实的label都是固定的大小,比如在目标检测(OB)中,真实框的个数和预测框的个数往往是不相同的,但是这里一般是相同的,即人工取前五个。
这里说一个特殊的例子:(非特殊的和上述计算方式相同)
特殊且常见场景:在五个预测输出中只有一个正确(比如输出为:五个人的名字ID,其中只有一个是正确的,或者输出为五个类别:狗猫飞机等,但真实的只属于其中的一个)
计算方式直接计算 precision 即可,如下图:
参考资料:kaggle中一个 whale 计算方式notebook资料链接
你可以尝试用上述目标检测中提到的方式进行计算,结果是一样的,其中的道理也是一样的,只不过简化了计算流程(在很多的博客中介绍的AP就是这样的计算方式-因为这种场景很常见)