YOLOv1 中的一些计算

YOLOv1 中的一些计算

位置参数计算

在训练过程中,需要分别计算真实框的位置参数 t x t_x tx t y t_y ty w w w h h h

已知真实框的左上角点和右下角点坐标: g t = [ x 1 , y 1 , x 2 , y 2 ] gt = [x_1, y_1, x_2, y_2] gt=[x1,y1,x2,y2] t x t_x tx t y t_y ty 计算如下:

  • 第一步,计算真实框的中心点坐标
  • 第二步,计算中心点所在的网格坐标
  • 第三步,计算中心点相对于网格左上角点的偏移量,偏移量的值域为 [0, 1)

( 1 ) C x = x 1 + x 2 2 , C y = y 1 + y 2 2 ( 2 ) g r i d x = ⌊ C x s t r i d e ⌋ , g r i d y = ⌊ C y s t r i d e ⌋ ( 3 ) t x = C x s t r i d e − g r i d x , t y = C y s t r i d e − g r i d y (1)\ C_x = \frac{x_1 + x_2}{2},\ C_y = \frac{y_1 + y_2}{2} \\ (2)\ grid_x = \left \lfloor \frac{C_x}{stride}\right \rfloor,\ grid_y = \left \lfloor \frac{C_y}{stride}\right \rfloor \\ (3)\ t_x = \frac{C_x}{stride} - grid_x,\ t_y = \frac{C_y}{stride} - grid_y (1) Cx=2x1+x2, Cy=2y1+y2(2) gridx=strideCx, gridy=strideCy(3) tx=strideCxgridx, ty=strideCygridy

w w w h h h 计算如下:

  • 用于训练的 w w w h h h 不能直接使用真实框的宽和高,因为数值较大,使得在训练期间很容易出现不稳定甚至发散的问题。因此,YOLOv1 会对真实框的宽和高做归一化处理,其中 W W W H H H 是图像的宽和高

w = x 2 − x 1 W , h = y 2 − y 1 H w = \frac{x_2 - x_1}{W},\ h = \frac{y_2 - y_1}{H} w=Wx2x1, h=Hy2y1

在这里插入图片描述

在考虑如何给边界框的置信度标签赋值时,一个很简单的想法是将包含目标中心点的网格处的边界框置信度标签置为 1,反之为 0,这是一个典型的二分类思想。但 YOLOv1 并没有采取如此简单的做法,YOLOv1 不仅希望边界框的置信度能够表征网格是否包含目标中心点,同时也希望边界框的置信度能表征所预测的边界框的定位精度。而对于边界框的定位精度,通常使用交并比(intersection of union,IoU)来衡量。

正负样本分配策略

正负样本分配策略如下:

  1. 计算真实框中心点所在网格的每个预测框与真实框的 IoU
  2. 将 IoU 最大的预测框标记为正样本,并将 IoU 值作为该预测框的置信度标签(计算正样本置信度损失时,置信度的预测值将与该置信度标签,即 IoU 值做计算);该预测框参与计算位置参数损失、置信度损失、类别损失
  3. 不包含目标的网格的所有预测框将被视为负样本,只参与计算置信度损失,且置信度标签为 0(计算负样本置信度损失时,置信度的预测值将与该置信度标签,即 0 做计算)
  4. 包含目标的网格的除 IoU 最大的其他预测框,不参与任何计算

损失函数透析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

损失函数的第一、二行,计算的是位置参数损失;
损失函数的第三、四行,计算的是置信度损失,第三行表示的是正样本的置信度损失,第四行表示的是负样本的置信度损失,它们俩不会同时计算;
损失函数的第五行,计算的是类别损失,每个类别的损失都是 L2 损失,而不是交叉熵。

正样本参与所有的损失计算,负样本只参与置信度损失的计算。

推理

