目标检测:mAP指标计算

mAP(mean average precision)是目标检测算法中衡量算法识别精度的指标,在计算mAP之前,需要先了解一些前置内容:

  • 准确率

      在分类算法中,将分类正确的样本在所有样本中的数量比例称之为准确率。一般来说,对于数据分布均衡的样本,该指标能够正确地评估分类算法的分类效果,但是,当数据分布不均衡时,该指标便不能客观的反映分类算法的分类效果了。举个简单的例子,假设,某专业有100个学生,其中有90个男生,10个女生。此时,数据分布是极不均衡的,如果分类算法预测该专业学生全为男生,即可达到的准确率,显然此分类算法明显是有极大缺陷的。故,当数据集的分布未知或分布不均衡时,请不要使用这个指标来评估分类算法的准确性。

  • 混淆矩阵

      混淆矩阵(Confusion Matrix)是指的这样一个矩阵,矩阵的为算法预测的类别数量统计,为样本所属真实类别的数量统计。

    image

      如上图所示,其中灰色部分的矩阵即为一个混淆矩阵,矩阵一行一列的元素5代表实际为Cat的样本中有5个样本被分类算法预测为Cat,一行二列的元素3代表实际为Cat的样本中有3个样本被分类算法预测为Cat。显而易见的是,混淆矩阵对角线的元素表示数据集中被正确预测的样本数量,则用混淆矩阵的迹(矩阵的主对角线元素之和)除以矩阵的和即可得到分类算法的准确率。

  • 精确率与召回率

       精确率(Precision,P)是针对预测结果而言,用于衡量在所有预测为正的样本中,被正确预测的样本所占比例;召回率(Recall,R)是针对样本而言,用于衡量在所有为正例的样本中,被预测为正的样本所占比例。在说明二者的计算方式前,先定义几个概念:

    TP(True positives): 被判定为正样本,实际为正样本。
    TN(True negatives): 被判定为负样本,实际为负样本。
    FP(False positives): 被判定为正样本,实际为负样本。
    FN(False negatives): 被判定为负样本,实际为正样本。

      使用上面几个概念可以很容易得出:


  • F值

  显然,模型的精确率和召回率越大,分类算法在实际数据中的表现越好,为了综合评估这两个指标,定义二者的调和平均值为F值:

