指标评估 —— AP & mAP 详细解读

文章目录

    • 问题背景
    • 相关概念
    • 两个阈值
    • 非极大值抑制
    • Precision x Recall Curve
    • Average Precision
    • 实例展示
    • 参考链接

问题背景

  针对【目标检测】领域,解析【AP,mAP】的概念以及计算过程。

相关概念

  在计算mAP之前,需先理解清楚其概念,以及相关特定术语的【准确】含义。每次遇到评估指标计算的时候,都会感觉很模糊,理解似是而非,其中关键的原因就是特定术语的理解不到位。

  1. AP

    AP:Average Precison,所有预测图片内某一类别PR曲线(横轴为Recall,纵轴为Precision)下的面积。

  2. mAP

    mAP:mean Average Precision, 各类别【AP】的平均值。

  3. TP

    True Positive(TP):预测框与真实框的IOU>IOU阈值,IOU阈值一般设置为0.5,0.75,0.95等。在目标检测的评估指标规定下,一个真实框(groud truth box)只有一个 TP框,其它均为FP框(即使IOU大于阈值);

  4. FP

    False Positive(FP):存在两种情况,(a)预测框与真实框的 i o u < i o u t h r e s h iou< iou_{thresh} iou<iouthresh;(b)多余的预测框(iou值并不是最大的),即使 i o u iou iou 大于阈值,但是真实框已经存在匹配的预测框;

  5. FN

    False Negative(FN):没有匹配到预测框的 GT数量,也即是真实框没有任何预测框与之重叠,目标检测中也称为漏检;

  6. TN

    True Negative(TN):没有负样本,图像应该至少包含一个目标;mAP 指标不需要该值;
    注意:目标检测中,TN 表示将背景正确检测为背景,等价于没有检测任何目标,通常不需要该指标。

  7. Precision

    所有预测结果中,正确预测框所占的比例。
    简言之,所有的预测结果中,存在两种情况:(a)正确的预测结果(TP);(b)错误的预测结果(FP);
    P r e c i s i o n = T P / ( T P + F P ) = T P / A l l D e t e c t i o n s Precision = TP/(TP+FP)= TP/All Detections Precision=TP/(TP+FP)=TP/AllDetections

  8. Recall

    真实目标被正确预测所占的比例。
    Recall = TP/(TP+FN),其中,all_ground_truths = TP + FN; 简言之,所有的真实框,有多少被检测出来(TP);

两个阈值

  1. IOU 阈值

    IOU阈值:预测框和真实框交并比大于IOU阈值,才可能被判定为正样本(TP)。通常用于【NMS】和【mAP】的计
    算。

  2. 置信度阈值

    衡量目标框内包含目标的可信程度,通常在【NMS】处理阶段,用于过滤低置信度的检测框。

非极大值抑制

  1. 什么是非极大值抑制?

    非极大值抑制(Non-Maximum Suppression),简称NMS,搜索局部最大值,抑制非局部极大值,广泛应用于计算机视觉任务。它是从许多重叠的实体中选择一个最佳的实体(例如,边框)的一类算法,我们可以选择设置标准来达到预期的结果。

  2. 为什么要使用非极大值抑制?

    在这里,我们以目标检测举例,检测模型通常会预测输出大量的候选框,这些候选框相互重叠。实际应用中,我们只需要一个目标只有一个候选框负责(也即是,局部最优候选边框)。通常使用NMS来解决这类问题,具体如下图所示:
    指标评估 —— AP & mAP 详细解读_第1张图片

  3. 非极大值抑制的流程?
    假设预测得到的候选框集合为【Q】,最终保存预期边框的列表为【Keep】,具体流程如下,

    (1)根据置信度阈值,从【Q】中过滤一部分候选框,记为【P】;
    (2)从【P】中取出置信度分数最高的边框【s】,放入列表【Keep】;
    (3)计算【s】与【P】中剩余边框的 IOU,如果大于IOU阈值,则将该边框从【P】中删除。
    (4)如果【P】列表不为空,则继续从(1)开始执行,直到【P】为空;

  4. 注意问题

    (1)从上述的流程中可以看出,我们选择最大置信度的候选框,并抑制大于一定IoU阈值的的候选框。也就是说,我们选择最大的置信度边框,抑制非最大的边框,达到去除冗余边框的目的。因此,也就称之为非极大值抑制。
    (2)上述流程中,边框的滤除依赖【IoU】阈值,所以该值的选择对于模型的性能也有一定影响。通常设置的值为【0.5】,当然也需要根据实际任务决定。
    (3)上述算法中,所有的边框是同时处理的。也就会存在一个问题,如果不同类别的两个目标重叠的话,那么会将其它类别的边框滤除,影响检测效果。因此,有时候为了避免这种情况出现,通常采用类内NMS,也即是逐类处理。