对于给定的一张大小为 448 ∗ 448 448*448 448448 的输入图像,YOLOv1 输出 7 ∗ 7 ∗ 30 7*7*30 7730 的张量。其中每个网格位置都包含两个边界框的置信度输出 C 1 C_1 C1 C 2 C_2 C2、两个边界框的位置参数输出 ( t x 1 , t y 1 , w 1 , h 1 ) (t_{x_1}, t_{y_1}, w_1, h_1) (tx1,ty1,w1,h1) ( t x 2 , t y 2 , w 2 , h 2 ) (t_{x_2}, t_{y_2}, w_2, h_2) (tx2,ty2,w2,h2) 以及 20 个类别置信度输出 p ( c 1 ) p(c_1) p(c1)~ p ( c 2 ) p(c_2) p(c2)。显然,这么多的预测不全是我们想要的,我们只关心那些包含目标的网格所给出的预测,因此在得到最终的检测结果之前,我们需要再按照以下四个步骤去做滤除和筛选:

  1. 计算所有预测的边界框的得分。在 YOLOv1 中,每个边界框的得分 score 被定义为该边界框的置信度 C C C 与类别的最高置信度 P c m a x P_{c_{max}} Pcmax 的乘积,其中 P c m a x = m a x [ p ( c 1 ) , p ( c 2 ) , . . . , p ( c 20 ) ] P_{c_{max}} = max[p(c_1), p(c_2), ..., p(c_{20})] Pcmax=max[p(c1),p(c2),...,p(c20)]。具体来说,对于 ( g r i d x , g r i d y ) (grid_x, grid_y) (gridx,gridy) 处的网格,边界框 B j B_j Bj 的得分计算公式如下:
    s c o r e j = C j ∗ P c m a x score_j = C_j * P_{c_{max}} scorej=CjPcmax

  2. 得分阈值筛选。计算了所有边界框的得分后,我们设定一个阈值去滤除那些得分低的边界框。显然,得分低的边界框通常都是背景框,不包含目标的中心点。比如,我们设置得分阈值为 0.3,滤除那些得分低于该阈值的低质量的边界框

    在这里插入图片描述

  3. 计算边界框的中心点坐标以及宽和高。经过得分阈值筛选完后,我们即可计算剩下的边界框的中心点坐标以及宽和高

  4. 使用非极大值抑制进行第二次筛选。由于 YOLOv1 可能对同一个目标给出多个得分较高的边界框,因此我们需要对这种冗余检测进行抑制,以剔除那些不必要的重复检测。为了达到这一目的,常用的手段之一便是非极大值抑制(non-maximal suppression,NMS)。非极大值抑制的思想很简单,对于某一类别目标的所有边界框,先挑选出得分最高的边界框,再依次计算其他边界框与这个得分最高的边界框的 IoU,超过设定的 IoU 阈值的边界框则被认为是重复检测,将其剔除。对所有类别的边界框都进行上述操作,直到无边界框可剔除为止

    在这里插入图片描述

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

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

相关文章

vue elementui简易侧拉栏的使用

目的&#xff1a; 增加了侧拉栏&#xff0c;目的是可以选择多条数据展示数据 组件&#xff1a; celadon.vue <template><div class"LayoutMain"><el-aside :width"sidebarIsCollapse ? 180px : 0px" class"aside-wrap"><…

【机器学习】深度概率模型(DPM)原理和文本分类实践

1.引言 1.1.DPM模型简介 深度概率模型&#xff08;Deep Probabilistic Models&#xff09; 是结合了深度学习和概率论的一类模型。这类模型通过使用深度学习架构&#xff08;如神经网络&#xff09;来构建复杂的概率分布&#xff0c;从而能够处理不确定性并进行预测。深度概率…

Linux通过expect实现免交互

免交互 Here Document 用于将多行字符串直接传递给命令的方式&#xff0c;不需要人为交互命令界面&#xff0c;实现免交互 当使用Here Document操作文件时&#xff0c;需要借助一个文件结束符 EOF&#xff1a;文件结束符 示例 在脚本文件中写入以下内容 <<&#x…

AFLNet入门教学——测试RTSP协议实现Live555(Ubuntu)

1、简介 本文旨在使用AFLNet对RTSP协议实现Live555进行模糊测试。实验环境为&#xff1a;Ubuntu22.04.4AFLNet安装参考&#xff1a;AFLNet入门教学——安装&#xff08;Ubuntu22.04.4&#xff09;-CSDN博客 2、安装Live555 本次实验采取的是live555在2018年8月28日上传的版本…

nacos漏洞汇总

1 nacos介绍 1.1 nacos是啥 Alibaba Nacos是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集&#xff0c;可以快速实现动态服务发现、服…

【Knowledge Graph Context-Enhanced Diversified Recommendation(MSDM2024)】

Knowledge Graph Context-Enhanced Diversified Recommendation 摘要 推荐系统&#xff08;RecSys&#xff09;领域已被广泛研究&#xff0c;以通过利用用户的历史交互来提高准确性。 尽管如此&#xff0c;这种对准确性的持续追求常常导致多样性的减少&#xff0c;最终导致众所…

全网最强MyBatisPlus教程 | 万字长文爆肝MyBatisPlus

MyBatisPlus 今日目标 基于MyBatisPlus完成标准Dao的增删改查功能 掌握MyBatisPlus中的分页及条件查询构建 掌握主键ID的生成策略 了解MyBatisPlus的代码生成器 1&#xff0c;MyBatisPlus入门案例与简介 这一节我们来学习下MyBatisPlus的入门案例与简介&#xff0c;这个和其他…

在线AI聊天对话机器人,答你所问!

