YOLOv5、YOLOv8改进:SEAttention 通道注意力机制

news2025/2/26 14:31:46

 基于通道的注意力机制 源自于 CVPR2018: Squeeze-and-Excitation Networks

官方代码:GitHub - hujie-frank/SENet: Squeeze-and-Excitation Networks

 

 

在这里插入图片描述

 

如图所示,其实就是将不同的通道赋予相关的权重。Attention机制用到这里用朴素的话说就是,把重要的通道赋予大的权重,然后将这些通道以及权重去线性组合。

至于这个权重是自己"学习"的。具体这样做,把每一个通道先下采样为一个实数,然后再通过两层全连接层,就会得到每个通道的权重。在训练构成中,这两个全连接层的参数也会和模型其他可训练参数一样一起更新。
 

在这里插入图片描述

下面是完整的改法

首先common加入以下代码

class SEAttention(nn.Module):

    def __init__(self, channel=512,reduction=16):
        super().__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )


    def init_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                init.kaiming_normal_(m.weight, mode='fan_out')
                if m.bias is not None:
                    init.constant_(m.bias, 0)
            elif isinstance(m, nn.BatchNorm2d):
                init.constant_(m.weight, 1)
                init.constant_(m.bias, 0)
            elif isinstance(m, nn.Linear):
                init.normal_(m.weight, std=0.001)
                if m.bias is not None:
                    init.constant_(m.bias, 0)

    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

接下来实在yolo.py中进行注册

你准备的注意力机制都可以放在这里面

  elif m in [S2Attention, SimSPPF, ACmix, CrissCrossAttention, SOCA, ShuffleAttention, SEAttention, SimAM, SKAttention]:

yaml文件的配置,以yolov5s为参照

# YOLOv5 🚀 by YOLOAir, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
   [-1, 1, SEAttention, [1024]],

   [[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

以上就是完整的改法

YOLOv8和YOLOv5都是一个作者,common变成了conv   yolo变成了task  其他都一样

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

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

相关文章

【论文阅读】基于深度学习的时序预测——FEDformer

系列文章链接 论文一:2020 Informer:长时序数据预测 论文二:2021 Autoformer:长序列数据预测 论文三:2022 FEDformer:长序列数据预测 论文地址:https://arxiv.org/abs/2201.12740 github地址&a…

Cobbler自定义yum源

再次了解下Cobbler的目录结构: 在/var/www/cobbler/ks_mirror目录下存放的是所有的镜像。 存放的是仓库镜像: 在/var/lib/cobbler/kickstarts目录下是存放的所有的kickstarts文件。 再有就是/etc/cobbler这个目录: [rootvm1 loaders]# cd /…

mysql延时问题排查

背景介绍 最近遇到一个奇怪的问题,有个业务,每天早上七点半产生主从延时,延时时间12.6K; 期间没有抽数/备份等任务;查看慢日志发现,期间有一个delete任务,在主库执行了161s delete from xxxx_…

LeetCode算法心得——故障键盘(StringBuilder)

大家好,我是晴天学长,很久都没有用StringBuilder类了,切记这个自带字符串反转的方法,会在实际比赛中节约不少的时间。 1 )故障键盘 2) .算法思路 故障键盘 1.首先把全部字母给你的了 2.只会反转前面的字符 1.字符串…

【Spring Cloud Alibaba】Linux安装RocketMQ以及RocketMQ Dashboard可视化工具

环境准备:Linux安装Java环境(OracleJDK) 在当今分布式架构的开发中,消息队列成为了一种常见的解决方案。RocketMQ是阿里巴巴开源的分布式消息中间件,具有高吞吐量、高可用性和强大的扩展性,因此在构建大规模…

数据API服务管理功能 - 提升数据效率的关键工具

数据API服务管理功能 - 提升数据效率的关键工具 什么是数据API服务管理功能? 数据API服务管理功能是一种用于有效管理和控制数据API的工具。它为用户提供了方便的界面和功能,以简化数据访问、解析和处理的过程。通过使用数据API服务管理功能&#xff0…

