目标检测:mAP指标计算

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

  • 准确率

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

  • 混淆矩阵

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

    image

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

  • 精确率与召回率

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

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

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

P=\frac{TP}{TP+FP}
R = \frac{TP}{TP+FN}

  • F值

  显然,模型的精确率和召回率越大,分类算法在实际数据中的表现越好,为了综合评估这两个指标,定义二者的调和平均值为F值:
\frac{2}{F}= \frac{1}{P}+\frac{1}{R}
当精确率和召回率都很高时,F值也会很高。而在某些情景下,可能会相对更重视另一个指标,此时加入一个参数\beta来度量二者的关系,此时的F值定义为:
F_{\beta} = \frac{(1+\beta^2)PR}{\beta^2P+R}

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

  特异性(specificity,S)是实际1的样本所占比例:
S = \frac{TN}{FP+TN}
  1-特异度(false positive rate,FPR)是实际负样本中,被错误得识别为正样本的负样本比例:
FPR = \frac{FP}{FP+TN}
  灵敏度(true positive rate,TPR)是所有正样本中,正确识别的正样本比例,与召回率定义相同:
R= TPR = \frac{TP}{TP+FN}

  • 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曲线函数表达式为:
    f(x),x \in [\alpha,\beta]
    则此时的AUC为:
    AUC=S(x)= \int^\beta_{\alpha}f(x)dx
    再考虑离散情况下使用梯形公示对定积分进行近似计算:
    AUC = S(n)=\sum_{i=2}^{n}\frac{(x_i-x_{i-1})(y_i+y_{i+1})}{2}
    由于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三者都属于[0,1],并且越接近于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物体检测实战

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272