Precision x Recall Curve

  1. 为什么需要设置置信度阈值?

    定义:当前bounding box 包含目标的可信程度。每一个 bounding box 的预测输出包含置信度值,它是一个概率值,范围【0,1】。
    作用:假如一个bounding box 的置信度值为 0.1,那么当前 bounding box 包含目标可信吗?它可能是包含目标,甚至可能是负样本(不包含任何目标),所以为了客观评定检测器的能力,我们需要设置一个置信度阈值,低于该阈值的为负样本。所以置信度阈值起到一个基本的过滤作用。

  2. 置信度阈值如何影响 Precision 和 Recall ?

    (1)当调大置信度阈值时,那么很多预测结果会被过滤掉,R值会降低,相应的P值应该会提升。当调小置信度阈值时,很多预测结果会被保留,那么R值会升高,P值会降低。
    (2)通常PR曲线都是单调递减。

  3. 如何合理的衡量检测器的性能呢?

    从【2.】中的表述,我们知道,不同的阈值会产生不同的(precision,recall)结果,那么单个(precision,recall)对作为检测器优劣的判定标准就不合适。通常是固定一个置信度阈值,然后设置一组IOU阈值(比如IOU@[0.5:0.95]),每一个IOU阈值可以得到一组(precision,recall)对,最终可以得到一条PR曲线。

  4. PR曲线时如何计算的?

    首先,我们需要将所有的预测框按置信度降序排序;
    然后,按照置信度从大到小的顺序,统计每一个置信度层级下的TP,FP,累积TP,累积FP;
    最后,根据累积的TP,FP,计算PR值;

Average Precision

  1. AP 的作用是什么?

    定义:从【Precision x Recall Curve】中的陈述,AP表示在一组不同IOU阈值下,某一类别的平均准确度。
    作用:综合评定一个检测器检测某一类目标的性能,并给出量化值,便于不同检测器之间的性能对比。

  2. AP 的计算方法
    11-点插值法(11-point interpolation)

    11-point interpolation:就是用11个等间距的 recall 层级 【0,0.1,0.2,…,1】下的【平均】 precision 来近似模拟 RP曲线,公式如下:
    A P = 1 11 ∑ r ∈ 0 , 0.1 , 0.2 , . . . , 1 ρ i n t e r p ( r ) AP = \frac{1}{11}\sum_{r_\in{0,0.1,0.2,...,1}}\rho_{interp(r)} AP=111r0,0.1,0.2,...,1ρinterp(r)
    ρ i n t e r p = m a x r ˉ : r ˉ > r ρ ( r ˉ ) \rho_{interp}=\mathop{max}_{\bar{r}:{\bar{r}>r}}\rho{(\bar{r})} ρinterp=maxrˉ:rˉ>rρ(rˉ)
    这里, ρ ( r ˉ ) \rho(\bar{r}) ρ(rˉ) 是在 r e c a l l = r ˉ recall=\bar{r} recall=rˉ 的 precision值。AP 的计算是取大于当前层级 r r r最大 precision 值,也即是取大于当前recall值对应应precision的最大值。

    所有点插值(Interpolating all points)

    取代插值11个等间距点,我们可以插值所有点(n个),具体公式如下:
    ∑ n = 0 ( r n + 1 − r n ) ρ i n t e r p ( r n + 1 ) \sum_{n=0}(r_{n+1}-r_n)\rho_{interp}(r_{n+1}) n=0(rn+1rn)ρinterp(rn+1)
    其中, ρ i n t e r p ( r n + 1 ) = m a x r ˉ : r ˉ > r n + 1 ρ ( r ˉ ) \rho_{interp}(r_{n+1})=\mathop{max}_{\bar{r}:{\bar{r}>r_{n+1}}}\rho{(\bar{r})} ρinterp(rn+1)=maxrˉ:rˉ>rn+1ρ(rˉ)
    这里, ρ ( r ˉ ) \rho(\bar{r}) ρ(rˉ) 是在 r e c a l l = r ˉ recall=\bar{r} recall=rˉ 的 precision值。相比于11点插值方法,该方法取每一个层级r的最大precision值。

实例展示

指标评估 —— AP & mAP 详细解读_第2张图片
如上图所示,具体内容如下:

图片数量:7张。
绿框:真实标签,15个。
红框:检测框,包含置信度值,并用大小字母(A-Y)标示,24个。

