目标检测2--yolov1中相关基础知识(边框回归、交并比、nms)介绍

文章目录

    • 前言
    • 回归介绍
      • 基本概念
      • 线性回归
      • 非线性回归
      • 边框回归
    • 交并比介绍
        • 定义
        • 程序实现
    • NMS介绍
      • 定义与原理
      • 工作原理
      • 代码实现

前言

在上篇博客目标检测1–Pytorch目标检测之yolov1中介绍了yolov1的原理,里面提到几个知识点现在详细介绍一下。

回归介绍

在上篇博客中提到yolov1将目标检测转换为回归问题,那什么是回归呢?

基本概念

回归:是一种预测数值型数据的监督学习算法。在深度学习中,回归模型通过训练数据学习自变量(特征)与因变量(目标)之间的映射关系,进而对新数据进行预测。

线性回归

线性回归:是回归问题中最基础也是最常见的一种形式。它假设自变量与因变量之间存在线性关系,即可以通过一条直线(在多维空间中为超平面)来拟合数据点。线性回归模型的一般形式为:
y = w x + b y=wx+b y=wx+b
其中,y 是因变量,x 是自变量,w 是权重, b 是偏置项。在深度学习中,线性回归通常作为更复杂模型的基础组件。

非线性回归

  当自变量与因变量之间的关系不是线性的,而是曲线或其他复杂形式时,就需要使用非线性回归模型。非线性回归模型可以通过引入多项式、指数函数、对数函数等非线性项来拟合数据。

边框回归

在YOLO当中用到了边框回归的概念,什么是边框回归呢?
如下图所示:

  • 对于窗口一般使用四维向量(x,y,w,h) 来表示,分别表示窗口的中心点坐标和宽高。
  • 红色的框P代表原始的Proposal,;
  • 绿色的框G代表目标的Ground Truth;
    我们的目标是寻找一种关系使得输入原始的窗口P 经过映射得到一个跟真实窗口G 更接近的回归窗口G^。
    在这里插入图片描述
    所以,边框回归的目的即是:
    给定(Px,Py,Pw,Ph)寻找一种映射 f 使得:
    f ( P x , P y , P w , P h ) = ( G ^ x , G ^ y , G ^ w , G ^ h ) f (Px,Py,Pw,Ph)=(\hat G x,\hat Gy,\hat Gw,\hat Gh) f(Px,Py,Pw,Ph)=(G^x,G^y,G^w,G^h)
    并且 ( G ^ x , G ^ y , G ^ w , G ^ h ) ≈ ( G x , G y , G w , G h ) (\hat Gx,\hat Gy,\hat Gw,\hat Gh)≈(Gx,Gy,Gw,Gh) (G^x,G^y,G^w,G^h)(Gx,Gy,Gw,Gh)

边框回归实现比较简单的思路就是: 平移+尺度缩放

交并比介绍

  交并比(Intersection over Union,简称IoU)是目标检测和语义分割任务中一个重要的衡量标准。

定义

  交并比(IoU)是指两个边界框(或分割掩模)的交集区域的面积与这两个边界框(或分割掩模)的并集区域的面积之比。它用于衡量预测框(或预测分割区域)与实际框(或实际分割区域)之间的重叠程度。
在这里插入图片描述

程序实现
def compute_iou(box1, box2):  """  计算两个矩形框的IoU  参数:  box1 -- 第一个矩形框,格式为(x1, y1, x2, y2)  box2 -- 第二个矩形框,格式为(x1, y1, x2, y2)  返回:  iou -- 两个矩形框的IoU值  """  # 计算交集区域 左上角坐标(xi1,yi1) 右下角坐标(xi2,yi2)xi1 = max(box1[0], box2[0])  yi1 = max(box1[1], box2[1])  xi2 = min(box1[2], box2[2])  yi2 = min(box1[3], box2[3])  inter_area = max(xi2 - xi1, 0) * max(yi2 - yi1, 0)  # 计算并集区域  box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1])  box2_area = (box2[2] - box2[0]) * (box2[3] - box2[1])  union_area = box1_area + box2_area - inter_area  # 计算IoU  iou = inter_area / union_area  return iou  

NMS介绍

定义与原理

  NMS(即非极大值抑制),其原理是通过筛选出局部极大值来得到最优解。在目标检测等场景中,算法通常会生成大量的候选框,其中许多框可能会高度重叠,表示相同的对象。NMS通过抑制(删除或忽略)非极大值的候选框(即置信度较低或重叠度较高的框),保留最有可能的候选框,从而优化检测结果。

工作原理

