YOLO V7网络实现细节(2)—网络整体架构总结

YOLO V7网络整体架构总结

YOLO v7网络架构的整体介绍

不同GPU和对应模型:

  • ​​​​​​​边缘GPU:YOLOv7-tiny
  • 普通GPU:YOLOv7​​​​​​​
  • 云GPU的基本模型: YOLOv7-W6

激活函数:

  • YOLOv7 tiny: leaky ReLU
  • 其他模型:SiLU

同时,我们还针对不同的业务需求,使用基础模型进行模型缩放,得到不同类型的模型。 对于YOLOv7,我们对颈部进行stack scaling,并使用提出的复合缩放方法对整个模型的深度和宽度进行缩放,并以此获得YOLOv7-X。

  • YOLOv7缩放得到了YOLOv7-X
  • 对YOLOv7-W6我们使用新提出的复合缩放方法得到 YOLOv7-E6YOLOv7-D6
  • EELAN 用于 YOLOv7-E6,从而完成了 YOLOv7E6E

模型缩放模块

复合的模型缩放策略是YOLO v7中提出的一个核心的创新点之一。其中的缩放倍数包括了1.25倍和1.5倍

基础模块YOLOv7

在这里插入图片描述

首先论文中和Yolov7.yaml文件中使用到的基础模块是ELAN模块对应的结构图如下所示。

在这里插入图片描述
同时在Yolov7.yaml文件中的head部分我们使用了另外的一个基础模块ELAN’模块它是对ELAN模块进行模型变形处理得到了,ELAN’模块对应yolov7配置文件中的56到63层的信息。

之前的4个卷积组成了2个分路ELAN’可以看作是ELAN的变形,即4个卷积组成了4个分路

在这里插入图片描述

YOLOV7X模块

在这里插入图片描述

我们在这里先提前的进行总结和说明yolov7和yolov7x模型之间的差别点。首先yolov7x是在YOLOv7的基础上经过缩放得到的用于普通GPU的网络结构。

  1. 将yolov7中的所有ELAN和ELAN’模块全部替换为了ELAN+模块
  2. 将最后的三个repconv替换为了三个普通的Conv
  3. 所有通道数变为原来的1.25倍

ELAN+模块即将ELAN模块缩放1.25倍得到的结构。在原来的基础上多加了两个卷积层,通道数扩充为原来的1.25倍

在这里插入图片描述

YOLOv7w6模块

yolov7w6模块也可以看作是一个用于云GPU的基础模块,其他的云GPU使用的模型是在YOLOv7w6的基础上经过模型缩放改进的。

在这里插入图片描述

首先说明YOLOv7w6模型和YOLOv7模型的主要区别

  1. yolov7w6模型的预测特征层有4个多了一个10x10的预测特征层来进行预测。
  2. 使用3x3步长为2的普通卷积来替代yolov7模型中的MP1模块
  3. 使用3x3步长为2的普通卷积加上一个concat层来替代head中的MP2模块。
  4. 前两层的卷积被替换为了一个ReOrg模块
ReOrg模块

ReOrg模块可以简单的看作参考了YOLOV56.0版本中的focus模块,在common.py中的源代码如下所示。

class ReOrg(nn.Module):def __init__(self):super(ReOrg, self).__init__()def forward(self, x):  # x(b,c,w,h) -> y(b,4c,w/2,h/2)return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)

作用每隔一个位置对输入图片的像素值进行抽取操作。将通道数扩展为四倍对应4c,宽高缩短为原来的一半。

在这里插入图片描述

YOLOV7e6模块

YOLOV7e6的网络结构也是一个用在云GPU上的网络结构,是在YOLOv7w6的基础上经过缩放得到的网络结构。

在这里插入图片描述

  1. 在w6网络模型的基础上进行缩放得到对应的网络结构将ELAN替换为ELAN+ 将ELAN’替换为了ELAN’+
  2. 将普通的卷积替换为了Downc这种固定的结构
ELAN’+

ELAN’+在ELAN’的基础上进行模型的缩放缩放倍数为1.25倍,输出的通道数也变为原来的1.25倍。

在这里插入图片描述

