【YOLOv5进阶】——引入注意力机制-以SE为例

声明:笔记是做项目时根据B站博主视频学习时自己编写,请勿随意转载!

一、站在巨人的肩膀上

SE模块即Squeeze-and-Excitation 模块,这是一种常用于卷积神经网络中的注意力机制!!

借鉴代码的代码链接如下:

注意力机制-SEicon-default.png?t=N7T8https://github.com/ZhugeKongan/Attention-mechanism-implementation

需要model里面的SE_block.py文件

# -*- coding: UTF-8 -*-
"""
SE structure"""import torch.nn as nn  # 导入PyTorch的神经网络模块  
import torch.nn.functional as F  # 导入PyTorch的神经网络功能函数模块  class SE(nn.Module):  # 定义一个名为SE的类,该类继承自PyTorch的nn.Module,表示一个神经网络模块  def __init__(self, in_chnls, ratio):  # 初始化函数,in_chnls表示输入通道数,ratio表示压缩比率  super(SE, self).__init__()  # 调用父类nn.Module的初始化函数  # 使用AdaptiveAvgPool2d将输入的空间维度压缩为1x1,即全局平均池化  self.squeeze = nn.AdaptiveAvgPool2d((1, 1))  # 使用1x1卷积将通道数压缩为原来的1/ratio,实现特征压缩  self.compress = nn.Conv2d(in_chnls, in_chnls // ratio, 1, 1, 0)  # 使用1x1卷积将通道数扩展回原来的in_chnls,实现特征激励  self.excitation = nn.Conv2d(in_chnls // ratio, in_chnls, 1, 1, 0)  def forward(self, x):  # 定义前向传播函数  out = self.squeeze(x)  # 对输入x进行全局平均池化  out = self.compress(out)  # 对池化后的输出进行特征压缩  out = F.relu(out)  # 对压缩后的特征进行ReLU激活  out = self.excitation(out)  # 对激活后的特征进行特征激励  # 对激励后的特征应用sigmoid函数,然后与原始输入x进行逐元素相乘,实现特征重标定  return x*F.sigmoid(out)

代码后面有附注的注释(GPT解释的,很好用),理解即可。对于使用者来说,重要关注点还是它的输入通道、输出通道、需要传入的参数等!!这个函数整体传入in_chnls, ratio两个参数。


二、开始修改网络结构

与上节的C2f修改基本流程一致,但稍有不同

  • model/common.py加入新增的SE网络结构,直接复制粘贴如下,这里加在了上节的C2f之前:

上面说到这个函数整体传入in_chnls, ratio两个参数!!


  • model/yolo.py设定网络结构的传参细节

上期的C2f模块之所以可以参照原本存在的C3模块属性,是因为两者相似,但这里的SE模块就不可简单的在C3x后加SE,而是需要在下面加入一段elif代码:

         elif m is SE:c1 = ch[f]c2 = args[0]if c2 != no:  # if not outputc2 = make_divisible(c2 * gw, 8)args = [c1, args[1]]

当新引入的模块中存在输入输出维度时,需要使用gw调整输出维度!!


  • model/yolov5s.yaml设定现有模型结构配置文件

老样子,复制一份新的配置文件命名为yolov5s-se.yaml。首先需要在backbone的最后加上SE模块(相当于多了一层为第10层);其次考虑到backbone里多了一层,且在head里的输入层来源不止上一层(-1)一个,所以输入层来源大于等于第10层的都需要改为往后递推+1层。下图左边为原始的yaml配置文件,右侧为修改后的:

当yaml文件引入新的层后,需要修改模型结构的from参数(上期是将C3替换为C2f模块,所以不涉及这一点)!!


  • train.py训练时指定模型结构配置文件

这次将parse_model函数里的第二个参数cfg改为yolov5s-se.yaml即可,运行train.py开始训练!!

可见训练时第10层已经引入了SE注意力机制模块:

100次迭代后结果如下,结果保存在runs\train\exp12文件夹,文件夹里有很多指标曲线可对比分析:


 往期精彩

