深入了解平均精度(mAP):通过精确率-召回率曲线评估目标检测性能

news2025/1/11 2:14:04

平均精度(Average Precision,mAP)是一种常用的用于评估目标检测模型性能的指标。在目标检测任务中,模型需要识别图像中的不同目标,并返回它们的边界框(bounding box)和类别。mAP用于综合考虑模型在不同类别上的准确度和召回率。

基本知识

IOU (Intersection Over Union)是一种基于Jaccard Index的度量,用于评估两个边界框之间的重叠。它需要一个真实边界框和一个预测的边界框。

通过IOU,可以判断检测是否有效或无效。IOU由预测边界框与地面真实边界框的重叠面积除以两者的并集面积得到:

这里的Bp是预测框,Bgt是真实的边框

下图显示了真实边界框(绿色)和检测到的边界框(红色)之间的IOU。

指标使用的一些基本概念:

  • TP(True Positive):真正例,表示模型正确地将正样本分类为正样本。也就是模型预测为正样本且实际上是正样本的数量。
  • FP(False Positive):假正例,表示模型错误地将负样本分类为正样本。也就是模型预测为正样本但实际上是负样本的数量。
  • FN(False Negative):假反例,表示模型错误地将正样本分类为负样本。也就是模型预测为负样本但实际上是正样本的数量。
  • TN(True Negative):真反例,表示模型正确地将负样本分类为负样本。也就是模型预测为负样本且实际上是负样本的数量。

一般情况下我们的指标都是如下计算的:

精确率(Precision):精确率衡量模型在预测为正样本的样本中的正确率,计算公式为 TP / (TP + FP)。

召回率(Recall):召回率衡量模型正确检测出的正样本占所有正样本的比例,计算公式为 TP / (TP + FN)。

上面就是我们常见的一些指标的基本知识,下面开始介绍关于用于目标检测的指标。

Precision-Recall Curve

精确率-召回率曲线(Precision-Recall Curve)是用于评估分类模型在不同阈值下精确率和召回率之间的权衡关系的一种可视化工具。它通过绘制不同阈值下的精确率和召回率之间的曲线来展示模型的性能。

精确率-召回率曲线以召回率为横轴,精确率为纵轴,将不同阈值下的精确率和召回率连接起来形成一条曲线。通常,模型在较高的阈值下可以实现更高的精确率,但召回率较低;而在较低的阈值下,模型可以实现较高的召回率,但精确率较低。精确率-召回率曲线的形状可以显示模型在不同精确率和召回率之间的平衡点。

通过观察精确率-召回率曲线,可以根据具体问题的需求选择合适的阈值,从而在精确率和召回率之间进行权衡。例如,在一些情况下,更高的精确率可能更重要,而在另一些情况下,更高的召回率可能更为关键。

平均精度 Average Precision

另一种比较目标检测器性能的方法是计算Precision x Recall曲线下面积(AUC)。由于AP曲线通常是上下曲折的曲线,比较同一图中的不同曲线(不同的检测器)通常不是一件容易的事情,因为曲线往往会频繁地相互交叉。这就是为什么平均精度(AP),一个数值度量,也可以帮助我们比较不同的探测器。在实践中,AP是0到1之间所有召回值的精度平均值。

从2010年开始,PASCAL VOC挑战计算AP的方法发生了变化。PASCAL VOC执行的插值使用所有数据点,而不是像他们的论文中所说的那样只插值11个等间隔的点。所以这里我们将两种实现方式都使用代码实现:

11点插值

11点插值通过在一组11个等间隔召回水平[0,0.1,0.2,…,1]上平均精度来总结Precision x Recall曲线的形状:

使用插值后的精确率-召回率曲线计算mAP。通过对插值后的曲线进行积分,计算每个类别的AP,然后对所有类别的AP进行平均,得到mAP值。通过平滑精确率-召回率曲线,更准确地评估模型的性能。它提供了更稳定和可靠的指标。

所有点插值

