本文介绍coco style的map计算方式

相关概念

  1. map mean average precision,表示各类别ap的平均值
  2. ap average precision,表示P-R曲线下的面积
  3. p precision,查准率,p=TPTP+FPp=\frac{TP}{TP+FP}
  4. r recall,召回率,r=TPTP+FNr=\frac{TP}{TP+FN}
  5. TP true positive,在detection中,表示成功检测到某个ground truth bounding box的预测框的数量
  6. FP false positive,表示没能匹配到某个ground truth bounding box的预测框的数量
  7. FN false negative,表示没能检测出来的ground truth bounding box 注意FNFP是不一样的
  8. 判定阈值 表示判断预测框成功检测出某个gt bbox的iou阈值,即iou(dt,gt)iou(dt, gt)大于该阈值时,才认为dtdt成功匹配到了gtgt,在coco style的map计算中,存在多个判定阈值0.5,0.55,0.6,...,0.950.5, 0.55, 0.6, ..., 0.95

为了弄清楚cocoapi是如何计算map的,我们需要搞清楚下面几个问题

如何计算TP和FP

计算TP和FP其实就是为所有的预测框分配gt bbox。
cocoapi的分配算法如下所示:
输入: 图片 II,类别 CC,判定阈值thresholdthreshold
过程:

  • 找到II上所有属于CC类的预测框集合DD
  • 找到II上所有属于CC类的gt bbox集合GG
  • DD按照分类置信度降序排列
  • for d in Dfor\ d\ in\ D
    • for g in Gfor\ g\ in\ G
      • 对于任意gi in Gg_{i}\ in\ G,如果都有iou(d,g)>=iou(d,gi)iou(d,g)>=iou(d,g_{i})iou(d,g)>=thresholdiou(d,g)>=threshold,则ddgg匹配。
      • G=GgG=G-g

这样就为图片II上属于CC类的预测框分配了gt bbox。一部分预测框分配到了gt bbox,一部分预测框没有分配到gt bbox,还有一部分gt bbox没有被任何预测框匹配。
接着,我们可以找到所有整个验证集上(例如coco val2017)上,属于CC类的预测框,然后将这些预测框按照分类置信度排列起来,假设gt bbox的数量为9,假设我们的检测结果如下:

预测框 分类置信度 是否匹配到gt bbox
dt1dt_{1} 0.95 true
dt2dt_{2} 0.9 true
dt3dt_{3} 0.85 true
dt4dt_{4} 0.8 false
dt5dt_{5} 0.75 true
dt6dt_{6} 0.7 true
dt7dt_{7} 0.65 false
dt8dt_{8} 0.6 true
dt9dt_{9} 0.55 false
dt10dt_{10} 0.5 true

按照上面提到的算法判断一个预测框是否匹配到gt bbox,可以得出上面的表格,不难计算此时TP=7TP=7FP=3FP=3,由于总共有9个gt bbox,所以还有2个gt bbox没有被检测出来(即没有任何一个预测框和gt bbox匹配),所以FN=2FN=2,所以p=TPTP+FP=0.7p=\frac{TP}{TP+FP}=0.7r=TPTP+FN=0.78r=\frac{TP}{TP+FN}=0.78

如何画出p-r曲线

ap是p-r曲线下的面积。
我们现在已经得到了验证集(如coco val2017)的类别CC的检测结果,并且做出了上面的表格,接下来就需要画出p-r曲线。此时要计算各个r下的p值,注意TP和FP是累积的。可以对上表进一步计算:

预测框 分类置信度 是否匹配到gt bbox TP FP pp rr
dt1dt_{1} 0.95 true 1 0 1.0 0.11
dt2dt_{2} 0.9 true 2 0 1.0 0.22
dt3dt_{3} 0.85 true 3 0 1.0 0.33
dt4dt_{4} 0.8 false 3 1 0.75 0.33
dt5dt_{5} 0.75 true 4 1 0.8 0.44
dt6dt_{6} 0.7 true 5 1 0.83 0.56
dt7dt_{7} 0.65 false 5 2 0.71 0.56
dt8dt_{8} 0.6 true 6 2 0.75 0.67
dt9dt_{9} 0.55 false 6 3 0.67 0.67
dt10dt_{10} 0.5 true 7 3 0.7 0.78

最终rr接近于1而pp接近于0。我们可以用上表的中的rr为横坐标,pp为纵坐标画出一条曲线,即p-r曲线,这条曲线通常情况是单调递减的曲线,起点为(0,1)(0,1),终点为(1,0)(1,0),想了解更多请参见西瓜书。
cocoapi如何计算map
图片来源见水印

如何计算ap

目前我们得到了验证集上CC类的p-r曲线,CC类的ap值即为p-r曲线下的面积,由于这条曲线的具体表达式很难找出,所以我们找一个估计值来尽可能接近真实的ap值。
在cocoapi的估计方式对这条曲线进行均匀的采样,即分别取r=0.00, 0.01, 0.02, ,1.00r=0.00,\ 0.01,\ 0.02,\ \cdots ,1.00时对应的pp值,然后计算这101个pp值得平均值,就得到了该验证集上CC类的ap。

如何计算map

只需要计算全部类别的apap的均值。

note

在coco style的map的计算过程中,还有另外两个约束条件maxdet,预测框的scale范围,这些都是用来约束预测框的。
比如maxdet=100,就在上面算法中,寻找DD时,只将图片IICC类预测框分类置信度最高的100个框加入DD
当scale范围为[0322][0,32^{2}]时,就在上面算法中,寻找DD时,只将图片IICC类所有scale落在[0322][0,32^{2}]范围内的预测框加入DD
后面的计算方式均不变。

转载请注明出处

相关文章:

  • 2021-11-02
  • 2021-12-11
  • 2021-08-24
  • 2022-12-23
  • 2021-10-25
  • 2021-07-16
  • 2021-12-27
  • 2022-01-19
猜你喜欢
  • 2021-11-28
  • 2022-02-07
  • 2022-12-23
  • 2021-10-10
  • 2022-12-23
  • 2022-02-23
相关资源
相似解决方案