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

news2024/11/23 9:01:49

        接下来是我最想要分享的内容,梳理了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训练流程原理

        未完待续...

            

             

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

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

相关文章

C++奇迹之旅:string类对象的容量操作

文章目录 📝 string类的常用接口🌉 string类对象的容量操作🌠size🌠length🌠capacity🌠clear🌠empty🌠reserve🌉resize 🚩总结 📝 string类的常用…

通义千问免费新功能:EMO,让照片和视频“活”起来

🧙‍♂️ 诸位好,吾乃斜杠君,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &#…

编写burp插件实现数据包自定义修改

背景 安全测试工作中经常遇到各种加密加签或者添加了其它安全措施的数据包。以加密为例,为了测试正常进行,我们需要解密后修改数据包再进行加密还原,手工的话很是繁琐且没必要,所以我们需要一个工具帮我们自动化的实现。由于我们…

盘点一下近年来常用的电脑监控软件

企业电脑监控软件通常用于监视员工在工作时间内的电脑使用情况,以确保他们的工作效率和安全性。以下是几种常见的企业电脑监控软件: 1、Ping32 Ping32是一款集成多功能的企业级电脑监控软件,包括员工上网行为管理、文件外发审计、屏幕活动监…

Stable Diffusion Ai绘画模型推荐:二次元Coriander_Mix v1大模型推荐

负tag嵌入式:EasyNegative,badhandv4 此模型经测试是写实偏3D的效果 画质灰暗的话请加:VAE840000 或者负tag:(watermark:2),(blurry:2),fat,paintings,sketches,(worst quality:2),(low quality:2),(normal quality:2),((monochrome)), ((grayscale))…

Redis 源码安装(CentOS 单机)

序言 本文给大家介绍如何在 CentOS 上,通过 Redis 源码单机部署 Redis 服务。 一、部署流程 通过官网下载源码 # 下载源码 wget https://download.redis.io/redis-stable.tar.gz# 解压源码包 tar -xzvf redis-stable.tar.gz在 linux 中执行以下命令,安…

工业级路由器的穿透力是不是更强(原创科普)

今天我想和大家聊聊工业级路由器的一个重要特性——穿透力。作为一名从事工业网络通信的工程师,我发现很多用户在选择工业级路由器时,都会问到一个问题:"工业级路由器的穿透力是不是更强?"下面就让我来为大家解答这个疑问。当然如果有通信产品需要也可以关注星创易联…

修图新风尚:AI技术赋能,Remini引领修图新纪元,从Remini到未来,AI修图如何改变我们的视觉世界?

最近一款名为Remini的AI修图软件凭借其独特的“丑萌”的黏土风格,迅速在海内外市场走红。 用户只需要上传一张照片,就可以利用AI技术生成对应的黏土滤镜风格的图像。 “黏土AI”风格的图像刷爆了今年的五一假期旅游照片“大赛”,在小红书、…

【京东电商API接口】 | 京东某商品销量数据分析可视化

Python当打之年 当打之年,专注于各领域Python技术,量的积累,质的飞跃。后台回复:【可视化项目源码】可获取可视化系列文章源码和数据 本期将利用Python分析「京东商品数据接口」,希望对大家有所帮助,如有疑…

检测机构的双资质是什么?

CMA和CNAS是两种在检测、校准和认证领域具有权威性的资质。 CMA资质全称为“检验检测机构资质认定”(China Inspection Body and Laboratory Mandatory Approval)。它是根据《中华人民共和国计量法》等相关法规,由国家认证认可监督管理委员会…

Python 中的 Unit testing 文件写入

在 Python 中进行单元测试时,有时候需要测试文件写入操作。为了模拟文件写入并进行单元测试,你可以使用 Python 的 unittest 模块,并结合 io.StringIO 或 tempfile 模块来模拟文件操作。 1、问题背景 在 Python 中,为 ConfigPars…

Chromium编译指南2024 Windows11篇-GN 工具生成构建文件(六)

前言 在《Chromium编译指南2024(五)》我们已经获取了 Chromium 的源代码并且同步了相关的第三方依赖。 现在,我们将进一步学习如何使用 GN 工具生成构建文件,为后续的编译工作做好准备。 1. 使用gn工具生成构建文件 再次在Win…

禅道20.0.stable发布啦,重构底层PHP和UI框架,用户体验全新升级

禅道20.0.stable版本终于正式发布啦! 自2023年4月启动以来,经过一年多的努力,我们动员了全公司的产研力量,致力于为用户提供全新的用户体验。 本次版本升级主要包括两个方面:一是用户体验全新升级,二是整体…

4diacIDE同时编译不同版本踩坑记录

4diac不同版本依赖插件版本及jdk版本是不同的,当你需要搭建不同版本4diacIDE开发环境时,就会出现各种问题。最近一个月github上项目提交记录比较多,出现了不少坑。以下记录下此背景下的解决方法: 1、首先由于.target依赖的eclipse…

搭建电商ERP系统电商独立站最实用的电商API商品数据采集接口||电商API接口接入

通常搭建电商独立站需要接入的商品数据接口包括: 1. 商品信息接口:包括商品基本信息(名称、描述、价格等)、图片信息、库存信息、分类信息等。 2. 库存信息接口:用于同步更新商品的库存情况,保证实时性…

DC-DC电路中电感的下方该不该挖空

DC-DC电路中的电感下方该不该挖空? 在回答这个问题之前,先来了解一下DC-DC电路中常见的功率电感类型 一.DC-DC电路常用功率电感类型 图1 DC-DC电路常用电感类型 这四种类型电感,按照无屏蔽电感→磁封胶半屏蔽电感→组装式全屏蔽…

I forgot my Plex Account PIN; how can I reset it? How can I change my PIN?

If you’ve set a PIN on your Plex account, it’s possible to reset or remove that PIN. Related Page: Plex Home Regular Plex Account If you know the current PIN If the current PIN is known, then simply edit the current PIN on the Settings > Users &…

uni-app 多列picker切换列显示对应内容

html部分&#xff1a; <view class"uni-list"><view class"uni-list-cell"><view class"uni-list-cell-left">选择用户</view><view class"uni-list-cell-db"><picker mode"multiSelector"…

python绘制等高线函数参数说明

文章目录 函数说明参数说明返回值示例生成双峰山体数据代码案例生成三维的空间双峰山形函数 plt.contour 是 Matplotlib 库中的一个函数&#xff0c;用于绘制等高线图。等高线图是一种特殊的地图&#xff0c;其中等高线表示相同高度的等值线。 函数说明 matplotlib.pyplot.co…

2024年四川省中小企业数字化转型城市试点申报对象要求、时间安排

一、重点任务 &#xff08;一&#xff09;聚焦企业需求&#xff0c;加快中小企业数字化转型。以中小企业数字化转型为契机&#xff0c;促进数字经济和实体经济深度融合。优先将数字化转型需求迫切、具备一定数字化基础的专精特新中小企业纳入试点范围。围绕中小企业创新、市场…