STM32专栏(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/A3BJ2

OpenCV-Python专栏(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/jFJWe

AI底层逻辑专栏(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/6BVhM

机器学习专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/ALlLlSimulink专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/csDO4电机控制专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FNWM7

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

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

相关文章

在C#中使用RabbitMQ做个简单的发送邮件小项目 _

前言 好久没有做项目了,这次做一个发送邮件的小项目。发邮件是一个比较耗时的操作,之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方的,不过当时只是简单的进行了异步操作。那么这次来使用RabbitMQ去统一发送邮件&#x…

vue中路由来回切换页面直接卡死

今天发现一个很严重的问题,项目好不容易做好了,结果页面多了,切换之后卡死。页面所有的交互效果都失效了。 排查了许久的错误原因最后发现原来是路由名称重复了。 如上图当页面跳转到riskdetails详细页面之后,框架则被这个详情页…

node.lib下载失败,手动下载并配置

在无网络环境,或者网络不好的环境,node.lib会下载失败,此时可手动下载并进行配置。 我们以 node16.17.0 为例: 下载地址 分别下载node.lib和headers https://registry.npmmirror.com/-/binary/node/v16.17.0/win-x64/node.lib…

Linux rpm与yum

一、rpm包管理 rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了R…

办理北京公司注销流程和步骤说明

公司的生命周期是多变的,有时候,业务可能会结束或者出现其他原因,需要注销公司。注销公司是一个复杂的法律过程,需要遵循一系列的步骤和提交特定的材料。下面我们将详细介绍北京注销公司的流程以及需要准备的材料,以帮…

私有云统一多云管理平台主要服务内容

私有云统一多云管理平台,作为企业IT架构现代化的关键组成部分,旨在为企业提供高效、灵活、安全的云计算资源管理解决方案。这类平台通过整合和优化不同云环境(包括私有云、公有云、混合云)的管理,帮助企业打破云孤岛,实现资源的统…

【游戏引擎之路】登神长阶(五)

5月20日-6月4日:攻克2D物理引擎。 6月4日-6月13日:攻克《3D数学基础》。 6月13日-6月20日:攻克《3D图形教程》。 6月21日-6月22日:攻克《Raycasting游戏教程》。 6月23日-6月30日:攻克《Windows游戏编程大师技巧》。 …

【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

从任意用户注册到任意密码重置

写在最前面一句话 To be or not to be ,it‘s a question . 哎呀,放错台词了,应该是 true or false , 在最近的测试中遇到了一个很有趣的点 “将 false 改为true ”就可以成功绕过验证码了。 T rue or false ??? …

「51媒体」企业举行新闻发布会,如何邀请媒体到场报道

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 企业举行新闻发布会时,邀请媒体到场报道是一个…

MySQL常用操作命令大全

文章目录 一、连接与断开数据库1.1 连接数据库1.2 选择数据库1.3 断开数据库 二、数据库操作2.1 创建数据库2.2 查看数据库列表2.3 删除数据库 三、表操作3.1 创建表3.2 查看表结构3.3 修改表结构3.3.1 添加列3.3.2 删除列3.3.3 修改列数据类型 3.4 删除表 四、数据操作4.1 插入…

day62--若依框架(基础应用篇)

若依搭建 若依版本 官方 若依官方针对不同开发需求提供了多个版本的框架,每个版本都有其独特的特点和适用场景: 前后端混合版本:RuoYi结合了SpringBoot和Bootstrap的前端开发框架,适合快速构建传统的Web应用程序,其…

Qt加载SVG矢量图片,放大缩小图片质量不发生变化。

前言: 首先简单描述下SVG: SVG 意为可缩放矢量图形(Scalable Vector Graphics)。 SVG 使用 XML 格式定义图像。 给界面或者按钮上显示一个图标或背景图片,日常使用.png格式的文件完全够用,但是有些使用场景需要把图…

QChartView显示实时更新的温度曲线图(二)

文章目录 参考图说明1. 项目结构2. TempChartView.pro3. main.cpp4. TemperatureSeries.qml5. main.qml详细说明 参考图 说明 Qt Charts 提供了一系列使用图表功能的简单方法。它使用Qt Graphics View Framework 图形视图框架,因此可以很容易集成到用户界面。可以使…

基于小波分析的纹理和颜色反射对称性检测(MATLAB R2018A)

对称物体在自然图像和合成图像中普遍存在。作为对称物体最重要的全局特征之一,对称性检测长期以来都是计算机视觉领域的研究热点,并在图片的语义提取、图像语义理解以及情感识别等任务上具有广泛的应用。对称物体的检测技术,就是将图片中所蕴…

【前端】HTML+CSS复习记录【3】

文章目录 前言一、from(表单)二、style属性1、标签中直接定义(内联样式)2、定义在head中3、外部链接引用 四、 class 选择器系列文章目录 前言 长时间未使用HTML编程,前端知识感觉忘得差不多了。通过梳理知识点&#…

qq文件传输助手在哪里?详细图文教程告诉你(2024新版)

QQ作为一款功能强大的社交软件,不仅提供了聊天、语音、视频等多种通讯方式,还内置了文件传输助手这一实用工具。通过文件传输助手,用户可以在不同设备之间轻松传输文件,实现跨平台的便捷操作。 那么,qq文件传输助手在…

【@AutoWired和@Resource的区别】

AutoWired和Resource的区别 这两个我们在项目中,经常去使用。很少有人知道他们有什么区别。下面我们将从 来源依赖查找顺序支持的参数依赖注入的用法支持 这四个方面来说明他们俩个的区别 来源 Autowired: 这是Spring框架自带的注解,用于实现自动依…

绝区零 Mac 下载安装详细教程(MacOS IPA 砸壳包 playCover 完美运行)

绝区零 7.4 号开始公测,但刚刚就可以开始下载了,我也是第一时间就迫不及待的安装到了我的 Mac 电脑上,感兴趣的朋友可以跟我一起安装试试 我这里是通过 playCover 的形式在 Mac 上安装运行的,根据之前原神的经验所以这次还是同样…

惠海 H6912 升压恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 摄影灯 太阳能灯 UV灯 杀菌灯

1.产品描述 H6912是一款外围电路简洁的宽调光比升压调光LED恒流驱动器,可适用于2.6-40V输入 电压范围的LED恒流照明领域。H6912可以实现高精度的恒流效果,输出电流恒流精度≤士3%,电压工作范围为2.6-40V.可以轻松满足锂电池及中低压的应用需…