【如何通俗易懂的理解mAP】——mAP理解

【如何通俗易懂的理解mAP】——mAP理解

明确问题:

大背景是object detection, 我就以正在学的RetinaNet应用背景为例, 识别出来的每一个框都有N+1个score, 对应着N个class和1个background, 我们会选score最高的那个作为最终的判断基本定义: precision和recall的含义, preicision是在你认为的正样本中, 有多大比例真的是正样本, recall则是在真正的正样本中, 有多少被你找到了。

问题核心:

我们需要一个对于score的threshold, 为什么呢? 比如在一个bounding box里, 我识别出来鸭子的score最高, 可是他也只有0.1, 那么他真的是鸭子吗? 很可能他还是负样本。 所以我们需要一个阈值, 如果识别出了鸭子而且分数大于这个阈值才真的说他是正样本, 否则他是负样本那么threshold到底是怎么影响precision和recall的呢?
我们还是用鸭子的例子

  • 如果threshold太高, prediction非常严格, 所以我们认为是鸭子的基本都是鸭子,precision就高了;
  • 但也因为筛选太严格, 我们也放过了一些score比较低的鸭子, 所以recall就低了如果threshold太低, 什么都会被当成鸭子, precision就会很低, recall就会很高;

这样我们就明确了threshold确实对鸭子的precision和recall产生影响和变化的趋势, 也就带来了思考, precision不是一个绝对的东西,而是相对threshold而改变的东西, recall同理, 那么单个用precision来作为标准判断, 就不合适。 这是一场precision与recall之间的trade off, 用一组固定值表述不够全面, 因为我们根据不同的threshold, 可以取到不同(也可能相同)的precision recall值。 这样想的话对于每个threshold,我们都有(precision, recall)的pair, 也就有了precision和recall之间的curve关系

有了这么一条precision-recall curve, 他衡量着两个有价值的判断标准, precision和recall的关系, 那么不如两个一起动态考虑, 就有了鸭子这个class的Average Precision, 即curve下的面积, 他可以充分的表示在这个model中, precision和recall的总体优劣。

最后, 我们计算每个class的Average Precision, 就得到了mean Average Precision

上一篇:8、特征选择


下一篇:【opencv-python】 cv2.threshold(…)图像阈值处理(2)