【模型评估】AP 和他们的兄弟们:mAP、AP50、APs、APm、APl

news2024/11/19 19:22:14

AP是在目标检测任务中,尝尝被用于评估模型预测能力的指标。那AP是什么?为什么能够充当不同模型综合对比评测的公认指标呢?

在学习下文之前,混淆矩阵和ROC可以先了解下:

  1. 【模型评估】混淆矩阵(confusion_matrix)之 TP、FP、TN、FN;敏感度、特异度、准确率、精确率
  2. 【模型评估】ROC(Receiver operating characteristic)与 AUC

一、什么是AP和P-R

average_precision_score(AP)是一种用于评估二分类模型性能的指标,用于衡量模型在不同分类阈值下的精确性和召回率之间的权衡。

关键概念:

  • 精确率(Precision):衡量模型预测为正类的样本中有多少是真正的正类样本。
  • 召回率(Recall):衡量模型正确找出了多少真正的正类样本。
  • 阈值(Threshold):用于分类的决策边界,决定哪些样本被预测为正类,哪些样本被预测为负类。

precision_recall_curve 通过改变 decision threshold (决策阈值),从 ground truth label (被标记的真实数据标签) 和 score given by the classifier (分类器给出的分数)计算绘制 precision-recall curve (精确召回曲线)。

average_precision_score 是P-R曲线下的面积,函数根据 prediction scores (预测分数)计算出 average precision (AP)(平均精度)。该值在 0 和 1 之间,并且越高越好。通过 random predictions (随机预测), AP 是fraction of positive samples(正样本的分数)。

1

其中:

  1. Pn和Rn是第n个阈值处的precision和recall。对于随机预测,AP是正样本的比例;
  2. Rn和Rn-1 分别对应着横轴上的两个相邻但不相等的区间,乘以Pn,也就是求得微小区间的矩形面积,近似为曲线下的面积;
  3. 以横轴矩形面积累加,就得到了AP值。

这里可以看出,要想计算得到AP,就需要先绘制P-R曲线。绘制P-R曲线类似于绘制ROC曲线,计算AP也类似于计算AUC。他们都是综合全面的评估模型性能的一个指标。

在这里插入图片描述

二、如何简单绘制P-R曲线

还是使用sklearn提供的函数,提供数据后,直接进行绘制,代码如下:

import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve, average_precision_score

# Ground truth labels and predicted probabilities
y_true = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
y_scores = [0.1, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99]

# Compute precision, recall, and thresholds
precision, recall, thresholds = precision_recall_curve(y_true, y_scores)

# Compute average precision score
average_precision = average_precision_score(y_true, y_scores)

# Plot the PR curve
plt.plot(recall, precision, color='b', label=f'PR Curve (AP = {average_precision:.2f})')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend(loc='lower left')
plt.grid(True)
plt.show()

展示图像如下:
2

三、计算目标检测的AP值

计算方式参考链接:mAP

0

代码我就不贴了,代码逻辑做了整理,如下:

  1. 读取gt和detect result (dr)的txt文件,重新整理成json文件进行存储

    • gt的整理成字典形式,key分别是class_name、bbox、used,分别表示类名、坐标框和是否匹配到预测框,一个图片的所有标注结果,存储在一起
    • detect result 的json是按照类别记录的,一个类存储到一起,打破了不同测试图像单独记录的边界,key分别是confidence、file_id、bbox,分别表示置信度、图片文件名和坐标框,按confidence从大到小进行排序
  2. 按类进行遍历,一个类一个类的分别计算AP,最后求均值,得到mAP

  3. 在计算一个类的AP时候,就用到了detect result 的json文件,这里记录了关于这一个类的,所以图片推理后预测的结果。

    • 遍历预测为该类的每一个预测结果,拿到图片文件名,进而找到对应的gt文件,计算该pd bbox与gt bbox中类别一致,且iou大于设定阈值的框;找到used置为true,tp idx置为1,否则fp idx置为1
    • 对已经经过置信度排序的预测目标,采用类似于直方图均衡化中依次累加的方式,依次视为正例,其他视为负例的方式,计算recall和precision
    • 根据公式计算AP
  4. 多个类,求均值,得到mAP。

下面是代码过程中,读取和临时会存在文件,作参考:

1
有个疑问:在计算目标检测的AP值时,根据设定的IOU阈值,确定了大于IOU阈值的,和不满足的。之后由置信度阈值,进一步确定预测结果中的正例和负例,进而可以得到一系列成对出现的precision和recall,这是一种计算AP的方式;

