YOLOv7网络结构学习

YOLOV7详细解读(一)网络架构解读

YOLOV7学习记录之原理+代码介绍

【Make YOLO Great Again】YOLOv1-v7全系列大解析(Backbone篇)

yolov7 图解

深入浅出 Yolo 系列之 Yolov7 基础网络结构详解

我觉得Head、Neck和Head的划分不太对,但因为自己没有重新画图,所以按照图的Backbone和Head进行讲解。

一:工作流程

YOLOv7 网络主要包含了 Input(输入)、Backbone(骨干网络)、Neck(颈部)、Head(头部)这四个部分。首先,图片经过输入部分数据增强等一系列操作进行预处理后,被送入主干网,主干网部分对处理后的图片提取特征;随后,提取到的特征经过 Neck 模块特征融合处理得到大、中、小三种尺寸的特征;最终,融合后的特征被送入检测头,经过检测之后输出得到结果。

 二:Backbone

将YOLOv5的预处理卷积(6*6+3*3)换成卷积([3*3,stride1+3*3,stride2]+[3*3,stride1+3*3,stride2]),C3换成E-ELAN,CBS换成MP-1 

1.预处理

在yolov5初版本时,是focus模块,可看为下采样操作。

(1)Focus

在YOLOv5中,‌Focus模块原本用于在图片进入Backbone之前,‌对图片进行切片操作,‌其原理与YOLOv2的passthrough层类似。‌这种切片操作通过隔列采样+拼接的方式,‌将高分辨率的图片(‌特征图)‌拆分成多个低分辨率的图片或特征图,‌从而将W、‌H信息集中到通道空间,‌输入通道扩充了4倍。‌以YOLOv5s为例,‌原始的640x640x3的图像输入Focus结构,‌经过切片操作后变成320x320x12的特征图,‌再经过一次拼接(‌Concat)‌后,‌通过一次卷积(‌CBL,‌后改为CBS)‌操作,‌最终变成320x320x32的特征图。‌这种操作在YOLOv5中用于增加网络的感受野和特征图的分辨率,‌提高模型的性能。

【Yolov系列】Yolov5学习(一)补充2:Focus模块详解

(2)Yolov2的passthrough

yolov2其中的一个创新点是采用 passthrough 算法,解决池化信息丢失的问题,增加细粒度特征的检测(小对象)。

passthrough 算法主要是为了解决 pooling(池化)的缺点,不管是最大值池化,还是平均值池化,都会造成信息丢失,passthrough 主要思想是在池化之前,将输入信息进行拆分,一拆为四,经过拆分后的大小就和池化后的输出大小相同,然后叠加,叠加后的结果主要就是维度变化,这样就能解决池化会造成信息丢失的问题。

深度剖析YOLO系列的原理

(3)6*6,步长为2的Conv

在yolov5之后的代码版本,将Focus换成6*6,步长为2的Conv。

计算结果来看,Focus层和6*6步长为2的卷积层等价;

从性能上来看,性能较好的设备上Conv层比Focus层快,尤其是反向传播上;较老的设备上,Conv层比Focus层慢一些。

(4)yolov7的版本

 

首先最浅的颜色,也就是第一个CBS模块的颜色,它是一个1x1的卷积,stride(步长为1)。

其次稍浅的颜色,也就是第二个CBS模块的颜色,它是一个3x3的卷积,stride(步长为1)。

最后最深的颜色,也就是第三个CBS模块的颜色,它是一个3x3的卷积,stride(步长为2)。

1x1的卷积主要用来改变通道数。

3x3的卷积,步长为1,主要用来特征提取。

3x3的卷积,步长为2,主要用来下采样。

但是为什么,目前还没查到

2.C3换成ELAN

经过 4个 CBS 后,特征图变为 160 * 160 * 128 大小。随后会经过论文中提出的 ELAN 模块,ELAN 由多个 CBS 构成,其输入输出特征大小保持不变,通道数在开始的两个 CBS 会有变化, 后面的几个输入通道都是和输出通道保持一致的,经过最后一个 CBS 输出为需要的通道。

ELAN模块是一个高效的网络结构,它通过控制最短和最长的梯度路径,使网络能够学习到更多的特征,并且具有更强的鲁棒性。ELAN有两条分支:第一条分支是经过一个1x1的卷积做通道数的变化;第二条分支首先经过一个1x1的卷积模块,做通道数的变化,然后再经过四个3x3的卷积模块,做特征提取。如图所示,最后把四个特征叠加在一起得到最后的特征提取结果。

3.CBS换成MP-1

