GAM注意力机制

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

1.GAM注意力机制:

图像解析:
gam注意力机制,深度学习,深度学习,人工智能,神经网络
从整体上可以看出,GAM和CBAM注意力机制还是比较相似的,同样是使用了通道注意力机制和空间注意力机制。但是不同的是对通道注意力和空间注意力的处理。

2.CBAM注意力解析

CBAM = CAM + BAM
gam注意力机制,深度学习,深度学习,人工智能,神经网络

  • 对于通道注意力的处理:
    gam注意力机制,深度学习,深度学习,人工智能,神经网络
    首先对输入特征图进行最大池化和平均池化,再经过MLP分别处理,最终经过Sigmoid激活。
  • 对于空间注意力的处理
    gam注意力机制,深度学习,深度学习,人工智能,神经网络
    对特征图进行最大池化和平均池化后叠加在一起,再进行卷积,经过Sigmoid激活函数处理。

3.GAM改进

了解了CBAM,我们来看GAM是怎么处理CAM 和SAM的,同样是先通道后空间。

  • CAM
    gam注意力机制,深度学习,深度学习,人工智能,神经网络
    对于输入特征图,首先进行维度转换,经过维度转换的特征图输入到MLP,再转换为原来的维度,进行Sigmoid处理输出。
  • SAM
  • gam注意力机制,深度学习,深度学习,人工智能,神经网络
    对于SAM,GAM主要使用了卷积处理,对于这里有点像SE注意力机制,先将通道数量减少,再将通道数量增加。首先通过卷积核为7的卷积缩减通道数量,缩小计算量,在经过一个卷积核为7的卷积操作,增加通道数量,保持通道数量的一致。最后经过Sigmoid输出。

4.GAM的pytorch实现

这里给出GAM的pytorch实现代码:代码可能跟官方有些差异,是看图复现的

"""
GAM 注意力机制:对CBAM注意力进行改进
先通道注意力,再空间注意力
"""
import torch
import torch.nn as nn

