YOLOv5改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡

压缩和激励模块(SE)以及空间通道注意力模块(CBAM)的注意力机制取得了巨大成功。本文介绍了一种简单而有效的替代模块,即简单注意力模块(SimAM)。SimAM模块是一个即插即用的模块,无需额外的模态参数。在本文中,给大家带来的教程是在原来的主干网络添加SimAM注意力机制。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行,小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。

专栏地址 YOLOv5改进+入门——持续更新各种有效涨点方法 点击即可跳转

目录

1.原理

2. SimAM的代码实现

2.1 将SimAM添加到YOLOv5中

2.2 新增yaml文件

2.3 注册模块

2.4 执行程序

3. 完整代码分享

4. GFLOPs

5. 进阶

6.总结


1.原理

官方论文:SIMPLE ATTENTION MODULE BASED SPEAKER VERIFICATION WITH ITERATIVE NOISY LABEL DETECTION——点击即可跳转

官方代码:SimAM代码官方仓库——点击即可挑战

SimAM(Simple Attention Module)是一种轻量级的注意力机制,旨在增强神经网络的表示能力,而不会显著增加计算开销。它通过对特征图进行自适应加权,来提高网络对关键特征的关注度。下面是对SimAM的详细讲解。

SimAM的基本概念

SimAM的基本思想是使用一个简单的模块来捕捉特征图中的重要信息。与其他复杂的注意力机制(如SE模块、CBAM等)相比,SimAM通过引入一个自适应加权机制,实现了高效的特征增强。

SimAM的实现

SimAM的实现可以概括为以下几个步骤:

  1. 输入特征图: 输入特征图记为\mathbf{X},形状为C \times H \times W ,其中 C 是通道数, H 和 W 是特征图的高度和宽度。

  2. 计算通道均值: 计算每个通道的均值 \mu_c,公式如下:\mu_c = \frac{1}{HW} \sum_{i=1}^{H} \sum_{j=1}^{W} \mathbf{X}_{c, i, j}

  3. 计算通道方差: 计算每个通道的方差 ( \sigma_c^2 ),公式如下:\sigma_c^2 = \frac{1}{HW} \sum_{i=1}^{H} \sum_{j=1}^{W} (\mathbf{X}_{c, i, j} - \mu_c)^2

  4. 计算加权参数: 计算加权参数( \alpha_c )( \beta_c )\alpha_c = \frac{\mu_c}{\sigma_c^2 + \epsilon} \beta_c = \frac{1}{\sigma_c^2 + \epsilon} 其中,\epsilon 是一个很小的常数,用于避免除零错误。

  5. 计算注意力权重: 计算每个像素位置的注意力权重 \mathbf{A}_{c, i, j} ,公式如下: \mathbf{A}_{c, i, j} = \alpha_c (\mathbf{X}_{c, i, j} - \mu_c) + \beta_c

  6. 应用注意力权重: 将注意力权重应用到原始特征图上,得到增强后的特征图 \mathbf{Y}\mathbf{Y}_{c, i, j} = \mathbf{X}_{c, i, j} \cdot \mathbf{A}_{c, i, j}

SimAM的优点

  1. 计算开销低: SimAM不引入额外的卷积层或全连接层,计算量相对较低。

  2. 易于实现: SimAM的实现相对简单,可以很容易地嵌入到现有的卷积神经网络中。

  3. 有效性: 实验表明,SimAM在提高网络性能方面表现出色,能够显著提高图像分类、目标检测等任务的准确性。

总结

SimAM是一种简洁有效的注意力机制,通过自适应加权显著提升神经网络的特征表示能力。其低计算开销和易于实现的特点,使得它在各种计算机视觉任务中具有广泛的应用前景。

2. SimAM的代码实现

2.1 将SimAM添加到YOLOv5中

关键步骤一: 将下面代码粘贴到/projects/yolov5-6.1/models/common.py文件中

import torch
import torch.nn as nn

class SimAM(torch.nn.Module):
    def __init__(self, channels = None, e_lambda = 1e-4):
        super(SimAM, self).__init__()

        self.activaton = nn.Sigmoid()
        self.e_lambda = e_lambda

    def __repr__(self):
        s = self.__class__.__name__ + '('
        s += ('lambda=%f)' % self.e_lambda)
        return s

    @staticmethod
    def get_module_name():
        return "simam"

    def forward(self, x):

        b, c, h, w = x.size()
        
        n = w * h - 1

        x_minus_mu_square = (x - x.mean(dim=[2,3], keepdim=True)).pow(2)
        y = x_minus_mu_square / (4 * (x_minus_mu_square.sum(dim=[2,3], keepdim=True) / n + self.e_lambda)) + 0.5

        return x * self.activaton(y)

 SimAM(Simple Attention Module)的主要流程:

主要流程

  1. 输入特征图

    • 首先,SimAM接收一个输入特征图,该特征图具有多个通道,每个通道包含一个二维的空间特征(高度和宽度)。

  2. 计算通道均值

    • 对每个通道计算其所有像素的平均值。这个均值反映了该通道整体的强度水平。

  3. 计算通道方差

    • 计算每个通道的方差,反映该通道内像素值的变化程度。方差越大,说明该通道内的像素值变化越大。

  4. 计算加权参数

    • 使用计算出的均值和方差来生成两个加权参数。第一个参数(通常称为(\alpha))表示相对于均值的权重,第二个参数(通常称为(\beta))表示基础权重。

  5. 计算注意力权重

    • 利用加权参数和输入特征图,计算每个像素的位置的注意力权重。这个权重表示了该位置在特征图中的重要性。

  6. 应用注意力权重

    • 将计算出的注意力权重应用到输入特征图的每个像素位置上。具体而言,每个像素值乘以其对应的注意力权重,从而得到增强后的特征图。

工作机制

  • 自适应加权

    • 通过计算均值和方差,自适应地调整特征图中每个像素的权重,使得重要的像素被放大,不重要的像素被抑制。

  • 计算效率

    • SimAM不需要额外的卷积操作或全连接层,因此计算开销低,适合在各种卷积神经网络中嵌入使用。

应用场景

SimAM可以用于各种计算机视觉任务,如图像分类、目标检测和语义分割等,通过增强特征图的表达能力来提升模型性能。

通过这些步骤,SimAM实现了对特征图中重要信息的有效提取和增强,提高了神经网络的注意力机制,从而提升了整体性能。

2.2 新增yaml文件

关键步骤二在下/projects/yolov5-6.1/models下新建文件 yolov5_SimAM.yaml并将下面代码复制进去

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # 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, 3, SimAM, [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)

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

温馨提示:本文只是对yolov5l基础上添加swin模块,如果要对yolov8n/l/m/x进行添加则只需要指定对应的depth_multiple 和 width_multiple。


# YOLOv5n
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
 
# YOLOv5s
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
 
# YOLOv5l 
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
 
# YOLOv5m
depth_multiple: 0.67  # model depth multiple
width_multiple: 0.75  # layer channel multiple
 
# YOLOv5x
depth_multiple: 1.33  # model depth multiple
width_multiple: 1.25  # layer channel multiple

2.3 注册模块

关键步骤三在yolo.py中注册, 大概在260行左右添加 ‘SimAM’

2.4 执行程序

在train.py中,将cfg的参数路径设置为yolov5_SimAM.yaml的路径

建议大家写绝对路径,确保一定能找到

🚀运行程序,如果出现下面的内容则说明添加成功🚀  

3. 完整代码分享

https://pan.baidu.com/s/1ycdEb0oOTfszKsUsVOaeJw?pwd=w6mm

提取码: w6mm 

4. GFLOPs

关于GFLOPs的计算方式可以查看:百面算法工程师 | 卷积基础知识——Convolution

未改进的GFLOPs

改进后的GFLOPs

5. 进阶

你能在不同的位置添加SimAM注意力机制吗?这非常有趣,快去试试吧

6.总结

SimAM(Simple Attention Module)的原理是通过计算每个通道的均值和方差来生成自适应的加权参数,这些参数用于计算每个像素位置的注意力权重。该权重反映了像素在特征图中的重要性,重要像素被放大,而不重要像素被抑制,从而增强特征图的表示能力。SimAM的优势在于其计算开销低且易于实现,可以有效地提升神经网络在各种计算机视觉任务中的性能。

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

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

相关文章

功能强大且专业的PDF转换软件PDF Shaper Professional 14.2

PDF Shaper Professional是一款适用于Windows的程序,可让您在计算机上处理PDF文件。 要开始使用PDF Shaper Professional,您需要在Windows计算机上下载并安装该程序。您还应该有合适的驱动程序和编解码器来处理计算机上的文本和图形。 安装程序后&#…

从零开始入门 LangChain

前言 最近一直在做 RAG 相关的内容,也学习了一段时间 LangChain 框架的用法。 本篇文章中将和大家讲述什么是 LangChain ,以及 LangChain 解决了现在大模型发展的哪些问题,然后会讲解LangChain 中基础的概念和组件。在此基础上,…

经纬恒润成功研发LRR610雷达先进算法!

好消息!经纬恒润搭载Arbe芯片组的LRR610 4D成像雷达算法开发出先进的后点云算法,并已圆满完成集成工作,这标志着智能驾驶感知系统迈向了一个新的里程碑。 经纬恒润自主开发的成像雷达算法,可以有效地跟踪数百个运动和静止目标&am…

亿级数据过滤和布隆过滤器

如何高效实现存在判断 在刷抖音时你有刷到过重复的推荐内容 吗?这么多的推荐内容要推荐给这么多的用户,它是怎么保证每个用户在看推荐内容时,保证不会出现之前已经看过的推荐视频呢?也就是说,抖音是如何实现 推送去重…

java 工作排序(Job Sequencing Problem)

给定一个作业数组,其中每个作业都有一个截止期限,如果作业在截止期限之前完成,则可获得相关利润。此外,每个作业都占用一个单位时间,因此任何作业的最小可能截止期限都是 1。如果一次只能安排一项作业,则最…

