YOLOV5改进系列(3)——ECA注意力机制

news2024/10/11 14:29:30

一、ECA注意力机制介绍、

论文地址:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks | IEEE Conference Publication | IEEE Xplore

1. ECA的本质:

  • ECA是一种通道注意力机制的实现形式,基于SE(Squeeze-and-Excitation)注意力机制的扩展。它的目的是增强卷积神经网络对各个通道的重要性判断。SE模块中的通道注意力通过全连接层来计算,而ECA则采用了更简单、更高效的方式。

2. 与SE模块的区别:

  • SE模块中的全连接层被ECA简化了
    • SE模块中使用两个全连接(Fully Connected, FC)层来捕获通道之间的依赖关系,但ECA的作者认为使用全连接层来进行跨通道交互,可能会引入过多的参数,并且通道之间的依赖关系学习较为复杂且不必要。
    • ECA简化了这个过程,认为权重学习的过程应该是直接且对应的。换句话说,ECA避免了过度复杂的全连接层,改为使用一种更加轻量的方式来进行通道间的交互。

3. ECA的关键设计:

  • ECA通过注意力机制避免了全连接层:它直接在全局平均池化后的特征图上使用 1×1 卷积核,这种操作避免了维度缩减并且有效地捕捉了通道之间的交互关系。这使得ECA能够通过少量的参数实现良好的效果。

  • ECA的优势:相比于SE模块复杂的两层全连接操作,ECA只需要很少的参数就能够实现较好的效果。这意味着ECA更为轻量、参数更少,但性能不逊色于传统的注意力机制。

4. ECA的实现原理:

  • 使用1D卷积:ECA使用1D卷积层来进行通道间信息的融合。具体来说,1D卷积通过一个可变的卷积核大小对通道之间的交互进行建模。这里卷积核的大小是根据通道数 c 来自适应变化的,确保每层的通道数较多时,能够进行足够的通道交互。

  • 卷积核大小的自适应:卷积核的大小由公式 k = log2(c) / γ + b 自适应调整,其中 c 是通道数,γb 是超参数。这个公式根据通道数自动调整卷积核的大小,确保卷积核既不会太大,也不会太小,从而保证ECA能够捕捉到合适的跨通道信息。

5. 总结

  • ECA机制通过避免全连接层,并利用自适应1D卷积的方式,在降低模型复杂度的同时,实现了对通道注意力的高效计算。通过自适应调整卷积核的大小,ECA能够有效地捕捉跨通道的依赖关系,同时减少了冗余计算。

二、ECA注意力机制的应用

