yolov5模型结构与构建原理

一.yolov5模型结构与构建原理

修改模型结构,全部在models文件夹下面

models/common.py   (加入新增网络细节)

models/yolo.py          (设定网络结构传参细节)

models/##.yaml         (修改模型结构配置文件)


上一篇博客用的自己标注的火影的数据集,修改的是data

data/##.yaml,

然后把数据集datasets放进项目里面

没有修改模型本身

 1.用tensorboard可视化来理解模型结构:

进入到group图

综合上面的3个图,我们可以这样总结:
(1)每经过一个卷积conv,特征图/2

(2)每一层都有层数标号,从0开始,这个标号非常重要,决定了特征融合是哪一层和哪一层融合(相同大小的特征图才能彼此融合)

(3)最后是融合之后的17,20,23层成为3种size的特征头

2.理解深层逻辑

(1)在train.py里面找到#model

我们只关注最后一行,给model传的参列表

cfg:对应yolov5s.yaml文件

ch:通道数为3

nc:原始类别数,修改yaml会对其更新

(2)进到Model里面看看实现

会发现这个Model其实等于DetectionModel的返回值


 yolo.py:

(3)进入DetectionModel看看具体实现

会发现竟然跳到了yolo.py里面来 惊!

还记得文章最前面的这个吗?

可以看到默认是这样的:cfg果然默认是yolov5s.yaml

并且nc值如果和默认的.yaml不一样会修改nc值

还可以看到里面有这一行:

(4)转入parse_model看看

