详解yolov5的网络结构

转载自文章

网络结构图(简易版和详细版)

此图是博主的老师,杜老师的图

网络框架介绍

前言:

YOLOv5是一种基于轻量级卷积神经网络(CNN)的目标检测算法,整体可以分为三个部分,

backbone,neck,head。

如上图所示,我们需要先理解三个模块:Conv,C3,SPPF,以便理解网络结构图。

关于这三个模块的解释放在文章末尾。

其他我觉得有用的前置知识也会放在文章末尾。

1.backbone

作用:提取特征

backbone(主干网络)通过一系列的卷积层和池化层对输入图像进行处理,逐渐降低特征图的尺寸同时增加通道数。这样做的目的是保留和提取图像中重要的特征。

经过backbone提取的特征图会传递给后续的特征金字塔网络(neck)和检测头(detection head)进行处理。

分辨率高、尺度大的图片更适合用于预测小目标而不是大目标。

首先,分辨率高的图片具有更多的细节信息,可以提供更丰富的特征和上下文信息。这对于识别和定位小目标非常重要,因为小目标通常具有较少的区分特征,需要更多的细节来进行准确的预测。

其次,尺度大的图片可以容纳更多的目标实例。在一个大尺度的图片中,可能存在多个小目标,而这些小目标在尺度较小的图片中可能会被压缩或截断,导致难以准确预测。因此,对于小目标的预测,使用尺度大的图片可以提供更多的目标实例,增加了模型的训练样本,有助于提高预测的准确性。

然而,对于大目标的预测,使用尺度大的图片可能并不是最佳选择。大目标通常具有明显的外观特征,而且在尺度较小的图片中也能够得到充分表示。此时,使用尺度较小的图片可以减少计算复杂

2.neck

neck(颈部)是backbone(主干网络)和detect(检测头)之间的网络模块。

作用:

在主干网络提取的特征基础上,进一步进行特征融合上采样操作(Upsample),以提供更高级的语义信息适应不同尺度图片的能力

更进一步讲,

在卷积神经网络中,先从浅层提取到图形特征,它们是简单的图形,语义性不够强;

再从深层提取到语义特征,语义性很强了,但却没了简单的图形。

而通过neck部分,就能实现浅层图形特征和深层语义特征的融合,(Concat就是在做这件事情)

归根到底还是为了目标检测能够更精细、准确!

以上这段话借用自记录yolov5目标检测算法学习(模型的框架学习)23/10/10_晴友读钟的博客-CSDN博客

3.head

作用:

对提取到的特征进行进一步处理,并生成最终的输出结果。

细讲一下head中作用的其中一个方面,

特征融合与转换:head可以将不同尺度的特征进行融合和转换,这有助于捕捉更高层的语义信息和上下

参考内容:特征融合与转换:head可以将不同尺度的特征进行融合和转换,这有助于捕捉更高层的语义信息和上下文关系。

我们结合网络结构图,可以看到,head接收了来自深度为第17,20,23层的特征图,

特征图分辨率越来越低,感受野越来越大,虽然可以学习到更高级的语义信息,但也会丢失细节

为了能检测到不同大小的物体,于是设计了detect模块来实现。

文关系。

我们结合网络结构图,可以看到,head接收了来自深度为第17,20,23层的特征图,

特征图分辨率越来越低,感受野越来越大,虽然可以学习到更高级的语义信息,但也会丢失细节

为了能检测到不同大小的物体,于是设计了detect模块来实现。

知识点补充

1.什么是CNN?

CNN通过模拟人类视觉系统的工作原理,通过层层堆叠的卷积层、池化层和全连接层等组件来进行图像数据的特征提取和分类。

2.什么是Conv?

Conv(卷积层)通常是由卷积(Convolution)、批标准化(Batch Normalization)和激活函数(Activation)这三个模块组成的

  1. 卷积(Convolution)

