YOLOv8原理解析[目标检测理论篇]

        接下来是我最想要分享的内容,梳理了YOLOv8预测的整个流程,以及训练的整个流程。

        关于YOLOv8的主干网络在YOLOv8网络结构介绍-CSDN博客介绍了,为了更好地介绍本章内容,还是把YOLOv8网络结构图放在这里,方便查看。

1.YOLOv8预测流程原理

        前面已经提到了Head层网络是根据类别数来设计生成特定的特征图,那么为什么要将预测box的特征图设计成64个维度?box特征图和预测Cls的特征图又是怎么解码用来预测图片中目标框的位置和类别的?这都是这一节要重点介绍的内容。

         在对box和cls解码之前首先要把三个尺度的特征图展开,box变成(1,64,6400)、(1,64,1600)、(1,64,400),cls变成(1,nc,6400)、(1,nc,1600)、(1,nc,400),然后各自进行合并,从而得到box(1,64,8400),cls(1,nc,8400),一张图片在输入网络后就会得到这两个向量,分别用来预测目标的位置和类别,接下来看一下是如何对这两个向量解码得到预测的结果,并且了解下预测的完整流程。

        预测模块分成了以下三个部分,图像预处理、模型推理以及后处理模块。接下来将按照这三个顺序来展开说明。

1.1图像预处理模块

        图像预处理模块:对输入的图片进行预处理,包括letterBox、归一化等操作,这里主要介绍一下letterBox操作:(1)LetterBox的目的就是将原图的尺寸(1280,720)转换成网络输入尺寸(640,640);(2)缩放采用的是等比例缩放方式,即找出长边将其缩放成640,然后按照长边的缩放比例(1280/640=2),同时给短边进行缩放,得到720/2=360,然后把短边补充灰边至640;(3)如图所示经过LetterBox后的图片尺寸并不是640*640而是(640,384),这是为什么呢?这种是改进后的LetterBox,只要保证填充短边是32的倍数即可,这样可以加快推理速度。而至于为什么是32的倍数,我理解的是YOLOv8最大进行了5次下采样,为了保证每个像素都有效并且可以整除,那么输入尺寸必须是32的倍数。

1.2推理模块

        推理模块:介绍下Box分支和Cls分支是如何进行解码的。 

        首先来看一下Box分支,由前面可知经过网络后会输出一个(1,64,8400)的向量,64是通过4*reg_max(reg_max=16)计算得到的,4是指预测的中心点到预测边框的左边(l)、上边(t)、右边(r)、下边(b)的距离,reg_max是指预测边框的范围,举个例子就很容易就能理解了。

         当reg_max=16时,在每个预测特征图下(20*20,40*40,80*80),能够预测的最大预测框的大小为30*30,如何理解30*30呢?如下表所示,4*16可以理解成一个4行16列的矩阵,l/t/r/b的值经过softmax后遵循着\sum value=1规定,并且最终预测的结果为Index和对应的value的乘积,比如网络预测的ltrb长度为:

                Left: 5*0.25+6*0.75=5.75 ;Top: 4*0.40+5*0.60=4.60; 

                Right: 5*0.35+6*0.65=5.65;Bottom: 4*0.4+6*0.6=5.20;

        既然如此,那么当Index=15时,value=1,此时预测的l、t、r、b均为最大值,且都为15,也就是说在每个特征图尺度下(20*20,40*40,80*80),能够预测的最大的边框大小均为30*30。比如在20*20尺寸的特征图中,这是专门用来预测大目标尺寸的特征图,而30*30已经超出了特征图20*20的尺寸,说明不会漏掉任何一个大目标。在40*40尺寸的特征图中,30*30能够预测大部分的中等目标(映射回640*640中,目标大小大概为480*480)。在80*80尺寸的特征图中,30*30主要也是用于预测小目标。

         最后,会根据缩放比例,把8400个grid cell预测的边框大小映射回640*640尺度,即输入到网络的尺寸上,并且把预测的LTRB表示方式更改为XYWH方式,即中心点/宽高方式。

        接着是cls分支,Cls分支仅是对所有元素做一个Sigmoid()操作,也就是说每个元素都会独立地经过Sigmoid()函数,从而得到一个(0,1)区间范围内的值。

