[pytorch] 试验--用CBAM注意力模块进行语义分割

CBAM是IEEE 2018的一篇文章

Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块。是一种结合了空间(spatial)和通道(channel)的注意力机制模块。相比于senet只关注通道(channel)的注意力机制可以取得更好的效果。

CBAM的结构如下:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第1张图片

通道注意力决定了网络“look what”,因为每个通道所关注的特征是不一样的。空间注意力决定了网络“look where”。

Input Feature F的维度是CxHxW,通道注意力特征Mc的维度是Cx1x1。空间注意力特征Ms的维度是1xHxW。

通道注意力特征的形成如下:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第2张图片

论文作者认为,前人的一些操作表明了用平均池化可以有效地聚集空间信息。而作者认为,最大池化可以更好地获得一些独特物体的特征从而调优注意力模型。通过平均池化和最大池化后的特征会各自通过MLP的两个fc层,得到MLP处理后的平均池化特征和最大池化特征,然后再加到一起,最后通过softmax层,再作为output输出。

公式如下:

\sigma表示softmax操作。

代码如下:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第3张图片

空间注意力特征的形成如下:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第4张图片

输入特征沿着通道的维度方向分别进行最大操作和平均操作,再直接连接在一起,然后再通过卷积操作,达到强调或抑制某些地方的作用。最后通过softmax层得到最终输出。

公式如下:

\sigma表示softmax操作。f^{7\times 7}表示卷积核为7x7的卷积操作。;表示连接。

代码如下:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第5张图片

CBAM注意力模块的应用:

论文中的CBAM模块是嵌入到resnet中的,resnet中的每个block都嵌入了CBAM模块。流程图如下:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第6张图片

公式如下:

用于语义分割:

而怎么看用于语义分割的效果呢?只需要把最后的特征图进行上采样就行了

输入图片:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第7张图片

输出:

[pytorch] 试验--用CBAM注意力模块进行语义分割_第8张图片

可以看出效果其实很不好。

当然也有可能是我代码写得有问题,欢迎讨论。

代码链接:https://github.com/Andy-zhujunwen/pytorch-CBAM-Segmentation-experiment-

论文地址:https://arxiv.org/abs/1807.06521

你可能感兴趣的:(#,试验,#,语义分割,语义/实例/全景分割)