网站开发前后端分离,在线书店网站怎么做,中咨工程咨询有限公司,网站如何连接微信支付宝吗简介
论文原址#xff1a;1807.06521.pdf (arxiv.org)
CBAM#xff08;Convolutional Block Attention Module#xff09;是一种卷积神经网络模块#xff0c;旨在通过引入注意力机制来提升网络的表示能力。CBAM包含两个顺序子模块#xff1a;通道注意力模块和空间注意力…简介
论文原址1807.06521.pdf (arxiv.org)
CBAMConvolutional Block Attention Module是一种卷积神经网络模块旨在通过引入注意力机制来提升网络的表示能力。CBAM包含两个顺序子模块通道注意力模块和空间注意力模块。 通过在深度网络的每个卷积块中自适应地优化中间特征图CBAM通过强调通道和空间维度上的有意义特征实现了对关键信息的关注和不必要信息的抑制。研究表明CBAM在ImageNet-1K数据集上能够显著提高各种基线网络的准确性通过grad-CAM可视化验证CBAM增强的网络能够更准确地关注目标对象。在MS COCO和VOC 2007数据集上的目标检测任务中CBAM也展现出显著的性能改进而由于CBAM精心设计为轻量级模块其在大多数情况下几乎没有参数和计算开销。CBAM注意力模块可广泛应用于提升卷积神经网络的表示能力。
Channel attention moduleCAM 通过平均池化和最大池化操作整合输入特征图的空间信息生成两个不同的空间上下文描述符得到两个 1×1×C 的特征图分别表示为 F_c_avg 和 F_c_max。将 F_c_avg 和 F_c_max 分别送入一个共享的多层感知机MLP该 MLP 具有一个隐藏层其中第一层神经元个数为 C/rr 为减少率激活函数为 ReLU第二层神经元个数为 C。这两层神经网络是共享的即它们的权重相同。将两个 MLP 的输出特征进行逐元素相加并通过 sigmoid 激活函数生成通道注意力图 Mc。 这是对池化操作的使用进行实验比较的结果。研究者发现采用平均池化和最大池化并行的方式能够取得更好的效果。可能是因为采用并行连接方式相比于单一的池化能够更有效地保留有用的信息进而提升模型性能。
Spatial attention moduleSAM 首先将 Channel Attention 模块输出的特征图作为 Spatial Attention 模块的输入特征图。接着对输入特征图进行基于通道的全局最大池化和全局平均池化操作得到两个 H×W×1 的特征图。然后将这两个特征图在通道维度上进行拼接经过一个 7×7 的卷积操作将通道数降维为 1即得到 H×W×1 的特征图。最后经过 sigmoid 操作生成空间注意力特征即 Ms。将该特征与输入特征图进行乘法操作得到最终生成的特征。这一过程有助于模型关注输入特征图中的重要区域从而增强表示能力。
CBAM的pytorch实现 Original paper addresshttps: https://arxiv.org/pdf/1807.06521.pdf
Time: 2024-02-28import torch
from torch import nnclass ChannelAttention(nn.Module):def __init__(self, in_planes, reduction16):super(ChannelAttention, self).__init__()self.avg_pool nn.AdaptiveAvgPool2d(1)self.max_pool nn.AdaptiveMaxPool2d(1)# shared MLPself.mlp nn.Sequential(nn.Conv2d(in_planes, in_planes // reduction, 1, biasFalse),nn.ReLU(inplaceTrue),nn.Conv2d(in_planes // reduction, in_planes, 1, biasFalse))self.sigmoid nn.Sigmoid()def forward(self, x):avg_out self.mlp(self.avg_pool(x))max_out self.mlp(self.max_pool(x))out avg_out max_outreturn self.sigmoid(out)class SpatialAttention(nn.Module):def __init__(self, kernel_size7, padding3):super(SpatialAttention, self).__init__()self.conv1 nn.Conv2d(2, 1, kernel_size, paddingpadding, biasFalse)self.sigmoid nn.Sigmoid()def forward(self, x):avg_out torch.mean(x, dim1, keepdimTrue)max_out, _ torch.max(x, dim1, keepdimTrue)x torch.cat([avg_out, max_out], dim1)x self.conv1(x)return self.sigmoid(x)class CBAM(nn.Module):def __init__(self, in_planes, reduction16, kernel_size7):super(CBAM, self).__init__()self.ca ChannelAttention(in_planes, reduction)self.sa SpatialAttention(kernel_size)def forward(self, x):out x * self.ca(x)result out * self.sa(out)return resultif __name__ __main__:block CBAM(16)input torch.rand(1, 16, 8, 8)output block(input)print(output.shape)
参考文章
CBAM——即插即用的注意力模块附代码_cbam模块-CSDN博客
[ 注意力机制 ] 经典网络模型2——CBAM 详解与复现_cbam代码复现-CSDN博客