首页 > 其他分享 >YOLOv8改进 - 注意力篇 - 引入SimAM注意力机制

YOLOv8改进 - 注意力篇 - 引入SimAM注意力机制

时间:2024-10-08 21:20:44浏览次数:10  
标签:__ SimAM self yaml C2f YOLOv8 注意力

一、本文介绍

作为入门性篇章,这里介绍了SimAM注意力在YOLOv8中的使用。包含SimAM原理分析,SimAM的代码、SimAM的使用方法、以及添加以后的yaml文件及运行记录。

二、SimAM原理分析

SimAM官方论文地址:SimAM文章

SimAM官方代码地址:SimAM源代码

SimAM注意力机制:是一种轻量级的自注意力机制,计算注意力权重时使用的是线性层而不是点积。其过程为:

输入张量 x (B, C, H, W) -> 均值计算 -> 差异平方 -> 归一化 -> 生成注意力图 -> Sigmoid -> 输出(B, C, H, W)

相关代码:

SimAM注意力的代码,如下。

class SimAM(torch.nn.Module):
    def __init__(self, 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)

四、YOLOv8中SimAM使用方法

1.YOLOv8中添加SimAM模块:

首先在ultralytics/nn/modules/conv.py最后添加SimAM模块的代码。

2.在conv.py的开头__all__ = 内添加SimAM模块的类别名:

3.在同级文件夹下的__init__.py内添加SimAM的相关内容:(分别是from .conv import SimAM ;以及在__all__内添加SimAM)

4.在ultralytics/nn/tasks.py进行SimAM注意力机制的注册,以及在YOLOv8的yaml配置文件中添加SimAM即可。

首先打开task.py文件,按住Ctrl+F,输入parse_model进行搜索。找到parse_model函数。在其最后一个else前面添加以下注册代码:

        elif m in {SimAM}:
            c2 = ch[f]

然后,就是新建一个名为YOLOv8_SimAM.yaml的配置文件:(路径:ultralytics/cfg/models/v8/YOLOv8_SimAM.yaml)

# Ultralytics YOLO 

标签:__,SimAM,self,yaml,C2f,YOLOv8,注意力
From: https://blog.csdn.net/2301_79619145/article/details/142767105

相关文章

  • YOLOv8改进 - 注意力篇 - 引入EMA注意力机制
    一、本文介绍作为入门性篇章,这里介绍了EMA注意力在YOLOv8中的使用。包含EMA原理分析,EMA的代码、EMA的使用方法、以及添加以后的yaml文件及运行记录。二、EMA原理分析EMA官方论文地址:EMA文章EMA代码:EMA代码EMA注意力机制(高效的多尺度注意力):通过重塑部分通道到批次维度,并将......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入24年最新Mamba注意力机制MLLAttention
    1. MLLAttention介绍1.1 摘要:Mamba是一种有效的状态空间模型,具有线性计算复杂度。最近,它在处理各种视觉任务的高分辨率输入方面表现出了令人印象深刻的效率。在本文中,我们揭示了强大的Mamba模型与线性注意力Transformer具有惊人的相似之处,而线性注意力Transforme......
  • YOLOv8-seg训练与推理
    1.YOLOv8-seg简介 YOLOv8-seg是YOLO系列模型的其中一个版本。YOLOv8-seg在继承YOLO系列模型高效性和准确性的基础上,增加了实例分割的能力。 2.数据集使用的数据集较简单,主要以下目录:images:存放原始图片(1500张),大小为128x128。部分如下: images_json:......
  • 深度学习中的注意力机制:原理、应用与发展
    一、引言在深度学习领域,注意力机制(AttentionMechanism)已经成为一种极为重要的技术手段。它的出现使得模型能够像人类一样,在处理大量信息时聚焦于关键部分,从而提高模型的性能和效率。从自然语言处理到计算机视觉等多个领域,注意力机制都展现出了卓越的能力,极大地推动了深度......
  • 大核注意力机制
    一、本文介绍在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv8,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核,减少了计算复杂性和内存占用。接着,我们介绍将这一机制整合到YOLOv8的......
  • 聚焦线性注意力
    一、本文介绍本文给大家带来的改进机制是FocusedLinearAttention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测精度),旨在提高效率和表现力。其解决了两个在传统线性注意力方法中存在的问题:聚焦能力和特征多样性。......
  • 【AI学习】Mamba学习(二):线性注意力
    上一篇《Mamba学习(一):总体架构》提到,Transformer模型的主要缺点是:自注意力机制的计算量会随着上下文长度的增加呈平方级增长。所以,许多次二次时间架构(指一个函数或算法的增长速度小于二次函数,但大于线性函数),如线性注意力、门控卷积和循环模型,以及结构化状态空间模型(SSM)被......
  • YOLOv8算法改进【NO.138】基于细节增强卷积改进YOLO算法
     前  言    YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通:首推,是将两种最新推出算法的模块进行融合形成......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入CBAM注意力机制
    1.CBAM介绍摘要:我们提出了卷积块注意力模块(CBAM),这是一种用于前馈卷积神经网络的简单而有效的注意力模块。给定中间特征图,我们的模块沿着两个独立的维度(通道和空间)顺序推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。由于CBAM是一个轻量级通用模块,因此它......
  • YOLOv8改进 | 主干篇,YOLOv8改进主干网络为华为的轻量化架构GhostNetV1
    摘要摘要:将卷积神经网络(CNN)部署在嵌入式设备上是困难的,因为嵌入式设备的内存和计算资源有限。特征图的冗余是成功的CNN的一个重要特征,但在神经网络架构设计中很少被研究。作者提出了一种新颖的Ghost模块,用于通过廉价操作生成更多的特征图。基于一组内在特征图,我们......