目标检测中PR曲线和mAP

2023-11-08


原文链接: 目标检测中的mAP是什么含义?



1. 基本概念

(1)交并比 - Intersection Over Union (IOU)

交并比(IOU)是度量两个检测框(对于目标检测来说)的交叠程度,公式如下:
I O U = a r e a ( B p ∩ B g t ) a r e a ( B p ∪ B g t ) IOU = \frac{area(B_p \cap B_{gt})}{area(B_p \cup B_{gt})} IOU=area(BpBgt)area(BpBgt)
B_gt 代表的是目标实际的边框(Ground Truth,GT),B_p 代表的是预测的边框,通过计算这两者的 IOU,可以判断预测的检测框是否符合条件,IOU 用图片展示如下:
img

(2)TP、FP、FN、TN

  • True Positive (TP): IoU> I O U t h r e s h o l d IOU_{threshold} IOUthreshold 一般取 0.5 ) 的检测框数量(同一 Ground Truth 只计算一次)。

  • False Positive (FP): IoU<= I O U t h r e s h o l d IOU_{threshold} IOUthreshold的检测框数量,或者是检测到同一个 GT 的多余检测框的数量。

  • False Negative (FN): 没有检测到的 GT 的数量。

  • True Negative (TN): 在 mAP 评价指标中不会使用到。

(3)查准率、查全率

  • 查准率(Precision): P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
  • 查全率(Recall): R e c a l l = T P T P + F N Recall = \frac{TP}{TP + FN} Recall=TP+FNTP

二者绘制的曲线称为 P-R 曲线:

img

(4)AP & mAP

  • AP:某一个类别PR 曲线下面积(PR曲线的绘制方法下面会说明)。

  • mAP:mean Average Precision,即各类别 AP 的平均值。



2. PR曲线的绘制与mAP的计算

先规定两个公式,一个是 Precision,一个是 Recall,这两个公式同上面的一样,我们把它们扩展开来,用另外一种形式进行展示,其中 all detctions 代表所有预测框的数量, all ground truths 代表所有 GT 的数量。
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 = \frac{TP}{TP + FP}=\frac{TP}{all\ detections} Precision=TP+FPTP=all detectionsTP

R e c a l l = T P T P + F N = T P a l l   g r o u n d   t r u t h s Recall = \frac{TP}{TP + FN}=\frac{TP}{all\ ground\ truths} Recall=TP+FNTP=all ground truthsTP

AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。

假设我们有 7 张图片(Images1-Image7),这些图片有 15 个目标(绿色的框,GT 的数量,上文提及的 all ground truths)以及 24 个预测边框(红色的框,A-Y 编号表示,并且有一个置信度值)

img

根据上图以及说明,我们可以列出以下表格,其中 Images 代表图片的编号,Detections 代表预测边框的编号,Confidences 代表预测边框的置信度,TP or FP 代表预测的边框是标记为 TP 还是 FP(认为预测边框与 GT 的 IOU 值大于等于 0.3 就标记为 TP;若一个 GT 有多个预测边框,则认为 IOU 最大且大于等于 0.3 的预测框标记为 TP,其他的标记为 FP,即一个 GT 只能有一个预测框标记为 TP),这里的 0.3 是随机取的一个值

img