NMS的工作原理可以概括为以下几个步骤:

  1. 选择最高置信度的边界框:从所有候选框中选择具有最高置信度(或检测概率)的边界框。
  2. 计算交并比(IoU):计算该边界框与其他所有边界框的IoU。IoU是两个边界框重叠程度的度量,计算公式为重叠区域的面积除以联合区域的面积。
  3. 抑制重叠框:如果IoU超过某个阈值(如0.5),则认为这两个边界框检测到的是同一个目标,因此抑制(删除或忽略)置信度较低的边界框。
  4. 迭代处理:重复上述过程,直到所有边界框都被处理。

代码实现

def non_max_suppression(bboxes, scores, iou_threshold=0.5):"""  非极大值抑制算法实现  Args:  bboxes (np.array): 检测框的坐标,形状为(N, 4),其中N是检测框的数量,4代表[x1, y1, x2, y2]。  scores (np.array): 每个检测框的置信度,形状为(N,)。  iou_threshold (float): 交并比阈值。  Returns:  np.array: 保留的检测框索引。  """  # 根据置信度对检测框进行排序  order = scores.argsort()[::-1]  # 初始化保留的检测框索引列表  keep = [] while order.size > 0:  # 选择当前置信度最高的检测框  i = order[0]  keep.append(i)  xx1 = np.maximum(bboxes[i, 0], bboxes[order[1:], 0])  yy1 = np.maximum(bboxes[i, 1], bboxes[order[1:], 1])  xx2 = np.minimum(bboxes[i, 2], bboxes[order[1:], 2])  yy2 = np.minimum(bboxes[i, 3], bboxes[order[1:], 3])  w = np.maximum(0.0, xx2 - xx1 + 1)  h = np.maximum(0.0, yy2 - yy1 + 1)  inter = w * h  # 计算当前检测框的面积  area_i = (bboxes[i, 2] - bboxes[i, 0] + 1) * (bboxes[i, 3] - bboxes[i, 1] + 1)  # 计算其余检测框的面积  area_other = (bboxes[order[1:], 2] - bboxes[order[1:], 0] + 1) * (bboxes[order[1:], 3] - bboxes[order[1:], 1] + 1)  # 计算交并比  iou = inter / (area_i + area_other - inter)  # 保留IOU小于阈值的检测框  inds = np.where(iou <= iou_threshold)[0]  order = order[inds + 1]  # 因为inds是基于order[1:]的索引,所以需要+1  return keep

如有错误欢迎指正,如果帮到您请点赞加收藏哦!
关注我的微信公众号:回复"深度学习资料"领取深度学习相关资料(100本人工智能书籍),实时更新深度学习相关知识!
在这里插入图片描述

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

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

相关文章

【Qt】Qt开发环境搭建

目录 一. Qt SDK的下载&安装 二. Qt相关工具介绍 Qt的常用开发工具有&#xff1a; Qt CreatorVisual StudioEclipse 一. Qt SDK的下载&安装 Qt 下载官网&#xff1a; http://download.qt.io/archive/qt/ 国内清华源: https://mirrors.tuna.tsinghua.edu.cn/qt/arc…

实战某大型连锁企业域渗透

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 实战域渗透测试流程 对黑客来说&#xff0c;拿下域控制器是终极目标。然而攻击者空间是如何通过采取信息收集、权限提升、横向移动等一系列手段&#xff0c;从而一步步…

《基于 defineProperty 实现前端运行时变量检测》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;欢迎多多交流~ &am…

STM32CubeMX实现4X5矩阵按键(HAL库实现)

为了实现计算器键盘&#xff0c;需要使用4X5矩阵按键&#xff0c;因此&#xff0c;我在4X4矩阵键盘上重新设计了一个4X5矩阵按键。原理图如下&#xff1a; 原理描述&#xff1a; 4X5矩阵按键&#xff0c;可以设置4个引脚为输出&#xff0c;5个引脚为输入模式&#xff0c;4个引…

【云原生】Prometheus监控Docker指标并接入Grafana

目录 一、前言 二、docker监控概述 2.1 docker常用监控指标 2.2 docker常用监控工具 三、CAdvisor概述 3.1 CAdvisor是什么 3.2 CAdvisor功能特点 3.3 CAdvisor使用场景 四、CAdvisor对接Prometheus与Grafana 4.1 环境准备 4.2 docker部署CAdvisor 4.2.2 docker部署…

【Java探索之旅】初识多态_概念_实现条件

文章目录 &#x1f4d1;前言一、多态1.1 概念1.2 多态的实现条件 &#x1f324;️全篇总结 &#x1f4d1;前言 多态作为面向对象编程中的重要概念&#xff0c;为我们提供了一种灵活而强大的编程方式。通过多态&#xff0c;同一种操作可以应用于不同的对象&#xff0c;并根据对象…

el-table 树形数据与懒加载 二级数据不展示