不是只在11个等间距的点上插值,你可以通过所有的点n进行插值

AP不再使用仅在几个点上观察到的精度,而是通过插值每个级别的精度来获得,取召回值大于或等于r+1的最大精度。这样我们就可以计算出曲线下的估计面积。

精确率-召回率曲线是通过在不同阈值下计算离散点得到的。然而,这些离散点可能不足以完整地描述模型的性能。为了得到更平滑的曲线和更准确的mAP值,可以对曲线上的所有点进行插值。对精确率-召回率曲线上的每个点进行插值处理。插值方法可以使用各种技术,例如线性插值、多项式插值或样条插值。插值的目的是在两个已知点之间估计出新的点,以获得曲线上更密集的数据点,使得曲线更平滑。

样例

我们可视化一个例子来更好地理解插值平均精度的概念。考虑以下结果:

一共有7幅图像,其中15个真值对象由绿色边界框表示,24个检测对象由红色边界框表示。每个检测到的对象都有一个置信水平,并由字母(a,B,…,Y)标识。

下表显示了具有相应置信度的边界框。最后一列将检测标识为TP或FP。如果IOU≥30%,则认为是TP,否则为FP。通过查看上面的图像,可以大致判断检测到的是TP还是FP。

在一些图像中,有多个检测重叠一个基本真值(图2、3、4、5、6和7)。对于这些情况,具有最高IOU的预测框被认为是TP(例如,在图1中,“E”是TP,而“D”是FP,因为E和基本真值之间的IOU大于D和基本真值之间的IOU)。该规则适用于PASCAL VOC 2012度量:“例如,单个对象的5次检测(TP)被计算为1次正确检测和4次错误检测”。

Precision x Recall曲线是通过计算累积TP或FP检测的Precision和Recall值来绘制的。所以需要根据检测的置信度对结果进行排序,然后计算每个累积检测的精度和召回率,如下表所示(注意,对于召回率计算,分母项“Acc TP + Acc FN”或“TP”恒定为15,因为无论检测如何,真值是恒定的):

第二行的示例计算:Precision = TP/(TP+FP) = 1/2 = 0.5, Recall = TP/(TP+FN) = 1/15 = 0.066

绘制精度和召回值,我们有以下精度x召回曲线:

前面已经说乐,有两种不同的方法来测量插值平均精度:11点插值和插值所有点。下面我们对它们进行比较:

11点插值

11点插值平均精度的思想是在一组11个召回水平(0,0.1,…,1)上平均精度。内插精度值取召回值大于其当前召回值的最大精度,如下所示:

通过应用11点插值,我们得到:

所有点的插值

通过插值所有点,平均精度(AP)可以解释为精度x召回率曲线的近似AUC。这样做的目的是减少曲线波动的影响。

从上图可以看出,AUC可以分为A1、A2、A3、A4 4个区域:

计算总面积,得到:

可以看到两种插值方法的插值结果略有不同,结果分别为24.56%和26.84%。

总结

mAP是目标检测中常用的评估指标,它能够综合考虑模型在不同类别上的性能,因此能够更全面地评估目标检测模型的准确度和召回率。较高的mAP值表示模型在目标检测任务上的性能更好。

mAP的计算过程通常包括以下步骤:

  1. 预测边界框生成:模型通过对输入图像进行推理,生成一系列预测的边界框,每个边界框包括边界框的位置和预测的目标类别。
  2. 真实边界框标注:对于每个图像,标注人员手动标记真实的边界框和对应的目标类别。
  3. IoU计算:对于每个预测的边界框,计算其与所有真实边界框的重叠度量,常用的度量是交并比(Intersection over Union,IoU)。
  4. 置信度排序:将预测的边界框按照其置信度(confidence)进行排序,置信度表示模型对该边界框预测为正确目标的程度。
  5. 精度-召回率曲线绘制:从置信度最高的边界框开始,计算每个置信度水平下的精度和召回率,并绘制精度-召回率曲线。
  6. 平均精度计算:通过对精度-召回率曲线进行积分,计算平均精度(AP)。对于每个类别,AP表示在该类别下,从最高置信度到最低置信度的所有置信度水平上的平均精度。
  7. mAP计算:将所有类别的AP进行平均,得到mAP。

