zoukankan      html  css  js  c++  java
  • 深度学习-目标检测中的mAP计算

    谨以本文记录深度学习入门过程中学习的目标检测常见指标,如有错误还请朋友不吝指教!

    目标检测评价指标——mAP

    如上图所示,绿颜色的为GT Box,红颜色的Predict Box。如果要正确检测出图中的猫和狗,那怎么才能算是正确的检测呢?下边的这三个标准是都需要看的:
    1. GT与预测框的IoU是否大于阈值?
    2. 预测的类别是否正确?
    3. 置信度是否大于阈值?

    交并比(IoU,Intersection over Union)

    IoU的作用是评价两个矩形框之间的相似性,在目标检测中是度量两个检测框的交叠程度。计算公式如下:

    [IOU=frac{area(B_{gt}cap B_{p})}{area(B_{gt} cup B_p)} ]

    其中(B_{gt})表示GT Box,(B_p)表示Predict Box。

    查准率和查全率

    什么是TP、TN、FP、FN?

    • TP:True Positive
    • TN:True Negative
    • FP:False Positive
    • FN:False Negative

    TP、TN、FP和FN的对应解释如上所述,其中的Positive和Negative表示模型对样本预测的结果是正样本还是负样本True和False表示预测的结果和真实结果是否相同。例如:True Positive就是模型预测样本为正样本,该结果与实际结果相同,该样本实际上本来就是标签为正的样本。

    如果假设IoU阈值为0.5的话,那在目标检测中:

    • TP:表示(IoU>0.5)的检测框的数量,也就是检测正确的数量。
    • FP:表示(IoU le 0.5)的检测框数量(或者是检测到同一GT的多余的检测框的数量),属于误检一类了。
    • FN:表示没有检测到的GT数量,即漏检的数量。

    查准率(Precision)

    被预测为正样本的检测框中预测正确的占比:

    [Precision=frac{TP}{TP+FP}=frac{TP}{all detections} ]

    如上图所示,图中GT共有5只猫待检测,但实际上只检测出来了一只,而且这个检测是正确的。那这种情况下的查全率就是:

    [Precision=frac{1}{1}=100\% ]

    查全率(Recall)

    被正确检测出来的真实框占所有真实框的比例:

    [Recall=frac{TP}{TP+FN}=frac{TP}{all ground truths} ]

    同样是上边有5个待检测的GT,这次得到了50个预测框,其中5个全部预测正确,这种情况下TP=5,漏检FN=0最终的查全率为:

    [Recall=frac{5}{5+0}=100\% ]

    AP和mAP

    AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。其中P是查准率Precision,R是查全率Recall。

    下面以3张图片为例,说明AP和mAP的计算过程:

    在所有的图片中(当前只有上图一张),待检测的目标的数量(num_{ob}=2),上图中的检测情况如下表所示:

    GT id Confidence OB(IoU=0.5)
    1 0.98 True
    1 0.61 False

    该表中的顺序是按Confidence从高到低排序的,对于一个GT来说,只能有一个检测框为正确的检测。

    加入第二张图片,此时待检测的目标数量(num_{ob}=3),检测情况如下表所示

    GT id Confidence OB(IoU=0.5)
    1 0.98 True
    3 0.89 True
    3 0.66 False
    1 0.61 False

    加入第三张图片,加上前两张中的待检测目标,共有 (num_{ob}=7) 个目标需要检测,检测情况如下表所示:

    GT id Confidence OB(IoU=0.5)
    1 0.98 True
    3 0.89 True
    6 0.88 True
    7 0.78 True
    3 0.66 False
    1 0.61 False
    4 0.52 True

    依次取Confidence的阈值为[0.98, 0.89, 0.88, 0.78, 0.66, 0.61, 0.52],计算对应的查准率和查全率如下表所示:

    Rank Precision Recall Confidence thread
    1 1.0 0.14 0.98
    2 1.0 0.28 0.89
    3 1.0 0.42 0.88
    4 1.0 0.57 0.78
    5 0.80 0.57 0.66
    6 0.66 0.57 0.61
    7 0.71 0.71 0.52

    以Confidence thread=0.52为例:
    此时的TP=5,误检FP=2,第一张和第三张两张图片共漏检FN=2,所以

    [Precision=frac{TP}{TP+FP}=frac{5}{5+2}=0.71 ]

    [Recall = frac{TP}{TP+FN}=frac{5}{5+2}=0.71 ]

    绘制出对应的P-R曲线图:

    计算曲线下方的面积,也就是猫这一类别的AP:

    [egin{aligned} & (0.14-0) imes 1.0+(0.28-0.14) imes1.0 + (0.42-0.28) imes 1.0+ \ & (0.57-0.42) imes1.0 + (0.71-0.57) imes 0.71=0.6694 end{aligned} ]

    对于表格中Recall相同的,只保留Precision最高的值进行计算,最终得到猫这一类的AP=0.6694,如果要计算mAP则需要计算出其他类别的AP,并取平均值。


    参考链接:
    https://www.zhihu.com/question/53405779/answer/399478988
    如果想看视频讲解的朋友可以移步这位up主的投稿,文中的例子也是来源于该视频:https://www.bilibili.com/video/BV1ez4y1X7g2/?spm_id_from=333.788.recommend_more_video.4

  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/sykline/p/15120002.html
Copyright © 2011-2022 走看看