详解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)这三个模块组成的
- 卷积(Convolution)
卷积是卷积神经网络最重要的操作之一,它通过在输入数据上滑动一个卷积核(filter),来提取出输入数据中的特征。卷积操作可以帮助网络捕捉到局部的空间信息,并且通过参数共享来减少模型的参数量,从而降低了过拟合的风险。
在卷积操作中,卷积核会对输入数据进行逐元素的乘法累加,从而生成输出特征图。卷积核的大小、步长、填充等超参数可以控制输出特征图的尺寸和感受野大小。此外,卷积操作还可以使用不同的卷积核来提取不同的特征,从而增强网络的表达能力。
- 批标准化(Batch Normalization)
批标准化是一种常用的技术,可以帮助网络更好地学习和收敛。它通过对每个小批量数据进行归一化,来使得网络中的每一层输入分布更加稳定。批标准化可以减少梯度消失和梯度爆炸的问题,从而使得网络更易于训练。此外,批标准化还可以增加网络的鲁棒性,使其对输入数据的变化更加稳定。
- 激活函数(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.特征图尺度,细节信息,语义信息之间有什么联系?
较浅的特征图(即较大尺度,分辨率较高的特征图)可以捕捉到更多的细节信息,例如物体的纹理等。
较深的特征图(即较小尺度,分辨率较低的特征图)则具有更高级的语义信息,例如物体的类别,姿态等。
因此,需要利用不同尺度的特征图,以保留丰富的语义信息和细节信息。
相关文章:
详解yolov5的网络结构
转载自文章 网络结构图(简易版和详细版) 此图是博主的老师,杜老师的图 网络框架介绍 前言: YOLOv5是一种基于轻量级卷积神经网络(CNN)的目标检测算法,整体可以分为三个部分, ba…...
汽车零配件行业看板管理系统应用
生产制造已经走向了精益生产,计算时效产出、物料周转时间等问题,成为每一个制造企业要面临的问题,工厂更需要加快自动化,信息化,数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统,本篇文章就为大…...
【Go】函数的使用
目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递(指针) 函数返回多个值 用法如下: package mainimport ("fmt""strconv" )// 返回多个返回值,无参数名 func Mu…...
宝塔面板运行Admin.net框架
准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04(本贴使用的是Ubuntu20.04版本系统) Admin.net开发框架 先安装好服务器系统,这里就不做安装过程描述了&…...
Javaweb11-Filter过滤器
Filter过滤器 1.Filter的基本概念: 在Java Servlet中,Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...
【AI-7】CUDA
CUDA(Compute Unified Device Architecture)是NVIDIA公司开发的一种并行计算平台和编程模型,使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍: CUDA的特点 并行计算:CUDA允许开发…...
ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过
web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…...
基于实现Runnable接口的java多线程
Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行,以及应用场景。 一、应用场景 异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。 以下…...
如何在uniapp中使用websocket?
websocket是我们经常使用到的接口,通常用于即时通讯以及K线图这种需要实时更新数据的业务需求上,传统的restful接口虽然可以满足,但是你需要轮询,这就要额外写一堆代码,不是很方便,用websocket就简单很多,我们来看代码 第一步定义全局常量、变量 const config = {host…...
PCL 点云PFH特征描述子
点云PFH特征描述子 一、概述1.1 概念1.2 算法原理二、代码实现三、结果示例一、概述 1.1 概念 点特征直方图PFH(Point Feature Histograms)描述子:用于表示点云中每个点的局部几何形状信息,它是一种直方图描述子,包括了点云的法线方向和曲率信息,PFH描述子可以帮助区分不同…...
linux程序安装-编译-rpm-yum
编译安装流程步骤详解 识途老码 | Linux编译安装程序 编译安装概览 编译安装是从软件的源代码构建到最终安装的过程,它允许用户根据自身的需求和系统的环境来自定义软件的配置和功能。相对于二进制安装,编译安装提供了更高的灵活性和控制能力,但同时也要求用户具备一定的…...
【网络协议】PIM
PIM 1 基本概念 PIM(Protocol Independent Multicast)协议,即协议无关组播协议,是一种组播路由协议,其特点是不依赖于某一特定的单播路由协议,而是可以利用任意单播路由协议建立的单播路由表完成RPF&…...
Redis 中的跳跃表(Skiplist)基本介绍
Redis 中的跳跃表(Skiplist)是一种用于有序元素集合的快速查找数据结构。它通过一个多级索引来提高搜索效率,能够在对数时间复杂度内完成查找、插入和删除操作。跳跃表特别适用于实现有序集合(sorted set)的功能&#…...
C语言编译和编译预处理
1.编译预处理 • 编译是指把高级语言编写的源程序翻译成计算机可识别的二进制程序(目标程序)的过程,它由编译程序完成。 • 编译预处理是指在编译之前所作的处理工作,它由编译预处理程序完成 在对一个源程序进行编译时࿰…...
ahb 总线的一些思考
1. 如何处理对不存在地址的访问? 当主设备试图访问内存映射中不存在的地址时,系统需要处理这一情况以避免错误或未定义行为。通常通过使用默认从设备或错误响应机制来管理。具体如下: 默认从设备:默认从设备响应对未定义或不存在…...
spark shuffle写操作——SortShuffleWriter
写入的简单流程: 1.生成ExternalSorter对象 2.将消息都是插入ExternalSorter对象中 3.获取到mapOutputWriter,将中间产生的临时文件合并到一个临时文件 4.生成最后的data文件和index文件 可以看到写入的重点类是ExternalSorter对象 ExternalSorter 基…...
ESP32CAM物联网教学12
ESP32CAM物联网教学12 MicroPython 视频服务 小智希望能在MicroPython中实现摄像头的视频服务,就像官方示例程序CameraWebServer那样。 下载视频服务驱动库 小智通过上网搜索,发现相关的教学材料还不少,并且知道有人已经写出了视频服务的驱…...
【C++精华铺】12.STL list模拟实现
1.序言 STL (Standard Template Library)是C标准库中的一个重要组件,提供了许多通用的数据结构和算法。其中,STL list是一种带头双向链表容器,可以存储任意类型的元素。 list的特点包括: 双向性:list中的元素可以根据需…...
ChatGPT Mac App 发布!
2024 年 6 月,OpenAI 的大语言模型 ChatGPT 的 Mac 客户端与 ChatGPT-4o 一起发布了。ChatGPT Mac 户端可以让用户直接在 Mac 电脑上使用 ChatGPT 进行对话。它提供了一个简单易用的用户界面,用户可以在其中输入文本或语音指令,并接收模型生成…...
ACE之ACE_Time_Value
简介 ACE_Time_Value在ACE中表示时间,集成不同平台的时间 结构 #mermaid-svg-dGoKn1R7GicabUif {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dGoKn1R7GicabUif .error-icon{fill:#552222;}#mermaid-…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