在计算mAP时,有两种常见的插值方法:

  1. 11点插值mAP:选择11个特定的召回率值点进行插值,使曲线更平滑,然后计算AP和mAP。
  2. 所有点插值mAP:对精确率-召回率曲线上的所有点进行插值,使曲线更平滑,然后计算AP和mAP。

这些方法能够更全面、准确地评估目标检测模型在不同类别上的性能,帮助研究人员和从业者更好地理解和比较模型的表现。插值方法能够提供更平滑、更具细节的曲线,提供更准确的性能评估。

https://avoid.overfit.cn/post/13fa0eac9b894c5e922a6d07559833c6

作者:Rafael Padilla

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

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

相关文章

开源情报搜集系统的核心技术

随着科技快速发展,科研方向的开源情报搜集系统的应用越来越广泛。为了满足科研工作者的需求,开发人员大力研发了许多功能强大的科研开源情报系统。这些系统不仅可以帮助科研人员更加高效地获取、管理和利用科研信息资源,还能为他们提供全方位…

【Android工具】免费好用无广告安卓手机解压缩软件工具:ZArchiver

微信关注公众号 “DLGG创客DIY” 设为“星标”,重磅干货,第一时间送达。 前言 压缩工具在日常工作和生活中很常用,不光可以减小文件大小,还可以将多个文件进行打包,方便管理。 当然还有一些其他的特殊功能,…

奇舞周刊第493期:Hook 革命!浅谈 React 新 Hook 的未来与思想

关注前端生态发展,了解行业动向。 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ Hook 革命!浅谈 React 新 Hook 的未来与思想 作者阳羡曾写文章对 React 新 Hook use 的设计理念和限制进行了深入分析,并提供了一个可能的实现来帮助读者…

学习测试用例

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 测试用例好处测试用例的设计方法基于需求进行测试用例的设计等价类边界值判定表正交表法案例 场景设计法错误猜测法 面试题 测…

分布式简要说明

1.分布式简要说明 《分布式系统原理与范型》定义: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统。 分布式系统 (distributed system) 是建立在网络之上的软件系统。 随着互联网的发展,网站应用的规模不断扩…

RabbitMQ学习-死信队列

死信队列 背:就是三种情况导致消息无法消费就是死信,然后就会转到死信交换机中,死信交换机发送到死信队列中,然后创建个消费者消费死信队列中的东西,再没什么哈哈 死信,顾名思义就是无法被消费的信息,字面…

springboot接口返回的json字符串如何不显示null值字段

springboot接口返回的json字符串如何不显示null值字段 POSTMAN 测试接口时,默认字段值即使是null也显示出来,如何去掉更加简洁?这个跟POSTMAN无关,POSTMAN仅仅是展示response的body而已 思考:为什么要去掉null值的字…

Copilot插件:时时陪伴的AI助手 | Obsidian实践

这段时间,有点儿沉迷于AIGC实践不可自拔,也因此懈怠了Obsidian实践。回过头来猛然发觉,其实Obsidian也“上架”了很多与ChatGPT有关的插件。 赶紧体验下,看看有没有什么,是一下子就能用起来的。不得不说,自…

mysql错误码1045解决方案

