深度学习中的目标检测:从 PR 曲线到 AP

深度学习中的目标检测:从 PR 曲线到 AP

在目标检测任务中,评估模型的性能是非常重要的。通过使用不同的评估指标和标准,我们可以量化模型的准确性与效果。今天我们将重点讨论 PR 曲线(Precision-Recall Curve)平均精度(AP)交并比(IoU) 等评估标准,并通过具体的例子帮助大家理解如何使用这些指标评估模型表现。


什么是 Precision 和 Recall?

Precision(精度)

精度衡量的是模型预测为正类的样本中,实际为正类的比例。它反映了预测的准确性。精度计算公式为:

Precision = TP / (TP + FP)

示例
假设模型预测了 100 个目标框,其中 80 个框是正确的,20 个框是错误的。则精度为:
Precision = 80 / (80 + 20) = 0.8

Recall(召回)

召回率衡量的是所有实际为正类的样本中,模型正确预测为正类的比例。召回率计算公式为:
Recall = TP / (TP + FN)

示例
假设有 90 个实际存在的目标,但模型只检测到 80 个正确的目标,剩下的 10 个目标没有被检测到。则召回率为:
Recall = 80 / (80 + 10) = 0.89

这两个指标在目标检测中通常是一起使用的。尤其是在 PR 曲线中,我们可以可视化不同阈值下的精度与召回。


什么是 PR 曲线?

PR 曲线(Precision-Recall Curve)是通过绘制 精度(Precision)和 召回率(Recall)之间的关系来评估模型在目标检测任务中的表现。

例子:如何绘制 PR 曲线?

假设我们有 5 张图像和模型的预测结果(带有置信度),以及每个图像的真实框(ground truth)。我们从低到高选择预测框,逐个计算精度和召回值,并绘制 PR 曲线。

假设预测框:

图像预测框(置信度)是否正确预测
10.9
20.8
30.75
40.7
50.5

在这个简单的例子中,PR 曲线的横轴是召回率,纵轴是精度。随着我们逐步增加预测框的数量,精度会下降而召回率上升。最终,PR 曲线会给出一个关于 Precision 和 Recall 的关系图。

PR 曲线在不同情况的表现

PR 曲线不仅能帮助我们理解模型的整体表现,还能揭示模型在不同类型的预测下的表现差异。通过分析 PR 曲线的形状和位置,我们可以更深入地了解模型在各类情况下的表现,例如漏检(低召回、高精度)、误检(高假阳性、低精度)等。

1. 漏检多的情况(低 Recall,高 Precision)

如果模型漏检很多目标,意味着模型虽然识别出的目标框数量较少,但这些框大多数是正确的。PR 曲线表现为:

  • Precision 高:因为模型预测的正类中,很多都是正确的。
  • Recall 低:因为很多真实存在的目标并未被模型检测到。

具体表现

  • 该情况通常发生在置信度阈值设置较高时。模型严格要求高置信度才能进行预测,因此漏掉了很多低置信度的目标。
  • PR 曲线中的召回率较低,而精度较高。

例如
假设我们有一张包含 10 个目标的图像,模型只检测出了 2 个目标,并且这两个目标预测正确,那么精度可能很高,但召回率较低。

2. 漏检少的情况(高 Recall,低 Precision)

如果模型漏检少,意味着它能够检测到大部分真实目标,虽然其中一些可能是错误的(假阳性)。PR 曲线表现为:

  • Precision 低:由于模型可能多次预测了错误的目标框,精度较低。
  • Recall 高:模型能够检测到大部分真实目标,召回率较高。

具体表现

  • 这种情况通常发生在置信度阈值较低时。模型对置信度要求不严格,因此检测到了更多的目标,但一些预测可能是错误的(误检)。
  • PR 曲线中的召回率较高,而精度较低。

例如
假设我们有一张图像,其中包含 10 个目标,模型检测到了 12 个框,其中 8 个框是正确的,4 个框是错误的。此时,召回率会很高(接近 100%),但精度较低。

3. 误检多的情况(高 False Positive)

