【CBAM||目标识别||注意力机制||gated卷积】Convolutional Block Attention Module

CBMA:卷积注意力机制模块- 结合了空间(spatial)和通道(channel)的注意力机制模块。

给定一个中间特征图,CBAM模块会沿着两个独立的维度(通道和空间)以此推断注意力图,然后将注意力与输入特征图相乘以进行自适应特征优化。由于CBAM是轻量级的通用模块,因此可以忽略的该模块的开销而将其无缝集成到任何CNN架构中,并且可以与基础CNN一起进行端到端训练。

1.整体结构:

卷积层输出的结果,会先通过一个通道注意力模块,得到加权结果之后,会再经过一个空间注意力模块,最终进行加权得到结果。

2.通道注意力模块:

通道注意力图主要是由通道之间的关系得到,过去人们常用平均池化来聚合空间信息,但论文认为最大池化或许能捕获到另外一些重要的特征,所以论文同时使用了平均池化与最大池化。

输入的特征图

  • 分别经过基于width和height的global max pooling 和global average pooling;
  • 分别经过MLP;
  • 将MLP输出的特征进行基于element-wise的add操作;
  • 经过sigmoid激活操作,生成最终的channel attention featuremap;
  • 将该channel attention featuremap和input featuremap做element wise乘法操作;
  • 生成Spatial attention模块需要的输入特征。

通道注意力机制(Channel Attention Module)是将特征图在空间维度上进行压缩,得到一个一维矢量后再进行操作。

在空间维度上进行压缩时,不仅考虑到了平均值池化(Average Pooling)还考虑了最大值池化(Max Pooling)。平均池化和最大池化可用来聚合特征映射的空间信息,送到一个共享网络,压缩输入特征图的空间维数,逐元素求和合并,以产生通道注意力图。

单就一张图来说,通道注意力,关注的是这张图上哪些内容是有重要作用的。

  • 平均值池化对特征图上的每一个像素点都有反馈,
  • 最大值池化在进行梯度反向传播计算时,只有特征图中响应最大的地方有梯度的反馈。 

3.空间注意力模块:

设问:通道注意力关注的是什么,而空间注意力则关注的是什么?二者可以相互补充?

将Channel attention模块输出的特征图作为本模块的输入特征图

  • 首先做一个基于channel的global max pooling 和global average pooling;
  • 然后将这2个结果基于channel 做concat操作;
  • 然后经过一个卷积操作,降维为1个channel;
  • 再经过sigmoid生成spatial attention feature
  • 最后将该feature和该模块的输入feature做乘法;
  • 得到最终生成的特征。

空间注意力机制(Spatial Attention Module)是对通道进行压缩,在通道维度分别进行了平均值池化和最大值池化。

  • 最大池化的操作就是在通道上提取最大值,提取的次数是高乘以宽;
  • 平均的操作就是在通道上提取平均值,提取的次数也是是高乘以宽;

接着将前面所提取到的特征图(通道数都为1)合并得到一个2通道的特征图。

 

 4.注意力注意到了什么?【可视化】

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CBMA(Content-Based Multi-Attention)是一种用于图像分类任务的深度学习模型,而DenseNet是一种密集连接的卷积神经网络架构。下面是对CBMA和DenseNet的介绍: CBMA是一种基于内容的多注意力机制,它通过在不同层次上对图像的不同区域进行注意力加权,从而提取更具有区分性的特征。CBMA模型通过引入多个注意力模块,每个模块都会对图像的不同区域进行注意力加权,然后将加权后的特征进行融合,最终得到更具有区分性的特征表示。CBMA模型在图像分类任务中取得了较好的性能。 DenseNet是一种密集连接的卷积神经网络架构,它通过在每个层之间建立密集的连接,使得每个层都可以直接访问前面所有层的特征图。这种密集连接的设计可以有效地减轻梯度消失问题,并促进特征的重用。DenseNet的核心思想是密集连接块(Dense Block),每个密集连接块由多个卷积层组成,其中每个卷积层的输入都是前面所有卷积层的输出。通过这种方式,DenseNet可以更好地利用特征的信息,提高模型的性能。 下面是一个使用CBMA和DenseNet进行图像分类的示例代码: ```python # 导入所需的库和模块 import torch import torch.nn as nn import torchvision.models as models # 定义CBMA模型 class CBMA(nn.Module): def __init__(self): super(CBMA, self).__init__() # 定义注意力模块 self.attention1 = AttentionModule() self.attention2 = AttentionModule() # 其他模块定义... def forward(self, x): # 注意力加权 x1 = self.attention1(x) x2 = self.attention2(x) # 特征融合 out = torch.cat((x1, x2), dim=1) # 其他操作... return out # 定义DenseNet模型 class DenseNet(nn.Module): def __init__(self): super(DenseNet, self).__init__() # 定义密集连接块 self.denseblock1 = DenseBlock() self.denseblock2 = DenseBlock() # 其他模块定义... def forward(self, x): # 密集连接 x1 = self.denseblock1(x) x2 = self.denseblock2(x1) # 其他操作... return x2 # 创建CBMA模型实例 cbma_model = CBMA() # 创建DenseNet模型实例 densenet_model = DenseNet() # 加载图像数据 image = torch.randn(1, 3, 224, 224) # 使用CBMA模型进行图像分类 cbma_output = cbma_model(image) # 使用DenseNet模型进行图像分类 densenet_output = densenet_model(image) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MengYa_DreamZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值