衡量目标检测模型性能--mAP(mean average precision)

使用机器学习解决常见目标检测问题通常有多个模型可用,每个模型基于不同的因素性能表现存在差异。

每个模型通过在数据集(训练、验证集)上的评判性能指标,性能衡量通过不同的统计特征进行评价--accuracy,precision,recall等等,统计参数的选择依赖于应用场景和案例。对于每一个应用,找到一个衡量指标对比模型的性能非常有必要。

这里讨论的是目标检测问题中常见的度量方法--mean average precision,mAP

目标检测器尽管能检测到图像中有一只猫,如果没有找到猫在什么位置,这也是不行的。基于语义甚至实例的分割检测方法需要预测图像中的目标位置,这时就用到mAP。

目标检测涉及到对不同类型的目标的分类和定位,即localisation + classifying

Gronud truth

对于任何算法,评价其性能时都需要与ground turth进行比较。我们仅仅知道训练集,验证集和测试集的ground truth信息。对于目标检测问题,ground truth包括图像,图像中的目标类,每一个类的真实的bounding box

衡量目标检测模型性能--mAP(mean average precision)_第1张图片

例如这里的一张图像,以及一些注释信息(bounding box,class text)

而下图是模型在训练时的图像

3个数量的几何定义了ground truth:

Class X coordinate Y coordinate Box Width Box Height
Dog 100 600 150 100
Horse 700 300 200 250
Person 400 400 100 500

 

让我们亲自动手,看看如何计算mAP。

我将在另一篇文章中介绍各种对象检测算法,它们的方法和性能。 现在,假设我们有一个训练有素的模型,我们正在验证集上评估其结果。

mAP

让我们说原始图像和GT注释就像我们在上面看到的那样。 训练和验证数据以相同的方式注释所有图像。

该模型将返回大量预测,但在这些预测中,其中大多数将具有非常低的置信度得分,因此我们仅考虑高于某个报告的置信度得分的预测。

我们通过模型运行原始图像,这是在置信度阈值处理后对象检测算法返回的带bounding box的图像:

现在,由于我们人类是专家物体探测器,我们可以说这些探测是正确的。 但是我们如何量化呢?

我们首先需要知道判断每个检测的正确性。 给定边界框正确性的度量标准是 -  IoU  -。 这是一个非常简单的视觉量。

就单词而言,有些人会说这个名字是自我解释的,但我们需要更好的解释。 需要详细解释,有一篇非常好的文章,可以参考。

IOU

iou: ∩∪比:

衡量目标检测模型性能--mAP(mean average precision)_第2张图片

衡量目标检测模型性能--mAP(mean average precision)_第3张图片


 

  • mAP: mean Average Precision, 即各类别AP的平均值
  • AP: PR曲线下面积,后文会详细讲解
  • PR曲线: Precision-Recall曲线
  • Precision: TP / (TP + FP)
  • Recall: TP / (TP + FN)
  • TP: IoU>0.5的检测框数量(同一Ground Truth只计算一次)
  • FP: IoU<=0.5的检测框,或者是检测到同一个GT的多余检测框的数量
  • FN: 没有检测到的GT的数量

识别正确的检测并计算精度percision和召回率recall

对于计算精度和召回,与所有机器学习问题一样,我们必须识别真阳性,误报,真阴性和假阴性。

为了得到真正的肯定和误报,我们使用IoU。使用IoU,我们现在必须确定检测(正)是否正确(真)或不正确(假)。最常用的阈值是0.5  - 即如果IoU> 0.5,则认为是真阳性,否则它被认为是假阳性。 COCO评估指标建议跨越各种IoU阈值进行测量,但为简单起见,我们将坚持使用0.5,这是PASCAL VOC指标。

为了计算Recall,我们需要负数的计数。由于我们没有预测某个物体的图像的每个部分都被认为是负面的,因此测量“真实”负片有点徒劳。所以我们只测量“假”否定词即。我们模型错过的对象。