误检通常会影响 PR 曲线的表现,使得精度降低。这意味着模型将许多负类错误地预测为正类。PR 曲线表现为:

  • Precision 低:因为模型预测为正类的很多都是错误的(假阳性)。
  • Recall 可能较高:如果模型能够正确地检测到大部分正类目标,召回率可能还会较高,但误检会让精度显著降低。

具体表现

  • 误检多时,模型错误地将一些背景或负类对象识别为目标,导致精度降低。
  • PR 曲线呈现较低的精度和较高的召回率。

例如
假设图像中包含 10 个目标,而模型错误地将 5 个非目标框(误检)预测为目标,并且所有实际目标都被正确检测到。召回率为 100%,但精度将大大降低,因为误检占了较大的比例。

4. 误检少的情况(低 False Positive)

如果误检很少,模型对负类的识别较好,预测框大多数都是正确的,PR 曲线表现为:

  • Precision 高:由于误检少,模型的正类预测大部分都是准确的。
  • Recall 可能较低:如果模型没有足够的检测能力,可能漏掉一些真实目标,导致召回率下降。

具体表现

  • 误检少时,模型精度较高,但召回率可能受到影响。
  • PR 曲线呈现较高的精度,但召回率较低。

例如
假设图像中包含 10 个目标,模型准确地检测出了 8 个目标并且没有误检任何非目标,精度很高,但召回率较低,因为漏掉了 2 个目标。


总结

通过分析 PR 曲线在不同情况下的表现,我们可以更直观地理解模型的优缺点。例如,在精度与召回率之间做出权衡时,我们可以通过调整阈值来控制模型的表现:

  • 低 Recall,高 Precision:适用于对误检非常敏感的场合。
  • 高 Recall,低 Precision:适用于对漏检非常敏感的场合。
  • 低 Precision,高 Recall:可能表明模型在高置信度下预测准确,但无法检测到所有目标。

PR 曲线的形状和位置可以帮助我们针对不同问题调整模型的表现,从而在目标检测中获得更好的效果。


如何计算 AP(平均精度)

AP 是基于 PR 曲线 计算的综合评估指标。为了计算 AP,我们需要通过对不同的 召回率(Recall) 下的 精度(Precision) 进行插值,通常使用 11 点插值法,即在 Recall 从 0 到 1 之间取 11 个不同的值,并计算这些值对应的最大精度。最终的 AP 通过这些最大精度值的平均值来得到。

11 点插值法:

通过对不同 召回率 下的 精度 进行插值,我们可以得到 11 个精度点,然后求其平均值。

示例:计算 11 点插值法的 AP

假设我们已经计算了不同召回率下的精度值,如下表所示:

RecallPrecision
0.00.9
0.10.88
0.20.85
0.30.84
0.40.8
0.50.75
0.60.72
0.70.7
0.80.68
0.90.65
1.00.6

根据 11 点插值法,我们选取每个召回率点下的最大精度,然后取平均:
AP = (0.9 + 0.88 + 0.85 + 0.84 + 0.8 + 0.75 + 0.72 + 0.7 + 0.68 + 0.65 + 0.6) / 11 = 0.75


交并比(IoU)

IoU(Intersection over Union) 是目标检测中评估模型预测框与真实框之间重叠度的重要指标。它通过计算预测框和真实框交集与并集的比值来衡量预测的准确性。

IoU 的计算公式:

IoU = Area of Overlap / Area of Union

示例
假设我们有一个预测框和一个真实框,如下图所示:

  • 预测框的面积:0.3
  • 真实框的面积:0.4
  • 交集的面积:0.2
  • 并集的面积:0.5

IoU 为:

IoU = 0.2 / 0.5 = 0.4

如果 IoU ≥ 0.5,认为预测框为 正确的检测(True Positive, TP)。如果 IoU < 0.5,则认为预测为 假阳性(False Positive, FP)。


小结:如何优化模型表现?

根据 PR 曲线和 AP 的表现,我们可以采取以下措施来优化模型:

  1. 调整置信度阈值:通过调整模型预测框的置信度阈值,我们可以在 Precision 和 Recall 之间做出平衡。
  2. 增加训练数据:通过数据增强或使用更丰富的训练数据,帮助模型提高对复杂场景的识别能力。
  3. 非极大抑制(NMS):使用 NMS 筛选出最优的预测框,从而减少冗余框,提升精度。