下表展示了所有图片中的目标检测情况,最后一列表示【TP,FP】。该例子中,TP:iou>0.3,否则是FP。通过观察图片中的检测框重叠情况,我们可以大概判定该检测框是【TP】或者【FP】。
指标评估 —— AP & mAP 详细解读_第3张图片

在image2-7中,存在多个检测框覆盖一个真实框,这种情况下,IOU最大的检测框为TP,其它均为FP(比如,Image2中 E是TP,D是FP)。PASCAL VOC 2012 metric:5个TP检测框被计数为1个,其它4个是FP。

PR曲线绘制流程如下

  1. 计算 precision,recall

    首先,将检测框按照置信度降序排列,然后根据累积的TPs,FPs,计算【precisioin,recall】,表格如下
    指标评估 —— AP & mAP 详细解读_第4张图片
    (1)如上表所示,以第二行为例计算:Precision = TP/(TP+FP)=1/(1+1)=0.5,Recall = TP/(TP+FN)=1/15=0.066.
    (2)置信度需要降序排序。
    (3)

  2. 绘制PR曲线
    指标评估 —— AP & mAP 详细解读_第5张图片

    PR曲线图解析:
    横坐标:recall
    纵坐标:precision
    蓝色点:每一个字母表示一个检测框,对应一对(recall,precision)值,它是根据【1.】中的累积TPs,FPs计算。

  3. 11点计算AP值
    如【2.】中图示,该方法是取11个召回率层级(11 recall levels,[0,0.1,…,1])的平均 Precision 值。当前Recall层级的Precison值是取大于该Recall层级的最大,也就是下图中的红色实心点。蓝线表示实际的PR曲线,红色点是插值的新点,用于计算AP值。
    指标评估 —— AP & mAP 详细解读_第6张图片

    计算如下:
    A P = 1 11 ∑ r ∈ { 0 , 0.1 , . . . , 1 } ρ i n t e r p ( r ) = 1 11 ( 1 + 0.6666 + 0.4285 + 0.4285 + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0 ) = 26.84 % \begin{aligned} AP&=\frac{1}{11}\sum_{r\in\lbrace0,0.1,...,1\rbrace}\rho_{interp(r)}\\ &=\frac{1}{11}(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)\\ &=26.84\% \end{aligned} AP=111r{0,0.1,...,1}ρinterp(r)=111(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)=26.84%

  4. 所有点插值计算AP
    插值所有点近似于PR曲线下的面积(AUC),其目的是减少曲线摆动的影响。我们还可以通过查看从最高(0.4666)到0(从右到左查看图)的召回率值来直观地获得内插的精确点,当我们减少召回时,我们收集精确度最高的值,如下图所示:
    指标评估 —— AP & mAP 详细解读_第7张图片
    根据上述绘制的图,我们可以将AUC分为四个区域(A1,A2,A3,A4),如下图所示:
    指标评估 —— AP & mAP 详细解读_第8张图片

    计算AP如下:
    A 1 = ( 0.0666 − 0 ) × 1 = 0.0666 A 2 = ( 0.1333 − 0.0666 ) × 0.6666 = 0.04446222 A 3 = ( 0.4 − 0.1333 ) × 0.4285 = 0.11428095 A 4 = ( 0.4666 − 0.4 ) × 0.3043 = 0.02026638 \begin{aligned} A1&=(0.0666-0)\times 1=0.0666\\ A2&=(0.1333-0.0666)\times 0.6666=0.04446222\\ A3&=(0.4-0.1333)\times 0.4285=0.11428095\\ A4&=(0.4666-0.4)\times 0.3043=0.02026638\\ \end{aligned} A1A2A3A4=(0.06660)×1=0.0666=(0.13330.0666)×0.6666=0.04446222=(0.40.1333)×0.4285=0.11428095=(0.46660.4)×0.3043=0.02026638
    那么,
    A P = A 1 + A 2 + A 3 + A 4 = 0.0666 + 0.04446222 + 0.11428095 + 0.02026638 = 0.24560955 = 24.56 % \begin{aligned} AP&=A1+A2+A3+A4\\ &=0.0666+0.04446222+0.11428095+0.02026638\\ &=0.24560955\\ &=24.56\% \end{aligned} AP=A1+A2+A3+A4=0.0666+0.04446222+0.11428095+0.02026638=0.24560955=24.56%

参考链接

  1. https://learnopencv.com/mean-average-precision-map-object-detection-model-evaluation-metric/
  2. https://www.zhihu.com/question/53405779
  3. https://github.com/rafaelpadilla/Object-Detection-Metrics
  4. 简洁明了的解析

你可能感兴趣的:(#,YOLO-V5代码解读,目标检测,深度学习,mAP计算)