随着AI人工智能技术的不断进步&#xff0c;AI聊天对话机器人已经成为我们日常生活中常用的工具。这些智能助手不仅能够提供信息查询、生活娱乐、学习辅导等服务&#xff0c;还能通过自然语言处理和机器学习技术理解用户的需求&#xff0c;提供个性化的回答和建议。下面小编就和…

选择第三方软件测试机构做验收测试的好处简析

企事业单位在自行开发完软件系统或委托软件开发公司生产软件之后&#xff0c;有一个必经流程就是验收测试&#xff0c;以验证该产品是否符合用户需求、是否可以上线。为了客观评估所委托生产的软件质量&#xff0c;第三方软件测试机构往往成为企事业单位做验收测试的首选&#…

如何有效降低云消息使用成本?涂鸦Pulsar云消息史诗级大更新来了!超级干货攻略快收藏

月末了&#xff0c;相信大家都会有信用卡额度超支的担忧&#xff0c;生怕一不留神就会超出预算&#xff0c;并且事后还需要仔细核对消费情况。类似的焦虑&#xff0c;也会出现在使用涂鸦 Pulsar 云消息服务时。虽然涂鸦 Pulsar 云消息能满足开发者对设备各类事件实时性和持久化…

ADI-DSP|在指定内存写入数据

一、LDF文件设置内存空间 user_data_test { TYPE(BW RAM) START(0x00380010) END(0x0039bfff) WIDTH(8) }//usr data dxe_user_data_bw BW{INPUT_SECTION_ALIGN(4)INPUT_SECTIONS( $OBJS_LIBS(user_data) )} > user_data_test 二、在C文件中设置数据 /************…

使用LabVIEW和示波器测试IGBT参数

使用LabVIEW和示波器测试绝缘栅双极型晶体管&#xff08;IGBT&#xff09;参数的综合解决方案。过程包括硬件设置、示波器和其他必要设备的配置&#xff0c;以及开发LabVIEW程序以自动化数据采集、过滤、关键参数计算和结果显示。该方法确保了IGBT测试的准确性、可靠性和高效性…

巡检机器人智能联网,促进工厂自动化

随着工业4.0和智能制造的快速发展&#xff0c;企业引入自动化设备和智能机器人以提高生产效率和降低人工成本已成为大势所趋。其中&#xff0c;巡检机器人作为一种能够在复杂和危险环境中进行自动巡检的设备&#xff0c;受到了广泛关注。如何实现巡检机器人稳定、安全的联网是每…

【光伏开发】工商业光伏的优势

随着全球对可再生能源的日益重视和环保意识的增强&#xff0c;工商业光伏作为一种清洁、高效的能源利用方式&#xff0c;正在得到广泛的推广和应用。工商业光伏系统通过安装在工厂、仓库、办公楼等工商业场所的太阳能电池板&#xff0c;将太阳能转化为电能&#xff0c;以满足工…

C# OpenCvSharp 入门

摘要 C# OpenCvSharp 是一个基于OpenCV&#xff08;开源计算机视觉库&#xff09;的C#封装库&#xff0c;它提供了一组功能强大的工具和函数&#xff0c;用于图像处理、计算机视觉和计算机图形学等领域。通过使用OpenCvSharp库&#xff0c;您可以在C#应用程序中轻松地实现各种图…

SpringBoot整合Nacos并开启鉴权

关于Nacos的介绍就不在多说&#xff0c;不知道的可以看看Nacos的官网&#xff1a;nacos.io    1、下载安装Nacos 下载地址&#xff1a;https://nacos.io/download/nacos-server/&#xff0c;下载后将Nacos解压到本地磁盘即可&#xff0c;Nacos使用Java语言开发&#xff0c;因…

Ant Design Vue Upload 自定义上传 customRequest,这一篇很详细

Upload 常用属性和方法 示例上传接口 # 接口文档 url https://www.mocky.io/api/main/upload 头部 x-token: xxx 参数 file: File // 上传的文件 flag: xxx // 上传的标识// 文件上传 api 函数简单封装 export const uploadApi ({ file }) > {const formData new Fo…

Markdown的使用

这里写自定义目录标题 欢迎使用Markdown新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注…

iOS之如何创建.framework静态库

番外&#xff1a;想要查看如何创建.a静态库可前往看我iOS之如何创建.a静态库-CSDN博客这篇文章。 一、创建framework项目 创建framework工程要选择iOS --> Cocoa Touch Framework输入项目名称PrintFramework也是编译生成的framework的名称。framework的名称也可以以后在项目…

CID引流电商:传统电商破局的新动力

摘要&#xff1a;CID引流电商为传统电商带来破局新机遇&#xff0c;通过跨平台引流、精准定位和高效转化&#xff0c;解决了流量获取难、成本高的问题&#xff0c;提升了销售业绩和市场竞争力。CID引流电商助力传统电商在激烈竞争中保持领先&#xff0c;推动行业持续发展。 随…