YOLOv5、YOLOv8改进:S2注意力机制

这篇具有很好参考价值的文章主要介绍了YOLOv5、YOLOv8改进:S2注意力机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.简介

2.YOLOv5改进

2.1增加以下S2-MLPv2.yaml文件

2.2common.py配置

2.3yolo.py配置


1.简介

 S2-MLPv2注意力机制

YOLOv5、YOLOv8改进:S2注意力机制,YOLO改进,YOLO,人工智能,深度学习,计算机视觉,pytorch

 

最近,出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比,基于 MLP 的视觉架构具有较少的归纳偏差,在图像识别方面实现了有竞争力的性能。其中,spatial-shift MLP (S2-MLP),采用直接的空间位移操作,取得了比包括 MLP-mixer 和 ResMLP 在内的开创性工作更好的性能。使用具有金字塔结构的较小补丁,视觉置换器 (ViP) 和Global Filter Network (GFNet) 实现了比 S2-MLP 更好的性能。

在本文中,我们改进了 S2-MLP 视觉主干。我们沿通道维度扩展特征图,并将扩展后的特征图分成几个部分。我们对分割部分进行不同的空间移位操作。

YOLOv5、YOLOv8改进:S2注意力机制,YOLO改进,YOLO,人工智能,深度学习,计算机视觉,pytorch

本文对空间移位MLP (S2-MLP)模型进行了改进,提出了S2-MLPv2模型。将feature map进行扩展,并将扩展后的feature map分为三部分。它将每个部分单独移动,然后通过split-attention融合分开的特征图。同时,我们利用层次金字塔来提高其建模细粒度细节的能力,以获得更高的识别精度。在没有外部训练数据集的情况下,采用224×224的images,我们的s2-mlv2-medium模型在ImageNet1K数据集上取得了83.6%的top-1准确率,这是目前基于MLP的方法中最先进的性能。同时,与基于transformer的方法相比,我们的S2-MLPv2模型在不需要自我注意的情况下,参数更少,达到了相当的精度。

        与基于MLP的先驱作品如MLP-Mixer、ResMLP以及最近类似MLP的模型如Vision Permutator和GFNet相比,空间移位MLP的另一个重要优势是,空间移位MLP的形状对图像的输入尺度是不变的。因此,经过特定尺度图像预训练的空间移位MLP模型可以很好地应用于具有不同尺寸输入图像的下游任务。未来的工作将致力于不断提高空间移位MLP体系结构的图像识别精度。一个有希望且直接的方向是尝试更小尺寸的patch和更高级的四层金字塔,如CycleMLP和AS-MLP,以进一步减少FLOPs和缩短基于transformer模型之间的识别差距。
 

 S2注意力机制(S2 Attention Mechanism)是一种用于序列建模和注意力机制改进的方法,特别在自然语言处理(NLP)领域中得到广泛应用。它是对传统的自注意力机制(self-attention)进行改进,旨在提高序列中不同位置之间的关联性建模能力。

  1. 自注意力机制回顾: 自注意力机制是一种用于处理序列数据的方法,最早在Transformer模型中提出并广泛用于NLP任务中。在自注意力机制中,序列中的每个位置都可以与其他所有位置进行交互,以便捕获位置之间的关系。然而,这种全局的交互可能会导致计算复杂度的增加,并且可能过于强调距离较近的位置。

  2. S2注意力机制的改进: S2注意力机制引入了一种分段结构,将序列分为不同的段(segments)。每个段内的位置之间可以进行交互,但不同段之间的交互被限制。这种分段结构在捕获长距离依赖关系时更加高效,因为不同段之间的关联性通常较弱。

  3. 注意力计算: 在S2注意力中,注意力权重的计算仍然涉及对查询(query)、键(key)和值(value)的操作。不同之处在于,每个段的注意力计算是独立的,而不同段之间的注意力权重设为固定值(通常为0)。

  4. 优势与应用: S2注意力机制的主要优势是在捕获序列中的长距离依赖关系时表现更加高效。这在处理长文本或长序列时特别有用,可以减少计算成本,同时提高建模性能。S2注意力机制在机器翻译、文本生成、命名实体识别等NLP任务中都有应用,以更好地处理长文本的关系建模。

2.YOLOv5改进

2.1增加以下S2-MLPv2.yaml文件

# parameters
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # 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, 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)
   [-1, 1, S2Attention, [1024]], #修改

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

2.2common.py配置

./models/common.py文件增加以下模块

import numpy as np
import torch
from torch import nn
from torch.nn import init

