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

CBAM是IEEE 2018的一篇文章

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

CBAM的结构如下:

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

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

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

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

公式如下:

\sigma表示softmax操作。

代码如下:

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

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

公式如下:

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

代码如下:

CBAM注意力模块的应用:

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

公式如下:

用于语义分割:

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

输入图片:

输出:

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

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

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

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

发布了270 篇原创文章 · 获赞 408 · 访问量 76万+

猜你喜欢

转载自blog.csdn.net/u014453898/article/details/100879076
今日推荐