深度学习目标检测_IOU、Precision、Recall、AP、mAP详解

news2024/9/27 5:42:14

文章目录

  • 背景
  • IOU:Intersection Over Union
  • precision(精度)和recall(召回率)
    • TP、TN 、FP 、FN
  • AP和mAP
    • 首先回顾两个概念
    • PR曲线
    • AP(Average Precision)
    • mAP(mean Average Precision)

背景

  目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是计算机视觉领域的核心问题之一。以下图为例,图中需要识别3类物体:car(车)、bicycle(自行车)、dog(狗),通过特定的目标检测算法希望最终把每类物体检测出来,每类物体用一个矩形框框出来并且输出对应的类别。
  因此,目标检测可以简单的理解为用个框把物体框出来并告诉我这个框里是什么。


  在目标检测领域需要衡量每个检测算法的好坏,因此定义了很多指标,例如常见的IoU、precision、recall、AP、mAP等,各个算法经过检测后得到每个物体的检测框和置信度,然后根据该值来计算上述指标值,从而方便大家一起来评估各个算法的优劣。   每个指标各不相同,下面详细阐述每个指标的概念和计算方法。

IOU:Intersection Over Union

  • 并集里面的交集,公式如下

  一个物体它会有一个真值框,英文称为ground truth,也就是我们实际为它标注的真实矩形框(一般情况下该矩形框是物体的最小外接矩形框,手工标注)。在评价一个算法的时候首先用该算法对图片进行检测,得到该物体的预测框,这个预测框是算法生成的,我们接下来就需要计算这个预测框和真值框之间的IoU指标。计算原理就是首先计算两个框的并集区域面积,再计算两个框的交集区域面积,然后交集除以并集就是对应的IoU值。IoU值越大说明预测框和真值框越吻合,如果完全吻合,此时IoU值为1。

对应的数学公式如下:
在这里插入图片描述

precision(精度)和recall(召回率)


  在论文里面经常会遇到precision(精度)和recall(召回率)的概念,下面对其进行解释说明。

  所谓精度,也就是我们得到的预测框到底有多少面积是在真值框里面的,这个重叠面积除以检测框面积就是精度。形象化理解可以理解成“命中率”,即我预测的有多少在真值框里面。

  召回率从字面意思比较好理解,就是我发出去多少最终收回来多少,即正确的预测框数量除以所有正确框的数量。

  从上述概念上可以看出,精度和召回率是一般是反的。精度高了,召回率一般会低;召回率高了,精度一般会低。想象一下,如果我们需要提出一种目标检测算法来检测图像中的狗,为了尽可能的提高召回率,我们可以检出处很多很多框以尽可能的来包含图片中可能出现狗的地方,甚至可以直接以整幅图像为预测框,这时候召回率是最高的接近于1,但是很明显,精度很低。

  尽管理解了精度和召回率的概念,但是实际计算时还需要借助额外的几个指标参数,通过这几个额外的指标参数可以使得我们更容易计算精度和召回率。

TP、TN 、FP 、FN

在一个数据集检测中,会产生四类检测结果:
True Positive(TP)、False Positive (FP)、False Negative (FN)、True Negative (TN):
T ——true 表示正确
F——false 表示错误
P—— positive 表示积极的,看成正例
N——negative 表示消极的,看成负例

后面为预测结果,前面是预测结果的正确性。如:

T P—— 预测为 P (正例), 预测对了, 本来是正样本,检测为正样本(真阳性)。
T N—— 预测为 N (负例), 预测对了, 本来是负样本,检测为负样本(真阴性)。
F P—— 预测为 P (正例), 预测错了, 本来是负样本,检测为正样本(假阳性)。
F N—— 预测为 N (负例), 预测错了, 本来是正样本,检测为负样本(假阴性)。

PS:实际目标检测中我们不会去检测背景(因为我们不会去为背景画个框),因此一般不会去计算TN这个值。

知识问答:
已知一张图中有100个细胞,其中正常细胞80个,癌细胞20个。
目标:找出所有癌细胞
结果:找出了50个细胞,其中20个是癌细胞,30个是正常细胞。
答案:TP=20  TN=50 	FP=30 	FN=0

看这里更容易理解这一块内容:https://blog.csdn.net/W1995S/article/details/114988637

TP+FP+TN+FN:样本总数。
TP+FN:实际正样本数。
TP+FP:预测结果为正样本的总数,包括预测正确的和错误的。
FP+TN:实际负样本数。
TN+FN:预测结果为负样本的总数,包括预测正确的和错误的
四种情形组成的混淆矩阵如下:
在这里插入图片描述


图释TP, FP, TN,FN

