注意力机制在通道上的应用 Sequeeze-and Excitation Networks

Sequeeze-and Excitation Networks

注意力机制(Attention Mechanism)最初是应用在NLP上面的,计算机视觉发展到现在,注意力机制也被越来越多地应用在了CV领域。在这篇论文里面,作者把注意力机制应用在了通道层面,目的在于使得不同的特征通道拥有不同的权重大小,这样就能使得计算机能够有选择性地重视或忽视某些特征

通常来说注意力机制的实现是通过一个专门的网络来实现的,很明显这就会对计算增加成本。但是作者说,他所提出的这套方法,可以以最小的额外计算成本获得最大的收益,因为这个网络的模型十分轻量。
该模型所提出的方法总共分为三个主要步骤,Sequeeze,Excitation,Scale
首先,一个特征图X,经过卷积后得到了一个HxWxC的特征图U,U经过Sequence处理之后变成了1x1xC的形状,在经过Excitation处理之后,使得每一个通道获得了不同的权重,最后这个权重矩阵再与原特征图U经过Scale操作得到网络的最终输出
在这里插入图片描述

Sequeeze

该操作对应的就是Figure1中的Fsq操作,输入是一个HxWxC的矩阵,输出是一个1x1xC的矩阵。具体操作如下:
通过全局平均池化,将每个通道的二维特征(HxW)压缩为一个实数。这属于空间维度的一种特征压缩,因为这个实数是根据所有特征值计算出来的,所以在某种程度上具有平均感受野,保持通道数不变,所以通过squeeze操作后变为1x1xC
在这里插入图片描述
上式中的zc就是1x1xC这个矩阵中的第C个通道中的值,这个值其实就是特征图U的第C个通道的所有像素的平均值

Excitation

这个操作就是为每个通道分配权重,我们把经过Sequeeze操作之后生成的那个1x1xC的矩阵称作Z,具体操作如下:
Z矩阵经过一个全连接层,把维度压缩为C/r,经过ReLu激活之后,再接一个全连接层把维度变回C,最后经过sigmoid激活得到输出
在这里插入图片描述
其中δ表示ReLu,σ表示sigmoid
在这里插入图片描述

Scale

作者就是将Excitation得到的每个通道的权重,对应通道乘回原特征图U
在这里插入图片描述
其中uc就是特征图U的第c个通道,sc就是Excitation输出的1x1xC的权重矩阵的第c个通道

代码实现

import torch.nn as nn
class SE_NET(nn.Module):
    def __init__(self,width,height,channel,dimention):
        super(SE_NET, self).__init__()
        self.width = width
        self.height = height
        self.channel = channel
        self.dimention = dimention
        self.avgpooling = nn.AvgPool2d(self.width,stride=1)
        self.layer = nn.Sequential(
            nn.Linear(self.channel, self.dimention),
            nn.ReLU(inplace=True),
            nn.Linear(self.dimention,self.channel),
            nn.Sigmoid()
        )
    def forward(self,x):
        res = self.Squeeze(x)
        res = res.view(1,-1)
        res = self.excitation(res)
        res = self.scale(res,x)
        return res
    def Squeeze(self,x):
        res = self.avgpooling(x)
        return res
    def excitation(self,x):
        res = self.layer(x)
        return res
    def scale(self,x,y):
        res = x*y
        return res

### 改进Mask R-CNN模型的主干网络结构 为了提升Mask R-CNN的表现,可以通过优化其主干网络来实现更高效的特征提取。具体而言: #### 使用更深更强的卷积神经网络架构 通过引入更加复杂的CNN架构,如ResNet-152或Sequeeze-and-Excitation Networks (SENet),能够增强模型捕捉复杂模式的能力。实验表明,当采用ResNet-101-FPN作为骨干时,相较于其他方法,Mask R-CNN展现出卓越的效果[^2]。 #### 集成Feature Pyramid Network (FPN) FPN是一种有效的多尺度特征融合机制,能显著改善目标检测和实例分割任务中的表现。对于不同大小的目标物体,FPN可以在多个层次上提供丰富的语义信息和支持细节描述,从而帮助提高整体精度。研究表明,利用FPN可以使较浅层也具备较强的表达能力,进而促进整个系统的性能提升[^3]。 #### 应用Attention Mechanism 注意力机制允许模型聚焦于输入数据的关键部分,忽略无关紧要的信息。例如,Spatial Attention Module(SAM) 或 Channel-wise Attention(CA), 可以被嵌入到现有的主干中去加强特定区域的重要性评估过程。这类改进有助于更好地处理遮挡情况以及密集排列的对象群组。 ```python import torch.nn as nn class ImprovedBackbone(nn.Module): def __init__(self, backbone='resnet101', use_fpn=True, attention_module=None): super(ImprovedBackbone, self).__init__() # Initialize base network with deeper architecture like ResNet-152 or SENet if backbone == 'resnet152': self.backbone = torchvision.models.resnet152(pretrained=True) elif backbone.startswith('senet'): from senet import se_resnext101_32x4d self.backbone = se_resnext101_32x4d() # Add Feature Pyramid Network support if use_fpn: fpn_layers = [] for i in range(len(self.backbone.layer)): out_channels = ... # Define output channels based on layer index fpn_layers.append( nn.ConvTranspose2d(out_channels * 2**(i+1), out_channels, kernel_size=3, stride=2, padding=1)) self.fpn = nn.Sequential(*fpn_layers) # Optionally add an attention module to enhance feature maps if attention_module is not None: self.attention = eval(f"{attention_module}()") def forward(self, x): features = self.backbone(x) if hasattr(self,'fpn'): enhanced_features = self.fpn(features[-1]) ... if hasattr(self,'attention'): attended_features = self.attention(enhanced_features) return attended_features return features ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IsQtion

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

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

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

打赏作者

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

抵扣说明:

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

余额充值