但是,在上面这个推荐的代码仓库中,采用了另一种方式:置信度阈值划分正例和负例的操作,依照先对预测的目标根据置信度从高到低进行排序,依次累加的方式,划分正例和负例。是不是出错啦?

答案是没有出错,计算目标检测的平均精度(Average Precision, AP)的方式通常有两种:

  1. 根据IOU阈值:

    • 首先根据设定的IOU阈值,将预测框与真实框进行匹配,确定哪些预测框满足IOU阈值要求(正例),哪些不满足(负例)。
    • 然后,通过设置置信度阈值,进一步确定哪些预测框被视为正例和负例。
    • 根据这些正例和负例,可以计算一系列不同置信度阈值下的精确率(Precision)和召回率(Recall)。
    • 最后计算平均精度AP。
  2. 根据置信度排序:

    • 另一种方式是将所有预测框按照置信度从高到低进行排序,然后依次累加,逐步确定正例和负例。
    • 从最高置信度开始,将当前预测框视为正例,其他预测框视为负例,计算相应的精确率和召回率。然后,移动到下一个预测框,将其视为正例,其他预测框视为负例,再次计算精确率和召回率。
    • 依此类推,直到遍历完所有预测框,可以计算一系列不同置信度阈值下的精确率(Precision)和召回率(Recall)。
    • 最后计算平均精度AP。

两种方式计算的AP值通常是等价的,因为它们都考虑了不同置信度阈值下的精确率和召回率。无论是根据IOU阈值还是置信度排序,最终得到的AP值反映了模型在不同置信度阈值下的检测性能。然而,需要注意的是,这两种方式在具体实现时可能存在一些微小的差异,例如:

  • 第一种方法得到的PR曲线可以根据曲线形状来选择最佳的置信度截断阈值。通过观察PR曲线,可以选择一个合适的置信度阈值,以平衡精确率和召回率,并使得平均精度(AP)最大化。

  • 然而,第二种方法并不是根据阈值直接提供PR曲线的(尽管这种累加截断的方式,蕴含着阈值),因为它是按照置信度排序进行计算的。它仅给出了在不同置信度阈值下的精确率和召回率,而没有明确的曲线形状。因此,无法直接从第二种方法中选择最佳的置信度截断阈值。

  • 仔细琢磨会发现,其实两种方式在这小部分的处理,究根结底还是一样的。只是一个阈值来自预先设定,比如0-1,分1000份;另一个是根据排序后,截断数据,间接的划定了阈值。相比于第一种,就循环的次数,少了很多。

若需要选择最佳置信度截断阈值,建议使用第一种方法计算PR曲线,并根据曲线形状和需求选择最佳的置信度阈值。第二种方法更适合计算AP值,但在选择阈值方面相对有限。

四、AP、mAP、APs、APm、APl、AP50等的理解

在COCO数据、voc目标检测比赛中,常常使用下面这些指标,对AP进一步细分,如下:
在这里插入图片描述
针对在目标检测中,涉及到框与框之间的IOU等的考察中,推荐参考这个链接:mAP

上述的详细解释如下:

  • AP (Average Precision): 平均精确率,是评估目标检测算法性能的常用指标之一。它计算了在不同的IOU下(0.5-0.95),召回率水平下的平均精确率值,用于衡量检测算法在不同阈值下的性能。
  • mAP(mean AP): 它结合了不同目标类别的精确率-召回率曲线,并计算它们的平均值,从而提供了算法在整个数据集上的综合性能评估。
  • AP50: 在计算AP时,通常使用IoU(Intersection over Union)来衡量预测框和真实框之间的重叠程度。AP50是指IoU阈值为50%时的平均精确率。它衡量了算法在较宽松的重叠要求下的性能。
  • APs、APm、APl:是评价不同大小的目标物体的AP,可以看出模型对不同大小的目标的性能。

五、AP和AUC比较

AP和AUC都是衡量模型的整体性能的,那他们之间有什么特点和优缺点呢?

AP(Average Precision)AUC(Area Under the ROC Curve)都是用于衡量模型性能的指标,但它们有一些不同的特点和优缺点。首先明确一点:

  • AP 是由精确率-召回率曲线计算得到的;
  • AUC 是由召回率和1-特异度曲线计算得到的;
  • 召回率(敏感度)和特异度,分别只关注测试样本中的阳性数据和阴性数据,阳性和阴性样本的测试结果是独立的,互不干扰的;
  • 但是精确度是衡量预测为阳性样本中,有多少是真阳性的比率;这里面就会牵扯到假阳性,阳性和阴性样本的数量,至关重要。