1.3后处理模块

         后处理模块:主要由两部分组成,分别是NMS模块和Scale_boxes.

         NMS模块即非极大值抑制,NMS流程分成了三部分,第一部分主要是通过置信度阈值过滤掉一部分(每个gird cell会有nc个预测类别的值,且经过sigmoid后均在(0,1)之间,取nc个里面的最大值和阈值进行比较),并且将XYWH格式转换为XYXY格式,由此8400个grid cell经过过滤后只剩下29个。第二部分主要通过Cls张量挑出这29个grid cell的类别置信度及其标签下标。第三部分是给box加上一个偏移量通过torchvision自带的NMS来完成标签框的过滤,给不同类别加上一个偏移量是为了在区分不同的类别。最后将得到一个3行6列的矩阵,代表预测出的三个目标及其对应的XYXY格式的Box,类别的置信度,以及类别的下标。

        下面是对于不同类别需要加上一个偏移量的理解,见图知意。 

        Scale_boxes模块是将预测结果映射回到原始输入图片尺寸的,首先将预测的框减去因为latter box产生的偏移量,复原到等比例缩放(640,360)时的每个框的XYXY坐标,然后再将XYXY坐标等比例放大到原始图像(1280,720)的坐标,最后把得到的XYXY坐标信息进行裁剪到指定的图像尺寸范围内,确保边界框不会超出图像的实际尺寸,简而言之就是不让预测框超出原始图像尺寸。

         至此,YOLOv8模块的预测部分就到此结束,下一章节将介绍目标检测任务中训练流程,有了对预测流程的理解,训练流程就比较容易理解了。

2.YOLOv8训练流程原理

        未完待续...

            

             

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI讲师大模型培训老师叶梓:大模型应用的方向探讨

大模型应用的关键方向及其落地案例可以从多个角度进行探讨,结合最新的研究和实际应用案例,我们可以更全面地理解这些技术如何推动社会和经济的发展。 Agent(数字代理): 方向说明:Agent方向的AI技术旨在创建能够独立执行任务、做出…

对于SOMP算法的测试

刚开始只上传了SOMP算法的代码,并没有过多介绍。 所以本篇文章对SOMP算法用法进行一个介绍 SOMP算法代码 function [X_hat] MMV_SOMP(Y, PHI, s)% SOMP:同时正交匹配追踪 simultaneous orthogonal matching pursuit% 论文:J. Determe, J. Lo…

若依plus 某些接口(用户信息等)响应突然变慢

今天一大早起来发现我的接口突然响应变慢了! 就什么都没动,啥也没改,但是一些接口又很快。 百度了很多,都说叫我改sql查询方式,又怀疑是过滤器的问题,很遗憾都不是! 一个响应40秒!…

[译文] 恶意代码分析:1.您记事本中的内容是什么?受感染的文本编辑器notepad++

这是作者新开的一个专栏,主要翻译国外知名安全厂商的技术报告和安全技术,了解它们的前沿技术,学习它们威胁溯源和恶意代码分析的方法,希望对您有所帮助。当然,由于作者英语有限,会借助LLM进行校验和润色&am…

IOT-9608I-L ADC端口的使用(连续采样ADC值)

目录 概述 1 硬件介绍 1.1 认识硬件 1.2 引脚信号定义 2 软件功能实现 2.1 查看iio:device0下的接口信息 2.2 实现连续采样ADC 2.2.1 功能描述 2.2.2 代码实现 2.2.3 详细代码 3 测试 概述 本文主要讲述IOT-9608I-L ADC端口的使用方便,其内容包括板卡上的…

密室逃脱游戏-第12届蓝桥杯省赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第58讲。 密室逃脱游戏&…

2024年第九届数维杯数学建模B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

分布式模式让业务更高效、更安全、更稳定

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章🔥:探索设计模式的魅力:分布式模…

Ubuntu添加网络映射路径

