深度学习论文: BAM: Bottleneck Attention Module及其PyTorch实现
发布时间
阅读量:
阅读量
BAM: 品质注意力机制(Bottleneck Attention Module)
PDF: https://arxiv.org/pdf/1807.06514.pdf
PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks
PyTorch: https://github.com/shanglianlm0525/CvPytorch
1 BAM

PyTorch代码:
class ChannelAttention(nn.Module):
def __init__(self, channel, reduction=16):
super(ChannelAttention, self).__init__()
mid_channel = channel // reduction
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.shared_MLP = nn.Sequential(
nn.Linear(in_features=channel, out_features=mid_channel),
nn.ReLU(inplace=True),
nn.Linear(in_features=mid_channel, out_features=channel)
)
def forward(self, x):
avg = self.avg_pool(x).view(x.size(0), -1)
out = self.shared_MLP(avg).unsqueeze(2).unsqueeze(3).expand_as(x)
return out
class SpatialAttention(nn.Module):
def __init__(self, channel, reduction=16, dilation_conv_num=2, dilation_rate=4):
super(SpatialAttention, self).__init__()
mid_channel = channel // reduction
self.reduce_conv = nn.Sequential(
nn.Conv2d(channel, mid_channel, kernel_size=1),
nn.BatchNorm2d(mid_channel),
nn.ReLU(inplace=True)
)
dilation_convs_list = []
for i in range(dilation_conv_num):
dilation_convs_list.append(nn.Conv2d(mid_channel, mid_channel, kernel_size=3, padding=dilation_rate, dilation=dilation_rate))
dilation_convs_list.append(nn.BatchNorm2d(mid_channel))
dilation_convs_list.append(nn.ReLU(inplace=True))
self.dilation_convs = nn.Sequential(*dilation_convs_list)
self.final_conv = nn.Conv2d(mid_channel, 1, kernel_size=1)
def forward(self, x):
y = self.reduce_conv(x)
x = self.dilation_convs(y)
out = self.final_conv(y).expand_as(x)
return out
class BAM(nn.Module):
"""
BAM: Bottleneck Attention Module
https://arxiv.org/pdf/1807.06514.pdf
"""
def __init__(self, channel):
super(BAM, self).__init__()
self.channel_attention = ChannelAttention(channel)
self.spatial_attention = SpatialAttention(channel)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
att = 1 + self.sigmoid(self.channel_attention(x) * self.spatial_attention(x))
return att * x
代码解读
2 Integrated
作者成功地将BAM整合到Resnet网络的各个阶段之间。值得注意的是,在引入多层BAM后,我们可以通过可视化手段清晰地观察到这些层级化的注意力机制的确立情况。具体而言,在每个阶段之间,BAM成功地去除了那些与背景语义相关的低级特征,并逐步聚焦于更为复杂的高级语义信息以及明确的目标定位。

全部评论 (0)
还没有任何评论哟~
