公众号关注 “Python遇见机器学习”
设为“星标”,第一时间知晓最新干货~
![3d8423d23124ed2a562e14a40eb3a17f.png](https://i-blog.csdnimg.cn/blog_migrate/e7cecf7626f6e12e3cd4a98aab346bcc.jpeg)
1. 什么是注意力机制?
注意力机制(Attention Mechanism)是机器学习中的一种数据处理方法,广泛应用在自然语言处理、图像识别及语音识别等各种不同类型的机器学习任务中。通俗来讲:注意力机制就是希望网络能够自动学出来图片或者文字序列中的需要注意的地方。比如人眼在看一幅画的时候,不会将注意力平等地分配给画中的所有像素,而是将更多注意力分配给人们关注的地方。 从实现的角度来讲:注意力机制通过神经网络的操作生成一个掩码mask, mask上的值一个打分,评价当前需要关注的点的评分。注意力机制可以分为:- 通道注意力机制:对通道生成掩码mask,进行打分,代表是senet, Channel Attention Module
- 空间注意力机制:对空间进行掩码的生成,进行打分,代表是Spatial Attention Module
- 混合域注意力机制:同时对通道注意力和空间注意力进行评价打分,代表的有BAM, CBAM
2. CBAM模块的实现
CBAM全称是Convolutional Block Attention Module, 是在**ECCV2018**上发表的注意力机制代表作之一。本人在打比赛的时候遇见过有人使用过该模块取得了第一名的好成绩,证明了其有效性。在该论文中,作者研究了网络架构中的注意力,注意力不仅要告诉我们重点关注哪里,还要提高关注点的表示。目标是通过使用注意机制来增加表现力,关注重要特征并抑制不必要的特征。为了强调空间和通道这两个维度上的有意义特征,作者依次应用 通道和空间注意模块,来分别在通道和空间维度上学习关注什么、在哪里关注。此外,通过了解要强调或抑制的信息也有助于网络内的信息流动。主要网络架构也很简单,一个是通道注意力模块,另一个是空间注意力模块,CBAM就是先后集成了通道注意力模块和空间注意力模块。2.1 通道注意力机制
![fd18d11fffd897a050d809f3486c9bf8.png](https://i-blog.csdnimg.cn/blog_migrate/11ed8a8281eea16081af2a38940afdbb.jpeg)
class ChannelAttention(nn.Module):
def __init__(self, in_planes, rotio=16):
super(ChannelAttention, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.max_pool = nn.AdaptiveMaxPool2d(1)
self.sharedMLP = nn.Sequential(
nn.Conv2d(in_planes, i