还有一个指标:
  准确率(Accuracy): 模型判断正确的数据(TP+TN)占总数据的比例


  直观上说,我们用上述标准来衡量目标检测的好坏似乎已经够了。然而,目标检测问题中的模型的分类和定位都需要进行评估,每个图像都可能具有不同类别的不同目标,因此,在图像分类问题中所使用的标准度量不能直接应用于目标检测问题。

  缺点:准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。

AP和mAP

首先回顾两个概念

IOU:预测框与真实框的重叠程度,也叫IOU阈值,大于IOU阈值的预测框是存在的,小于IOU阈值的候选框是不存在的。
置信度:用来判断边界框内的物体是正样本还是负样本,大于置信度阈值的判定为正样本,小于置信度阈值的判定为负样本即背景。

PR曲线

  我们当然希望检测的结果P越高越好,R也越高越好,但事实上这两者在某些情况下是矛盾的。比如极端情况下,我们只检测出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么必然Recall必然很大,但是Precision很低。
  因此在不同的场合中需要自己判断希望P比较高还是R比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。
  这里我们举一个简单的例子,假设我们的数据集中共有五个待检测的物体,以其中一个物体为例,我们的模型给出了10个候选框,我们按照模型给出的置信度由高到低对候选框进行排序。
在这里插入图片描述
  表格第二列表示该候选框是否预测正确(即这些候选框的iou值均大于0.5)第三列和第四列表示以该行所在候选框置信度为阈值时,Precision和Recall的值。我们以表格的第三行为例进行计算:

	解题过程
	首先这些数据是按照置信度由高到低进行排列的,所以以第三行为例进行计算时,前3行结果为True,后7行结果为False。非常好理解。
	此时我们需要计算TP、FP、FN
	还记得TP的定义吗?预测为正样本,检测也为正样本(真阳性),所以符合条件的有两个:第一、二行,因此TP=2
	还记得FP的定义吗?预测为正样本,检测为负样本(假阳性),所以符合条件的只有第三行,因此FP=1
	还记得FN的定义吗?预测为负样本,检测为正样本(假阴性),所以符合条件的有三个:第六、七、十行,因此FN=3
	是不是还漏下一个TN?没有的!!!因为我们又不检测背景,计算时用不到。可以复习一下TP、TN 、FP 、FN这一块
	还没有理解?看下面这张图

开始解题
在这里插入图片描述
  由上表以Recall值为横轴,Precision值为纵轴,我们就可以得到PR曲线。我们会发现,Precision与Recall的值呈现负相关,在局部区域会上下波动。


PR曲线

AP(Average Precision)

  顾名思义AP就是平均精准度,简单来说就是对PR曲线上的Precision值求均值。对于pr曲线来说,我们使用积分来进行计算。
在这里插入图片描述
  在实际应用中,我们并不直接对该PR曲线进行计算,而是对PR曲线进行平滑处理。即对PR曲线上的每个点,Precision的值取该点右侧最大的Precision的值。


PR曲线的平滑处理
  用公式来描述如下图 。用该公式进行平滑后再用上面公式计算AP的值。

PR曲线的平滑处理

这里的公式有点唬人了,其实就是计算这个图的面积即为AP值:
AP = A1+A2+A3+A4…


mAP(mean Average Precision)

  上述我们整个讨论过程只是以一个物体为例,注意到我们只检测了1类我们就得到了1根PR曲线,如果检测多类,那么每一类我们均可以得到一根PR曲线,也就是每类都会有1个AP值。
  对所有类的AP值取平均就是mAP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[oeasy]python0035_ 整合shell编程_循环_延迟_清屏

整合shell编程 回忆上次内容 用\r 可以让输出位置回到行首原位刷新时间 如果想要的是大字符效果 需要使用 figlet但同时还希望能刷新这可能吗?🤔 建立脚本 我们得熟悉一下shell 先新建一个test.sh vi test.sh python3 show_time.py python3 show_time.…

如何通过GB35114国密标准接入到LiveGBS GB28181/GB35114监控平台

1.1 安装LiveGBS GB28181/GB35114视频平台 1.2 获取设备端证书给平台 我们用LiveNVR做为设备端向LiveGBS注册,这里先将LiveNVR的证书导出,并给LiveGBS端。 本地自签名证书是LiveNVR自己给自己签发的证书。如果需要用第三方机构的证书,可点击…

【软件测试】资深测试的总结,有限时间找最有价值bug......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试团队的新同事&a…

Mybatis进阶之自定义TypeHandler

实际应用开发中的难免会有一些需求要自定义一个TypeHandler ,比如这样一个需求:前端传来的性别是 男, 女,但是数据库定义的字段却是tinyint 类型( 1:男 2:女)。此时可以自定义一个年龄的类型处理器,进行转换…

Linux学习笔记——Linux实用操作(一)