预制混凝土产品公司【PreTam Holdings】申请纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于智利的预制混凝土产品公司【PreTam Holdings】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(…

带键盘扫描电路接口的 LED 驱动控制专用芯片

VK1Q60是一种带键盘扫描电路接口的 LED 驱动控制专用芯片,内部集成有数据锁存 器、LED 驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持 8SEGx4GRID的点阵LED显示。最大支持7x4按键。本芯片性能稳定质量可靠,抗…

心法利器[90-95] | 谈校招:合集

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里&…

腾讯云轻量应用服务器镜像应用模板清单大全

腾讯云轻量应用服务器支持多种应用模板镜像,Windows和Linux镜像模板都有,如:宝塔Linux面板腾讯云专享版、WordPress、WooCommerce、LAMP、Node.js、Docker CE、K3s、宝塔Windows面板和ASP.NET等应用模板镜像,腾讯云服务器网分享腾…

i茅台自动申购算法协议分析

首发地址:http://zhuoyue360.com/crack/104.html 一、引言 今日看到有人分享了i茅台自动申购的文章。但是它酷似引流文章,全文一张图,呜呜呜。无法白嫖。太可恶了,因此,我来啦~ 我来整一整,我也要抢茅子! …

第二章:CSS基础进阶-part3:弹性例子布局

文章目录 Flex盒模型二、常见属性2.1 flex属性2.2 justify-content2.3 flex-wrap2.4 flex-flow2.5 align-items2.6 父容器-align-content Flex盒模型 1、普通盒模型 2、弹性盒布局 使用弹性盒布局能让容器的宽度跟随浏览器窗口的变化而变换 二、常见属性 2.1 flex属性 2.2 …

玩机搞机---安卓全机型各种玩机 搞机工具 推荐 一

安卓机型有很多大佬开发的工具箱可以让你在玩机搞机中达到事半功倍的效果。虽然都是adb指令操作。但图形化直观界面一目了然。下面为感兴趣的友友推荐一些工具。 任何的联机操作都有可能导致手机系统崩溃 严重会不开机。请理解工具箱中各个选项操作原理。谨慎操作 &#x1f4…

API接口站点(淘宝1688京东商品详情)实时数据参考示例返回

现如今,随着互联网的发展,商品价格监控已经成为电商行业中的一项重要工具。具体而言,商品价格监控通常包括以下几个方面: 1.数据采集:商品价格监控需要从各个电商平台或者其他相关网站上采集商品的价格数据。这一步骤…

FPGA应用学习笔记----定点除法的实现

除以2可以这样移位 迭代除法,就是直接除 迭代除法,就是直接除 除数左移,被除数减去除数,余数大于0则商数置1然后左移,余数作为被减数左移,再减除数,再看余数是否大于0,若大于0&…

QT--崩溃原因分析

本文为学习记录,若有错误,请联系作者,谦虚受教。 文章目录 前言一、目的二、实现步骤1 add2line.exe2 分析文件3 crash文件 三、相关代码1 pro文件2.ccrashstack.h3.ccrashstack.cpp4.main.cpp 总结 前言 你从来来去自由,若你不想…

【前端】WeUI DatePicker时间组件绑定方法以及chatGPT回答

2023年,第33周,第1篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! WeUI DatePicker,这个组件在纯html静态文件js里用的比较少,也忘记默认绑定值怎么设置,就用chatGPT来找答…

flutter相关URL schemes

先看效果 使用 url_launcher库 做唤起其他app操作 url_launcher | Flutter Package 配置 安卓 flutter 项目目录下的 android\app\src\main\AndroidManifest.xml 如果不配置的话 有些手机就打不开app 微信有两个 一个是weixin 一个是wechat <queries><!-- If you…

积木报表集成前端加载js文件404

项目场景&#xff1a; 在集成积木报表和shiro时候&#xff1a; 集成积木报表&#xff0c;shrio&#xff0c;shrio是定义在另一个模块下的&#xff0c;供另一个启动类使用&#xff0c;积木报表集成shrio的时候&#xff0c;需要依赖存放shrio的核心包&#xff0c;该核心包除了存…

异步编排CompletableFuture

文章目录 一.简介二.并行加载1.为何需要并行加载2.并行加载的实现方式 三.CompletableFuture使用与原理1.背景和定义2.常用方法3.CompletableFuture的使用3.CompletableFuture原理4.实践总结 一.简介 CompletableFuture由Java 8提供&#xff0c;是实现异步化的工具类&#xff…