Downc模块
class DownC(nn.Module):# Spatial pyramid pooling layer used in YOLOv3-SPPdef __init__(self, c1, c2, n=1, k=2):super(DownC, self).__init__()c_ = int(c1)  # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = Conv(c_, c2//2, 3, k)self.cv3 = Conv(c1, c2//2, 1, 1)self.mp = nn.MaxPool2d(kernel_size=k, stride=k)

通过源代码可以看出Downc模块和之前的MP1模块结构上基本上是完全相同的,只有通道数有一些差异。1x1部分不改变通道数,输出结构的通道数翻倍

在这里插入图片描述

Yolov7d6模块

Yolov7d6模块是在YOLOV7e6模块的基础上再次进行缩放得到的结构,缩放的倍数达到了1.5倍。

在这里插入图片描述

整个模型及结构和之前的YOLOe6结构的主要的区别就在于将之前的ELAN+和ELAN’+模块进行进一步的模型缩放,得到了ELAN++和ELAN’++模块

本质上也就是在拓展一次得到最终的结果。

ELAN++和ELAN’++模块

在这里插入图片描述

YOLO V7e6e模块

YOLO V7e6e模块,顾名思义就是将YOLO V7e6模块中的所有ELAN相关的部分替换为了E-ELAN相关的元素组合。

在这里插入图片描述

YOLOv7tiny模块

YOLOv7tiny模块是YOLOv7向下进行缩放所得到的模块。整个模块使用的激活函数改为了使用LeakyReLU激活函数来进行实现。

在这里插入图片描述

  1. 直接使用了一个2x2的最大池化层来替代原来的MP1模块
  2. 使用了简化的模块ELAN’-
  3. 将MP2模块改为了使用普通的卷积在加一个concat拼接层
  4. 三个重参数化卷积替换为了conv
ELAN’-模块

ELAN’模块向下来进行缩放,减少两个输入的通道,来简化整个模型,整个模型全部使用的是ELAN’-

在这里插入图片描述

SPPCSPC-tiny

在边缘GPU网络中在head部分对SPPCSP模块也进行了一部分的简化操作
对应的是29到37层

[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],[-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],[-1, 1, SP, [5]],[-2, 1, SP, [9]],[-3, 1, SP, [13]],[[-1, -2, -3, -4], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],[[-1, -7], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],  # 37

SP部分就可以看作是一个3x3步长为1的maxpooling层,通过padding填充使得大小保持不变。