MP 层 主要是分为 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道数比的变化。

 MP模块有两个分支,作用是进行下采样。第一条分支先经过一个maxpool,也就是最大池化。最大值化的作用就是下采样,然后再经过一个1x1的卷积进行通道数的改变。第二条分支先经过一个1x1的卷积,做通道数的变化,然后再经过一个3x3卷积核、步长为2的卷积块,这个卷积块也是用来下采样的。最后把第一个分支和第二分支的结果加在一起,得到了超级下采样的结果。

4.总结

backbone的基本组件就介绍完了,我们整体来看下 backbone,经过 4 个 CBS 后,接入例如一个 ELAN ,然后后面就是三个 MP1 + ELAN 的输出,对应的就是 C3/C4/C5 的输出,大小分别为 80 * 80 * 512 , 40 * 40 * 1024, 20 * 20 * 1024。 每一个 MP 由 5 层, ELAN 有 8 层, 所以整个 backbone 的层数为 4 + 8 + 13 * 3 = 51 层, 从 0 开始的话,最后一层就是第 50 层。

YOLOv7 网络模型的主干网部分主要由卷积、E-ELAN 模块、MPConv 模块以及SPPCSPC 模 块 构 建 而 成 。其 中 ,E-ELAN(Extended-ELAN) 模块,在原始ELAN 的基础上,改变计算块的同时保持原ELAN 的过渡层构,利用 expand、shuffle、merge cardinality 的思想来实现在不破坏原有梯度路径的情况下增强网络学习的能力。SPPCSPC 模块,在一串卷积中加入并行的多次 MaxPool 操作,避免了由于图像处理操作所造成的图像失真等问题,同时解决了卷积神经网络提取到图片重复特征的难题。MPConv 模块中,MaxPool 操作将当前特征层的感受野进行扩张再与正常卷积处理后的特征信息进行融合,提高了网络的泛化性。

输入的图片首先会在主干网络里面进行特征提取,提取到的特征可以被称作特征层,是输入图片的特征集合。在主干部分,我们获取了三个特征层进行下一步网络的构建,这三个特征层我称它为有效特征层。

三:Neck

FPN+PAN结构

在 Neck 模块,YOLOv7 与 YOLOv5 网络相同,也采用了传统的 PAFPN 结构。FPN是YoloV7的加强特征提取网络,在主干部分获得的三个有效特征层会在这一部分进行特征融合,特征融合的目的是结合不同尺度的特征信息。在FPN部分,已经获得的有效特征层被用于继续提取特征。在YoloV7里依然使用到了Panet的结构,我们不仅会对特征进行上采样实现特征融合,还会对特征再次进行下采样实现特征融合。

四:Head

​YOLOV7 head 其实就是一个 **pafpn** 的结构,和之前的YOLOV4,YOLOV5 一样。首先,对于 backbone 最后输出的 32 倍降采样特征图 C5,然后经过 SPPCSP,通道数从1024变为512。先按照 top down 和 C4、C3融合,得到 P3、P4 和 P5;再按 bottom-up 去和 P4、P5 做融合。这里基本和 YOLOV5 是一样的,区别在于将 YOLOV5 中的 SPPF换成SPPCSP,CSP 模块换成了 ELAN-W 模块, 下采样变为了 MP-2 层,Conv2d变成了RepBlock+CBM

1.SPPF换成SPPCSPC

SPP的作用是能够增大感受野,使得算法适应不同的分辨率图像,它是通过最大池化来获得不同感受野

我们可以看到在第一条分支中,经过了maxpool的有四条分支。分别是5,9,13,1,这四个不同的maxpool就代表着能够处理不同的对象。也就是说,它这四个不同尺度的最大池化有四种感受野,用来区别于大目标和小目标。
CSP模块,首先将特征分为两部分,其中的一个部分进行常规的处理,另外一个部分进行SPP结构的处理,最后把这两个部分合并在一起,这样子就能够减少一半的计算量,使得速度变得快,精度反而会提升。

SPPCSPC 模块,在一串卷积中加入并行的多次 MaxPool 操作,避免了由于图像处理操作所造成的图像失真等问题,同时解决了卷积神经网络提取到图片重复特征的难题。

2.CSP 换成 ELAN-W 

ELAN-W模块跟ELAN模块是非常的相似,不同的是它在第二条分支的时候选取的输出数量不同。ELAN模块选取了三个输出进行最后的相加,而ELAN-W模块选取了五个进行相加。

 3.下采样换成MP-2 

MP 层 主要是分为 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道数的比变化

4.Conv2d换成RepBlock+CBM

与之前Yolo系列不同的是,YoloV7在Yolo Head前使用了一个RepConv的结构,这个RepConv的思想取自于RepVGG,基本思想就是在训练的时候引入特殊的残差结构辅助训练,这个残差结构是经过独特设计的,在实际预测的时候,可以将复杂的残差结构等效于一个普通的3x3卷积,这个时候网络的复杂度就下降了,但网络的预测性能却没有下降。

