因为某些原因读了关于attention的两篇文章,简单总结下。
论文地址:
1、PAYING MORE ATTENTION TO ATTENTION: IMPROVING THE PERFORMANCE OF CONVOLUTIONAL NEURAL NETWORKS VIA ATTENTION TRANSFER
2、CBAM: Convolutional Block Attention Module
首先attention机制到现在应该已经研究出比较多方法了,这两片文章分别是17年的ICLR和18年的ECCV,比较早了,但方法可能比较经典一些?
读过两篇文章后我的感觉是attention机制其实就是提取feature map中的某些信息,通过重点关注or应用这些信息来更好地完成分类等任务。有些方法看起来比较直观,有些方法比较复杂,提取到的信息也很抽象。
一、PAYING MORE ATTENTION TO ATTENTION: IMPROVING THE PERFORMANCE OF CONVOLUTIONAL NEURAL NETWORKS VIA ATTENTION TRANSFER
文章主要内容为:定义了两种attention map,然后通过在相同的layers用l2范数使得student网络的attention map学习teacher网络的attention map实现attention 的迁移。
第一种:ACTIVATION-BASED ATTENTION TRANSFER
在当前layer,将channels合并成一个,获得一个H×W二维矩阵。而具体的计算方法,作者又给出了几种方案:
Ai是不同channel的feature。第一行是分别将每个channel的特征值相加;第二行是将H×W上的特征值取指数后再沿channel这一维度叠加;第三行是指数运算后沿channel维度取最大值。
这种ACTIVATION-BASED 方法在网络的浅层,中层和深层分别对低梯度的点,易于识别的区域(比如人脸中的鼻子,眼睛等)和整张脸有较高的激活值。当teacher和student都是残差网络时,示意图如下:
三个AT loss位置分别对应浅层,中层和深层。而对于损失函数的定义为:
等号右边第一项是标准的交叉熵,其中Ws是student网络的weight。第二项中β是一个超参数,求和项中的p文中取的2,整体是一个l2范数(也可以取1)。Q是向量化后的attention map,下标S和T分别代表student和teacher,j代表第几对teacher-student attention maps。
第二种:GRADIENT-BASED ATTENTION TRANSFER
分别计算梯度:
定义这种方法的表达式为:
形式同第一种相似,但考虑的是梯度的影响。
二、CBAM: Convolutional Block Attention Module
文章主要内容:提出了CBAM模块,此模块可附加于任何CNN网络并显著提高分类和检测效果,同时增加的计算需求很小可以忽略。
CBAM模块如下图:
对于输入的feature map F(C×H×W),先计算得到Mc(C×1×1),然后将F与Mc按元素相乘得到F’,对F’计算得到Ms(1×H×W),然后将F’与Ms按元素相乘得到F’’,即为CBAM的全过程。比较直观容易理解。
在之前的工作中,研究人员普遍用均值池化来提取目标的有效信息,而作者同时发现最大池化同样会得到另一组有效信息,因此在channel和spatial两部分中都同时用到了两种池化操作。
Channel attention module:
channel attention focuses on ‘what’ is meaningful。
对feature map取最大池化和均值池化,输入到一个共享参数的MLP,该网络只有一个隐藏层。之后将两个池化层的输出按元素相加得到最终的channel attention Mc。
表达式如下:
W0,W1都是MLP的去权重。
Spatial attention module:
spatial attention focuses on ‘where’,which is complementary to the channel attention。
对得到的最大池化和均值池化进行一个标准卷积操作,将两个1×H×W的map转化成一个1×H×W,然后进行激活,最终得到spatial attention。
表达式如下:
在实际应用时,两个attention模块可以平行或先后放置,作者实验表明,先channel 后 spatial 的结构是效果最优的。