论文题名:《ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks》
arxiv: https://arxiv.org/abs/1910.03151
github: https://github.com/BangguWu/ECANet
自从SENet首次提出一种有效的通道注意力学习机制,并取得了良好的效果以来,关于注意力机制的文章可谓遍地开花,同时这种方法也被证明是提高深度卷积神经网络(Convolution Neural Network,CNN)潜在的一种手段。
本文ECA-Net通过剖析SE模块,分别证明了避免降维和适当的跨通道交互对于学习高性能和高效率的通道注意力是重要的,并在此基础上提出了一种极轻量的通道注意力模块,该模块增加的模型复杂度小,提升效果显著。
首先我们先来看看SE模块的组成,如下图1所示,SE模块主要由全局平均池化层(Golbal Average Pooling,GAP)、全连接层(Fully Connected,FC)和Sigmoid函数组成。其中2个FC层的作用是为了捕捉非线性跨通道交互信息(Relu层算在FC层里面),并且第一层FC用来降维以控制模型的复杂性。而本文的改进点就在FC层这里。
图1 标准SE模块组成本文主要从SE模块中维度缩减和跨通道信息交互这两方面入手,作者认为前者对通道注意力机制的预测带来了副作用,它对捕获所有通道的依赖关系是低效并且是不必要的,而后者作者认为对CNN网络的性能的提升起了非常大的作用。ECA模块的具体结构和它的Pytorch代码如下图2所示。
图2 ECA模块的具体结构和它的Pytorch代码ECA模块的思想是非常简单的,去除了原来SE模块中的FC层,直接在GAP之后的特征上通过一个可以权重共享的1D卷积进行学习,其中1D卷积涉及到超参k,就是卷积核尺寸,它代表了局部跨通道交互的覆盖率。本人一开始在看ECA模块的结构图时是有些不解的,特别是看到一开始的5条连线对应后边的第3个神经元,在想为啥不是对应第1个神经元?这张结构图是我在理解ECA思想后所修改的,主要是没有仔细看旁边的代码,这里边涉及到padding问题,所以红框才是k=5(其中红框里的2个元素来自int(5/2))是GAP特征实际的样子,不然就说不通了。作者的这个使用1D卷积代替FC层的方法,也是受到了分组卷积思想的启发,如下图3所示。
图3 特征矩阵1D卷积最初的特征矩阵如上图3所示,可以看到1D卷积的权重之间是交错的,即是相互跨通道的,同时又是一组一组存在的,一组中权重的多少取决于卷积核k的大小。作者为了进一步提升网络性能,使用了卷积的共享权重的方法,即每一组的权重完全一样,这就极大地减少了参数量,从原来地kC(其中C为通道数)缩减到k。
正如之前提到的1D卷积核k是一个超惨,对于不同数量地通道数C应有不同的大小变化才行,所以本文作者进一步提出了一种自适应选择1D卷积核大小地方法。作者认为k和C之间有一种映射:,(是2的r*k-b次方,这个公式编辑器有问题),其中是2的次方考虑到的是通道数量的设计一般都是以2的次方设计的,这样对本文模块的k的计算就有好一些。并且本文作者r和b分别取2和1,这是实验结果。最后通过下面的公式就能对不同的通道数量自适应选择卷积核大小了。
图4 自适应计算k总体来说本文的切入点非常的好,基本一针见血,就追着通道缩减和跨通道交互不放,然后提出自己的解决办法。这篇文章的方法在编程方面也是非常容易实现的,这对于我以后做人脸识别方面的实验提供了非常大的帮助。同时通过这篇文章,我找到了诸多关于注意力机制方面的相关文章,接下去可以在这方面探索一番了!!!!
网友评论