此外,另一个需要考虑的因素是模型为每次检测报告的置信度。通过改变我们的置信度阈值,我们可以改变预测框是正面还是负面。基本上,高于阈值的所有预测(Box + Class)都被认为是Positive box,而它下面的所有预测都是Negatives。

现在,对于每个图像,我们都有地面实况数据,它告诉我们该图像中给定类的实际对象的数量。

我们现在为模型报告的每个正检测框计算具有基础事实的IoU。使用此值和我们的Io​​U阈值(比如0.5),我们计算图像中每个类的正确检测数(A)。这用于计算每个类的精度[TP /(TP + FP)]

精度= TP /(TP + FP)

由于我们已经计算了正确预测的数量(A)(真阳性)和错过的检测(假阳性)因此我们现在可以使用该公式计算该类的模型的召回(A / B)。

召回= TP /(TP + FN)

计算mAP

使用Pascal VOC challenge评估度量

平均精度是一个具有不同定义的术语。 此度量标准通常用于信息检索和目标检测的域中。 这两个域都有不同的计算mAP的方法。 我们今天将讨论与物体检测相关的mAP。

mAP的对象检测定义首先在PASCAL视觉对象类(VOC)挑战中形式化,其中包括各种图像处理任务。 对于确切的论文,请参阅此。

我们使用相同的方法计算精度和召回,如上一节所述。

但是,如上所述,我们至少还有2个其他变量决定了Precision和Recall的值,它们是IOU和置信度阈值。

IOU是一个简单的几何度量标准,我们可以轻松地将其标准化,例如PASCAL VOC challange基于50%IOU评估mAP,而COCO Challenge更进一步评估mAP在5%至95%的各种阈值范围内。 另一方面,置信因子在不同的模型中有所不同,我的模型设计中50%的置信度可能相当于对其他人的模型设计的80%信心,这会改变精确回忆曲线的形状。 因此,PASCAL VOC组织者提出了一种解释这种变化的方法。

我们现在需要一个度量标准来以模型无关的方式评估模型。

paper中提出计算一种称为AP的度量:平均精度 

 

 For a given task and class, the precision/recall curve is
computed from a method’s ranked output. Recall is defined
as the proportion of all positive examples ranked above a
given rank. Precision is the proportion of all examples above
that rank which are from the positive class. The AP summarises
the shape of the precision/recall curve, and is de-
fined as the mean precision at a set of eleven equally spaced
recall levels [0,0.1,...,1]:

这意味着我们选择了11个不同的置信度阈值(确定“等级”)。 阈值应该是这些置信度值的Recall为0,0.1,0.2,0.3,......,0.9和1.0。 现在,AP被定义为这些所选11个Recall值的Precision值的平均值。 这使得mAP成为整个精确回忆曲线的整体视图。

本文进一步详细说明了计算上述计算中使用的精度。

The precision at each recall level r is interpolated by taking
the maximum precision measured for a method for which
the corresponding recall exceeds r:

 

基本上我们使用给定召回值的最大精度。

因此,mAP是上面测量的所有类别中所有平均精度值的平均值。

这实际上是如何计算物体检测评估的平均平均精度。 有时可能会有一些变化,例如COCO评估更严格,使用各种IOU和对象大小强制执行各种指标(此处有更多详细信息)。 

比较mAP值时要注意的一些要点:

mAP始终在数据集上计算。
虽然解释模型输出的绝对量化并不容易,但是mAP通过一个非常好的相对度量来帮助我们。 当我们在流行的公共数据集上计算此度量标准时,该度量标准可以轻松用于比较新旧对象检测方法。
根据类在训练数据中的分布方式,平均精度值可能会从某些类(具有良好训练数据)的非常高到非常低(对于数据较少/较差的类)。 所以你的mAP可能是适中的,但你的模型可能对某些类非常好,对某些类来说真的很糟糕。 因此,建议在分析模型结果时查看单个类别的平均精度。 这些值也可以作为添加更多训练样本的指标。


一些详解见知乎回答

你可能感兴趣的:(目标检测,mAP)