返回的数据中 children和hasChildren只能有一个&#xff0c;不能同时存在&#xff0c;否则加载数据会失败

零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频

文章目录 一.概要二.PWM输入框架图三.CubeMX配置一个PWM输入例程1.硬件准备2.创建工程3.调试 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是利用单…

手把手搭建微信机器人,帮你雇一个24小时在线的个人 AI 助理(上)

上一篇&#xff0c;带领大家薅了一台腾讯云服务器&#xff1a;玩转云服务&#xff1a;手把手带你薅一台腾讯云服务器&#xff0c;公网 IP。 基于这台服务器&#xff0c;今天我们一起动手捏一个基于 LLM 的微信机器人。 0. 前置准备 除了自己常用的微信账号以外&#xff0c;还…

盘点8款国内顶尖局域网监控软件(2024年国产局域网监控软件排名)

局域网监控软件对于企业网络管理至关重要&#xff0c;它们可以帮助IT部门维护网络安全&#xff0c;优化网络性能&#xff0c;同时监控和控制内部员工的网络使用行为。以下是八款备受推崇的局域网监控软件&#xff0c;每一款都有其独特的优势和适用场景。 1.安企神软件 试用版领…

VSCode远程服务器如何上传下载文件(超方便!)

方法一&#xff1a; 1、在VSCode应用商店安装SFTP插件 2、然后就可以直接把文件拖进VSCode即可&#xff0c;如下图所示&#xff1a; 这里的目录是我远程服务器上的目录&#xff0c;可以直接将要上传的文件直接拖进需要的文件夹 3、如果要从远程服务器上下载文件到本地&#x…

安装Gradle

官网文档 https://gradle.org/ 腾讯下载镜像&#xff1a;https://mirrors.cloud.tencent.com/gradle/ 文档&#xff1a;https://docs.gradle.org/current/userguide/userguide.html 命令行文档&#xff1a;https://docs.gradle.org/current/userguide/command_line_interface.…

Java高级重点知识点-21-IO、字节流、字符流、IO异常处理、Properties中的load()方法

文章目录 IOIO的分类 字节流字节输出流【OutputStream】字节输入流【InputStream】图片复制 字符流字符输入流【FileReader】字符输出流【FileWriter】 IO异常的处理&#xff08;扩展知识&#xff09;Properties属性集(java.util) IO Java中I/O操作主要是指使用 java.io 包下的…

《侃侃而谈 · 关于接外单的一些事》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

期末成绩发布方式

期末考试结束后&#xff0c;成绩单的发放总是让老师们头疼不已。想象一下&#xff0c;每个学生的成绩都需要老师一个个私信给家长&#xff0c;不仅耗时耗力&#xff0c;而且极易出错。 在传统的成绩单发放方式中&#xff0c;老师往往需要通过电子邮件、短信或者微信等方式&…

【Rust基础入门】Hello Cargo

文章目录 前言Cargo是什么&#xff1f;Cargo的作用查看cargo版本使用cargo创建项目Cargo.toml文件cargo build命令cargo runcargo check为发布构建 总结 前言 在Rust编程中&#xff0c;Cargo扮演着至关重要的角色。它是Rust的包管理器&#xff0c;负责处理许多任务&#xff0c…

【TB作品】51单片机 Proteus仿真 00002仿真-智能台灯色调倒计时光强

实验报告&#xff1a;基于51单片机的智能台灯控制系统 背景 本实验旨在设计一个基于51单片机的智能台灯控制系统&#xff0c;该系统可以通过按键进行手动控制&#xff0c;并能根据环境光强度自动调节台灯亮度。此外&#xff0c;系统还具备倒计时关灯功能。 器件连接 51单片…

软件运维服务方案(Word原件2024)

软件运维服务方案&#xff08;Word原件&#xff09; 1. 服务简述 我们提供全面的软件运维服务&#xff0c;确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务&#xff0c;灵活响应客户需求。 1.3 服务要求 高效响应&am…

双向DFS——AcWing 171. 送礼物

双向DFS 定义 双向深度优先搜索&#xff08;Bi-directional Depth First Search, BD-DFS&#xff09;是一种在图或树中寻找两点间路径的算法。与传统的单向DFS不同&#xff0c;BD-DFS同时从起始节点和目标节点出发进行搜索&#xff0c;使用两个DFS过程。一个向前探索从起点到…

从一个(模型设计的)想法到完成模型验证的步骤

从有一个大型语言模型&#xff08;LLM&#xff09;设计的想法到完成该想法的验证&#xff0c;可以遵循以下实践步骤&#xff1a; 需求分析&#xff1a; 明确模型的目的和应用场景。确定所需的语言类型、模型大小和性能要求。分析目标用户群体和使用环境。 文献调研&#xff1a…