REP模块分为两个,一个是train(训练),一个deploy(推理)。
训练模块,它有三个分支。:最上面的分支是3x3的卷积,用于特征提取;中间的分支是1x1的卷积,用于平滑特征:最后分支是一个Identity,不做卷积操作,直接移过来,最后把它们相加在一起。推理模块,包含一个3x3的卷积,stride(步长为1)。是由训练模块重参数化转换而来。
在训练模块中,因为第一层是一个3x3的卷积,第二层是一个1x1的卷积,最后层是一个Identity。
在模型从参数化的时候,需要把1x1的卷积转换成3x3的卷积,把Identity也转换成3x3的卷积,然后进行一个矩阵的一个加法,也就是一个矩阵融合过程。然后最后将它的权重进行相加,就得到了一个3x3的卷积,也就是说,这三个分支就融合成了一条线,里面只有一个3x3的卷积。它们的权重是三个分支的叠加结果,矩阵,也是三个分支的叠加结果。

有的学者对RepConv的认识:通过分析RepConv与不同架构的结合及其性能,我们发现RepConv中的恒等连接消除了ResNet中的残差和DenseNet中的拼接,为不同的特征映射提供了更多的梯度多样性

5.总结

检测头部分,本文的基线 YOLOv7 选用了表示大、中、小三种目标尺寸的 IDetect 检测头,RepConv 模块在训练和推理时结构具有一定的区别。具体可以参考RepVGG中的构造,其引入了结构重参数化的思想。

Yolo Head作为YoloV7的分类器与回归器,通过Backbone和FPN,可以获得三个加强过的有效特征层。每一个特征层都有宽、高和通道数,此时我们可以将特征图看作一个又一个特征点的集合,每个特征点上有三个先验框,每一个先验框都有通道数个特征。Yolo Head实际上所做的工作就是对特征点进行判断,判断特征点上的先验框是否有物体与其对应。与以前版本的Yolo一样,YoloV7所用的解耦头是一起的,也就是分类和回归在一个1X1卷积里实现。

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

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

相关文章

FedAvg的简单实现(详解)

对于联邦学习正在学习中,下文中若有错误出现,望指正 介绍 本文在简单实现联邦平均算法时,使用客户-服务器架构,其基本流程是: 1、server初始化模型参数,所有clients将这个初始模型下载到本地 2、clien…

每个人都有良知,只是被遮蔽的程度不同

85天 【困之勉行,下笨功夫】 每个人的良知余光都在,困之勉行努力用余光去精细明察,须下“人一己百,人十己千”的努力; 生活中,我们往往会看到,绝顶聪明的人往往愿意下笨功夫,而资质…

linux开机后不用登陆,无法正常进入系统,出现:/#的提示符

linux开机后不用登陆,无法正常进入系统,出现:/#的提示符 解决方案: 1、输入命令 ls /dev/mapper 此时会出现3个文件。其中rhel-root文件 是我们下面所要用的文件。 ls的目的就是为了让大家能知道自己带"-root" 文件的前缀是什…

C语言switch的使用

