YOLO原理实现

YOLO(You Only Look Once)是一个标志性的目标检测模型,可以快速分类并定位图像中的多个对象。本文总结了YOLO模型中所有关键的数学操作。

第一步:定义输入

要使用YOLO模型,首先必须将RGB图像转换为448 x 448 x 3的张量。

图片

我们将使用简化的5 x 5 x 1张量,这样数学计算会更简洁一些。 

图片

第二步:层归一化

神经网络通常在归一化数据上表现更好。我们可以通过首先计算矩阵中的平均值(µ)来归一化输入。

图片

接下来,可以计算所有元素与平均值的绝对差值。

图片

 然后,可以通过对前一部分的结果中的所有值进行平方,将它们相加,除以值的数量,并计算平方根来计算标准差。

图片

一旦计算出标准差,可以通过减去均值并除以标准差来对输入进行层归一化。

图片

均值和标准差可用于归一化输入值。均值是输入图像的平均值,标准差是原始图像中值的分布宽度。通过减去均值并除以标准差,我们“归一化”了图像。

注意:我们计算了层归一化。原始的YOLO论文使用批归一化,它在一个批次的不同图像之间归一化相同的值。这两者之间的概念差异可以忽略不计。

第三步:卷积

现在我们的输入已经归一化,我们将其通过卷积网络。我们将YOLO理想化为具有两个内核的单卷积层。

图片

为了确保输出张量具有与输入相同的空间维度,我们在归一化输入上应用0填充。

图片

然后可以通过元素乘法(⊙)和累加求和(Σ)将两个内核卷积到图像上。

图片

在输入上卷积两个内核后,我们得到两个大小相等的数组。通常将其表示为3D张量,不同的内核存在于称为“过滤器”或“内核”维度的维度中。

图片

第四步:最大池化

现在我们对输入进行了卷积,可以应用最大池化。在此示例中,我们用2 x 2的窗口和步幅为2对每个卷积矩阵进行最大池化。我们也最大池化部分区域。在这种情况下,我使用了一个实现最大池化的函数,如果所有值都为负,则将值设置为零。实际上,我认为这几乎没有影响。

图片

最大池化观察输入的一个子集,并只保留每个子集的最大值。

第五步:非线性激活

几乎所有的机器学习模型,包括YOLO,都在模型中使用非线性“激活函数”。由于之前所有的数学运算都是线性的(乘法和加法),所以之前的步骤只能模拟线性关系。添加一个将模型中的值非线性映射的函数,可以让模型学习非线性关系。在此示例中,我们使用sigmoid激活函数,但ReLU更为常见。

注意:在最大池化之后应用激活函数效率更高一些。

图片

这个函数可以按元素应用于所有最大池化的矩阵。

图片

第六步:展平

现在输入图像已经被过滤成一个更适合最终建模任务的抽象表示(实际上是通过几个卷积层,而不是本示例中的一个卷积层),可以通过展平将其转换为一个向量。

图片

第七步:输出投影

可以使用一个密集网络(即矩阵乘法)将展平的矩阵投影到最终输出。YOLO的最终输出包括SxSxC类预测和SxSxBx5个边界框预测。因此,输出的形状必须为SxSx(C+Bx5)。假设在前一步展平的输出长度为L,则密集网络的权重矩阵形状必须为Lx(SxSx(C+Bx5))。

在这个示例中,我们假设S为1,C为2,B为1。L是展平向量的长度,为18。因此,权重矩阵的形状应为18 x 7。