# https://arxiv.org/abs/2108.01072
def spatial_shift1(x):
    b,w,h,c = x.size()
    x[:,1:,:,:c//4] = x[:,:w-1,:,:c//4]
    x[:,:w-1,:,c//4:c//2] = x[:,1:,:,c//4:c//2]
    x[:,:,1:,c//2:c*3//4] = x[:,:,:h-1,c//2:c*3//4]
    x[:,:,:h-1,3*c//4:] = x[:,:,1:,3*c//4:]
    return x


def spatial_shift2(x):
    b,w,h,c = x.size()
    x[:,:,1:,:c//4] = x[:,:,:h-1,:c//4]
    x[:,:,:h-1,c//4:c//2] = x[:,:,1:,c//4:c//2]
    x[:,1:,:,c//2:c*3//4] = x[:,:w-1,:,c//2:c*3//4]
    x[:,:w-1,:,3*c//4:] = x[:,1:,:,3*c//4:]
    return x


class SplitAttention(nn.Module):
    def __init__(self,channel=512,k=3):
        super().__init__()
        self.channel=channel
        self.k=k
        self.mlp1=nn.Linear(channel,channel,bias=False)
        self.gelu=nn.GELU()
        self.mlp2=nn.Linear(channel,channel*k,bias=False)
        self.softmax=nn.Softmax(1)
    
    def forward(self,x_all):
        b,k,h,w,c=x_all.shape
        x_all=x_all.reshape(b,k,-1,c) 
        a=torch.sum(torch.sum(x_all,1),1) 
        hat_a=self.mlp2(self.gelu(self.mlp1(a))) 
        hat_a=hat_a.reshape(b,self.k,c) 
        bar_a=self.softmax(hat_a) 
        attention=bar_a.unsqueeze(-2) 
        out=attention*x_all 
        out=torch.sum(out,1).reshape(b,h,w,c)
        return out


class S2Attention(nn.Module):

    def __init__(self, channels=512 ):
        super().__init__()
        self.mlp1 = nn.Linear(channels,channels*3)
        self.mlp2 = nn.Linear(channels,channels)
        self.split_attention = SplitAttention()

    def forward(self, x):
        b,c,w,h = x.size()
        x=x.permute(0,2,3,1)
        x = self.mlp1(x)
        x1 = spatial_shift1(x[:,:,:,:c])
        x2 = spatial_shift2(x[:,:,:,c:c*2])
        x3 = x[:,:,:,c*2:]
        x_all=torch.stack([x1,x2,x3],1)
        a = self.split_attention(x_all)
        x = self.mlp2(a)
        x=x.permute(0,3,1,2)
        return x
  
  

2.3yolo.py配置

在 models/yolo.py文件夹下

定位到parse_model函数中,新增以下代码

elif m is S2Attention:
    c1, c2 = ch[f], args[0]
    if c2 != no:
        c2 = make_divisible(c2 * gw, 8)

以上就修改完成了

又遇到的问题欢迎评论区留言讨论文章来源地址https://www.toymoban.com/news/detail-656875.html

到了这里,关于YOLOv5、YOLOv8改进:S2注意力机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 改进YOLOv8/YOLOv5系列:助力涨点,魔改注意力,动态通道注意力模块DyCAConv,带改进描述

    在深度学习领域,尤其是计算机视觉任务中,神经网络需要捕捉图像中的多尺度特征以实现有效的特征表征。为了实现这一目标,研究人员不断开发新的模块和结构来改进神经网络的性能。通道注意力模块是一种有效的方法,旨在为每个通道分配权重,使网络关注更重要的通

    2023年04月25日
    浏览(43)
  • YOLOv8改进算法之添加CA注意力机制

    CA(Coordinate Attention)注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息,以便模型可以更好地理解不同位置之间的关系。如下图: 1. 输入特征 : CA 注意力机制的输入通常是一个特征图,它通常是卷积

    2024年02月08日
    浏览(31)
  • 改进YOLOv5:添加EMA注意力机制

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文主要介绍一种在YOLOv5-7.0中添加EMA注意力机制的方法。EMA注意力机制原论文地址,有关EMA注意力机制的解读可参考文章。 在yolov5的models文件中新建一个名为EMA.py文件,将下述代码复制到EMA.py文件中并

    2024年02月09日
    浏览(26)
  • 改进YOLOv8:添加CBAM注意力机制(涨点明显)

    计算机视觉中的注意力机制是一种聚焦于局部信息的机制,其基本思想是让系统学会忽略无关信息而关注重点信息。这种机制在图像识别、物体检测和人脸识别等任务中都发挥了重要作用。 注意力机制的实现方法有多种,其中包括 空间注意力 模型、 通道注意力 模型、 空间

    2024年01月15日
    浏览(51)
  • YOLOv5、v8改进:CrissCrossAttention注意力机制

    目录 1.简介 2. yolov5添加方法: 2.1common.py构建CrissCrossAttention模块 2.2yolo.py中注册 CrissCrossAttention模块 2.3修改yaml文件。 这是ICCV2019的用于语义分割的论文,可以说和CVPR2019的DANet遥相呼应。 和DANet一样,CCNet也是想建模像素之间的long range dependencies,来做更加丰富的contextual info

    2024年02月11日
    浏览(33)
  • 改进YOLO系列:改进YOLOv8,教你YOLOv8如何添加20多种注意力机制,并实验不同位置。

    注意力机制(Attention Mechanism)是深度学习中一种重要的技术,它可以帮助模型更好地关注输入数据中的关键信息,从而提高模型的性能。注意力机制最早在自然语言处理领域的序列到序列(seq2seq)模型中得到广泛应用,后来逐渐扩展到了计算机视觉、语音识别等多个领域。

    2024年02月16日
    浏览(31)
  • YOLOv5、v8改进:引入SKAttention注意力机制

    目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 论文链接:https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣,从字面的意思可以理解:如果可以自适应的调整感受野的大小,其背后说得应该就是自

    2024年02月12日
    浏览(30)
  • YOLOv5改进系列(1)——添加SE注意力机制

    从这篇开始我们进入YOLOv5改进系列。那就先从最简单的添加注意力机制开始吧!( ̄︶ ̄)↗ 【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 目录

    2024年02月03日
    浏览(46)
  • (超详细)4-YOLOV5改进-添加ShuffleAttention注意力机制

    1、在yolov5/models下面新建一个ShuffleAttention.py文件,在里面放入下面的代码 代码如下: 2、找到yolo.py文件,进行更改内容 在28行加一个 from models.ShuffleAttention import ShuffleAttention , 保存即可 3、找到自己想要更改的yaml文件,我选择的yolov5s.yaml文件(你可以根据自己需求进行选择),

    2024年01月23日
    浏览(30)
  • YOLOv5改进算法之添加CA注意力机制模块

    目录   1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动   CA(Coordinate Attention)注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息,以便模型可以更好地理解不同位置之间的关系。如下图: 1. 输入特征

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包