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

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

时间:2024-10-08 21:20:14浏览次数:9  
标签:EMA nn self attention YOLOv8 groups 注意力

一、本文介绍

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

二、EMA原理分析

EMA官方论文地址:EMA文章

EMA代码:EMA代码

EMA注意力机制(高效的多尺度注意力):通过重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级别的关系。

相关代码:

EMA注意力的代码,如下:

class EMA_attention(nn.Module):
    def __init__(self, channels, c2=None, factor=32):
        super(EMA_attention, self).__init__()
        self.groups = factor
        assert channels // self.groups > 0
        self.softmax = nn.Softmax(-1)
        self.agp = nn.AdaptiveAvgPool2d((1, 1))
        self.pool_h = nn.AdaptiveAvgPool2d((None, 1))
        self.pool_w = nn.AdaptiveAvgPool2d((1, None))
        self.gn = nn.GroupNorm(channels // self.groups, channels // self.groups)
        self.conv1x1 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=1, stride=1, padding=0)
        self.conv3x3 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=3, stride=1, padding=1)

    def forward(self, x):
        b, c, h, w = x.size()
        group_x = x.reshape(b * self.groups, -1, h, w)  # b*g,c//g,h,w
        x_h = self.pool_h(group_x)
        x_w = self.pool_w(group_x).permute(0, 1, 3, 2)
        hw = self.conv1x1(torch.cat([x_h, x_w], dim=2))
        x_h, x_w = torch.split(hw, [h, w], dim=2)
        x1 = self.gn(group_x * x_h.sigmoid() * x_w.permute(0, 1, 3, 2).sigmoid())
        x2 = self.conv3x3(group_x)
        x11 = self.softmax(self.agp(x1).reshape(b * self.groups, -1, 1).permute(0, 2, 1))
        x12 = x2.reshape(b * self.groups, c // self.groups, -1)  # b*g, c//g, hw
        x21 = self.softmax(self.agp(x2).reshape(b * self.groups, -1, 1).permute(0, 2, 1))
        x22 = x1.reshape(b * self.groups, c // self.groups, -1)  # b*g, c//g, hw
        weights = (torch.matmul(x11, x12) + torch.matmul(x21, x22)).reshape(b * self.groups, 1, h, w)
        return (group_x * weights.sigmoid()).reshape(b, c, h, w)

四、YOLOv8中EMA使用方法

1.YOLOv8中添加EMA模块:

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

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

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

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

首先打开task.py文件,按住Ctrl+F,输入parse_model进行搜索。找到parse_model函数。在其最后一个else前面(或者直接加载含有c2f模块的注册代码内,注册方式一样)添加以下注册代码:

        if m in (EMA_attention):
            c1, c2 = ch[f], args[0]

然后,就是新建一个名为YOLOv8_EMA.yaml的配置文件:(路径:ultralytics/cfg/models/v8/YOLOv8_EMA.yaml)其中参数中nc,由自己的数据集决定。本文测试,采用的coco8数据集,有80个类别。

# Ultralytics YOLO 

标签:EMA,nn,self,attention,YOLOv8,groups,注意力
From: https://blog.csdn.net/2301_79619145/article/details/142734096

相关文章

  • 01_nodejs_phantomjs_nodemailer
    代码块nodejs-phantomjs-nodemailer功能每天定时截图,并把截到的图片自动通过邮件发送。说明代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件Mail.js,截图文件capturePart1.js,capturePart2.js,capturePart3.js,这里只展示了capturePart1.js其他两个类似。值得......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入24年最新Mamba注意力机制MLLAttention
    1. MLLAttention介绍1.1 摘要:Mamba是一种有效的状态空间模型,具有线性计算复杂度。最近,它在处理各种视觉任务的高分辨率输入方面表现出了令人印象深刻的效率。在本文中,我们揭示了强大的Mamba模型与线性注意力Transformer具有惊人的相似之处,而线性注意力Transforme......
  • gp查看数据库,schema,表的大小
    查询数据库大小selectpg_size_pretty(pg_database_size('mdmaster_baosheng_test1'));查询所有表大小--针对大表处理selectschemaname,relname,pg_size_pretty(pg_relation_size(relid)),*frompg_stat_user_tablesorderbypg_relation_size(relid)desc;查询所有sch......
  • YOLOv8-seg训练与推理
    1.YOLOv8-seg简介 YOLOv8-seg是YOLO系列模型的其中一个版本。YOLOv8-seg在继承YOLO系列模型高效性和准确性的基础上,增加了实例分割的能力。 2.数据集使用的数据集较简单,主要以下目录:images:存放原始图片(1500张),大小为128x128。部分如下: images_json:......
  • 深度学习中的注意力机制:原理、应用与发展
    一、引言在深度学习领域,注意力机制(AttentionMechanism)已经成为一种极为重要的技术手段。它的出现使得模型能够像人类一样,在处理大量信息时聚焦于关键部分,从而提高模型的性能和效率。从自然语言处理到计算机视觉等多个领域,注意力机制都展现出了卓越的能力,极大地推动了深度......
  • Foundations of Applied Mathematics
    FoundationsofAppliedMathematicsMATH4700–Fall2024Homework2DueThursday,October3at12:00PMThishomeworkhas100pointsplus65bonuspoints.Fullcreditwillgenerallybeawardedforasolutiononlyifitispresentedbothcorrectlyandeffi......
  • 大核注意力机制
    一、本文介绍在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于YOLOv8,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核,减少了计算复杂性和内存占用。接着,我们介绍将这一机制整合到YOLOv8的......
  • 聚焦线性注意力
    一、本文介绍本文给大家带来的改进机制是FocusedLinearAttention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测精度),旨在提高效率和表现力。其解决了两个在传统线性注意力方法中存在的问题:聚焦能力和特征多样性。......
  • What is the difference between a Homemaker and a Housewife?
    Theterms"homemaker"and"housewife"areoftenusedinterchangeably,buttheycancarrydifferentconnotationsandimplications:HomemakerDefinition:Ahomemakerisgenerallysomeonewhomanagesahouseholdandtakescareofhome-re......
  • 【AI学习】Mamba学习(二):线性注意力
    上一篇《Mamba学习(一):总体架构》提到,Transformer模型的主要缺点是:自注意力机制的计算量会随着上下文长度的增加呈平方级增长。所以,许多次二次时间架构(指一个函数或算法的增长速度小于二次函数,但大于线性函数),如线性注意力、门控卷积和循环模型,以及结构化状态空间模型(SSM)被......