当精确率和召回率都很高时,F值也会很高。而在某些情景下,可能会相对更重视另一个指标,此时加入一个参数来度量二者的关系,此时的F值定义为:

  • 特异性、1-特异度、灵敏度

  特异性(specificity,S)是实际1的样本所占比例:

  1-特异度(false positive rate,FPR)是实际负样本中,被错误得识别为正样本的负样本比例:

  灵敏度(true positive rate,TPR)是所有正样本中,正确识别的正样本比例,与召回率定义相同:

  • ROC曲线与PR曲线

      理解了精确率、召回率和特异性的概念,下面来介绍ROC和PR曲线:

      ROC(Receiver Operating Characteristic)曲线是指以灵敏度TPR为纵轴,以1-特异度为横轴绘制的曲线,从FPR和TPR的定义可以理解,TPR越高,FPR越小,我们的模型和算法就越高效。也就是画出来的RoC曲线越靠近左上越好,如下图左图所示。从几何的角度讲,ROC曲线下方的面积越大,则模型越优。ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。基于ROC曲线的这种特性,所以采用ROC曲线下的面积,即AUC(Area Under Curve)值来作为衡量算法和模型好坏的标准,能很好的应对各种复杂情形下模型评估工作。

    ROC曲线绘制:

    • 根据每个测试样本属于正样本的概率值从大到小排序;

    • 从高到低,依次将Score值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本;

    • 每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。

      当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。

    AUC计算:

      先考虑连续情况下的AUC,假设模型的ROC曲线函数表达式为:

    则此时的AUC为:

    再考虑离散情况下使用梯形公示对定积分进行近似计算:

    由于TPR倾向于正例、FPR倾向于负例。使得ROC曲线能较为均衡的评估分类算法,特别是对于数据样本类别不均衡的情况。

    image

      以精确率P为纵轴,召回率R为横轴,我们就得到了PR曲线。仍然从精确率和召回率的定义可以理解,精确率越高,召回率越高,我们的模型和算法就越高效。也就是画出来的PR曲线越靠近右上越好,如上图右图所示。由于PR曲线的正确率和召回率都聚焦于正例,对于主要关心正例的类别不平衡问题,PR曲线比ROC曲线有更好的表现。

  • AP(Average-Precision)与mAP(mean Average Precision)

      AUC是AOC曲线的曲线下面积,而AP则是PR曲线的曲线下面积,根据PR曲线的定义,当PR曲线越靠近坐标系的右上方,PR曲线下面积越大,模型越高效。基于AP,mAP是多个类别AP的平均值,比较直观的,AUC、AP、mAP三者都属于,并且越接近于1越好。

  • 非极大值抑制算法(Non-Maximum Suppression)

      在目标检测算法中,为了保证物体的召回率,在Faster RCN或者SSD网络的计算输出中,对于同一个真实物体都会对应生成多个候选框,每个候选框都有各自的置信度。显然,我们更期望模型输出置信度最高的候选框,即抑制掉置信度为非极大值的候选框,将重复冗余的预测去掉。非极大值抑制,顾名思义就是抑制不是极大值的边框,也就是直接去掉冗余的边框。非极大值抑制算法涉及两个关键过程:

    • 置信度:NMS假设一个候选框的置信度越高,这个候选框就要被优先考虑,其它与其重叠超过一定程度的候选框要被舍弃,非极大值指候选框置信度的非极大值。
    • IOU:在评估两个候选框的重叠程度时,NMS一般使用IOU。当两个候选框的IOU超过一定阈值时,置信度低的候选框会被舍弃。一般来说,阈值通常会取0.5或者0.7。

      NMS存在一个非常简约的实现方法,算法输入包含了所有预测框的得分、左上点坐标、右下点坐标一共5个预测量,以及一个设定的IOU阈值,流程如下:

    • 按照得分,对所有边框进行降序排列,记录下排列的索引order,并新建一个列表keep,作为最终筛选后的边框索引结果。

    • 将排序后的第一个边框置为当前边框,并将其保留到keep中,再求当前边框与剩余所有框的IoU。

    • 在order中,仅仅保留IoU小于设定阈值的索引,重复第(2)步,直到order中仅仅剩余一个边框,则将其保留到keep中,退出循环,NMS结束。

      NMS方法虽然简单有效,但在更高的物体检测需求下,也存在如下4个缺陷:

    • 最大的问题就是将得分较低的边框强制性地去掉,如果物体出现较为密集时,本身属于两个物体的边框,其中得分较低的也有可能被抑制掉,从而降低了模型的召回率。

    • 阈值难以确定。过高的阈值容易出现大量误检,而过低的阈值则容易降低模型的召回率,这个超参很难确定。

    • 将得分作为衡量指标。NMS简单地将得分作为一个边框的置信度,但在一些情况下,得分高的边框不一定位置更准,因此这个衡量指标也有待考量。

    • 速度:NMS的实现存在较多的循环步骤,GPU的并行化实现不是特别容易,尤其是预测框较多时,耗时较多。

  • IOU

      IOU是目标检测中的一个重要概念,一般指模型预测的bbox(表征图形中对象位置的矩形框)和Groud Truth(表征训练数据中已经标注的矩形框)之间的交并比。关于IOU的进一步说明和计算推导,在此不做进一步展开,感兴趣的读者可以参考我的另一片博文目标检测:IOU计算。


精确率与召回率,RoC曲线与PR曲线

深度学习之Pytorch物体检测实战

你可能感兴趣的:(目标检测:mAP指标计算)