赞
踩
SCSE注意力模块(来自论文[1803.02579] Concurrent Spatial and Channel Squeeze & Excitation in Fully Convolutional Networks (arxiv.org))。其对SE注意力模块进行了改进,提出了cSE、sSE、scSE三个模块变体,这些模块可以增强有意义的特征,抑制无用特征。今天我们就分别讲解一下这三个注意力模块。
cSE模块引入了通道注意力机制,可有效的对通道维度的特征信息进行整合增强,这一点与SE等传统通道注意力机制近似,其最大不同的是其对得到的注意力权重进行了降维再升维的操作,类似与resnet中的瓶颈结构以及Fast RCNN目标检测网络最后的全连接加速层,这种操作方式有些奇异值分解的意思,在深度学习模型中十分常见,可有效的整合通道信息,并且简化模块复杂度,减小模型计算量,提升计算速度。
实现机制:
代码实现:
class CSE(nn.Module):
def __init__(self, in_channels, reduction=16):
super(CSE, self).__init__()
self.cSE = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(in_channels, in_channels // reduction, 1),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels // reduction, in_channels, 1),
nn.Sigmoid(),
)
def forward(self, x):
return x * self.cSE(x)
sSE模块在特征图的空间维度展开信息增强整合,同通道维度一样,其也是通过先提取权重信息,再将权重信息同原始特征图相乘得到注意力增强效果,不过在提取权重信息时是在空间维度展开,不再是使用全局平均池化层,而是使用输出通道为1,卷积核大小为1×1 的卷积层,进行信息整合。
这里我们顺便简介一下1×1卷积层的作用:
① 改变通道数 (即升维降维)
② 信息整合(可实现跨通道的信息交互)
③ 增加非线性(基于奇异值分解,结合非线性激活函数,加深模型)
实现机制:
代码实现:
class SSE(nn.Module):
def __init__(self, in_channels):
super(SSE, self).__init__()
self.sSE = nn.Sequential(nn.Conv2d(in_channels, 1, 1), nn.Sigmoid())
def forward(self, x):
return x * self.sSE(x)
scSE模块是sSE模块和cSE模块的综合体,即同时对空间维度和通道维度进行信息整合增强,将两者的特征结果沿着通道维度进行相加(结果和原始特征图维度相同)。
实现机制:
代码实现:
class SCSE(nn.Module):
def __init__(self, in_channels, reduction=16):
super(SCSE, self).__init__()
self.cSE = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(in_channels, in_channels // reduction, 1),
nn.ReLU(inplace=True),
nn.Conv2d(in_channels // reduction, in_channels, 1),
nn.Sigmoid(),
)
self.sSE = nn.Sequential(nn.Conv2d(in_channels, 1, 1), nn.Sigmoid())
def forward(self, x):
return x * self.cSE(x) + x * self.sSE(x)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。