卷积是卷积神经网络最重要的操作之一,它通过在输入数据上滑动一个卷积核(filter),来提取出输入数据中的特征。卷积操作可以帮助网络捕捉到局部的空间信息,并且通过参数共享来减少模型的参数量,从而降低了过拟合的风险。

在卷积操作中,卷积核会对输入数据进行逐元素的乘法累加,从而生成输出特征图。卷积核的大小、步长、填充等超参数可以控制输出特征图的尺寸和感受野大小。此外,卷积操作还可以使用不同的卷积核来提取不同的特征,从而增强网络的表达能力。

  1. 批标准化(Batch Normalization)

批标准化是一种常用的技术,可以帮助网络更好地学习和收敛。它通过对每个小批量数据进行归一化,来使得网络中的每一层输入分布更加稳定。批标准化可以减少梯度消失和梯度爆炸的问题,从而使得网络更易于训练。此外,批标准化还可以增加网络的鲁棒性,使其对输入数据的变化更加稳定。

  1. 激活函数(Activation)

激活函数是卷积神经网络中非常重要的组件之一,对输入数据进行非线性变换,从而增强网络的表达能力。在卷积神经网络中,常用的激活函数包括ReLU、LeakyReLU、Sigmoid、Tanh等。这些激活函数都可以通过将负值置为0或者进行缩放来引入非线性变换,并且具有不同的性质和优缺点。

激活函数的作用是将卷积操作的输出映射到一个非线性空间中,从而使得网络能够更好地学习复杂的特征表示。激活函数还可以帮助网络更好地处理梯度信息,从而加速网络的收敛速度。

特点:

每经过一个Conv,原特征图大小减一半,通道数乘2。

作用:

特征提取和特征融合

k,s,p,c什么意思?

  •     K: Kernel Size(卷积核大小):表示卷积核的尺寸。卷积核通常是一个二维矩阵(我将其比喻为窗口),用于提取输入数据的特征。例如:卷积核为3*3,则表示为k3,为6*6,则表示为k6。卷积核的大小通常是根据具体任务和数据的特点进行选择的。较小的卷积核可以提取更细粒度的特征,而较大的卷积核可以提取更全局的特征。同时,卷积核的大小也会影响模型的计算复杂度和参数量。
  •   S: Stride(步幅):表示卷积核在输入的图像上滑动的步长。它决定了卷积操作的输出尺寸。
  • P: Padding(填充):表示在输入数据周围添加额外的像素值。填充可以使得卷积操作后输出数据的尺寸与输入数据相同或相近。例如,此时要将分辨率为3*3和9*9的图片进行特征融合,为了不改变图像原有的特征,不采用拉伸图像的方法,而是在3*3的图片四周(上下左右)填充灰度,使3*3的图片变为9*9,就可以进行特征融合了。那么要填充多少呢?我们要在四周分别填充p个像素,故为p3。padding_size = (kernel_size - 1) / 2
  • C: Channels(通道数):表示输入数据和卷积核中的通道数量。

通过调整这些参数,可以控制卷积操作的行为和输出结果的尺寸。卷积神经网络中的每一层都可以具有不同的KSPC设置,以适应不同的特征提取需求。

例如,使用3x3大小的卷积核,步幅为1,填充为0,通道数为64的卷积层,可以表示为"Conv(3, 1, 0, 64)"。这意味着在输入数据上使用3x3的卷积核进行卷积操作,步幅为1,不进行填充,并且输出通道数为64。

进一步解释Conv的完整过程,

我们可以将卷积核想象成一个窗口,而输入数据则是一张图片。卷积操作就像是将这个窗口在图片上滑动,对窗口内的像素进行一系列的计算,并生成一个新的像素值。这个新的像素值是通过将窗口内的像素与卷积核内对应位置的权重相乘,再求和得到的。

而步幅(Stride)是指卷积核在输入数据上滑动的距离。通俗地说,步幅就是每次卷积核在输入数据上移动的像素数。