用数据库连接工具访问提示 1045的错误码,在命令行输入mysql -u root –p,输入密码,经常出现下面的错误信息,相信该错误信息很多人在使用mysql时都遇到过。 ERROR 1045 (28000): Access denied for user rootlocalhost (using pas…

如何在百度百科里创建一个百科词条,百度百科官网创建词条步骤方法

很多朋友表示特别希望能在百度百科里创建一个百科词条,但是在百度百科官网却不知如何操作创建百科词条,连最基本的百度百科操作步骤可能都不清楚,下面洛希爱做百科网为大家分享如何在百度百科里创建一个百科词条,百度百科官网创建…

编码,Part 1:ASCII、汉字及 Unicode 标准

个人博客 编码的历史由来就懒得介绍了,只需要知道人类处理文本信息是以字符为基本单位,而计算机在最底层只认识 0/1,所以当计算机要为人类存储/呈现字符时,就需要有一个规则,在字符和 0/1 序列之间建立映射关系&#…

Mybatis generator

文章目录 使用引入依赖配置文件设置生成使用中出现的异常 Mybatis中javaType和jdbcType对应关系int、bigint、smallint 和 tinyint是使用整数数据的精确数字数据类型。 使用 引入依赖 <!-- mysql --><dependency><groupId>mysql</groupId><artifa…

(转载)基于遗传算法的TSP算法(matlab实现)

1 理论基础 TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题&#xff0c;即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长&#xff0c;到目前为止还未找到一个多项式时间的有效算法。 TSP问题可描述为&#xff1a;已知n个城市相互之间的距离&…

5月份读书学习好文记录

学好C可以采取以下几个步骤&#xff1a; 掌握基本语法&#xff1a;C的语法对于初学者来说可能是一件比较难的事情&#xff0c;所以需要花时间掌握C的语言基础和语法规则&#xff0c;例如数据类型、流程控制、函数等。 学会面向对象编程(OOP)&#xff1a;C是一种面向对象的编程…

RNN Seq2Seq

Feedforward v.s. Recurrent Feedforward network does not have input at each stepFeedforward network has different parameters for each layer 双向RNN 双向递归层可以提供更好的识别预测效果&#xff0c;但却不能实时预测&#xff0c;由于反向递归的计算需要从最末时刻…

第18章 JQuery DataTables初始化渲染显示与排序

1 System.Linq.AsyncIEnumerableExtensions (Data\Extensions\AsyncIEnumerableExtensions.cs) namespace System.Linq { /// <summary> /// 【异步枚举数扩展--类】 /// <remarks> /// 摘要&#xff1a; /// 该类通过对System.Linq.Async中方法的自定义扩展…

开启php8的JIT及时编译,超级详细 照抄即可

JIT时php8的重要功能之一&#xff0c;可以极大的提高性能&#xff1b; JIT编译器集成在了Opcache插件中&#xff0c;仅在启动Opcache插件才有效 Opcache将 PHP 脚本编译后的字节码存储到内存中&#xff0c;以避免每次执行脚本时重新解析和编译&#xff0c;从而提高 PHP 应用程…

English Learning - L3 综合练习 4 VOA-Food 2023.05.24 周三

English Learning - L3 综合练习 4 VOA-Food 2023.05.24 周三 句 1句 2Support 拓展养家&#xff0c;养家之人 句 3mustard 芥末expect 扩展 句 4句 5句 6句 7颁奖句 8句 9句 10句 11句 12句 13句 14好声音比赛 句 1 句 2 Support 拓展 Support 作动词时&#xff1a; Support …

Loki 日志收集系统

一.系统架构 二.组成部分 Loki 的日志堆栈由 3 个组件组成&#xff1a; promtail&#xff1a;用于采集日志、并给每条日志流打标签&#xff0c;每个节点部署&#xff0c;k8s部署模式下使用daemonset管理。 loki&#xff1a;用于存储采集的日志&#xff0c; 并根据标签查询日志流…

Windows 10搭建SFTP服务器【公网远程访问】

相较比高效率的FTP协议而言&#xff0c;SFTP默认只占用一个TCP端口 22端口&#xff0c;采用的是SSH加密隧道&#xff0c;理论上会比FTP更安全&#xff0c;更稳定些。 搭建SFTP服务器&#xff0c;这里我们用freesshd来实现&#xff1b;而在服务器搭建成功后&#xff0c;要实现公…