通过这些手段,我们能够提升模型的 RecallPrecision,并通过 PR 曲线AP 进一步评估模型性能。


结语

在深度学习中的目标检测任务中,PR 曲线IoUAP 是重要的评估标准。理解这些标准并灵活运用它们,能够帮助我们更好地优化模型并获得更高效的检测结果。希望这篇文章能帮助你更深入地理解如何评估深度学习模型的性能,并在实际项目中做出更好的决策。

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

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

相关文章

MySQL 1366 - Incorrect string value:错误

MySQL 1366 - Incorrect string value:错误 错误如何发生发生原因&#xff1a; 解决方法第一种尝试第二种尝试 错误 如何发生 在给MySQL添加数据的时候发生了下面的错误 insert into sys_dept values(100, 0, 0, 若依科技, 0, 若依, 15888888888, ryqq.com, 0,…

[ctfshow web入门] web70

信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取的index.php error_reporting和ini_set被禁用了&#xff0c;不必管他 error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗&#xff1f; if(isset($_POST[c])){…

Linux在web下http加密和配置虚拟主机及动态页面发布

web服务器的数据加密 1.简介&#xff1a;由于http协议以明文方式发送&#xff0c;不提供任何方式的数据加密&#xff0c;也不适合传输一些重要的信息&#xff0c;如银行卡号、密码等&#xff0c;解决该缺陷设计了安全套接字层超文本传输协议https&#xff1b; 2.https的握手流…

uni-app,小程序中的addPhoneContact,保存联系人到手机通讯录

文章目录 方法详解简介 基本语法参数说明基础用法使用示例平台差异说明注意事项最佳实践 方法详解 简介 addPhoneContact是uni-app框架提供的一个实用API&#xff0c;用于向系统通讯录添加联系人信息。这个方法在需要将应用内的联系人信息快速保存到用户设备通讯录的场景下非…

NHANES稀有指标推荐:HALP score

文章题目&#xff1a;Associations of HALP score with serum prostate-specific antigen and mortality in middle-aged and elderly individuals without prostate cancer DOI&#xff1a;10.3389/fonc.2024.1419310 中文标题&#xff1a;HALP 评分与无前列腺癌的中老年人血清…

【django.db.utils.OperationalError: unable to open database file】

解决platform.sh 环境下&#xff0c;无法打开数据库问题 场景 在platform.sh 执行python manage.py createsuperuser是提示 django.db.utils.OperationalError: unable to open database file 错误 原因 由于settings.py文件中 本地数据库配置在线上配置后&#xff0c;导致…

【前端分享】CSS实现3种翻页效果类型,附源码!

使用 css 可以实现多种翻页效果&#xff0c;比如书本翻页、卡片翻转等。以下是两种常见的翻页效果实现&#xff1a; 效果 1&#xff1a;书本翻页效果 通过 transform 和 rotateY 实现 3D 翻页效果。 html 结构 <divclass"book"> <divclass"page pa…

【部署满血Deepseek-R1/V3】大型语言模型部署实战:多机多卡DeepSeek-R1配置指南

大家好&#xff01;这里是迪小莫学AI&#xff0c;今天的文章是“”大型语言模型部署实战&#xff1a;多机多卡DeepSeek-R1配置指南“” 前言 随着大型语言模型的快速发展&#xff0c;如何高效部署这些模型成为技术团队面临的重要挑战。本文将分享基于DeepSeek-R1模型的多机多…

IPM IMI111T-026H 高效风扇控制板

概述&#xff1a; REF-MHA50WIMI111T 是一款专为风扇驱动设计的参考开发板&#xff0c;搭载了英飞凌的IMI111T-026H iMOTION™智能功率模块(IPM)。这个模块集成了运动控制引擎(MCE)、三相栅极驱动器和基于IGBT的功率级&#xff0c;全部封装在一个紧凑的DSO22封装中。REF-MHA50…

Linux 阻塞和非阻塞 I/O 简明指南

目录 声明 1. 阻塞和非阻塞简介 2. 等待队列 2.1 等待队列头 2.2 等待队列项 2.3 将队列项添加/移除等待队列头 2.4 等待唤醒 2.5 等待事件 3. 轮询 3.1 select函数 3.2 poll函数 3.3 epoll函数 4. Linux 驱动下的 poll 操作函数 声明 本博客所记录的关于正点原子…