想象一下,你有一张图片,而卷积核就像是一个小窗口,你把这个小窗口放在图片的左上角,然后开始滑动。步幅就是决定你每次滑动的距离。

如果步幅较大,那么你每次滑动的距离就比较长,相当于你在图片上跳跃式地移动。这样可以快速地对整个图片进行处理,但是可能会导致一些细节信息被忽略,因为你没有在每个位置都进行处理。

如果步幅较小,那么你每次滑动的距离就比较短,相当于你在图片上细致地移动。这样可以更好地捕捉到图片的细节信息,但是需要更多的计算和时间来完成整个处理过程。

那么填充有什么用呢?我们知道,经过卷积,特征图大小会减小一般,但我们要保证输出的图像大小跟输入时的大小接近,于是要填充四周。

假设图片为6*6,经过conv层变为3*3,但要保证图片依然为6*6,于是在图片四周填充,使其变回6*6。

Conv(卷积)层的通道有什么用?
通道数的概念:

通道数是指输入或输出中的特征通道数量。对于图像数据来说,通道数通常表示红色、绿色和蓝色(RGB)三个颜色通道。

注意,通道数不仅仅指的是颜色,除了RGB通道之外,还有其他类型的通道可以用于图像处理和深度学习任务。通道数通常用于表示颜色通道、灰度通道、深度通道等。

作用:

增加卷积层的通道数可以提高网络的表达能力,使其更好地适应复杂的任务。

例如:在图像分类过程中,最初的卷积层可以捕捉到低级特征,如边缘和颜色,

然而随着网络模型的深度加深,输出特征图中的模式和结构也越来越复杂。

如果网络太浅或通道数不够,则可能无法捕捉到复杂的特征,从而影响分类性能

总结:增加通道数可以使网络更加灵活和强大

3.什么是C3?

C3模块图如上。C3之所以叫C3,是因为在这个模块中有三个卷积层(Conv)

解释:

可以看到左侧卷积提取了一半的feature(特征),什么也不干,

右侧卷积也提取了一半的feature,使其经过BottleNeck(有两种)处理后,

两个部分进行Concat(拼接),然后再经过一次卷积层

作用:

从不同维度去提取特征并融合

4.什么是SPPF?

了解SPPF前,我们先要知道SPP(Spatial Pyramid Pooling),中文为空间金字塔池化

而SPPF(Spatial Pyramid Pooling Fusion)则是SPP的改进版。

什么是SPP?

在传统的CNN网络中,全连接层要求输入的特征图大小必须固定,但是图像中的物体大小和数量却是不确定的。因此,在使用全连接层之前,需要将所有的特征图resize到一个固定大小,这就会丢失掉部分信息(缺点)。

而SPP层可以通过金字塔池化的方式,在不同的尺度下进行池化操作,并将各个尺度的池化结果进行concat(拼接)作为输出,这样就可以在不改变特征图大小的情况下,得到一个固定长度的向量表示,从而解决了输入大小的问题。

SPPF和SPP的作用:

用于将不同尺度的特征进行融合,通过对特征图进行金字塔划分和池化操作,将多尺度特征整合到一个固定长度的特征向量中。

优点:

SPP可以处理任意大小的输入特征图,因此可以避免特征图大小变化对模型的影响。

SPP是如何运作的?

1.输入图像:SPP层可以接受任意大小的输入图像。

2.特征提取网络:通常使用预训练好的卷积神经网络(CNN)来提取图像特征。

3.SPP:对于不同大小的输入图像,SPP层会自动根据其大小分别生成多个不同尺度的池化区域,在这里是13*13,9*9,5*5。然后在每个池化区域内执行最大池化操作,得到固定大小的特征向量。

4.Concat:将多个尺度的特征向量(即上一步的池化结果)进行拼接

SPPF在SPP上有何改进?

与SPP相比,SPPF的池化操作由并联变为串联,且池化区域大小不变。后面两次池化是在上一次的基础上进行的。提高了效率,原理此处不展开讲。

