对目标检测下的模型评估指标MAP的学习和思考

MAP(Mean Average Precision)的基本思路:

对于有m个类别的目标检测问题来说,MAP就是这m个类别的AP(Average Precision)的平均值。那什么是AP呢?简单来说,AP就是整个测试数据集中某个类别物体的平均识别准确率。具体的计算过程如下:

​ 假设测试集中有m张图片,k个预测框。所以共有m*k个预测结果,每个预测结果在神经网络输出时会分配一个预测概率,大部分论文称之为置信度(confidence)。另外,每个预测结果会得到一个预测框的坐标,将这个预测值与ground true进行IOU(交并比)计算,如果IOU大于设定的阈值(threshold)那么将这个预测结果的标签(label)设为positive;反之,则设为negtive。最后,将所有的预测结果按照置信度从高到低排序。如下表示意:

rank BB confidence GT
1 BB_9_1 0.9 1
2 BB_20_2 0.9 1
3 BB_4_3 0.89 1
4 BB_5_2 0.88 0
5 BB_10_2 0.87 1
6 BB_11_1 0.86 0
7 BB_30_2 0.85 0
8 BB_10_4 0.85 1
... ... ... ...

说明:BB __ 图片序号 __ 预测框序号,IOU>=threshold时GT=1。

接下来,从上往下依次设定对应的Rank为正反分界线,分界线往上为预测正,分界线往下为预测负。然后根据准确率和召回率的定义计算:

具体计算过程为,假设ranks=m,那么就有m个结果预测为正,其中有a个GT值为1那么在这个rank下的precision为

而对于召回率recall的计算,其分母有点特别。分母是由整个数据集下,预测为正实际也为正的TP值+漏检的部分(FN 也就是在预测过程中没有预测框出现的部分),整体记为p,故有表达式:

通过以上计算过程,可以得到一系列的precision和recall值,所以可以作出P-R曲线。为了解决P-R曲线出现的摇摆现象,使用插值方法进行平滑。最后计算P-R曲线下所包围的面积就可以得到AP值。

对于MS COCO数据集中的mAP计算采用了0.5:0.5:0.95的IOU阈值进行计算AP后再作平均得到的结果。

总结:

今天花了将近一天来理解mAP指标,刚开始没有办法理解,为什么要根据confidence进行排序? confidence的具体含义是什么? GT值与IOU的关系?GT值存在什么样的实际含义?召回率的计算?P-R曲线的平滑?等等问题。

GT值是根据目标检测中已经预测出的边界框是否包含目标物体的反应。如果包含目标则GT=1,即预测为正实例,实际也是正实例;如果不包含目标则GT=0,即预测为正实例而实际上为负实例;是否包含目标通过交并比IOU来衡量。换句话说,如果网络在相应的位置输出了预测框,说明网络认为此位置上存在检测目标,但是实际上这个预测框中并不一定包含目标,也就是通过上面所说的GT值来衡量的;还有一种情况是,网络在存在目标的位置处没有输出预测框,这也就是我们所说的FN实例,又称为漏检实例,这在上面计算recall过程中用到了。

从整体上看,mAP综合了预测类别和预测位置两个方面的内容,这也使得评估结果更加客观准确。

记下自己学习理解过程,以后再慢慢完善吧。

示例代码:

  • https://github.com/facebookresearch/Detectron/blob/05d04d3a024f0991339de45872d02f2f50669b3d/lib/datasets/voc_eval.py

参考:

  • https://zhuanlan.zhihu.com/p/56961620
  • https://zhuanlan.zhihu.com/p/37910324

你可能感兴趣的:(对目标检测下的模型评估指标MAP的学习和思考)