# 通道注意力
class Channel_Attention(nn.Module):
    def __init__(self, in_channel, out_channel, ratio=4):
        super(Channel_Attention, self).__init__()
        self.fc1 = nn.Linear(in_channel, in_channel // ratio)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(in_channel // ratio, in_channel)
        self.sig = nn.Sigmoid()

    def forward(self, x):
        # b, c, h, w = x.size()
        input = x.permute(0, 3, 2, 1)
        output = self.fc2(self.relu(self.fc1(input)))
        output = output.permute(0, 3, 2, 1)
        return output * x


# 空间注意力
class Spatial(nn.Module):
    def __init__(self, in_channel, out_channel, ratio, kernel_size=7):
        super(Spatial, self).__init__()
        padding = kernel_size // 2
        self.conv1 = nn.Conv2d(
            in_channel, in_channel // ratio, kernel_size=7, padding=padding
        )
        self.bn = nn.BatchNorm2d(in_channel // ratio)
        self.act = nn.ReLU()
        self.conv2 = nn.Conv2d(
            in_channel // ratio, in_channel, kernel_size=kernel_size, padding=padding
        )
        self.bn1 = nn.BatchNorm2d(in_channel)
        self.sig = nn.Sigmoid()
    def forward(self, x):
        conv1 = self.act(self.bn(self.conv1(x)))
        conv2 = self.bn1(self.conv2(conv1))
        output = self.sig(conv2)
        return x * output

class GAM(nn.Module):
    def __init__(self,in_channel, out_channel, ratio = 4, kernel_size = 7):
        super(GAM, self).__init__()
        self.channel_attention = Channel_Attention(in_channel,out_channel,ratio)
        self.spatial_attention = Spatial(in_channel,out_channel,ratio,kernel_size)

    def forward(self, x):
        input = self.channel_attention(x)
        output= self.spatial_attention(input)
        return output

input = torch.randn(1, 4, 24, 24).cuda()
model = GAM(4, 4).cuda()
output = model(input)
print(output)
print(output.size())
# 20220928

5 Reference

YOLOv5使用GAM文章来源地址https://www.toymoban.com/news/detail-788996.html

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

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

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

相关文章

  • SE、ECA、CA、SA、CBAM、ShuffleAttention、SimAM、CrissCrossAttention、SK、NAM、GAM、SOCA注意力模块、程序

    目标检测——map概念、IoU汇总IoU、GIoU、DIoU、CIoU、SIoU、EIoU、Wiou、Focal、alpha 目标检测——YOLOv3、YOLOv4、YOLOv5、YOLOv7正负样本匹配、YOLO3损失函数理解 目标检测——SE、ECA、CA、SA、CBAM、ShuffleAttention、SimAM、CrissCrossAttention、SK、NAM、GAM、SOCA注意力模块、程序 SENet: 1、对输入进来

    2024年02月04日
    浏览(35)
  • 目标检测——SE、ECA、CA、SA、CBAM、ShuffleAttention、SimAM、CrissCrossAttention、SK、NAM、GAM、SOCA注意力模块、程序

    目标检测——map概念、IoU汇总IoU、GIoU、DIoU、CIoU、SIoU、EIoU、Wiou、Focal、alpha 目标检测——YOLOv3、YOLOv4、YOLOv5、YOLOv7正负样本匹配、YOLO3损失函数理解 目标检测——SE、ECA、CA、SA、CBAM、ShuffleAttention、SimAM、CrissCrossAttention、SK、NAM、GAM、SOCA注意力模块、程序 SENet: 1、对输入进来

    2024年02月07日
    浏览(40)
  • 【深度学习注意力机制系列】—— SENet注意力机制(附pytorch实现)

    深度学习中的注意力机制(Attention Mechanism)是一种模仿人类视觉和认知系统的方法,它允许神经网络在处理输入数据时集中注意力于相关的部分。通过引入注意力机制,神经网络能够自动地学习并选择性地关注输入中的重要信息,提高模型的性能和泛化能力。 卷积神经网络

    2024年02月14日
    浏览(32)
  • 【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)

    SKNet(Selective Kernel Network) 是一种用于图像分类和目标检测任务的深度神经网络架构,其核心创新是 引入了选择性的多尺度卷积核(Selective Kernel)以及一种新颖的注意力机制 ,从而在不增加网络复杂性的情况下提升了特征提取的能力。SKNet的设计旨在 解决多尺度信息融合的

    2024年02月13日
    浏览(45)
  • 【深度学习注意力机制系列】—— SCSE注意力机制(附pytorch实现)

    SCSE注意力模块 (来自论文[1803.02579] Concurrent Spatial and Channel Squeeze Excitation in Fully Convolutional Networks (arxiv.org))。其对SE注意力模块进行了改进,提出了 cSE、sSE、scSE 三个模块变体,这些模块可以 增强有意义的特征,抑制无用特征 。今天我们就分别讲解一下这三个注意力模块。

    2024年02月13日
    浏览(46)
  • 【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)

    CBAM(Convolutional Block Attention Module) 是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主要目标是 通过在CNN中引入通道注意力和空间注意力 来提高模型的感知能力,从

    2024年02月13日
    浏览(33)
  • 【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

    ECANet(Efficient Channel Attention Network) 是一种 用于图像处理任务的神经网络架构,它在保持高效性的同时,有效地捕捉图像中的通道间关系,从而提升了特征表示的能力 。ECANet通过引入通道注意力机制,以及在卷积层中嵌入该机制,取得了优越的性能。本文将对ECANet的核心思

    2024年02月13日
    浏览(39)
  • 【深度学习】注意力机制

    注意力机制(Attention Mechanism)是一种在计算机科学和机器学习中常用的技术,可以使模型在处理序列数据时更加准确和有效。在传统的神经网络中,每个神经元的输出只依赖于前一层的所有神经元的输出,而在注意力机制中,每个神经元的输出不仅仅取决于前一层的所有神经

    2024年02月02日
    浏览(34)
  • 深度学习——常见注意力机制

    SENet属于通道注意力机制。2017年提出,是imageNet最后的冠军 SENet采用的方法是对于特征层赋予权值。 重点在于如何赋权 1.将输入信息的所有通道平均池化。 2.平均池化后进行两次全连接,第一次全连接链接的神经元较少,第二次全连接神经元数和通道数一致 3.将Sigmoid的值固定

    2024年02月14日
    浏览(23)
  • 【动手深度学习-笔记】注意力机制(四)自注意力、交叉注意力和位置编码

    紧接上回:【动手深度学习-笔记】注意力机制(三)多头注意力 在注意力机制下,我们将词元序列输入注意力汇聚中,以便同一组词元同时充当查询、键和值。 具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。 像这样的,查询、键和值来自同一组输入的

    2024年01月16日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包