5.什么是语义信息?

通俗地讲,语义信息是指数据中所隐含的意义和信息。

在人类语言中,一句话由多个字词组成,每一个字词都有语义信息,我们通过分析每一个词的语义信息,就能推导出整句话的含义。

类似的,在计算机视觉中,一张图片由若干个像素组成,每一个像素都有其自身的颜色和位置信息,通过分析每一个像素的颜色和位置信息,就能推导出整张图片的含义

6.什么是图形特征?

关于这个概念,简单理解即可。

图形特征,就是一张图像所含有的特征

例如:形状,纹理,颜色,边缘等,这些都是图像的特征,统称图形特征

7.什么是上采样操作?

结构图中的Upsample就是常见的上采样操作。

作用:

上采样操作会将较低分辨率的特征图进行上采样,以恢复到与较高分辨率特征图相同的尺寸

说人话就是,把较小的输入图像恢复出较大的图像。

yolov5中的Upsample操作是为了让不同尺寸的图像拼接,特征融合

8.特征图尺度,细节信息,语义信息之间有什么联系?

较浅的特征图(即较大尺度,分辨率较高的特征图)可以捕捉到更多的细节信息,例如物体的纹理等。

较深的特征图(即较小尺度,分辨率较低的特征图)则具有更高级的语义信息,例如物体的类别,姿态等。

因此,需要利用不同尺度的特征图,以保留丰富的语义信息和细节信息。

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

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

相关文章

第十节:学习ConfigurationProperties类来配置pojo实体类参数(自学Spring boot 3.x的第二天)

大家好,我是网创有方 。这节记录下如何使用ConfigurationProperties来实现自动注入配置值。。实现将配置文件里的application.properties的参数赋值给实体类并且打印出来。 第一步:新建一个实体类WechatConfig package cn.wcyf.wcai.config;import org…

GISSERVER 管理器如何发布自定义地图网站

GISSERVER 管理器可以发布我们自己的地图网站,那么如何通过编程或自动生成的方式生成一个地图页面并将其用GISSERVER 管理器发布出来呢?在看本章之前希望您能了解一下WEBGIS的基本架构情况,对您理解本章内容及WEBGIS基本原理很有帮助&#xf…

java花店管理系统eclipse开发mysql数据库

1 绪论 1.1 系统开发目的 随着人们物质生活水平和经济水平的不断提高,室内绿化布置、家庭园艺装饰、礼仪鲜花等日益受到重视和青睐,以及送鲜花给亲朋好友来表达自己的情谊。传统的花店对于信息的管理的主要方式是基于文本、表格等纸质手工处理&#xf…

React Native 和 Flutter 的开发对比

React Native (RN) 和 Flutter 都是用于构建跨平台移动应用程序的流行框架。两者都具有各自的优势和劣势,选择哪个框架取决于您的具体需求和项目。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 以下是一些 RN 和 Flutter…

企业搭建知识库:解锁无限潜力的钥匙

在当今这个信息爆炸的时代,企业如何高效地管理、传播与利用知识,已成为衡量其竞争力的重要标尺。知识库,作为这一背景下的产物,正逐步成为企业不可或缺的数字资产。它不仅是一个自助式的数字门户,更是连接员工、客户与…

【产品经理】订单处理12-订单的取消与反取消

在电商ERP系统中,订单取消与反取消也是常见功能之一。 订单取消与反取消也是电商ERP系统的常见功能,本次主要讲解下订单取消与反取消的逻辑。 一、订单取消 在电商ERP系统中,订单取消一般由审单员操作,此类取消一般是由于上下游…

探寻操作系统文件名字符限制的规则和历史

引言 从最早的电脑系统到现代的操作系统,文件命名的规则一直在不断发展,这些规则体现了不同操作系统设计哲学的差异。作为开发者,了解这些差异和背后的历史渊源非常有价值,本文将详细探讨Windows、macOS和Linux三大主流操作系统在…

