【YOLOv8改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力

简介: YOLO目标检测专栏介绍了SimAM,一种无参数的CNN注意力模块,基于神经科学理论优化能量函数,提升模型表现。SimAM通过计算3D注意力权重增强特征表示,无需额外参数。文章提供论文链接、Pytorch实现代码及详细配置,展示了如何在目标检测任务中应用该模块。

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

摘要

在本文中,我们提出了一种概念上简单但非常有效的卷积神经网络(ConvNets)注意力模块。与现有的通道注意力和空间注意力模块不同,我们的模块为特征图推断3D注意力权重,而无需向原始网络添加参数。具体来说,我们基于一些知名的神经科学理论,提出通过优化能量函数来找出每个神经元的重要性。我们进一步推导出一个快速的闭式解,并展示该解可以在不到十行代码中实现。该模块的另一个优点是大多数操作符是基于能量函数的解选择的,避免了大量结构调整的工作。对各种视觉任务的定量评估表明,所提出的模块灵活且有效,可以提高许多卷积神经网络的表示能力。我们的代码可在 Pytorch-SimAM 获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

SimAM(Simple Attention Module)是一种简单且无参数的注意力模块,用于卷积神经网络(Convolutional Neural Networks,ConvNets)。SimAM的设计灵感源自哺乳动物大脑中的神经科学理论,特别是基于已建立的空间抑制理论设计了一个能量函数来实现这一理论。SimAM通过推导出一个简单的解决方案来实现这个函数,进而将该函数作为特征图中每个神经元的注意力重要性。该注意力模块的实现受到这个能量函数的指导,避免了过多的启发式方法。SimAM通过推断特征图的3D注意力权重,优化能量函数以找到每个神经元的重要性,从而在各种视觉任务上提高性能。

  1. 基于空间抑制理论设计能量函数:SimAM利用空间抑制理论设计了一个能量函数,用于计算每个神经元的注意力重要性。
  2. 推导简单解决方案:为了实现这个能量函数,SimAM推导出了一个简单的解决方案,使得实现过程更加高效。
  3. 实现注意力权重:通过计算得到的注意力重要性,SimAM可以为每个神经元分配相应的注意力权重,从而提高特征图的表征能力。

    image-20240630164233027

SimAM 的计算公式如下:
$$ w_i = \frac{1}{k} \sum_{j \in N_i} s(f_i, f_j) $$


公式说明:

  • w_i 是第 i 个像素的注意力权重
  • k 是归一化常数
  • N_i 是第 i 个像素的相邻像素集合
  • s(f_i, f_j) 是第 i 个像素和第 j 个像素之间的相似性

核心代码

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__()

        # 初始化Sigmoid激活函数和e_lambda参数
        self.activation = nn.Sigmoid()  # Sigmoid激活函数用于映射输出到(0, 1)之间
        self.e_lambda = e_lambda  # 控制分母的平滑参数

    def __repr__(self):
        # 返回模型的字符串表示,包括e_lambda参数的值
        s = self.__class__.__name__ + '('
        s += ('lambda=%f)' % self.e_lambda)
        return s

    @staticmethod
    def get_module_name():
        # 静态方法,返回模型的名称
        return "simam"

    def forward(self, x):
        # 前向传播函数,接收输入张量x,返回处理后的张量

        b, c, h, w = x.size()  # 获取输入张量的batch大小、通道数、高度和宽度

        n = w * h - 1  # 计算像素数量减一,用于标准化

        # 计算每个像素与平均值的差的平方
        x_minus_mu_square = (x - x.mean(dim=[2, 3], keepdim=True)).pow(2)

        # 计算SimAM激活函数的输出
        # 分子部分:每个像素的平方差除以分母的加权平均
        # 加上0.5是为了映射输出到(0.5, 1)之间
        y = x_minus_mu_square / (4 * (x_minus_mu_square.sum(dim=[2, 3], keepdim=True) / n + self.e_lambda)) + 0.5

        # 返回经过SimAM激活函数处理后的特征图
        return x * self.activation(y)

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/140083301

相关文章
|
3天前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进-卷积Conv】DualConv( Dual Convolutional):用于轻量级深度神经网络的双卷积核
**摘要:** 我们提出DualConv,一种融合$3\times3$和$1\times1$卷积的轻量级DNN技术,适用于资源有限的系统。它通过组卷积结合两种卷积核,减少计算和参数量,同时增强准确性。在MobileNetV2上,参数减少54%,CIFAR-100精度仅降0.68%。在YOLOv3中,DualConv提升检测速度并增4.4%的PASCAL VOC准确性。论文及代码已开源。
|
2天前
|
机器学习/深度学习 人工智能 算法
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
9 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
|
2月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
78 0
|
2月前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
19天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
19天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
12天前
|
机器学习/深度学习 算法 计算机视觉
没有公式,不要代码,让你理解 RCNN:目标检测中的区域卷积神经网络
没有公式,不要代码,让你理解 RCNN:目标检测中的区域卷积神经网络
39 0
没有公式,不要代码,让你理解 RCNN:目标检测中的区域卷积神经网络
|
2月前
|
机器学习/深度学习 自然语言处理 搜索推荐
【传知代码】图神经网络长对话理解-论文复现
在ACL2023会议上发表的论文《使用带有辅助跨模态交互的关系时态图神经网络进行对话理解》提出了一种新方法,名为correct,用于多模态情感识别。correct框架通过全局和局部上下文信息捕捉对话情感,同时有效处理跨模态交互和时间依赖。模型利用图神经网络结构,通过构建图来表示对话中的交互和时间关系,提高了情感预测的准确性。在IEMOCAP和CMU-MOSEI数据集上的实验结果证明了correct的有效性。源码和更多细节可在文章链接提供的附件中获取。
【传知代码】图神经网络长对话理解-论文复现
|
19天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】
|
19天前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】