参考资料:
论文:
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
博客:
[ 注意力机制 ] 经典网络模型3——ECANet 详解与复现
通道注意力超强改进,轻量模块ECANet来了!即插即用,显著提高CNN性能|已开源
一、前言
深度卷积神经网络(CNN)在计算机视觉领域得到了广泛的应用,在 图像分类
、目标检测
和 语义分割
等方面取得了很大的进展 。从具有开创性的 AlexNet
提出以来,研究人员不断的探索提升 CNN 的性能 。
近年来,SENet
将信息通道注意力引入卷积块引起了人们的极大兴趣,显示出极大的性能改进潜力,后来研究通过捕获更复杂的 通道依赖性
或 结合额外的 空间注意
来改进SE块(CBAM
) ;但随着模型 精度 越高,复杂度 越高,计算量 也随之增大 ,计算成本 高昂 。
二、网络结构
研究表明,SENet采用的 降维操作
会对通道注意力的预测产生 负面影响,且获取依赖关系效率低且不必要 ;
基于此,提出了一种针对CNN的高效通道注意力( ECA
)模块,避免了降维,有效地实现了 跨通道交互
。
特点:
- (1)通过大小为 k 的快速一维卷积实现,其中核大小k表示
局部跨通道交互
的覆盖范围,即有多少领域参与了一个通道的注意预测 ; - (2)为了避免通过交叉验证手动调整 k,开发了一种
自适应方法
确定 k,其中跨通道交互的覆盖范围 (即核大小k) 与通道维度成比例 ;
ECA模块使用不降维的GAP聚合卷积特征后,首先自适应确定核大小k,然后进行一维卷积,再进行 Sigmoid 函数学习 channel attention ;
三、论文贡献
- (1)分析了SENet,并通过实证证明了
避免降维
和适当的跨通道交互
对学习高效的通道注意力的重要; - (2)开发了一种用于CNN的
极轻量级通道注意力模块
,该模块对模型复杂度的增加很小,但改进明显 ; - (3)在ImageNet-1K和MS COCO上的实验结果表明,ECANet 在获得极具竞争力的性能的同时,具有
较低的模型复杂度
;
四、具体应用
在Residual Module中的应用:
五、ECA-Net 应用对比
最后,分别使用 ResNet 、ResNet+SENet 、ResNet+CBAM 、 ResNet+ECANet 进行实验得到 模型参数量-准确率 结果 :
实验表明 ECANet
性能超越了 SENet 和 CBAM。
六、论文复现
参考:
[ 注意力机制 ] 经典网络模型3——ECANet 详解与复现
模块使用起来非常简单,直接嵌入进去即可,这里给出 EfficientChannelAttention
的代码实现:
class EfficientChannelAttention(nn.Module): # Efficient Channel Attention module
def __init__(self, c, b=1, gamma=2):
super(EfficientChannelAttention, self).__init__()
t = int(abs((math.log(c, 2) + b) / gamma))
k = t if t % 2 else t + 1
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.conv1 = nn.Conv1d(1, 1, kernel_size=k, padding=int(k/2), bias=False)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.avg_pool(x)
x = self.conv1(x.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
out = self.sigmoid(x)
return out