(在阳性和阴性样本极度不平衡的情况下,一点点的假阳性率,就会产生非常多的假阳性样本;即便敏感度为1,此时的精确度也会比较的低,需要考虑这一点)

特点和优点:

  1. AP(Average Precision):

    • AP更适合用于评估分类问题中的模型性能,尤其是在存在类别不平衡或关注特定类别的情况下。
    • AP考虑了精确率和召回率之间的权衡,对于不同的阈值设定有较好的解释性,能够更好地评估模型在不同召回率水平下的性能。
    • AP是基于精确率-召回率曲线计算的,能够反映出模型对于不同阈值设定的鲁棒性。
  2. AUC(Area Under the ROC Curve):

    • AUC适用于二分类问题的性能评估,尤其在类别平衡或关注整体分类能力的情况下较为常用。
    • AUC提供了一个简洁的度量,衡量了模型在不同阈值设定下分类能力的整体排序,无需关注具体的阈值选择。
    • AUC在处理多类别问题时,可以通过对每个类别分别计算AUC并进行平均得到mAUC(mean AUC)作为综合性能指标。

缺点:

  1. AP:

    • AP在计算过程中需要使用精确率-召回率曲线,因此可能对噪声和不连续性敏感,对于类别数目较多的情况下计算量较大。
    • AP对于不同类别的样本数量不平衡问题较为敏感,可能导致某些类别的AP值不准确或不具有可比性。
  2. AUC:

    • AUC对于类别不平衡问题较为鲁棒,但对于极度不平衡的情况下可能不敏感,容易被主要类别的性能所主导。
    • AUC无法提供具体的精确率和召回率值,无法提供关于特定阈值设定下的性能信息。

综合而言:

  • AP更适合在类别不平衡、关注特定类别或需要对不同阈值进行权衡的情况下使用;
  • 而AUC适用于整体分类能力评估二分类问题的性能比较
  • 选择使用哪个指标应根据具体问题的需求和评估目标来确定。

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

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

相关文章

世界中西医结合医学研究院一行莅临万民健康交流指导

为进一步发展中医药产业,深入挖掘中医药文化,坚持中西医并重,传承精华,守正创新,助力乡村振兴、促进乡村医疗产业发展。6 月 10 日 , 世界中西医结合医学研究院医学工程院院士罗先义 、谈家桢生命基金会主任…

测试左移及其相关实践

本文首发于个人网站「BY林子」,转载请参考版权声明。 之前在《敏捷测试的核心》、《构建测试的体系化思维(进阶篇)》和《一页纸测试策略》等文章中提到过测试左移,但是没有专门针对这个主题做过系统的介绍,但又总是被社…

M4内核的FPU/DSP使用总结

FPU简介 近年,在Cortex-M3之后ARM公司又推出Cortex-M4内核,ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器,在M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一,也是本文…

dom-to-image分享多张异步图片遇到的坑

dom-to-image库 存在的问题 github-issue地址 问题:当超过一张图片时,ios/safari首次会出现某张图片空白,再次生成canvas才正常。 之前有一张图片时通过执行2次domtoimage.toJpeg(魔法),当超过1张图片时&a…

JavaWeb笔记(一)

