关于目标检测中COCO的mAP计算方式介绍

1.AP(现在目标检测论文中COCO数据集上的衡量标准):目标检测算法的常用评价标准,实际上是mmAP,因为是多个IOU阈值的平均mAP,含义为IOU阈值(检测框与groundtruth的iou大于该阈值时认为是正样本)从0.5到0.95逐步递增0.05时共10个IOU阈值下的mAP的平均值。(而在Pascal VOC上只计算IOU阈值为0.5下的mAP ,所以COCO评价标准更全面)

2.AP50:即IOU阈值为0.5时的mAP.

3.mAP:即在某个IOU阈值下的多个类别的平均AP值。

4:AP:即在某个IOU阈值下某个类别的PR曲线的面积(即平均precision)

5.PR曲线
最难理解的部分其实就是PR曲线,以及通过PR曲线如何得到AP,接下来主要以COCO的计算方式,即主要介绍pycocotools接口中的cocoeval是如何计算PR以及AP的,具体可以去看源码:
(1)假设在以某个iou阈值下某个类别得到了整个测试集的所有检测框,按照置信度从大到小排序,数量为N(N是所有图片的检测框数量(一般每个图片取前100个)之和,由于置信度阈值设成了0.001,因此N会很大,一般是上万的数值),那么通过只取前1个检测框,可以得到一组PR(precision,recall)只,取前2个检测框又可以得到一组PR值,同理一直取到前N个检测框,就可以总共得到N组PR值(此处可以去看cocoeval中的accumulate函数部分,代码实现非常巧妙,通过np.cumsum累加函数实现)
(2)coco中通过设置101个recall阈值(从0开始每隔0.01直到1),然后计算出recall大于每个阈值的最大precision(从上一步的N组PR中计算,代码实现同样在accmulate函数中,通过从后往前的遍历以及移位操作以及np.searchsorted函数实现),因此就可以得到101组PR值
(3)summarize,这一步其实就是对每个IOU阈值下的101组PR值中,取P(precision)的平均数(AP的定义不是PR曲线的面积吗,但是代码中是取平均值,因为101个R阈值间隔很小而且相等,我想应该是一种近似方式),就得到了该IOU阈值下该类别的AP
(4)那么AP50就是指IOU阈值为0.5时,对各个类别的AP求平均值的结果
(5)mAP,就是IOU从0.5,每隔0.05一直到0.95共计10个阈值下的平均类别AP,所以说其实也可以理解为mmAP(平均IOU阈值,平均类别)

要加深理解可以看知乎这篇文章:
https://zhuanlan.zhihu.com/p/55575423
当然,要想完全理解,最好把pycocotools接口的源码消化一下

****备注:****上面confidence阈值指的是预测框中含有object的置信度,IOU阈值指的是预测框与真实标签的的重叠率大于该阈值时被判定为正样本(不要与NMS中的IOU阈值相混淆)

你可能感兴趣的:(机器学习,深度学习)