目标检测IoU

对于一个检测器,我们需要制定一定的规则来评价其好坏,从而选择需要的检测器。对于图像分类任务来讲,由于其输出是很简单的图像类别,因此很容易通过判断分类正确的图像数量来进行衡量。物体检测模型的输出是非结构化的,事先并无法得知输出物体的数量、位置、大小等,因此物体检测的评价算法就稍微复杂一些。对于具体的某个物体来讲,我们可以从预测框与真实框的贴合程度来判断检测的质量,通常使用IoU(Intersection of Union)来量化贴合程度。IoU的计算方式如图1.12所示,使用两个边框的交集与并集的比值,就可以得到IoU,公式如式(1-1)所示。显而易见,IoU的取值区间是[0,1],IoU值越大,表明两个框重合越好。

目标检测IoU_目标检测

目标检测IoU_目标检测_02

对于IoU而言,我们通常会选取一个阈值,如0.5,来确定预测框是正确的还是错误的。当两个框的IoU大于0.5时,我们认为是一个有效的检测,否则属于无效的匹配。如图1.13中有两个杯子的标签,模型产生了两个预测框。

目标检测IoU_IOU_03

由于图像中存在背景与物体两种标签,预测框也分为正确与错误, 因此在评测时会产生以下4种样本。

  • 正确检测框TP(True Positive):预测框正确地与标签框匹配了,两者间的IoU大于0.5,如图1.13中右下方的检测框。
  • 误检框FP(False Positive):将背景预测成了物体,如图1.13中左下方的检测框,通常这种框与图中所有标签的IoU都不会超过0.5。
  • 漏检框FN(False Negative):本来需要模型检测出的物体,模型没有检测出,如图1.13中左上方的杯子。
  • 正确背景(True Negative):本身是背景,模型也没有检测出来,这种情况在物体检测中通常不需要考虑。

有了上述基础知识,我们就可以开始进行检测模型的评测。对于一 个检测器,通常使用mAP(mean Average Precision)这一指标来评价一个模型的好坏,这里的AP指的是一个类别的检测精度,mAP则是多个类别的平均精度。评测需要每张图片的预测值与标签值,对于某一个实 例,二者包含的内容分别如下:

  • 预测值(Dets):物体类别、边框位置的4个预测值、该物体的得分。
  • 标签值(GTs):物体类别、边框位置的4个真值。

在遍历完所有的预测框后,我们会得到每一个预测框的属性,即TP或FP。在遍历的过程中,我们可以通过当前TP的数量来计算模型的召回率(Recall,R),即当前一共检测出的标签框与所有标签框的比值

目标检测IoU_目标检测_04

除了召回率,还有一个重要指标是准确率(Precision,P),即当 前遍历过的预测框中,属于正确预测边框的比值

目标检测IoU_IOU_05

遍历到每一个预测框时,都可以生成一个对应的P与R,这两个值 可以组成一个点(R,P),将所有的点绘制成曲线,即形成了P-R曲线

目标检测IoU_目标检测_06

然而,即使有了P-R曲线,评价模型仍然不直观,如果直接取曲线 上的点,在哪里选取都不合适,因为召回率高的时候准确率会很低,准 确率高的时候往往召回率很低。这时,AP就派上用场了

目标检测IoU_目标检测_07

从公式中可以看出,AP代表了曲线的面积,综合考量了不同召回 率下的准确率,不会对P与R有任何偏好。每个类别的AP是相互独立 的,将每个类别的AP进行平均,即可得到mAP。严格意义上讲,还需 要对曲线进行一定的修正,再进行AP计算。除了求面积的方式,还可 以使用11个不同召回率对应的准确率求平均的方式求AP。 下面从代码层面详细讲述AP求解过程。假设当前经过标签数据与 预测数据的加载,我们得到了下面两个变量:

  • det_boxes:包含全部图像中所有类别的预测框,其中一个边框包 含了[left,top,right,bottom,score,NameofImage]。
  • gt_boxes:包含了全部图像中所有类别的标签,其中一个标签的内 容为[left,top,right,bottom,0]。需要注意的是,最后一位0代表该标签有没 有被匹配过,如果匹配过则会置为1,其他预测框再去匹配则为误检 框。

目标检测IoU_IOU_08