switch的使用语句 switch(表达式) { case 值1: 语句1; break; case 值2: 语句2; break; default: break; } 注意事项:1.表达式计算结果只能为(字符/整数) 2.case值只能是(字…

SpringData JPA Mongodb 查询部分字段

JPA 网上用的好像不多&#xff0c;找了好多材料以后最终找了这个可行的方案&#xff1a; Query(fields "{tender_id:1,_id:0}")List<MGPltTender> findByTenderIdIsNotNull(PageRequest pageRequest); 调用&#xff1a; Sort sort Sort.by(popularType.getC…

推荐3款堪称神器的工具软件,实用强大颜值高,你不能错过

Flameshot Flameshot是一款功能强大且易于使用的开源屏幕截图软件&#xff0c;广泛应用于Linux、Windows和macOS等平台。它不仅支持图形界面&#xff08;GUI&#xff09;操作&#xff0c;还提供命令行接口&#xff08;CLI&#xff09;&#xff0c;使得用户可以根据自己的需求选…

如何在 Puppeteer 中运行无头浏览器?

什么是无头浏览器&#xff1f; 我们都知道&#xff0c;用户界面&#xff08;UI&#xff09;是任何软件中最重要的部分。因此&#xff0c;“无头浏览器”的“无头”部分意味着它们确实缺少一个关键元素&#xff0c;即图形用户界面&#xff08;GUI&#xff09;。 这意味着浏览器…

鞍钢集团VM虚拟化存储与备份方案

用户背景&#xff1a;鞍钢集团是中央直接管理的国有大型企业&#xff0c;世界500强企业中国各地设有九大生产基地&#xff0c;鞍钢集团信息产业有限公司(以下简称“鞍信公司”)是鞍山钢铁旗下全资子公司&#xff0c;自主集成开发应用系统&#xff0c;为集团提供智能制造整体解决…

网络概念: 互联网和局域网、 OSI七层网络互联模型、数据封装、应用端口、地址解析、网络设备、网络配置

文章目录 引言I 网络概念1.1 互联网和局域网1.2 OSI七层网络互联模型1.3 数据封装1.4 TCP/IP协议1.5 应用端口II 地址解析III 网络设备3.1 集线器 HUB3.2 交换机 swich3.3 路由器 router3.4 防火墙 firewallIV 网络配置4.1 网络安全域(你住哪里?)4.2 地址转换(NAT,你名字叫…

【python学习】爬虫中常使用的urllib和requests库的的背景、定义、特点、功能、代码示例以及两者的区别

引言 urllib是Python标准库中的一个模块&#xff0c;它提供了一系列用于操作URL的功能 requests是一个Python第三方库&#xff0c;由Kenneth Reitz创建&#xff0c;用于简化HTTP客户端的编程 一、urllib的定义 urllib可以操作url&#xff0c;主要分为以下几个子模块&#xff1…

深度学习入门——误差反向传播

要正确理解误差反向传播法&#xff0c;我个人认为有两种方法&#xff1a;一种是基于数学式&#xff1b;另一种是基于计算图&#xff08;computational graph&#xff09; 前者是比较常见的方法&#xff0c;机器学习相关的图书中多数都是以数学式为中心展开论述的。因为这种方法…

Seaborn库学习之heatmap()函数

Seaborn库学习之heatmap(函数) 一、简介 seaborn.heatmap是Seaborn库中用于绘制热图&#xff08;Heatmap&#xff09;的函数。热图是一种数据可视化技术&#xff0c;通过颜色的变化来展示数据矩阵中的数值大小。这种图表非常适合展示数值数据的分布和关系&#xff0c;尤其是在…

【深度学习】InternVL2-8B,图转文,docker部署

文章目录 基础fastapi服务请求fastapi接口 基础 https://huggingface.co/OpenGVLab/InternVL2-8B#%E7%AE%80%E4%BB%8B InternVL2-26B应该更好&#xff0c;但显存没那么大&#xff0c;只能跑InternVL2-8B了。 下载&#xff1a; cd /ssd/xiedong/InternVL2-26B git clone htt…

教你使用win10实现电脑的定时任务执行

本篇文章主要讲解&#xff0c;通过使用win10自带的任务计划程序&#xff0c;进行对单个或多个脚本定时执行的详细操作教程。 日期&#xff1a;2024年7月18日 作者&#xff1a;任聪聪 前置条件&#xff1a; 1.电脑中有java、php、python等其中一个环境。 2.编写一个书写test ta…

【快速逆向一/无过程/有源码】《大学》在线投稿系统

逆向日期&#xff1a;2024.07.18 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 【点赞 收藏 关注 】仅供学习&#xff0c;仅供学习&#xff0c; 本文为快速逆向&#x…

导入导出sql脚本文件

业务场景 在复杂系统中&#xff0c;有时候去做数据同步我们需要一次导出导入十几张表甚至更多表的数据&#xff0c;这些数据在不同数据库&#xff0c;也可能分布不同微服务中&#xff0c;三个四个甚至更多&#xff0c;如果使用excel去处理会很复杂&#xff0c;任务复杂度很高&…

电脑出现错误代码0x00000709一键修复的几种方法

错误代码0x00000709通常在 Windows 系统中与打印机设置有关&#xff0c;特别是当尝试设置默认打印机时。这个问题可能是由于权限不足、注册表问题或系统文件损坏导致的。虽然没有官方的“一键修复”工具&#xff0c;但您可以通过以下步骤尝试解决此问题。 解决方案 1: 使用管理…

Linux LVM扩容方法

问题描述 VMware Centos环境&#xff0c;根分区为LVM&#xff0c;大小50G&#xff0c;现在需要对根分区扩容。我添加了一块500G的虚拟硬盘(/dev/sdb)&#xff0c;如何把这500G扩容到根分区&#xff1f; LVM扩容方法 1. 对新磁盘分区 使用fdisk /dev/sdb命令&#xff0c;进…

免费的ssh工具

1.Quickstart - kitty 2 Download Termius for Windows 3. MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download

24年Hvv准备,6大方向,33篇技战法

进去不少小伙伴后台留言说需要技战法&#xff0c;因此小编对市面上的技战法进行了收集和总结&#xff0c;并对收集来的技战法进行了分类&#xff0c;总共分了6大类&#xff0c;共计33篇&#xff1a; 有需要的小伙伴关注我&#xff0c;点击在看&#xff0c;并私信回复“技战法”…