yolov5添加ECA注意力机制

news/2025/2/22 23:26:56/

ECA注意力机制简介

论文题目:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

论文地址:here


基本原理
🐸 ECANet的核心思想是提出了一种不降维的局部跨通道交互策略,有效避免了降维对于通道注意力学习效果的影响。适当的跨通道交互可以在保持性能的同时显著降低模型的复杂性,通过少数参数的调整,获得明显的效果增益。通过这种机制,ECANet能够在不增加过多参数和计算成本的情况下,有效地增强网络的表征能力。

具体添加步骤

tips:在前两篇文章当中,我们提到了注意力机制的添加方法。
分为
不带有通道数的注意力机制:参考这篇文章 添加方法
带通道数的注意力机制:参考这篇文章添加方法
他们之间的区别在于,观察注意力机制的源代码中是否含有channel参数。

🔔 (1)在models文件夹下,新建一个:注意力机制名字.py。如本篇文章中使用ECAAttention.py.
🔔 (2)添加ECA注意力机制的代码


# author:mawei,SZU
import torch
from torch import nn
from torch.nn import init
class ECAAttention(nn.Module):def __init__(self, kernel_size=3):super().__init__()self.gap = nn.AdaptiveAvgPool2d(1)self.conv = nn.Conv1d(1, 1, kernel_size=kernel_size, padding=(kernel_size - 1) // 2)self.sigmoid = 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):y = self.gap(x)  # bs,c,1,1y = y.squeeze(-1).permute(0, 2, 1)  # bs,1,cy = self.conv(y)  # bs,1,cy = self.sigmoid(y)  # bs,1,cy = y.permute(0, 2, 1).unsqueeze(-1)  # bs,c,1,1return x * y.expand_as(x)if __name__ == '__main__':input = torch.randn(50, 512, 7, 7)eca = ECAAttention(kernel_size=3)output = eca(input)print(output.shape)


🔔 (3)修改yolo.py,添加如下行


from 你的注意力机制.py import *



在这里插入图片描述

🔔 (4) 修改yolo5s.yaml,这个取决你自己使用的是那种模型文件,比如你修改yolov5m.yaml代表你使用的时候yolov5m的模型。每种模型深度和模型规模不一样。
说明:具体你添加到那一层看个人习惯,任何一层都可以。

在这里插入图片描述

🔔 (5)最后在train.py当中,cfg参数中添加你自己修改的yaml文件,我这里是yolov5s.yaml.

在这里插入图片描述

完成上诉步骤之后,就可以点击运行了。

在这里插入图片描述

❤️yolov5,yolov7改进之SimAM 注意力机制

❤️yolov5,yolov7改进之Shuffle注意力机制


http://www.ppmy.cn/news/1104641.html

相关文章

戳气球00

题目链接 戳气球 题目描述 注意点 求戳破所有的气球所能获得硬币的最大数量0 < nums[i] < 1001 < n < 300 解答思路 初始只想到深度优先遍历暴力搜索所有情况找到获得硬币的最大数量&#xff0c;但是时间复杂度很高一定会超时参照题解使用动态规划解决本题&am…

Spring最佳实践: 构建高效可维护的Java应用程序

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

minimumLineSpacing和minimumInteritemSpacing问题研究

结论&#xff1a;minimumLineSpacing和minimumInteritemSpacing问题研究 (1)如果cell的宽度是固定的&#xff0c;方向是水平时&#xff0c; 1 3 5 2 4 6 minimumLineSpacing 是 12 到 34的距离 minimumInteritemSpacing 是1到2的距离 (2)如果cell的宽度是不固定的&#xff0…

金蝶云星空和管易云接口打通对接实战

金蝶云星空和管易云接口打通对接实战 数据源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用框架等&#xff0c;有效支持企业的…

C语言经典100例题(50)--#include 的应用练习

目录 题目 问题分析 代码 运行结果 题目 #include 的应用练习 问题分析 头文件的定义&#xff1a;#include 指令告诉预处理器打开指定的文件&#xff0c;并且把此文件的内容插入到当前文件中。因此&#xff0c;如果想让几个源文件可以访问相同的信息&#xff0c;可以把…

分享20+个在线工具网站,60+常用工具

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 今天给大家分享20在线工…

【数据结构】二叉树的链式存储结构

【数据结构】二叉树的链式存储结构 二叉树的存储结构 typedef int BTDataType; // 二叉树的结构 typedef struct BinaryTreeNode {BTDataType data; // 树的值struct BinaryTreeNode *left; // 左孩子struct BinaryTreeNode *right;// 右孩子 } BinaryTreeNode;二…

[docker]笔记-portainer的安装

1、portainer是一款可视化的容器管理软件&#xff0c;利用portainer可以轻松方便的管理和创建容器。portainer本身是一个容器&#xff0c;完全免费并且具有汉化版。本文介绍portainer的安装和使用。 2、安装好容器并配置好容器环境&#xff0c;可参照https://blog.csdn.net/bl…