【即插即用】SimAM无参数注意力机制(附源码)

论文地址:https://proceedings.mlr.press/v139/yang21o#/
代码地址:https://github.com/ZjjConan/SimAM
摘要:

在这篇论文里,我们提出了一种概念简单但非常有效的注意力模块,用于卷积神经网络(ConvNets)。与现有的通道式和空间式注意力模块不同,我们的模块在不增加原网络参数的情况下,为每一层的特征图推导出3D注意力权重。具体来说,我们基于一些广为人知的神经科学理论,提出优化一个能量函数来找出每个神经元的重要性。我们还为这个能量函数推导出了一个快速的封闭形式解,这个解只需要不到十行代码就能实现。这个模块的另一个优点是,大多数操作符都是基于定义的能量函数的解来选择的,这样就避免了过多的结构调整工作。在各种视觉任务上的定量评估表明,我们提出的模块既灵活又有效,能够提升许多ConvNets的表示能力。

简单来说,我们发明了一种新的注意力模块,可以让卷积神经网络更好地关注图像中重要的部分。与现有的方法不同,我们这个方法不需要给网络增加额外的参数,只需要优化一个能量函数来找出每个神经元的重要性。我们还找到了一个简单快速的解法,用几行代码就能实现。这个模块不仅灵活,而且在各种视觉任务中都表现出色,能够提升网络的性能。如果你对这个模块感兴趣,可以在Pytorch-SimAM上找到我们的代码。

原理图
Pytorch源码:
 
import torch
import torch.nn as nn

class SimAM(nn.Module):
    def __init__(self, lamda=1e-5):
        super().__init__()
        self.lamda = lamda
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # 获取输入张量的形状信息
        b, c, h, w = x.shape
        # 计算像素点数量
        n = h * w - 1
        # 计算输入张量在通道维度上的均值
        mean = torch.mean(x, dim=[-2,-1], keepdim=True)
        # 计算输入张量在通道维度上的方差
        var = torch.sum(torch.pow((x - mean), 2), dim=[-2, -1], keepdim=True) / n
        # 计算特征图的激活值
        e_t = torch.pow((x - mean), 2) / (4 * (var + self.lamda)) + 0.5
        # 使用 Sigmoid 函数进行归一化
        out = self.sigmoid(e_t) * x
        return out

# 测试模块
if __name__ == "__main__":
    # 创建 SimAM 实例并进行前向传播测试
    layer = SimAM(lamda=1e-5)
    x = torch.randn((2, 3, 224, 224))
    output = layer(x)
    print("Output shape:", output.shape)

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 基于注意力机制的表情识别python源码+数据集+模型+项目说明.zip 基于注意力机制的表情识别python源码+数据集+模型+项目说明.zip 基于注意力机制的表情识别python源码+数据集+模型+项目说明.zip 文件目录解释 # 1. Models 用来存放的模型,可以是已有的Paddle格式的模型 # 2. Pages - assets 用到的图片资源 - assets.qrc 使用PySide生成的样式文件 - assets_rc.py GUI界面的样式文件,此目录和根目录都有,我忘记是调用的哪一个了,所以都保留了。 # 3. Utils - AttResNet.py 网络代码 - DatasetProcess.py 数据集处理代码 - FaceDetection.py 人脸检测代码 - Predict.py 模型预测代码 - VisualTrain.py 模型训练代码 - CSV文件 用来保存数据集和创建的信息 # 4. Dataset 存放数据集的目录 注意事项 * # 配置好环境,安装使用PySide的工具,不会安装见如下以PyCharm为例的说明 1. 依次点击 File:arrow_right:Settings:arrow_right:Tools:arrow_right:External Tools:arrow_right::heavy_plus_sign:添加PySide工具,工具所在的目录为 _你的Python环境_ \Scripts 2. 分别添加 _pyside6-designer.exe_ 、 _pyside6-rcc.exe_ 和 _pyside6-uic.exe_ 三个工具,Arguments和Working directory参数分别均为 _\$FileName\$ -o \$FileNameWithoutExtension\$.py_ 和 _\$FileDir\$ 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
L-注意力机制是一种结合了长短期记忆网络(LSTM)和注意力机制神经网络模型。引用和中提到了一些基于LSTM和注意力机制的时间序列预测的实现源码和数据。 LSTM是一种递归神经网络,被广泛应用于序列数据的建模和预测。它通过门控单元的设计,能够有效地捕捉序列中的长期依赖关系。而注意力机制则是一种机制,可以使模型自动地关注输入序列中的重要部分。它通过给予不同输入部分不同的权重,使模型能够更加集中地处理关键信息。 LSTM-注意力机制结合了LSTM和注意力机制的优点,能够在处理时间序列数据时更好地捕捉序列中的重要信息,提高预测准确性。这种模型在诸如文本翻译、语音识别和股票预测等任务中得到了广泛的应用。 引用中提到了神经机器翻译(NMT)作为LSTM-注意力机制的一个应用示例。在NMT中,LSTM-注意力机制被用来将源语言句子映射成一个固定长度的向量表示,并基于该向量生成目标语言的翻译。通过引入注意力机制,NMT能够更好地处理长句子和复杂语言结构,提高翻译质量。 最后,引用中提到了注意力机制深度学习的最新趋势之一。注意力机制的引入使得神经网络能够更加灵活地处理输入序列中的不同部分,提高了模型的表现和效果。 综上所述,LSTM-注意力机制是一种结合了长短期记忆网络和注意力机制神经网络模型,用于处理时间序列数据和任务,如文本翻译、语音识别和股票预测等。它能够更好地捕捉序列中的重要信息,提高预测准确性,并在深度学习领域具有广泛的应用前景。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值