互联网SQL面试题:用户会话时长分析

这是一个基于用户点击信息进行会话时长分析的案例&#xff0c;常见于互联网 App 使用分析。 问题描述 用户的访问记录存储在 user_access 表中&#xff0c;包含用户编号&#xff08;user_id&#xff09;以及访问时间&#xff08;access_time&#xff09;等信息。以下是一个示…

前端取经路——现代API探索:沙僧的通灵法术

大家好,我是老十三,一名前端开发工程师。在现代Web开发中,各种强大的API就像沙僧的通灵法术,让我们的应用具备了超乎想象的能力。本文将带你探索从离线应用到实时通信,从多线程处理到3D渲染的九大现代Web API,让你的应用获得"通灵"般的超能力。 在前端取经的第…

window 显示驱动开发-AGP 类型伸缩空间段

AGP 类型的伸缩空间段类似于线性光圈空间段。 但是&#xff0c;内核模式显示微型端口驱动程序&#xff08;KMD&#xff09;不会通过 AGP 类型的伸缩空间段公开 dxgkDdiBuildPagingBuffer 回调函数的DXGK_OPERATION_MAP_APERTURE_SEGMENT和DXGK_OPERATION_UNMAP_APERTURE_SEGMEN…

从零开始学习three.js(15):一文详解three.js中的纹理映射UV

1. UV 映射基础概念 1.1 什么是 UV 坐标&#xff1f; 在三维计算机图形学中&#xff0c;UV 坐标是将二维纹理映射到三维模型表面的坐标系统。UV 中的 U 和 V 分别代表2D纹理空间的水平&#xff08;X&#xff09;和垂直&#xff08;Y&#xff09;坐标轴&#xff0c;与三维空间…

代码复用与分层

1. 代码复用与分层 函数&#xff1a;将常用的代码块封装成函数&#xff0c;提供自己或者团队使用。 库&#xff1a;将代码打包成静态或者动态库&#xff0c;提供出来一个头文件供自己或者团队使用。比如stm32中的HAL库。 框架&#xff1a;通常实现一个完整的系统性的代码&am…

人脸真假检测:SVM 与 ResNet18 的实战对比

在人工智能蓬勃发展的当下&#xff0c;人脸相关技术广泛应用于安防、金融、娱乐等诸多领域。然而&#xff0c;随着人脸合成技术的日益成熟&#xff0c;人脸真假检测成为保障这些应用安全的关键环节。本文将深入探讨基于支持向量机&#xff08;SVM&#xff09;结合局部二值模式&…

类加载器, JVM类加载机制

1.类加载器 Java里有如下几种类加载器 1.引导类加载器 负责加载支撑JVM运行的位于JRE的lib目录下的核心类库&#xff0c;比如rt.jar、charsets.jar等 2.扩展类加载器 负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包 3.应用程序类加载器 负责加载Class…

Hadoop 2.x设计理念解析

目录 一、背景 二、整体架构 三、组件详解 3.1 yarn 3.2 hdfs 四、计算流程 4.1 上传资源到 HDFS 4.2 向 RM 提交作业请求 4.3 RM 调度资源启动 AM 4.4 AM运行用户代码 4.5 NodeManager运行用户代码 4.6 资源释放 五、设计不足 一、背景 有人可能会好奇&#xf…

串口屏调试 1.0

http://wiki.tjc1688.com 先把商家的链接贴过来 淘晶驰T1系列3.2寸串口屏tft液晶屏显示屏HMI触摸屏超12864液晶屏 这是主包的型号 打开这个玩意 有十个基本的功能区 新建工程 在界面的右边&#xff0c;指令一定要写在page前面&#xff0c;这里的波特率等等什么的都可以…

《设计数据密集型应用》——阅读小记

设计数据密集型应用 这本书非常推荐看英语版&#xff0c;如果考过了CET-6就可以很轻松的阅读这本书。 当前计算机软件已经不是单体的时代了&#xff0c;分布式系统&#xff0c;微服务现在是服务端开发的主流&#xff0c;如果没有读过这本书&#xff0c;则强力建议读这本书。 …