开源规则引擎LiteFlow项目应用实践

本文介绍基于开源规则引擎LiteFlow,如何开发规则设计器,在低代码平台中集成规则引擎,并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求,所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”…

RabbitMQ学习笔记(二)SpringAMQP的使用、消息转换器

文章目录 前言3 SpringAMQP3.1 介绍3.2 简单队列模型3.3 工作队列模型3.4 发布/订阅模型3.4.1 Fanout广播模型3.4.2 Direct定向模型3.4.3 Topic通配符模型 3.5 消息转换器 前言 RabbitMQ学习笔记(一)RabbitMQ部署、5种队列模型 3 SpringAMQP 3.1 介绍 AMQP(Adva…

白酒:产地与白酒品牌形象的建设与推广

云仓酒庄豪迈白酒作为中国白酒市场中的知名品牌,其产地与品牌形象的建设与推广对于提升品牌竞争力和市场份额具有重要意义。产地作为白酒品质和特色的重要标志,对于品牌形象的塑造和推广具有关键作用。 首先,云仓酒庄豪迈白酒的产地是其品质和…

AI降痕工具使用指南:如何有效降低AIGC疑似度

随着人工智能技术的突飞猛进,AI生成内容(AIGC)已被广泛用于学术论文撰写中,提高效率同时也带来了原创性的挑战。面对日益严格的学术审查,一个突出的问题是:使用AI代写的论文能否通过内容检测?因…

第二证券股票杠杆:4分钟直线涨停!这一赛道,AH股集体爆发!

今日早盘,A股继续小幅震动收拾,首要股指涨跌互现,两市个股跌多涨少,成交有萎缩的趋势。 盘面上,医药、中字头、旅游、房地产等板块相对活跃,混合实践、玻璃基板、AI手机PC、光刻机等板块跌幅居前。 “中字…

活动投票小程序源码系统 礼物道具活动多多 前后端分离 带完整的安装代码包以及搭建教程

系统概述 在当今数字化快速发展的时代,小程序已成为连接用户与商家、内容与服务的重要桥梁。特别是活动投票类小程序,因其便捷性、互动性和参与性,受到了广大用户的热烈追捧。为了满足市场对高质量、易操作的活动投票小程序的需求&#xff0…

别慌!不知道如何处理#开头的字符串时,需要先了解一下什么是NCR

最近进行接口测试时抓包发现请求响应中有类似下面这些字符 起初试图对这些编码尝试各种decoder操作来一探其真身,遗憾的是均已失败告终(后来发现,这些编码可以在浏览器中正常显示)。最后得知这种奇怪的编码格式并不是编码,而是一种…

ClickHouse 实现用户画像(标签)系统实践

文章目录 前言用户画像概述用户画像系统介绍用户画像系统的需求描述用户画像系统的需求分析用户画像系统的架构 关键技术实现(Clickhouse SQL)分析阶段运营阶段 基于ClickHouse的用户画像系统的优点 前言 本文介绍一个ClickHouse应用案例—用户画像系统…

AI工具:解锁智能时代办公自动化的新篇章

工欲善其事,必先利其器。 随着AI技术与各个行业或细分场景的深度融合,日常工作可使用的AI工具呈现出井喷式发展的趋势,AI工具的类别也从最初的AI文本生成、AI绘画工具,逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

AIGC| 有手就行的AI绘画教程!Midjourney+Stable Diffusion 结合!全程干货,速来学习!

大家好,我是画画的小强 AI绘画工具的出现, 让设计岗的同事更会画画了, 还让策划/制片/三维/后期/运营……也能“画”一画了。 今天小强就教一教大伙,萌新小白都能迅速上手的AI绘画教程, 从零开始,产出…

静态网页实现-人脸识别-案例(web)

🤳人脸识别(web) 基于开源大模型,将人脸识别功能整合到网页中,提供用户友好的界面和强大的功能。 核心功能 人脸轮廓识别: 通过深度学习算法,精确识别人脸的轮廓,包括眼睛、鼻子、嘴巴等关键部…

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务 家政服务是一个专为家政服务人员设计的平台,该平台旨在提供便捷、高效的工作机会,同时确保服务质量和客户体验。 以下是关于家政服务师…

【耗时十个小时】程序员最趁手的SVM算法,学完你会哭着感谢努力的自己!

❤ 纯 干 货 ❤ 在这之前咱们已经接触了 各个算法的优缺点的总结,以及8个回归类算法、7个正则化算法的总结、5 个集成算法模型的全部总结! 感兴趣的可以翻到之前看看~ 咱们今天就大概一起学习一下关于SVM的方方面面。 线性支持向量机 非线性支持向量…

干货 | SDR RFSoC技术框图大放送(附资源)

软件无线电(SDR) 本文参考《Software Defined Radio with Zynq UltraScale RFSoc》,全文共744页。需要的可以给公众号 迪普微科技 发送“SDR”。

动态规划——打家劫舍问题

198. 打家劫舍 问题描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一…