d:.yaml(注意:我们从上一层传入这个的原因是我们要遍历和使用.yaml文件里面的内容

ch:通道数

  1. 遍历.yaml

from:输入来自哪一层   number:重复几次   model    args(参数)

补充:depth_multiple:控制真正的重复次数 number=max(1,depth_multiple*number)

width_multiple:控制输出通道数 Eg:下面这个64      

这个64,6,2,2,其实对应的是Conv里面_init_的c2,k,s,p这四个,因为c1可以直接用保存的上一层的通道数,不用单独传参

commom.py里面

2.

所以ch[f],f=-1(输入通道数)

输出通道数c2=args[0]=64(其中一个例子)

二.修改网络结构(以C2f为例)

总:要修改yolov5的模型结构的话,主要改的是commom.py,yolo.py,.yaml这3个文件

目的:yolov5->yolov8的模型结构

yolov8代码下载地址:

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

1.加入新增网络结构

打开yolov8文件,找到E:\ultralytics-main\ultralytics\nn\modules\block.py<=>yolov5里面的common.py

找到 C2f:

把C2f复制粘贴放到yolov5 的common.py的c3前面

因为C2f里面有Bottleneck这个函数,所有要把Bottleneck也粘贴过来

避免麻烦,我们在两个地方都加一个C2f

2.设定网络结构传参细节

在yolov5的yolo.py里面找到

def parse_model(d, ch):

加上C2f (因为它和C3的结构类似,直接加)

 3.修改模型结构配置文件.yaml

(1)复制粘贴重命名一个yolov5s-C2f.yaml

(2)把里面的C3改成C2f

(3)改train.py里面的cfg

改为:

在服务器上跑结果:

 successful!

三.引入注意力机制

借鉴代码:https://github.com/ZhugeKongan/Attention-mechanism-implementation

里面的se_block

1.加入新增网络结构

把借鉴的代码复制粘贴到common.py中

C2fBottleneck(nn.Module):的前面

2.修改模型结构配置文件

复制粘贴重命名yolov5s-se.yaml

修改backbone,加一个SE

因为相当于中间多加了一个第10层:

所以后面大于10层的层号都要变一下:+1

3.设定网络结构的传参细节

yolo.py

四.替换主干网络backbone(特征提取部分)为MobileNet

我们要的是models.mobilenet里面的features部分(第一个sequencial)

1-3:还不满足我们的采样要求

4:8倍下采样

5-9 :16倍下采样

10-最后:32倍下采样

head:(不用改)

backbone:(是我们修改主干真正要改的)

1.common.py里面加上:

2. .yaml

复制粘贴重命名:

注:输出通道数是查找了:

因为backbone里面变成3层了,head里面拼接的层数也要变:

3.yolo.py里面

注意:这个args是.yaml里面穿的参

arge[0]对于的是输出通道数      .yaml里面backbone的[24,1]中的24

4.改train.py里面

总结:其实是起到一个模型轻量化的作用,层数变多了,参数量变少了

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

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

相关文章

数字信号处理实验四:IIR数字滤波器设计及软件实现

一、实验目的 1. 掌握MATLAB中进行IIR模拟滤波器的设计的相关函数的应用&#xff1b; 2. 掌握MATLAB的工具箱中提供的常用IIR数字滤波器的设计函数的应用&#xff1b; 3.掌握MATLAB的工具箱中提供的模拟滤波器转数字滤波器的相关的设计函数的应用。 二、实验内容 本实验为…

s32k314【入门新手篇】-开发环境安装【ds32开发平台】

软件包下载 登录nxp官网下载&#xff1a;https://www.nxp.com/ 然后输入关键字&#xff1a;S32 查看 下载安装包 以上三步请先注册好并登录你的个人账号 下载完之后如下&#xff1a; 软件安装 eb安装并激活【试用版】 激活 2 安装ds 弹出什么就安装什么就好了。 …

算法设计与分析部分题目解释

目录 第1讲算法引论 作业1-1 1. (单选题, 5分)算法研究领域包括的三个主要方面为( A ) 2. (单选题, 5分)下面说法关于算法与问题的说法错误的是&#xff08;B&#xff09;。 3. (单选题, 5分)下面关于程序和算法的说法不正确的是&#xff08;B&#xff09;。 4. (单选题,…

[C#]使用OpenCvSharp图像滤波中值滤波均值滤波高通滤波双边滤波锐化滤波自定义滤波

在使用OpenCvSharp进行图像滤波处理时&#xff0c;各种滤波方法都有其特定的用途和效果。以下是对中值滤波、均值滤波、高通滤波、双边滤波、锐化滤波和自定义滤波的详细解释和归纳&#xff1a; 中值滤波&#xff08;MedianBlur&#xff09; 原理与作用&#xff1a;中值滤波是…

redis(17):什么是布隆过滤器?如何实现布隆过滤器?

1 布隆过滤器介绍 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它基于位数组和多个哈希函数的原理,可以高效地进行元素的查询,而且占用的空间相对较小,如下图所示: 根据 key 值计算出它的存储位置,然后将此位置标…

springCloud中将redis共用到common模块

一、 springCloud作为公共模块搭建框架 springCloud 微服务模块中将redis作为公共模块进行的搭建结构图&#xff0c;如下&#xff1a; 二、redis 公共模块的搭建框架 如上架构&#xff0c;代码如下pom.xml 关键代码&#xff1a; <dependencies><!-- SpringBoot Boo…

Pycharm 添加内容根

解决问题&#xff1a;包未能被正常引入时

【WRF调试运行第一期】安装WRF模型所需平台

WRF实践实操第一期&#xff1a;安装WRF模型所需平台 1 操作系统2 先决条件软件3 程序流&#xff08;Program Flow&#xff09;4 文件说明软件安装1-Cygwin参考 安装 WRF&#xff08;Weather Research and Forecasting&#xff09;模型需要准备适当的硬件和软件平台。 相关介绍可…

【计算机毕设】基于SpringBoot的中小企业设备管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 在中小企业中&#xff0c;设备管理是确保生产和运营效率的重要环节。传统的设备管理通常依赖于手工记录和人工管理&#xff0c;容易导致数据不准确、…

全球首款AR电脑上线,可投影100英寸屏幕

近日&#xff0c;Sightful公司推出了一款名为Spacetop G1的革命性笔记本电脑&#xff0c;将AR技术与传统笔记本电脑巧妙融合&#xff0c;打造出令人惊叹的全新办公体验。 全球首款AR电脑上线&#xff0c;可投影100英寸屏幕 不同于传统笔记本电脑依赖物理屏幕显示内容&#xff0…

C#WPF数字大屏项目实战11--质量控制

1、区域划分 2、区域布局 3、视图模型 4、控件绑定 5、运行效果 走过路过&#xff0c;不要错过&#xff0c;欢迎点赞&#xff0c;收藏&#xff0c;转载&#xff0c;复制&#xff0c;抄袭&#xff0c;留言&#xff0c;动动你的金手指&#xff0c;财务自由

OJ题目【栈和队列】

题目导入 栈&#xff1a; 题目一&#xff1a;有效的括号题目二&#xff1a;用栈实现队列 队列 题目&#xff1a;实现循环队列 栈 题目一 有效的括号 题目要求 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘…

四川汇聚荣聚荣科技有限公司正规吗?

在当今数字化时代&#xff0c;科技公司如雨后春笋般涌现&#xff0c;而四川汇聚荣聚荣科技有限公司作为其中的一员&#xff0c;其正规性自然成为外界关注的焦点。接下来的内容将围绕这一问题展开深入探讨。 一、公司概况四川汇聚荣聚荣科技有限公司是一家位于成都的高新技术企业…

兆易创新:周期已至 触底反弹?

韩国那边来的数据啊&#xff0c;4月芯片库存同比下降33.7%&#xff0c;创近10年以来&#xff08;最&#xff09;大降幅&#xff0c;芯片出口同比增长53.9%&#xff0c;其中存储芯片出口额同比大幅增长98.7%&#xff0c;开启了涨价模式。沉寂一年多的存储芯片迎来了景气周期。 所…

IO进程线程(五)库的制作、进程

文章目录 一、库&#xff08;一&#xff09;静态库1. 概念2. 制作3. 使用&#xff08;编译&#xff09;&#xff08;1&#xff09;生成可执行文件&#xff08;2&#xff09;运行 &#xff08;二&#xff09;动态库&#xff08;共享库&#xff09;1. 概念2. 制作3. 生成可执行文…

9. MySQL事务、字符集

文章目录 【 1. 事务 Transaction 】1.1 事务的基本原理1.2 MySQL 执行事务的语法和流程1.2.1 开始事务1.2.2 提交事务1.2.3 回滚&#xff08;撤销&#xff09;事务实例1&#xff1a;一致性实例2&#xff1a;原子性 【 2. 字符集 和 校对规则 】2.1 基本原理2.2 查看字符集查看…

Web3.0区块链技术开发方案丨NFT项目开发

在Web3.0时代&#xff0c;非同质化代币&#xff08;NFT&#xff09;的概念正在引领着数字资产领域的变革和创新。NFT作为区块链上的数字资产&#xff0c;具有独一无二的特性&#xff0c;可以代表任何形式的数字或实物资产&#xff0c;并在区块链上进行唯一标识和交易。本文将探…

ElementUI中date-picker组件,怎么给选择一个月份范围中大写月份改为阿拉伯数组月份(例如:一月、二月,改为1月、2月)

要将 Element UI 的 <el-date-picker> 组件中的月份名称从中文大写&#xff08;如 "一月", "二月"&#xff09;更改为阿拉伯数字&#xff08;如 "1月", "2月"&#xff09;&#xff0c;需要进行一些定制化处理。可以通过国际化&a…

php项目加密源码

软件简介 压缩包里有多少个php就会被加密多少个PHP、php无需安装任何插件。源码全开源 如果上传的压缩包里有子文件夹&#xff08;子文件夹里的php文件也会被加密&#xff09;&#xff0c;加密后的压缩包需要先修复一下&#xff0c;步骤&#xff1a;打开压缩包 》 工具 》 修…

如何找出你的Windows 10的内部版本和版本号?这里提供两种方法

你过去可能没有真正考虑过Windows内部版本号,除非这是你工作的一部分。以下是如何了解你运行的Windows 10的内部版本、版本和版本号。 内部版本意味着什么 Windows一直使用内部版本。它们代表着对Windows的重大更新。传统上,大多数人都是根据他们使用的主要命名版本(Windo…