参考资料 linux挂在阿里云盘(webdav协议)给服务器扩容、备份数据等_davfs2-CSDN博客 Linux将WebDAV为本地磁盘 - 夏日冰菓 (lincloud.pro) systemd系统开机运行rc.local_rc-local.service: failed to execute command: exec -CSDN博客 系统版本&#xff…

word格式技巧

文章目录 论文格式技巧论文交叉引用怎么弄论文的页码怎么弄 论文格式技巧 论文交叉引用怎么弄 1.取消文献原有的编号 2.定义新编号 3.具体编号设置 4.在引用的地方插入,具体引用选项卡–>交叉引用–>选择后插入 2. 4. 论文的页码怎么弄 假设我们有这样一…

List的两种实现

前置知识: 数组 baseAddress:数组的首地址 dataTypeSize:数组中元素类型的大小,如int为4字节 为什么数组索引从0开始,假如从1开始不行吗? 在根据数组索引获取元素的时候,会用索引和寻址公式来计…

HBase 读写流程

HBase 读写流程 1. 读流程 Client先访问zookeeper,从zookeeper获取meta region的位置从meta region中读取meta表中的数据,meta中存储了用户表的region信息;根据namespace、表名和rowkey在meta表中找到对应的region信息;找到这个r…

[Kotlin]创建一个私有包并使用

1.创建Kotlin项目 创建项目: 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置,完成设置。 添加依赖: 如果你的库需要额外的依赖,可以在 build.gradle (Module: app…

文件各种上传,离不开的表单 [html5]

作为程序员的我们,经常会要用到文件的上传和下载功能。到了需要用的时候,各种查资料。有木有..有木有...。为了方便下次使用,这里来做个总结和备忘。 利用表单实现文件上传 最原始、最简单、最粗暴的文件上传。 前端代码: //方…

oracle 清理 trace 和 alert 日志文件

某天,发现磁盘空间被占满了,继续查询发现是 oracle 的日志文件占满了磁盘空间 其中: trace文件有35G, alert 有23G 目录地址是: diag/rdbms/orcl/orcl/trace, diag/rdbms/orcl/orcl/alert 都是在 oracle 目录下的 diag 目录内部 # 可以使用 以下命令对目录大小进行排…

Git与GitHub交互

注册 https://github.com/ 本地库与远程库交互方式 创建本地库并提交文件 创建远程库 在本地库创建远程库地址别名 查看现有远程库地址的别名 git remote -v 创建远程库地址别名 git remote add [别名] [远程地址] 远程路地址位置 示例 成员1推送 git push [别名] [分支…

视频剪辑图文实例:一键操作,轻松实现视频批量片头片尾减时

视频剪辑是现代媒体制作中不可或缺的一环,而批量处理视频更是许多专业人士和爱好者的常见需求。在剪辑过程中,调整视频的片头片尾时长可以显著提升视频的质量和观感。本文将通过图文实例的方式,向您展示如何一键操作,轻松实现视频…

借助Aspose.SVG图像控件,在线将 PNG 转换为 Base64 字符串

Aspose.SVG for .NET 是用于SVG文件处理的灵活库,并且与其规范完全兼容。API可以轻松加载,保存和转换SVG文件,以及通过其文档对象模型(DOM)读取和遍历文件的元素。API独立于任何其他软件,使开发人员无需使用…

jenkins+gitlab+ansible-tower实现发布

前提准备: gitlab中上传相应的jenkinsfile文件和源码。 安装和破解ansible-tower。 安装jenkins。 大致流程:从gitlab中拉取文件,存放到windows机器上,使用nuget等进行打包到windows中,使用sshPublisher语句传输到远程…

必应bing国内广告怎么做付费推广,提升产品曝光?

必应Bing作为微软旗下重要的搜索引擎平台,拥有着不可忽视的用户基础和市场潜力。对于寻求拓宽市场、提高品牌知名度的企业而言,利用必应Bing进行付费推广无疑是明智之选。通过必应Bing国内广告进行高效付费推广,助您轻松提升产品曝光度。 一…