class SP(nn.Module):def __init__(self, k=3, s=1):super(SP, self).__init__()self.m = nn.MaxPool2d(kernel_size=k, stride=s, padding=k // 2)def forward(self, x):return self.m(x)

在这里插入图片描述

在最后的训练用的模块中会在中间的部分加入一些辅助头,用来实现之前提到过的深度监督的相关功能。

正负样本匹配的SimOTA

SimOTA是由OTA(OptimalTransportAssignment)简化得到的,OTA也是旷视科技同年出的一篇文章,论文名称叫做《Optimal transport assignment for object detection》目的是将匹配正负样本的过程看成一个最优传输问题。

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

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

相关文章

openmetadata1.3.1 自定义连接器 开发教程

openmetadata自定义连接器开发教程 一、开发通用自定义连接器教程 官网教程链接: 1.https://docs.open-metadata.org/v1.3.x/connectors/custom-connectors 2.https://github.com/open-metadata/openmetadata-demo/tree/main/custom-connector (一&…

24西安电子科技大学经济与管理学院—考研录取情况

24西安电子科技大学—经理与管理学院—考研录取统计 01、经理与管理学院各个方向 02、24经济与管理近三年复试分数线对比 1、经管院24年院线相对于23年院线普遍下降2-15分,个别专业上涨4-10分。 2、经管院应用经济学2024年院线350分;管理科学与工程院线…

Apache Seata tcc 模块源码分析

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 一 .导读 spring 模块分析中讲到,Seata 的 spring 模块会对涉及到分布式业务的 b…

Linux——进程间通信一(共享内存、管道、systrem V)

一、进程间通信介绍 1.1、进程间通信的概念和意义 进程间通信(IPC interprocess communication)是一组编程接口,让不同进程之间相互传递、交换信息(让不同的进程看到同一份资源) 数据传输:一个进程需要将它的数据发送给另外一个进程 资源共享:多个进程之间共享同样…

如何选择一家适合自己的商城源码?

商城源码的选择取决于多个因素,包括商城的功能需求、稳定性、易用性、可定制性以及价格等。启山智软作为在市场上被广泛认可且表现优异的商城源码提供商,具有以下的特点和优势: 特点①:国内知名的B2B2C开源商城源码系统&#xff…

Golang | Leetcode Golang题解之第213题打家劫舍II

题目: 题解: func _rob(nums []int) int {first, second : nums[0], max(nums[0], nums[1])for _, v : range nums[2:] {first, second second, max(firstv, second)}return second }func rob(nums []int) int {n : len(nums)if n 1 {return nums[0]}…

python conda查看源,修改源

查看源 conda config --show-sources 修改源 可以直接vim .condarc修改源,

vue事件处理v-on或@

事件处理v-on或 我们可以使用v-on指令(简写)来监听DOM事件,并在事件触发时执行对应的Javascript。用法:v-on:click"methodName"或click"hander" 事件处理器的值可以是: 内敛事件处理器&#xff1…

如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力

目录 01Future 是什么? 为什么选择 Future? 安装与配置 02Future 的基本用法 1、兼容 print 函数 2、兼容整数除法 3、兼容 Unicode 字符串 03Future 的高级功能 1. 处理字符串与字节 2. 统一异常处理…

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统,这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…

LRU缓存算法设计

LRU 缓存算法的核⼼数据结构就是哈希链表,双向链表和哈希表的结合体。这个数据结构⻓这样: 创建的需要有两个方法,一个是get方法,一个是put方法。 一些问题:为什么需要使用双向链表呢?因为删除链表的本身&…

第一节 网络安全概述

一.网络空间安全 网络空间:一个由信息基础设施组成相互依赖的网络。 ---- 海陆空天(大海、陆 地、天空、航天) 通信保密阶段 ---- 计算机安全 ----- 信息系统安全 ----- 网络空间安全 计算机安全:开始秉持着“严于律己&#x…

《安富莱嵌入式周报》第339期:单片机运行苹果早期Mac系统模拟器,2GHz示波器有源探头,下一代矩阵开关面包板,卡片式声音分贝器,HP经典示波器,ReRAM

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版 https://www.bilibili.com/video/BV1Kf421Q7Lh 《安富莱嵌入式周报》第339期:单片机运行苹果早期Ma…

Linux开发讲课33---线程实现与线程控制步骤简析

线程概述 进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程在演…

IDEA安装IDE Eval Reset插件,30天自动续期,无限激活

第一步: 下载idea 注意:版本要是2021.2.2以下 第二步:快捷键CtrlAlts打开设置 第三步:打开下图中蓝色按钮 第四步:点击弹窗的 “” ,并输入 plugins.zhile.io 点击 “ok” 第五步:搜索IDE Ea…

【文献解析】一种像素级的激光雷达相机配准方法

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

搭建论坛和mysql数据库安装和php安装

目录 概念 步骤 安装mysql8.0.30 安装php 安装Discuz 概念 搭建论坛的架构: lnmpDISCUZ l 表示linux操作系统 n 表示nginx前端页面的web服务 m 表示 mysql 数据库 用来保存用户和密码以及论坛的相关内容 p 表示php 动态请求转发的中间件 步骤 &#xff…

Explore Synapse

rm -r dp-203 -f git clone https://github.com/MicrosoftLearning/dp-203-azure-data-engineer dp-203 cd dp-203/Allfiles/labs/01 ./setup.ps1 -- This is auto-generated code SELECTTOP 100 * FROMOPENROWSET(BULK https://datalakexxxxxxx.dfs.core.windows.net/fil…

分布式共识算法

分布式的基石 分布式共识算法 前置知识:分布式的 CAP 问题,在事务一章中已有详细介绍。 正式开始探讨分布式环境中面临的各种技术问题和解决方案以前,我们先把目光从工业界转到学术界,学习两三种具有代表性的分布式共识算法&…

Python 编程快速上手——让繁琐工作自动化(第2版)读书笔记01 Python基础快速过关

Python 编程快速上手——让繁琐工作自动化(第2版)读书笔记01 Python基础快速过关 1 python基础概念 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。 python运算符顺序 **——%——//——/——*——-——python中常见的数据…