Java网络编程 在JavaSE阶段,我们学习了I/O流,既然I/O流如此强大,那么能否跨越不同的主机进行I/O操作呢?这就要提到Java的网络编程了。 **注意:**本章会涉及到计算机网络相关内容(只会讲解大致内容&#x…

PyTorch 深度学习 || 专题八:PyTorch 全连接网络分类

PyTorch 全连接网络分类 文章目录 PyTorch 全连接网络分类1. 非线性二分类2. 泰坦尼克号数据分类2.1 数据的准备工作2.2 全连接网络的搭建2.3 结果的可视化 1. 非线性二分类 import sklearn.datasets #数据集 import numpy as np import matplotlib.pyplot as plt from sklear…

Java企业级信息系统开发学习笔记(4.2)Spring Boot项目单元测试、热部署与原理分析

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/pG623】 文章目录 一、Spring Boot单元测试概述1.1 对项目HelloWorld01进行单元测试1. 添加测试依赖启动器和单元测试2. 创建测试类与测试方法 1.2 对项目HelloWorld02进行单元测试1. 添加单元测试…

C++冷知识:构造函数初始化时,为什么使用 : 而不是使用作用域内初始化对象?

:是什么? 这样的行为被称之为初始化列表。具体展示如下: 直接初始化对象。 以一个线程池类为例: class ThreadPool { public:// 构造函数,创建指定数量的线程ThreadPool(size_t num_threads) : stop(false){....}// 析构函数&…

【计算摄影学】总目录

1.数码相机 《数码相机中的图像传感器和信号处理》和《光与赢的魔幻乐园有趣的透镜》 1.1 数码相机概览 1.2 数码相机中光学系统 2.图像传感器 《数码相机中的图像传感器和信号处理》和《智能cmos图像传感器与应用》 2.1 图像传感器基础知识 2.2 CCD图像传感器 2.3 CMOS图像…

RankNet方法在移动终端的应用

RankNet方法在移动终端的应用 RankNet代码示例pythonJava 移动终端的应用 RankNet RankNet 是一种排序学习方法,由 Microsoft Research 提出,用于解决排序问题。它基于神经网络,并使用一对比较的方式来训练和优化模型。 在 RankNet 中&…

你的企业还没搭建这个帮助中心网页,那你太落后了!

作为现代企业,拥有一个完善的帮助中心网页已经成为了不可或缺的一部分。帮助中心网页不仅可以提供给用户有关产品或服务的详细信息,还可以解答用户的疑问和提供技术支持,使用户在使用产品或服务时遇到问题可以很快地得到解决。因此&#xff0…

内网隧道代理技术(四)之NETSH端口转发

NETSH端口转发 NETSH介绍 netsh是windows系统自带命令行程序,攻击者无需上传第三方工具即可利用netsh程序可进行端口转发操作,可将内网中其他服务器的端口转发至本地访问运行这个工具需要管理员的权限 本地端口转发 实验场景 现在我们有这么一个环境…

AntDB存储技术——水平动态扩展技术

数据库集群安装完成后,其数据存储容量是预先规划并确定的。随着时间的推移以及业务量的增加,数据库集群中的可用存储空间不断减少,面临数据存储容量扩充的需求。 通过增加数据节点,扩充集群数据容量,必然需要对已有数…

云服务器是什么? 云服务器有哪些选择?

欢迎前往我的个人博客云服务器查看更多关于云服务器和建站等相关文章。 随着互联网技术的发展和云计算技术的应用,越来越多的企业倾向于使用云服务器来满足其不断增长的计算需求。云服务器是一种基于云计算技术的虚拟服务器,它能够为企业提供高性能、可…

创业很长时间以后

创业过很长时间以后…综合能力是有滴 创业和打工后的思维习惯 为了效率,一般情况是这样滴 趣讲大白话:区别还是有滴 【趣讲信息科技195期】 **************************** 创业还是很难滴 每年成立很多新公司 有很多公司关门 公司平均生存时间&#xff1…

AntDB 企业增强特性介绍——AntDB在线数据扩容关键技术

数据库集群安装完成后,其数据存储容量是预先规划并确定的。随着时间的推移以及业务量的增加,数据库集群中的可用存储空间不断减少,面临数据存储容量扩充的需求。 传统的在线扩容的流程大致如下。 (1)在集群中加入新的 …

Golang | Web开发之Gin路由访问日志自定义输出实践

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

2022届本科毕业生10大高薪专业:大数据专业进入top3

对于普通人来讲,报考一个高薪的职业还是重中之重。那么什么专业高薪呢,很多人觉得是程序员,但这是职业而不是大学专业,专业千千万,选什么好呢,接下来看一看。 最近国家统计局发布了2022年城镇单位就业人员…

MMU翻译的时候以哪种level去执行是什么意思

【问题】 以哪个el去执行是什么意思&#xff1f;执行这条指令就会切到切换指令里指定的el吗&#xff1f; 【回答】 在一个core中&#xff0c;至少有一下Translation regime&#xff0c;AT S12E2R, <Xt> 就是使用EL2 Translation regime完成地址翻译。 Secure EL1&…

Cadence Allegro PCB设计88问解析(二十八) 之 Allegro中dimension environment命令使用(添加及删除尺寸标注)

一个学习信号完整性仿真的layout工程师 最近看到关于Anti Etch的设置&#xff0c;因为本人之前在layout设计是使用过这个命令。后来去到别的公司就不用了&#xff0c;从网上看到说这个命令是用来负片设计的。在这里在说下正片和负片的概念&#xff1a; 正片&#xff1a;是指在a…