通过上表,我们可以绘制出 P-R 曲线(因为 AP 就是 P-R 曲线下面的面积),但是在此之前我们需要计算出 P-R 曲线上各个点的坐标,根据置信度从大到小排序所有的预测框,然后就可以计算 Precision 和 Recall 的值,见下表。(需要记住一个叫累加的概念,就是下图的 ACC TP 和 ACC FP

img

  • 标号为 1 的 Precision 和 Recall 的计算方式:Precision=TP/(TP+FP)=1/(1+0)=1,Recall=TP/(TP+FN)=TP/(all ground truths)=1/15=0.0666 (all ground truths 上面有定义过了
  • 标号 2:Precision=TP/(TP+FP)=1/(1+1)=0.5,Recall=TP/(TP+FN)=TP/(all ground truths)=1/15=0.0666
  • 标号 3:Precision=TP/(TP+FP)=2/(2+1)=0.6666,Recall=TP/(TP+FN)=TP/(all ground truths)=2/15=0.1333
  • 其他的依次类推

然后就可以绘制出 P-R 曲线
img

得到 P-R 曲线就可以计算 AP(P-R 曲线下的面积),要计算 P-R 下方的面积,一般使用的是插值的方法,取 11 个点 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] 的插值所得
img

得到一个类别的 AP 结果如下:
在这里插入图片描述

要计算 mAP,就把所有类别的 AP 计算出来,然后求取平均即可。





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测中PR曲线和mAP 的相关文章

  • 如何把父母和孩子联系起来?

    有两个简单的类 一个只有parent属性 并且两者兼而有之parent and children属性 这意味着同时具备两者的人parent and children继承自唯一的parent 这是只有parent属性 我们就这样称呼它吧Chi
  • 如何通过 python 中的函数运行列表?

    我试图通过我创建的函数运行我的列表 但不断收到错误 我不知道出了什么问题 温度 F temp f 19 21 21 21 23 功能 def fahrToCelsius tempFahrenheit return tempFahrenhei
  • Python Requests 库重定向新 url

    我一直在浏览 Python 请求文档 但看不到我想要实现的任何功能 在我的脚本中我设置allow redirects True 我想知道该页面是否已重定向到其他内容 新的 URL 是什么 例如 如果起始 URL 为 www google c
  • Scrapy 文件管道不下载文件

    我的任务是构建一个可以下载所有内容的网络爬虫 pdfs 在给定站点中 Spider 在本地计算机和抓取集线器上运行 由于某种原因 当我运行它时 它只下载一些但不是全部的 pdf 通过查看输出中的项目可以看出这一点JSON 我已经设定MEDI
  • 将整数系列转换为交替(双元)二进制系列

    我不知道如何最好地表达这个问题 因为在这里谷歌搜索和搜索总是让我找到更复杂的东西 我很确定这是基本的东西 但对于我的生活来说 我找不到一个好的方法来做到这一点下列 给定一个整数序列 比如说 for x in range 0 36 我想将这些
  • NSUserNotificationCenter.defaultUserNotificationCenter() 使用 PyInstaller 返回 None

    我正在尝试将通知发送到通知中心 Mac OSX 我正在使用 PyObjC 绑定来使用我们的 python 应用程序中的 cocoa api 我正在使用以下代码片段 import Foundation import objc NSUserNo
  • 为什么需要设置WORKON_HOME环境变量?

    我已经有一段时间没有使用 python 虚拟环境了 但我也安装了虚拟环境包装器 我的问题是 在文档页面中它说要这样做 export WORKON HOME Envs mkdir p WORKON HOME source usr local
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • Python 在哪些系统上不使用 IEEE-754 双精度浮点数

    Python 对 IEEE 754 浮点运算进行了各种引用 但不保证1 https docs python org 3 tutorial floatingpoint html 2 https pythondev readthedocs io
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 在 django 中导入设置时出现奇怪的错误

    我有很多项目在 ubuntu 中使用 python2 7 和 virtualenv virtualenvwrapper 工作 在我的工作中 一些开发人员使用 macosx 和 windows 通常我像往常一样创建项目 django admi
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • 将图与热图(可能是对数)配对?

    How to create a pair plot in Python like the following but with heat maps instead of points or instead of a hex bin plot
  • AttributeError: 'super' 对象没有属性 '__getattr__' 在 Kivy 中使用带有多个 kv 文件的 BoxLayout 时出错

    我很清楚 这个问题已经被问过好几次了 但尝试以下解决方案后 Python Kivy AttributeError 尝试获取 self ids 时 super 对象没有属性 getattr https stackoverflow com qu
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • py2exe ImportError:没有名为 的模块

    我已经实现了一个名为 myUtils 的包 它由文件夹 myUtils 文件 组成 init py 和许多名称为 myUtils 的 py 文件 该包包含在 myOtherProject py 中 当我从 Eclipse 运行它们时可以找到
  • ProcessPoolExecutor 传递多个参数

    ESPN播放器免费 class ESPNPlayerFree def init self player id match id match id team 团队名单1 277906 cA2i150s81HI3qbq1fzi za1Oq5CG

随机推荐

  • Python数据类型之元组及字典

    元组 tuple 元组表现形式tuple 元组是一个不可变序列 使用 创建元素 元组不是空元组至少有一个 逗号 当元组不是空元组时括号可以省略 元组解包指将元组当中的每一个元素都赋值给一个变量 使用 创建的 my tuple 创建一个空的元
  • idea解决控制台中文乱码问题

    前言 IntelliJ IDEA 如果不进行配置的话 运行程序时控制台中文乱码问题会非常严重 严重影响我们对信息的获取和程序的跟踪 特总结以下 4 点用于解决控制台中文乱码问题 希望有助于大家 注意 下面根据我日常工作的经验总结 排序的先后
  • SpringBoot默认的JSON解析方案

    一 什么是JSON JSON JavaScript Object Notation 是一种基于JavaScript语法子集的开放标准数据交换格式 JSON是基于文本的 轻量级的 通常被认为易于读 写 好了 废话不多说 下面开始介绍如何在Sp
  • Java_.jar .war .ear 详解

    jar 全称 java archive 包含 class properties文件 是文件封装的最小单元 部署文件 application client xml 级别 小 war 全称 web archive 包含 Servlet JSP页
  • Tomcat和Weblogic的区别

    接触到两种Java的web服务器 做项目用的Tomcat 看视频看的是WebLogic Server WLS 都是web服务器 有什么区别和联系呢 一 先简单介绍一下这两种服务器 WebLogic是美国bea公司出品的一个applicati
  • webpack实战,手写loader和plugin

    序言 对于 webpack 来说 loader 和 plugin 可以算是需求程度最为广泛的配置项了 但是呢 单单止步于配置可能还不够 如果我们自己有时候想要 diy 一个需求 但是 webpack 又没有相关的 loader 和 plug
  • 移动端unet人像分割模型--1

    个人对移动端神经网络开发一直饶有兴致 去年腾讯开源了NCNN框架之后 一直都在关注 近期成功利用别人训练好的mtcnn和mobilefacenet模型制作了一个ios版本人脸识别swift版本demo 希望maskrcnn移植到ncnn 在
  • MySQL 数据库崩溃(crash)的常见原因和解决办法

    墨墨导读 本文来自墨天轮用户投稿 详述MySQL 数据库崩溃 crash 的常见原因和解决办法 希望对大家有帮助 数据技术嘉年华 十周年盛大开启 点我立即报名 大会以 自研 智能 新基建 云和数据促创新 生态融合新十年 为主题 相邀数据英雄
  • 使用Git Extensions简单入门Git

    前言 关于这个主题 之前我录了段视频教程 在本地看清晰度还可以 但传到优酷上就很不清晰了 即使是后来重制后还是一样不清晰 所以现在想整理成文字版 当然 大家还可以将我百度云上的视频下载下来观看 连同优酷的相关地址都附在文末了 正文 说到Gi
  • std::vector如何使用

    Vector被认为是一个容器 是因为它可以存放各种类型的对象 正因为这 有时候也被人叫动态数组 能够增加和压缩数据 为了使用vector 必须在头文件中包含如下代码 include
  • File , Folder 与 Directory

    Folder 和 Directory 在电脑上使用的区别 folder 文件夹 directory 目录 directory包含子目录 subdirectory 两着一般情况下可以混用 但是有些稍微的区别 Folder 里要么是子folde
  • JDBC详解

    前期准备 mysql下载安装 mysql下载链接 安装成功验证 cmd 命令行输入命令如下图 登录 远程连接别人的mysql 这里的 h127 0 0 1表示远程连接数据库所在计算机的ip 启动和关闭mysql服务 JDBC的概念和本质 概
  • upload-labs文件上传漏洞(Pass-01~Pass-21)

    目录 pass 1 js前端绕过 pass 2 MiMe绕过 pass 3 黑名单绕过 pass 04 htaccess文件上传 pass 05 pass 06 大小写绕过 pass 07 空格绕过 pass 08 windows特性加点绕
  • 自动化测试 - 如何自动提取手机短信验证码

    在自动化测试中 除了之前博客介绍的各种图形验证码 以及滑块验证外 经常会碰到当遇到有手机短信验证的问题 可能有人会想到 通常验证码有效期都会在一定的时间内 当再次测试时 可以把手机收到的验证码写在代码里 显然这方法好像可行 但却在整个测试中
  • Hadoop:HDFS--分布式文件存储系统

    目录 HDFS的基础架构 VMware虚拟机部署HDFS集群 HDFS集群启停命令 HDFS Shell操作 hadoop 命令体系 创建文件夹 mkdir 查看目录内容 ls 上传文件到hdfs put 查看HDFS文件内容 cat 下载
  • Python使用XPath解析HTML:从入门到精通

    引言 XPath是一种用于选择XML文档中节点的语言 它可以通过路径表达式来定位节点 由于HTML文档的结构与XML文档类似 XPath也可以用于解析HTML文档 Python是一种非常流行的编程语言 它提供了许多库用于解析HTML文档 本
  • VScode常见用法

    1 VScode中通过快捷键ctrl shift p 打开配置文件 2 VScode可以通过shift alt F进行代码格式化 3 自动保存 在设置按钮弹出的菜单中 选择 Settings 选项 此处是整个vscode的设置入口 打开 s
  • 数据结构学习系列之两个单向链表的合并

    两个单向链表的合并 创建两个单向链表p1和p2 合并p1和p2即可 代码如下 示例代码 int merge 2 link list node t p1 node t p2 if NULL p1 NULL p2 NULL p2 printf
  • OpenCV:模型训练与验证

    一 过拟合 欠拟合 1 概念 过拟合是指所选模型的复杂度比真模型更高 学习时选择的模型所包含的参数过多 对已经数据预测得很好 但是对未知数据预测得很差得现象 欠拟合是指所选模型得复杂度比真模型更低 学习时选择的模型所包含的参数过少 2 如何
  • 目标检测中PR曲线和mAP

    目标检测中的PR曲线绘制与mAP 1 基本概念 1 交并比 Intersection Over Union IOU 2 TP FP FN TN 3 查准率 查全率 4 AP mAP 2 PR曲线的绘制与mAP的计算 原文链接 目标检测中的m