详解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.特征图尺度,细节信息,语义信息之间有什么联系?

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

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

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

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

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

相关文章

Floyd判圈算法——环形链表(C++)

Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。 …

实验四 图像增强—灰度变换之直方图变换

一.实验目的 1.掌握灰度直方图的概念及其计算方法; 2.熟练掌握直方图均衡化计算过程;了解直方图规定化的计算过程; 3.了解色彩直方图的概念和计算方法 二.实验内容: …

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】认证服务03—分布式下Session共享问题

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】分布式下Session共享问题 session原理分布式下session共享问题Session共享问题解决—session复制Session共享问题解决—客户端存储Session共享问题解决—hash一致性Session共享问题…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos(磁盘操作系统)界面命令下不区分大小写; 1.2. 文件格式区分 windows用扩展名区分文件;如.exe代表执行文件,.txt代表文本文件,.…

Seatunnel本地模式快速测验

前言 SeaTunnel(先前称为WaterDrop)是一个分布式、高性能、易于扩展的数据集成平台,旨在实现海量数据的同步和转换。它支持多种数据处理引擎,包括Apache Spark和Apache Flink,并在某个版本中引入了自主研发的Zeta引擎…

【c++】通过写一个C++函数来模拟跨境洗钱和系统警告

效果图&#xff1a; 源码&#xff1a; #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> #include <chrono> #include <thread> // 引入线程头文件#ifdef _WIN32 // 确保只在Windows上包含Windows.h #inclu…

zigbee笔记:六、看门狗定时器(Watch Dog)

一、看门狗基础 1、看门狗功能&#xff1a; 由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成各种寄存器和内存的数据混乱&#xff0c;会导致程序指针错误等&#xff0c;程序运行可能会陷入死循环。程序的正常运行被打断&#xff0c;由单片机控制的系统无法继…

芯片的PPA-笔记

写在前面&#xff1a;这个仅记录自己对芯片PPA的一些思考&#xff0c;不一定正确&#xff0c;还请各位网友思辨的看待&#xff0c;欢迎大家谈谈自己的想法。 1 此次笔记的起因 记录的原因&#xff1a;自己在整理这段时间的功耗总结&#xff0c;又看到工艺对功耗的影响&#x…

12.SQL注入-盲注基于时间(base on time)

SQL注入-盲注基于时间(base on time) boolian的盲注类型还有返回信息的状态&#xff0c;但是基于时间的盲注就什么都没有返回信息。 输入payload语句进行睡5秒中&#xff0c;通过开发这工具查看时间&#xff0c;如图所示&#xff0c;会在5秒钟后在执行&#xff0c;因此存在基于…

面试篇-系统设计题总结

文章目录 1、设计一个抢红包系统1.1 高可用的解决方案&#xff1a;1.2 抢红包系统的设计1.3 其他 2、秒杀系统设计 这里记录一些有趣的系统设计类的题目&#xff0c;一般大家比较喜欢出的设计类面试题目会和高可用系统相关比如秒杀和抢红包等。欢迎大家在评论中评论自己遇到的题…

磁钢生产领域上下料解决方案

随着智能制造技术的不断革新&#xff0c;磁钢生产领域正逐步引入自动化生产线。然而&#xff0c;传统的人工上下料方式存在诸多问题&#xff0c;难以满足现代生产需求。富唯智能提出了一款复合机器人磁钢上下料解决方案&#xff0c;通过先进的自动化技术&#xff0c;提高生产效…

填报高考志愿,怎样正确地选择大学专业?

大学专业的选择&#xff0c;会关系到未来几年甚至一辈子的发展方向。这也是为什么很多人结束高考之后就开始愁眉苦脸&#xff0c;因为他们不知道应该如何选择大学专业&#xff0c;生怕一个错误的决定会影响自己一生。 毋庸置疑&#xff0c;在面对这种选择的时候&#xff0c;我…

Keycloak SSO 如何验证已添加的 SPN 是否生效

使用 Kerberos Ticket 验证&#xff1a; 在客户端计算机上&#xff0c;运行以下命令以获取 Kerberos Ticket&#xff1a; klist检查是否存在与 HTTP/yourdomain.com 相关的票证。如果存在&#xff0c;说明 SPN 已生效。 测试应用程序&#xff1a; 使用具有 HTTP/yourdomain.com…

windows USB 设备驱动开发-控制传输的数据包

每次在主机控制器和 USB 设备之间移动数据时&#xff0c;都会发生传输。 通常&#xff0c;USB 传输可大致分为控制传输和数据传输。 所有 USB 设备都必须支持控制传输&#xff0c;并且可以支持用于数据传输的端点。 每种类型的传输都与设备缓冲区USB 端点 的类型相关联。 控制传…

Linux 查看磁盘是不是 ssd 的方法

lsblk 命令检查 $ lsblk -d -o name,rota如果 ROTA 值为 1&#xff0c;则磁盘类型为 HDD&#xff0c;如果 ROTA 值为 0&#xff0c;则磁盘类型为 SSD。可以在上面的屏幕截图中看到 sda 的 ROTA 值是 1&#xff0c;表示它是 HDD。 2. 检查磁盘是否旋转 $ cat /sys/block/sda/q…

北京十大拆迁律师事务所排名

历史时刻在重演&#xff0c;土地征地拆迁作为城市发展中不可或缺的环节备受地方政府重视。然而&#xff0c;在土地征收过程中&#xff0c;往往因为拆迁补偿引发各种纠纷案件&#xff0c;给拆迁方和被拆迁方带来重大损失&#xff0c;侵害双方利益&#xff0c;尤其是被征收人。因…

CentOS修复OpenSSH漏洞升级到openssh 9.7 RPM更新包

在做政府和学校单位网站时&#xff0c;经常需要服务器扫描检测&#xff0c;经常被OpenSSH Server远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;安全风险通告&#xff0c;出了报告需要升级OpenSSH。 使用yum update openssh是无法更新到最新的&#xff0c;因为系统里的…

YOLOX算法实现血细胞检测

原文:YOLOX算法实现血细胞检测 - 知乎 (zhihu.com) 目标检测一直是计算机视觉中比较热门的研究领域。本文将使用一个非常酷且有用的数据集来实现YOLOX算法,这些数据集具有潜在的真实应用场景。 问题陈述 数据来源于医疗相关数据集,目的是解决血细胞检测问题。任务是通过显微…

谷粒商城学习-09-配置Docker阿里云镜像加速及各种docker问题记录

文章目录 一&#xff0c;配置Docker阿里云镜像加速二&#xff0c;Docker安装过程中的几个问题1&#xff0c;安装报错&#xff1a;Could not resolve host: mirrorlist.centos.org; Unknown error1.1 检测虚拟机网络1.2 重设yum源 2&#xff0c;报错&#xff1a;Could not fetch…

给我的 IM 系统加上监控两件套:【Prometheus + Grafana】

监控是一个系统必不可少的组成部分&#xff0c;实时&#xff0c;准确的监控&#xff0c;将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus Grafana&#xff0c;嘿你别说 这俩兄弟配合的相当完美&#xff0c;Prometheus负责数据采集&…