04、Linux实用操作 4.1、各类小技巧(快捷键) 学习目标: 掌握各类实用小技巧 强制停止退出、登出历史命令搜索光标移动 1、Ctrlc强制停止 Linux某些程序的运行,如果想要强制停止它,可以使用快捷键Ctrlc 命令输入…

一个基于Vue+SpringBoot的个人博客项目,含数据库文件

blogSpringBoot 项目介绍 完整代码下载地址:一个基于VueSpringBoot的个人博客项目,含数据库文件 该项目是个人博客项目,采用Vue SpringBoot开发。 后台管理页面使用Vue编写,其他页面使用Thymeleaf模板。 项目演示地址&#…

什么是 MySQL 的“回表”?

1. 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,BTree 嘛! BTree 是什么?那你得先明白什么是 B-Tree,来看如下一张图: 前面是 B-Tree&am…

不止稳定快速,看华为云CDN如何在国际云服务市场中“分蛋糕”

互联网时代,网络的应用已十分普及,但依然存在下载慢、网络卡顿的现象。如企业业务运行过程中出现的卡顿现象导致数据延时;各校因疫情等原因网课时间长、访问应用人数过多,造成网络卡顿现象严重,无法带来良好的上课体验…

ArcGIS基础实验操作100例--实验16对字段自定义赋值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验16 对字段自定义赋值 目录 一、实验背景 二、实验数据 三、实验步骤 (1…

玩转云服务器,怎样用云服务器架设搭建游戏:浪剑天下架设教程,手把手教你架设游戏服务器,小白一看就会

服务器详情:服务器系统:LINUX-CENTOS7.6服务器配置:2核4G以上配置 搭建教程: 第一步:安装宝塔: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &…

Allegro如何输出IPC文件操作指导

Allegro如何输出IPC文件操作指导 IPC文件是PCB上所有网络连接关系文件,在PCB生产前网表比对必须的文件,如下图 如何输出IPC文件,具体操作如下 选择File选择IPC356

磁实验比较-反激式变压器(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

代码随想录拓展day5 129. 求根节点到叶节点数字之和;1382.将二叉搜索树变平衡;100. 相同的树;116. 填充每个节点的下一个右侧节点指针

代码随想录拓展day5 129. 求根节点到叶节点数字之和;1382.将二叉搜索树变平衡;100. 相同的树;116. 填充每个节点的下一个右侧节点指针 全部都是关于二叉树的题目,对二叉树的遍历方式又是一个复习。 129. 求根节点到叶节点数字之…

Java 访问权限控制

使用访问权限控制的原因: 使用户不要触碰到那些不该触碰的部分类库设计者可以更改类的内部工作模式,而不必担心整体程序造成影响 访问权限修饰词 Java具有三种访问权限修饰词(public private protected),划分出了四种访问权限(public prot…

WeakHashMap引起内存溢出,线程数剧增

1.问题背景 代码通过jarLoader的方式,实现了一个数据库多个客户端版本兼容的情况,一个客户端使用一个jarLoader,实现jar的隔离。 同时,jarLoader使用weekhashmap做缓存。 hive做批量查询表的元数据时,引入了线程池。…

NodeJS学习笔记一

文章目录1. 模块化1.1 模块作用域2. 内置API模块3. 自定义模块3.1 向外共享模块作用域中的成员3.2 使用误区3.3 CommonJS模块化规范4. 第三方API模块4.1 npm包管理目录4.2 包管理配置文件 package.json4.3 devDependencies节点4.4 切换npm的包镜像源4.5 包的分类4.5.1 项目包4.…

【cfeng-Work】work项目理解

work 项目 内容管理入职项目环境搭建商用项目 和 学习项目经验分享easily 分享work 见解 学习项目(非商用)相比工作中的商用项目差别还是很大的… Cfeng 最近开始工作, 接下来我将分享一下对于学校中的project环境和 work环境的相关理解 入职…

生成式对抗网络(GAN)原理推导与网络构建思路

0 引言 设想这样的场景:你是一个工作室的老板,你的工作室主要用来生产名画的赝品;而真正的名画则为前人所创造,存放在收藏室中。你的赝品画会和真品画一起被鉴定家鉴定,而你的终极目标是成为一个以假乱真的工艺大师。…

设置 Postman 环境并调用 API

云开发自带 API 调试 功能,可快速进行 API 接口调试,同时也支持通过 Postman 调用 API 获取设备信息或控制设备。本文介绍如何设置调用云开发 API 的 Postman 开发环境及调用接口实践。 配置环境 安装 Postman 8.2.2 及以上版本桌面软件。 版本过低会出…

Python类中的__init__() 和 self 的解析

1、Python中self的含义 self,英文单词意思很明显,表示自己,本身。 此处有几种潜在含义: 1.这里的自己,指的是,实例Instance本身。 2.同时, 由于说到“自己”这个词,都是和相对而…