注意:用`表示转置矩阵。

图片

每个网格单元的类概率之和应为1。因此,每个网格单元的预测类概率需要进行softmax。

图片

每个两个类概率中的一个作为e的指数,这些值除以两个值的总和作为e的指数。e是欧拉常数,值为2.718,具有某些指数特性,因此在此上下文中很常用。

第八步:推理

YOLO的最终输出(在此示例中为7元素长的向量)已经计算完成。现在我们可以使用这些值生成最终的推理。由于S=1,只有一个网格单元。由于B=1,只有一个边界框。由于C=2,有两个类预测。

图片

YOLO预测网格单元(在这种情况下是整个图像)包含一只狗。边界框距离左墙和顶墙各50%。宽度是网格单元宽度的30%,高度是网格单元高度的70%。此外,YOLO有90%的置信度认为这是一个好的边界框。

图片

在一个不那么简单的示例中,网格有四个单元(S=4),每个单元一个边界框:

图片

一个不那么简单的输出示例 左上和右上单元的置信度太低,因此不使用边界框。使用了其他两个。请注意,高度(和宽度)可以大于1,因为边界框可以是网格单元高度的倍数。

图片

结论

就这样。在本文中,我们介绍了计算YOLO输出的主要步骤:

  1. 定义输入

  2. 归一化输入

  3. 应用卷积

  4. 应用最大池化

  5. 非线性激活

  6. 展平

  7. 投影到输出形状

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

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

相关文章

再看Java-笔试

放在前面的话 最近确实有些空闲,分配的功能从一开始的两眼一黑到现在的一上午就能完成,这何尝不是一种进步呢。 该说不说,海康的API问题相比较其他第三方的API还是蛮多的,而且10月份人工客服还会停运,不过到那个时候…

【CTF】Nginx日志注入

Nginx日志注入: 日志包含漏洞的成因还是服务器没有进行严格的过滤 ,导致用户可以进行任意文件读取,但是前提是服务器需要开启了记录日志的功能才可以利用这个漏洞。 对于Apache,日志存放路径:/var/log/apache/access.l…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 5 发送通知消息

场景介绍 通知消息通过Push Kit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。您可以通过设置通知消息样式来吸引用户。 开通权益 Push Kit根据消息内容,将通知消息分类为服务与通讯、资讯营销两大类别&…

【Qt】QSS的设置方式

QSS的设置方式 QWidget 中包含了 setStyleSheet ⽅法, 可以直接设置样式. 上述代码我们已经演⽰了上述设置⽅式 还可以通过 QApplication 的 setStyleSheet ⽅法设置整个程序的全局样式. 设置全局样式,可以将界面上所有的样式都集中到一起来组织。 全局样式优点:…

图神经网络的新篇章:通用、强大、可扩展的图变换器

人工智能咨询培训老师叶梓 转载标明出处 图变换器(Graph Transformers, GTs)因其在处理节点间全局依赖关系方面的能力而受到广泛关注。然而,现有的GTs模型在处理大规模图时面临着计算复杂度高、泛化能力有限等问题。为了解决这些问题&#x…

UnLua扩展接口

一、在蓝图中创建接口 1、创建BlueprintInterface 2、声明接口函数 3、继承接口 注意,接口不需要绑定Lua,也没有Bind按钮 二、在Lua中实现接口函数 1、实现接口函数 BP_Player.lua function BP_Player_C:UpdateAiming(IsAiming)if IsAiming thensel…

maven手动导入本地仓库

maven手动导入本地仓库 1.在maven仓库下载对应的依赖 一定要把jar包下载到maven仓库的bin下 2.找到自己仓库的maven仓库下的bin目录cmd进去 在cmd窗口中输入以下命令&#xff1a;&#xff08;这里根据你的groupId、artifactId、version修改即可&#xff09; <!-- https:…

gpu scene cull

(1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) LaunchComputeRelevanceTask 调用堆栈 (1) (1)

12k star,这可能是我见过最强的国产开源支付系统!(附源码)

最近有读者问到支付系统相关的问题&#xff0c;这里推荐两个总体完成度还不错的国产开源支付系统&#xff0c;可以拿来学习&#xff0c;也可以根据项目需求直接拿来用。 01 Jeepay 项目介绍 &#xff1a; 一套适合互联网企业使用的开源支付系统&#xff0c;提供了交易、退款、…

IO流中的异常捕获

Java简化 接口AutoCloseable

【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

〇、前言 哨兵是一个分布式系统&#xff0c;你可以在一个架构中运行多个哨兵进程&#xff0c;这些进程使用流言协议来接收关于Master主服务器是否下线的信息&#xff0c;并使用投票协议来决定是否执行自动故障迁移&#xff0c;以及选择哪个Slave作为新的Master。 文章目录 〇、…

vue3扩展echart封装为组件库-快速复用

ECharts ECharts&#xff0c;全称Enterprise Charts&#xff0c;是一款由百度团队开发并开源&#xff0c;后捐赠给Apache基金会的纯JavaScript图表库。它提供了直观、生动、可交互、可个性化定制的数据可视化图表&#xff0c;广泛应用于数据分析、商业智能、网页开发等领域。以…

在已安装的openresty上添加安装upstream模块报错的解决以及使用Consul服务发现时定时变更nginx的upstream的shell脚本

一、在已经安装好的openresty环境上添加安装upstream模块报错&#xff1a; 在已经安装好的openresty环境上添加安装upstream模块报错&#xff1a;http upstream check module can not find any check server, make sure you ve added the check 的问题解决。 服务器上已经安装好…

JavaWeb+Web服务器简介

一、Java Web 1.1 简介 Web&#xff0c;在英语中web即表示网页的意思&#xff0c;它用于表示Internet主机上供外界访问的资源。 Java Web指的是使用Java技术开发的Web应用程序。Java在Web开发中有着广泛的应用&#xff0c;主要得益于其跨平台性、安全性和丰富的开发工具与框…

鼻咽癌中三级淋巴结构的单细胞与空间转录组分析|文献精析·24-09-22

小罗碎碎念 研究团队通过单细胞和空间转录组分析&#xff0c;揭示了与鼻咽癌进展和免疫治疗反应相关的三级淋巴结构。 作者角色作者姓名单位&#xff08;中文&#xff09;第一作者Yang Liu/通讯作者Jin-Xin Bei国家癌症中心南方肿瘤学重点实验室&#xff0c;鼻咽癌诊断治疗广东…

TryHackMe 第3天 | Pre Security (二)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

『功能项目』QFrameWork更新道具图片UGUI【71】

我们打开上一篇70QFrameWork物品交换UGUI的项目&#xff0c; 在资源商店免费下载图片 创建Image重命名为Icon并且隐藏Name 给Icon一张随意道具图片Icon 重新绑定对象 接下来创建IItem.cs接口 与 ItemConfig.cs道具配置类 创建Config文件夹 创建脚本&#xff1a;ItemConfig.cs 编…

【416】【举报垃圾信息】

这题倒挺简单的 注意一下映射关系&#xff0c;再使用字典即可。 class Solution:def reportSpam(self, message: List[str], bannedWords: List[str]) -> bool:nlen(message)if n1:return Falsedictdefaultdict(int)num0for a in message:dict[a]1for b in bannedWords:if…

构建高效心理辅导平台:Spring Boot实践

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展&#xff0c;计算机网络已经逐渐深入人们的生活&#xff0c;网络已经能够覆盖我们生活的每一个角落&#xff0c;给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代&#xff0c;计算机网络的发展…

安装黑群晖,并使用NAS公网助手实现DDNS动态域名解析

很多人都会安装安装一个黑群晖进行练手&#xff0c;黑群晖有很多玩法和NAS套件&#xff0c;而且黑群晖安装比较简单&#xff0c;没有复杂的步骤&#xff0c;这也是很多人玩黑裙的理由&#xff0c;这里教大家如何安装黑群晖&#xff0c;并且安装神卓互联NAS公网助手实现DDNS动态…