原文链接:通道注意力超强改进,轻量模块 ECANet 来了!即插即用,显著提高 CNN 性能|已开源
本文原创首发自极市平台公众号,请授权后转载。
极市导读:今天给大家推荐一篇CVPR2020上对通道注意力进行改进的文章—ECANet,ECANet主要对SENet模块进行了一些改进,提出了一种不降维的局部跨信道交互策略(ECA模块)和自适应选择一维卷积核大小的方法,从而实现了性能上的提优。最近已经有很多文章在通道和空间注意力上做改进并取得了性能提升。例如SKNet,SANet,ResNeSt等等,不得不说,注意力机制真的香!
论文链接:https://arxiv.org/abs/1910.03151
代码地址:https://github.com/BangguWu/ECANet
最近,通道注意力机制被证明在改善深度卷积神经网络(CNNs)的性能方面具有巨大的潜力。然而,现有的方法大多致力于开发更复杂的注意力模块,以实现更好的性能,这不可避免地增加了模型的复杂性。为了克服性能和复杂性之间的矛盾,本文提出了一种有效的通道关注(ECA)模块,该模块只增加了少量的参数,却能获得明显的性能增益。通过对SENet中通道注意模块的分析,作者的经验表明避免降维对于学习通道注意力非常重要,适当的跨信道交互可以在显著降低模型复杂度的同时保持性能。因此,足者提出了一种不降维的局部跨信道交互策略,该策略可以通过一维卷积有效地实现。进一步,作者又提出了一种自适应选择一维卷积核大小的方法,以确定局部跨信道交互的覆盖率。 实验证明,我们提出的ECA模块是高效的。
本文模块相对于ResNet50的主干的参数和计算分别是80比24.37M和4.7e-4 GFLOPs比3.86 GFLOPs,并且性能在Top-1精度方面提升超过2%。本文以ResNets和MobileNetV2为骨干,利用提出的ECA模块在图像分类、目标检测和实例分割方面进行了广泛的评估。实验结果表明,该模块在性能上优于其他模块,且具有较高的效率。
ECA模块与其他注意力模块的比较:这里以ResNets作为骨干模型来进行分类精度,网络参数和FLOPs的比较,以圆来表示。从图1中,我们可以发现,我们的ECA网络模块获得了更高的精度,同时有较少的模型复杂性。
深度卷积神经网络(CNNs)在计算机视觉领域得到了广泛的应用,在图像分类、目标检测和语义分割等领域取得了很大的进展。从开创性的AlexNet开始,为了进一步提高深度cnn的性能,不断推出新的CNN模型。近年来,将通道注意力引入卷积块引起了人们的广泛关注,在性能改进方面显示出巨大潜力。其中代表性的方法是SENet,它可以学习每个卷积块的通道注意力,对各种深度CNN架构带来明显的性能增益。SENet主要是 squeeze 和 excitation 两大操作,最近,一些研究通过捕获更复杂的通道依赖或结合额外的空间注意来改进SE块。这些方法虽然取得了较高的精度,但往往带来较高的模型复杂度和较大的计算负担。与前面提到的以更高的模型复杂度为代价来获得更好性能的方法不同,本文转而关注一个问题:能否以更有效的方式学习有效的通道注意力?
为了回答这个问题,我们首先回顾一下SENet中的通道注意模块。具体来说,在给定输入特征的情况下,SE块首先对每个通道单独使用全局平均池化,然后使用两个具有非线性的完全连接(FC)层,然后使用一个Sigmoid函数来生成通道权值。两个FC层的设计是为了捕捉非线性的跨通道交互,其中包括降维来控制模型的复杂性。虽然该策略在后续的通道注意模块中得到了广泛的应用,但我们的实验研究表明,降维对通道注意预测带来了副作用,捕获所有通道之间的依赖是低效的,也是不必要的。
因此,本文提出了一种针对深度cnn的高效通道注意(ECA)模块,该模块避免了降维,有效捕获了跨通道交互的信息。如下图2所示:
在不降低维数的通道级全局平均池化之后,我们的ECA通过考虑每个通道及其k个邻居来捕获局部跨通道交互信息。实践证明,该方法保证了模型效率和计算效果。需要注意的是,我们的ECA可以通过大小为k的快速1D卷积来有效实现,其中卷积核大小为k代表了局部跨信道交互的覆盖率,即,该通道附近有多少邻居参与了这个信道的注意力预测,为了避免通过交叉验证对k进行手动调优,我们提出了一种方法来自适应地确定k,其中交互的覆盖率(即卷积核大小 k)与通道维数成正比。
与主干模型相比,带有ECA模块的深度CNNs(称为ECA- net)引入了很少的额外参数和几乎可以忽略的计算,同时带来了性能增益。例如,对于具有24.37M参数和3.86 GFLOPs的ResNet-50来说, ECA-Net50的附加参数和计算分别为80和4.7e-4 GFLOPs;与此同时,ECA-Net50在Top 1 Accuracy方面比ResNet-50高出2.28%。表1 总结了现有的注意模块,包括是否降低通道维度(DR)、跨通道交互和轻量级模型。从表中可以看出,我们的ECA模块通过避免降低通道维度来学习有效的通道注意力,同时以极其轻量级的方式获取跨通道的交互信息。
我们对SE模块进行了剖析,并分别证明了避免降维和适当的跨通道交互对于学习高性能和高效率的通道注意力是重要的。
在以上分析的基础上,我们提出了一种高效通道注意模块(ECA),在cnn网络上提出了一种极轻量的通道注意力模块,该模块增加的模型复杂度小,提升效果显著。
我们在ImageNet-1K和MS COCO上的实验结果表明,我们提出的方法具有比目前最先进的CNN模型更低的模型复杂度,与此同时,我们的方法却取得了非常有竞争力的结果。
下面我们主要来介绍一下ECA的模块,首先由公式2:
我们知道通道与其权值之间的对应关系是间接的。为了验证它的效果,我们比较了原始SE块和它的三个变体(即 SE-Var1, SE-Var2和SE-Var3),所有这些都没有进行降维操作。具体效果如下表2所示:
无参数的SE-Var1仍然优于原始网络,说明channel attention具有提高深度CNNs性能的能力。而SE- Var2通过独立学习各通道的权值,在参数较少的情况下略优于SE模块。这说明通道与其权值需要直接对应,从而通过避免降维可以比考虑非线性通道之间的相关性更为重要。此外,SE模块采用单个FC层的SE- var3性能优于降维的两层FC层。以上结果清楚地表明,避免降维有助于学习有效的通道注意。因此,我们提出了不降低通道维数来进行跨通道信息交互的ECA模块。
在本文中,我们提出了一种新的捕捉局部跨通道信息交互的方法(ECA模块),旨在保证计算性能和模型复杂度。我们用 W_{k}来表示学习到的通道注意力:
W_{k}涉及K*C个参数,并且W_{K}避免了不同group的完全独立,正如在上表2中所示,我们提出的这种方法叫做ECA-NS,他比SE-GC性能要更优。对于权重y_{i},我们只考虑y_{i}和它的k个邻居之间的信息交互,计算公式如下:
为了进一步提高性能,我们还可以让所有的通道共享权重信息,即:
根据上面的分析,我们提出一种新的方法,该方法可以通过卷积核大小为K的一维卷积来实现通道之间的信息交互:
这里,C1D代表一维卷积,这种方法我们称之为ECA模块,它只涉及K个参数信息,当k=3时,我们的ECA模块可以实现与SE-Var3同样的效果但却有更低的模型复杂度。因此,这种捕捉跨通道信息交互的方法保证了性能结果和模型效率。
由于我们的ECA模块旨在适当捕获局部跨道信息交互,因此需要确定通道交互信息的大致范围(即1D卷积的卷积核大小k)。虽然,我们可以针对各种CNN架构中具有不同通道数的卷积块进行手动优化设置信息交互的最佳范围。但是,通过手动进行交叉验证调整将花费大量计算资源。而且分组卷积已成功地用于改善CNN架构,在固定group数量的情况下,高维(低维)通道与长距离(短距离)卷积成正比。同理,跨通道信息交互作用的覆盖范围(即一维卷积的内核大小k)与通道维数C应该也是成正比的。换句话说,在k和C之间可能存在映射φ:
最简单的映射方式就是线性映射,但由于线性函数对于某些相关特征的局限性,再由于通道维数通常是2的指数倍,所以,这里我们采用以2为底的指数函数来表示非线性映射关系:
所以,给定通道维数C,那么卷积核大小(k)便可根据下面公式计算得到:
ECA模块的代码实现:
import torch
from torch import nn
from torch.nn.parameter import Parameter
class eca_layer(nn.Module):
"""Constructs a ECA module.
Args:
channel: Number of channels of the input feature map
k_size: Adaptive selection of kernel size
"""
def __init__(self, channel, k_size=3):
super(eca_layer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
# x: input features with shape [b, c, h, w]
b, c, h, w = x.size()
# feature descriptor on the global spatial information
y = self.avg_pool(x)
# Two different branches of ECA module
y = self.conv(y.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
# Multi-scale information fusion
y = self.sigmoid(y)
return x * y.expand_as(x)
我们分别在ImageNet和MS COCO数据集上,对我们提出的ECA模块在图像分类、目标检测和实例分割方面进行了实验评估,具体来说,我们首先评估卷积核大小对我们ECA模块的影响,并与ImageNet上最先进的模型进行了比较。然后,我们将我们的网络模块分别结合Faster R-CNN、Mask R-CNN和RetinaNet验证了在MS COCO数据集上的有效性。
表3比较了不同的注意力方法在ImageNet数据集上的网络参数(param),浮点运算每秒(FLOPs),训练或推理速度(帧每秒,FPS), Top-1/Top-5的准确性(%)。
下面,我们主要讨论一下卷积核大小对ECA模块的影响。在这部分实验中,我们评估了它对ECA模块的影响,并验证了我们的方法在自适应选择内核大小方面的有效性。为此,我们采用ResNet-50和ResNet-101作为骨干模型,将k分别设为3 - 9,用ECA模块进行实验。结果如图4所示,从中我们可以观察到以下情况。
首先,当k在所有卷积块中都固定时,对于ResNet-50和ResNet-101, ECA模块分别在k = 9和k = 5处取得最佳结果。由于ResNet-101有更多的中间层来支配ResNet-101的性能,因此它可能更喜欢较小的卷积核。此外,这些结果表明,不同深度cnn具有不同的最优k值,k值对ECA-Net性能有明显影响。此外,ResNet-101的准确率波动(约0.5%)要大于ResNet-50的准确率波动(约0.15%),我们推测原因是更深层次的网络比更浅层次的网络对固定的卷积核大小更敏感。此外,由Eq.(12)自适应确定的卷积核大小通常优于固定的卷积核大小,但可以避免通过交叉验证手动调整参数k。以上结果证明了我们的自适应选择卷积核大小是可以取得较好且稳定的结果。最后,不同k个数的ECA模块始终优于SE block,验证了避免降维和局部跨通道交互对学习通道注意力是有积极作用的。
我们将ECA-Net50和ECA-Net101与其他最先进的CNN模型进行比较,包括
ResNet-200, Inception-v3, ResNeXt,DenseNet等等。这些CNN模型有更深更广的架构,它们的结果都是复制自原始论文。如上表4所示,ECA-Net101的性能优于ResNet-200,这表明我们的ECA-Net可以用更少的计算成本提高深度CNNs的性能。同时,我们的ECA-Net101与ResNeXt-101相比具有更强的竞争力,而ResNeXt-101使用了更多的卷积滤波器和昂贵的群卷积。此外,ECA-Net50可与DenseNet-264 (k=32)、DenseNet-161 (k=48)和 Inception-v3相媲美,但模型复杂度较低。以上结果表明,我们的ECA-Net在性能上优于最先进的CNNs,同时具有更低的模型复杂度。我们的ECA也有很大的潜力来进一步提高CNN模型的性能。
我们使用Faster R-CNN[26]、Mask R-CNN[10]和RetinaNet[22]在目标检测任务上评估我们的ECA-Net。我们主要将ECA-Net与ResNet和SENet进行比较。所有的CNN模型都是在ImageNet上预先训练好的,然后通过在MS COCO数据集上进行微调。具体实验效果如下所示:
在实例分割上的效果展示:
本文着重研究了低模型复杂度的深度网络的高效通道注意力问题。为此,我们提出了一种高效的通道注意(ECA)模块,该模块通过快速的一维卷积生成通道注意力,其卷积核大小可由通道维数的非线性映射自适应确定。实验结果表明,我们的ECA是一个非常轻量级的即插即用模块,可以提高各种深度CNN架构的性能,包括广泛使用的ResNets和轻量级的MobileNetV2。此外,我们的ECA-Net在目标检测和实例分割任务中表现出良好的泛化能力。在未来,我们将把ECA模块应用到更多CNN架构中(如ResNeXt和Inception),并进一步研究ECA与空间注意模块的结合。
◎作者档案
Murufeng,一个紧跟前沿、乐于分享最新技术干货的DLer!
个人公众号:深度学习技术前沿
欢迎大家联系极市小编(微信ID:fengcall19)加入极市原创作者行列
关注极市平台公众号(ID:extrememart),获取计算机视觉前沿资讯/技术干货/招聘面经等