​
class ECA(nn.Module):
    def __init__(self, inc, outc, k_size=3):
        super(ECA, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # Global spatial information
        y = self.avg_pool(x)  # [B, C, 1, 1]

        # Squeeze and Conv1D
        y = self.conv(y.squeeze(-1).permute(0, 2, 1))  # [B, 1, C]

        # Multi-scale information fusion and Sigmoid
        y = self.sigmoid(y).permute(0, 2, 1).unsqueeze(-1)  # [B, C, 1, 1]

        # Scale the input feature map
        return x * y.expand_as(x)

​

1.在yolov5/models/common.py最下面添加代码

class ECA(nn.Module):
    def __init__(self, inc, outc, k_size=3):
        super(ECA, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # Global spatial information
        y = self.avg_pool(x)  # [B, C, 1, 1]

        # Squeeze and Conv1D
        y = self.conv(y.squeeze(-1).permute(0, 2, 1))  # [B, 1, C]

        # Multi-scale information fusion and Sigmoid
        y = self.sigmoid(y).permute(0, 2, 1).unsqueeze(-1)  # [B, C, 1, 1]

        # Scale the input feature map
        return x * y.expand_as(x)

2.在yolov5/models/yolo.py的parse_model添加代码

3.在yolov5/models/新建yolov5s_ECA.yaml文件

4.修改yolo.py调用

三、实现结果

结束

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

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

相关文章

代码签名证书:守护软件安全与信任的第一道防线

提起软件代码签名证书,可能对大多数人来说比较陌生,但是对于软件开发者来说是一款在软件发布前必不可少的工具。之所以这样说的原因在于,代码签名证书可以有效保障用户和软件开发者的权益。 代码签名证书是数字证书的一种,是专为…

什么是快充协议、支持多协议的USB Type-C受电端取电芯片

随着快充技术的不断发展,传统的慢充模式已经满足不了消费者对充电效率的要求。有了快充技术的支持很大程度的缩短了我们的充电时间,给我们的生活带来了很多便利。 什么是快充协议 快充协议是快充技术的核心,现如今市面上已经有很多种快充协议…

Find My扫描笔|苹果Find My技术与扫描笔结合,智能防丢,全球定位

扫描笔通过扫描技术,直接将图像,表格或者印刷字体等扫描到笔里存储或者直接传送到电脑,进行存储阅读或者编辑修改等操作。其很方便携带,便于移动办公;其主要是用于扫描办公文件,文字、身份证,名…

步步精科技诚邀您参加2024慕尼黑华南电子展

尊敬的客户: 我们诚挚地邀请您参加即将于2024年10月14日至10月16日在深圳国际会展中心 (宝安新馆)举办的慕尼黑华南电子展(electronica South China)。本届将聚焦人工智能、数据中心、新型储能、无线通信、硬件安全、新能源汽车、第三代半导…

7.存储过程中的事务管理(7/10)

1.引言 在现代信息技术快速发展的今天,数据库已经成为存储和管理数据的核心工具。无论是企业级应用、电子商务平台还是个人项目,数据库都扮演着不可或缺的角色。在这些应用中,数据的完整性、一致性和可靠性是至关重要的。这就引出了数据库事…

自动驾驶系列—从速度感知到车身控制:轮速计在自动驾驶中的应用

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

ViVado HLS 2018.3基本开发流程

1.双击打开软件 2.点击Create New Project 3.输入项目名称和位置 4.Next->Next->Next 5.根据所选的器件创建解决方案 6.添加文件 点击"Source"添加.c/cpp或者.h文件,在TestBench里面添加要测试的文件.c/cpp并且可以包含main函数. led.h #ifndef _SHIFT_LED_H…

IDEA搭建JDK1.8源码调试环境

大家好 下载源码 安装好 JDK 后,源码目录下面有 src.zip 文件,这个文件就是 JDK 的源码 搭建调试环境 新建 Maven 工程,包含以下文件 source:源码文件夹(手动新建)test:单元测试文件夹&…

[C++][第三方库][Websocket]详细讲解

目录 1.Websocket 协议1.介绍2.原理简介 2.Websocketpp1.介绍2.安装 3.常用接口4.使用 1.Websocket 协议 1.介绍 WebSocket是从HTML5开始支持的一种网页端和服务端保持长连接的消息推送机制产生原因: 传统的web程序都是属于"一问一答"的形式 即客户端给…

【王道视频笔记】红黑树的定义和性质

文章目录 关于黑高的结论红黑树的插入 平衡二叉树 AVL:插入/删除 很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行 LL/RR/LR/RL 调整 红黑树 R…

极狐GitLab X 某轨道交通控制系统龙头企业,助力业务研发敏捷化

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 60天专业…

Linux常用应急溯源命令

常用命令 1、账号相关命令 1、查询特权用户特权用户(uid 为0):awk -F: $30{print $1} etc/passwd 2、查询可以远程登录的帐号信息:awk /\$1|\$6/{print $1} etc/shadow 2、程序相关命令 1、查看当前开放端口netstat -tnlp 2、查看当前系统上运行的所…

华为中级认证HCIP知识点总结,建议收藏

01 OSPF知识点 OSPF基本配置,OSPF 5种报文,7种邻居状态,4种网络类型,4种特殊区域,7类LSA,4种link type,标识一条LSA的3个要素,OSPF邻居域邻接关系,单区域,多区…

生成对抗网络GAN——学习笔记

经过大量阅读资料和博客,对GAN的认识和学习做一个记录。个人粗浅的认识,不管是什么模型都离不开最基础的神经网络。主要借鉴的博客内容如下 新型的神经网络模型,从CNN到BERT都有介绍。_最新的神经网络模型-CSDN博客 生成对抗网络——GAN&am…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI,支持 ChatGPT 网页端的大部分功能,支持各类模型服务,包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星,非常受欢迎。 功能介绍 本篇介绍该项目的功能…

(Kafka源码五)Kafka服务端处理消息

Kafka 服务端(Broker)采用 Reactor 的架构思想,通过1 个 Acceptor,N 个 Processor(N默认为3),M 个 KafkaRequestHandler(M默认为8),来处理客户端请求,这种模式结合了多线…

眼镜店会员积分卡系统软件试用版下载 佳易王配镜顾客信息管理系统使用操作教程

一、前言 【软件试用版资源文件下载可以点文章最后卡片了解】 眼镜店会员积分软件是专门为眼镜店设计的管理工具,旨在通过积分活动提升顾客的忠诚度,促进复购率,并优化顾客体验。 眼镜店会员积分卡系统软件试用版下载 佳易王配镜顾客信息管…

WEB攻防-python考点CTF与CMS-SSTI模板注入PYC反编译

知识点: 1、PYC(python编译后的文件)文件反编译; 2、Python-Web-SSTI; 3、SSTI模板注入利用分析; (Server-Side Template Injection) SSTI 就是服务器端模板注入 当前使用的一…

高级算法设计与分析-MaxFlow网络流基础知识

MaxFlow网络流 1 网络流基础概念 source:源点 sink:终点 Flow:流量 capacity:容量 Residual:残量 Residual Network:残量网络 Augmenting path:增广路径,表示从源点 s 到终点 t 不包含环的路径 Bottleneck capacity:瓶颈容量 2 最大流 2.1 基础概念 2.2 增广路算法 …

C++刷怪笼(7)string类

目录 1.前言 2.正文 2.1标准库中的string类 2.1.1string类 2.1.2auto和范围for 2.1.3string类的常用接口说明 2.2string类的模拟实现 2.2.1经典的string类问题 2.2.2浅拷贝 2.2.3深拷贝 ​编辑 2.2.4写时拷贝 3.小结 1.前言 前面我们对C的封装这一大特性进行了详细…