解决 npm intasll 安装报错 Error: EPERM: operation not permitted

Node.js安装及环境配置完成之后 npm install express -g 安装全局的模块报错提示没有权限operation not permitted mkdir 错误编号4048: 其原因是当前用户操作该目录权限不足,当以管理员身份运行cmd,再执行npm install express -g 是不会报权…

Windows 如何选择多个文件?连续选择和间隔选择都有方法

在我们使用电脑的时候可能会遇见需要选择多个文件的情况,这些文件可能是连续的也有可能是间隔开的,这时候你知道都有哪些方法可以帮助我们进行选择吗?下面就分情况总结了不同的选择多个文件的方法,接下来就一起来看一看。 连续多…

LLM 大模型企业应用实战(-“消灭”LLM幻觉的利器

大模型在一定程度上去改变了我们生活生工作的思考的方式,然后也越来越多的个人还有企业在思考如何将大模型去应用到更加实际的呃生产生活中去,希望大语言模型能够呃有一些更多企业级别生产落地的实践,然后去帮助我们解决一些业务上的问题。 …

react 项目中预防xss攻击的插件 dompurify

一、安装 $ yarn add dompurify $ yarn add --dev types/dompurify 二、使用 import DOMPurify from dompurify;// 1、处理: DOMPurify.sanitize(htmlContent)// 2、之后放进 dangerouslySetInnerHTML dangerouslySetInnerHTML{{ __html: cleanHTML }} 如&#…

大模型提示词工程和落地思考

本文是一篇内部的个人分享(已无敏感信息) ,目的是增加产品、开发同学对 LLM 的理解,以降低沟通中的阻力,更好推进落地。 以下经脱敏后的原文: 大模型并不神奇 很多人听到’大模型’这个词可能会觉得很神秘&#xff…

守护家庭的安全卫士:家用可燃气体探测器

在这个追求智能与安全并重的时代,每一个细微之处的防护都显得尤为重要,尤其是在我们最为依赖的家庭空间里。当谈及家居安全,燃气安全无疑占据着至关重要的位置。据统计,每年因燃气管老化、连接处松动等问题引发燃气泄漏的事故不在…

赋能电子行业:三品PLM软件系统如何加速电子产品创新

在当今竞争激烈的市场中,企业如何通过技术创新和管理优化来提升自身的竞争力,已成为一个重要课题。电子行业快速发展的同时也遇到了不少的困难,使得企业效率低下、产能没能跟上时代的发展。而PLM系统的出现,给了电子行业新的希望。…

轻空间承建上海六十中学多功能气膜馆

上海六十中学多功能气膜馆为师生提供了一个现代化、环保且多功能的运动和活动场所。这座气膜馆不仅为校园提供了全天候、舒适的环境,还为上海六十中学的师生带来了全新的健身、活动和教学体验。作为轻空间(江苏)膜科技有限公司(以…

QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List(一)——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net) QListView自定义Item_qlistview 自定义item-CSDN博客 结合我写的上一篇文章: QTableView与QSqlQueryModel的简单使用-CSDN博客 这次尝试…

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 目录 AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 一、简单介绍 二、Transformer 三、Transformer架构 四、编码器 1、自注意…

从硬件角度看Linux的内存管理

1. 分页机制 分段机制的地址映射颗粒度太大,以整个进程地址空间为单位的分配方式导致内存利用率不高。 分页机制把这个分配机制的单位继续细化为固定大小的页(Page),进程的虚拟地址空间也按照页来分割,这样常用的数据和代码就可以以页为单位…

代码随想录算法训练营第二天|【数组】209.长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s 7, nums [2,3,1,2,4,3] 输出&#…

创建React项目

使用 create-react-app快速搭建开发环境 create-react-app 是一个快速创建React开发环境的工具,底层由Webpack构建,封装了配置细节,开箱即用。 安装npx npx是一个由Node.js官方提供的用于快速执行npm包中的可执行文件的工具,np…