精华内容
下载资源
问答
  • 超强通道注意力模块ECANet

    千次阅读 2021-01-24 11:19:13
    CVPR2020论文阅读——超强通道注意力模块ECANet!论文地址:https://arxiv.org/abs/1910.03151 摘要 最近,通道注意机制已被证明在改善深度卷积神经网络(CNN)的性能方面具有巨大潜力。然而,大多数现有方法...

    CVPR2020论文阅读——超强通道注意力模块ECANet!论文地址:https://arxiv.org/abs/1910.03151

     

    摘要

    最近,通道注意机制已被证明在改善深度卷积神经网络(CNN)的性能方面具有巨大潜力。然而,大多数现有方法致力于开发更复杂的注意模块以实现更好的性能,这不可避免地会增加模型的复杂性。 为了克服性能和复杂性折衷之间的矛盾,本文提出了一种有效的信道注意(ECA)模块,该模块仅包含少量参数,同时带来明显的性能提升。 通过剖析SENet中的通道注意模块,我们从经验上表明避免降维对于学习通道注意很重要,并且适当的跨通道交互可以在保持性能的同时显着降低模型的复杂性。因此,我们提出了一种无需降维的局部跨通道交互策略,该策略可以通过一维卷积有效地实现。 此外,我们提出了一种方法来自适应选择一维卷积的内核大小,确定局部跨通道交互的覆盖范围。提出的ECA模块既有效又有效,例如,针对ResNet50主干的模块参数和计算分别为80 vs. 24.37M4.7e-4 GFLOP3.86 GFLOPTop-1准确性而言提升超过2 我们使用ResNetsMobileNetV2的骨干广泛评估了ECA模块的图像分类,对象检测和实例分割。 实验结果表明,我们的模块效率更高,同时性能优于同类模块。

    1. 简介

    深卷积神经网络(CNN)已在计算机视觉社区中得到广泛使用,并且在图像分类,对象检测和语义分割等广泛的任务中取得了长足的进步。从开创性的AlexNet [17]开始,许多研究 不断研究以进一步改善深层CNN的性能。 近来,将通道注意力并入卷积块中引起了很多兴趣,显示出在性能改进方面的巨大潜力。 代表性的方法之一是挤压和激励网络(SENet[14],它可以学习每个卷积块的通道注意,从而为各种深层CNN架构带来明显的性能提升。

    SENet [14]中设置了压缩(即特征聚合)和激励(即特征重新校准)之后,一些研究通过捕获更复杂的通道相关性或结合额外的空间关注来改善SE块。 尽管这些方法已经实现了更高的精度,但是它们通常带来更高的模型复杂度并承受更大的计算负担。 与前面提到的以更高的模型复杂度为代价实现更好的性能的方法不同,本文重点关注的问题是:是否可以以一种更有效的方式来学习有效的通道注意力机制?

    为了回答这个问题,我们首先回顾一下SENet中的通道注意力模块。 具体而言,给定输入特征,SE块首先为每个通道独立采用全局平均池化,然后使用两个全连接(FC)层以及非线性Sigmoid函数来生成通道权重。 两个FC层旨在捕获非线性跨通道交互,其中涉及降低维度以控制模型的复杂性。 尽管此策略在后续的通道注意力模块中被广泛使用[33139],但我们的经验研究表明,降维会给通道注意力预测带来副作用,并且捕获所有通道之间的依存关系效率不高且不必要。

    因此,本文提出了一种用于深层CNN的有效通道注意(ECA)模块,该模块避免了维度缩减,并有效捕获了跨通道交互。如图2所示,在不降低维度的情况下进行逐通道全局平均池化之后,我们的ECA通过考虑每个通道及其k个近邻来捕获本地跨通道交互 。实践证明,这种方法可以保证效率和有效性。请注意,我们的ECA可以通过大小为k的快速一维卷积有效实现,其中内核大小k代表本地跨通道交互的覆盖范围,即有多少个相近邻参与一个通道的注意力预测。我们提出了一种自适应确定k的方法,其中交互作用的覆盖范围(即内核大小k)与通道维成比例。如图1和表3所示,与骨干模型[11]相比,带有我们的ECA模块(称为ECA-Net)的深层CNN引入了很少的附加参数和可忽略的计算,同时带来了显着的性能提升。例如,对于具有24.37M参数和3.86 GFLOPResNet-50ECA-Net50的附加参数和计算分别为804.7e-4 GFLOP;同时,在Top-1准确性方面,ECA-Net50优于ResNet-50 2.28%。

    1总结了现有的注意力模块,包括通道降维(DR),通道交互和轻量级模型方面,我们可以看到,我们的ECA模块通过避免通道降维,同时以极轻量的方式捕获了不同通道间的交互。 为了评估我们的方法,我们在ImageNet-1K [6]MS COCO [23]上使用不同的深度CNN架构在各种任务中进行了实验。

    本文的主要工作概括如下:(1)解析SE块,并通过经验证明避免降维对于学习有效,适当的不同通道交互对于通道注意力非常重要。 2)基于以上分析,我们尝试通过提出一种有效的通道注意(ECA)来用于深度CNN的极其轻量级的通道注意模块,该模块在增加明显改进的同时,增加了很少的模型复杂性。 3)在ImageNet-1K和MS COCO上的实验结果表明,该方法具有比最新技术更低的模型复杂度,同时具有非常好的竞争性能。

    2. 相关工作

    事实证明,注意力机制是增强深层CNN的潜在手段。 SE-Net [14]首次提出了一种有效的机制来学习通道关注度并实现并有不错的效果。随后,注意力模块的发展可以大致分为两个方向:(1)增强特征聚合; 2)通道和空间注意的结合。具体来说,CBAM [33]使用平均池和最大池来聚合特征。 GSoP [9]引入了二阶池,以实现更有效的特征聚合。 GE [13]探索了使用深度卷积[5]聚合特征的空间扩展。 CBAM [33]scSE [27]使用内核大小为k x k2D卷积计算空间注意力,然后将其与通道注意力结合起来。与非本地(NL)神经网络[32]共享相似的哲学,GCNet [2]开发了一个简化的NL网络并与SE块集成在一起,从而形成了一个用于建模远程依赖性的轻量级模块。 Double Attention NetworksA2-Nets[4]为图像或视频识别的NL块引入了一种新颖的关联函数。双重注意网络(DAN[7]同时考虑了基于NL的信道和空间注意,以进行语义分割。但是,由于它们的高模型复杂性,大多数以上基于NL的注意力模块只能在单个或几个卷积块中使用。显然,所有上述方法都集中于提出复杂的注意力模块以提高性能。与它们不同的是,我们的ECA旨在以较低的模型复杂性来学习有效的通道注意力。

    我们的工作还涉及为轻量级CNN设计的高效卷积。 两种广泛使用的有效卷积是组卷积和深度方向可分离卷积 如表2所示,尽管这些有效的卷积涉及较少的参数,但它们在注意力模块中的作用不大。我们的ECA模块旨在捕获局部跨通道交互,这与通道局部卷积[36]和通道级卷积具有相似之处 [8]; 与它们不同的是,我们的方法研究了具有自适应内核大小的一维卷积来替换通道注意力模块中的FC层。 与分组和深度可分离卷积相比,我们的方法以较低的模型复杂度实现了更好的性能。

    3. 被提出的方法

    在本节中,我们首先回顾了SENet [14]中的通道注意力模块(即SE块)。 然后,通过分析降维和跨通道交互的影响,对SE块进行经验判断。 这激励我们提出ECA模块。 此外,我们提出了一种自适应确定ECA参数的方法,并最终展示了如何将其用于深度CNN

    3.1. Revisiting Channel Attention in SE Block

    3.2. Efficient Channel Attention (ECA) Module

    重新审视SE模块后,我们进行了实证比较,以分析通道降维和跨通道交互对通道注意力学习的影响。 根据这些分析,我们提出了有效的通道注意(ECA)模块。

    3.2.1 Avoiding Dimensionality Reduction

    为了验证其效果,我们将原始SE块与它的三个变体(即SE-Var1SE-Var2SEVar3)进行了比较,它们均不执行降维。如表2所示,SE-Var1不带参数仍然优于原始网络,这表明通道的注意力确实能够提高深层CNN的性能。同时,SE-Var2独立学习每个通道的权重,这比SE块略胜一筹,但涉及的参数较少。这可能表明通道及其权重需要直接关联,而避免降维比考虑非线性通道相关性更为重要。此外,采用单个FC层的SEVar3的性能要优于两个FC层,并且SE块的尺寸减小。以上所有结果清楚地表明,避免降维有助于学习有效的通道注意力。因此,我们提出的ECA模块不降低通道尺寸。

    3.2.2 Local Cross-Channel Interaction

    3.2.3 Coverage of Local Cross-Channel Interaction

    4. 实验

    在本节中,我们使用所提出的方法在ImageNet [6]MS COCO [23]数据集上的大规模图像分类,目标检测和实例分割任务进行评估。 具体来说,我们首先评估内核大小对ECA模块的影响,然后与ImageNet上的最新技术进行比较。 然后,我们使用Faster R-CNN [26]Mask R-CNN [10]RetinaNet [22]验证了ECA-NetMS COCO上的有效性。

    4.1. Implementation Details

    为了评估我们在ImageNet分类上的ECA-Net,我们使用了四个广泛使用的CNN作为骨干模型,包括ResNet-50 [11]ResNet-101 [11]ResNet-512 [11]MobileNetV2 [28]。为了用我们的ECA训练ResNet,我们在[1114]中采用了完全相同的数据扩充和超参数设置。具体地,通过随机水平翻转将输入图像随机裁剪到224 224。网络的参数是通过随机梯度下降(SGD)进行优化的,权重衰减为1e-4,动量为0.9,最小批量大小为256。通过将初始学习率设置为0.1,可以在100epoch内训练所有模型。每30个时代减少10倍。为了用ECA训练MobileNetV2,我们遵循[28]中的设置,其中使用SGD400个纪元内训练网络,权重衰减为4e-5,动量为0.9,最小批量为96。设定了初始学习率到0.045,并以0.98的线性衰减率减小。为了在验证集上进行测试,首先将输入图像的短边调整为256大小,并使用224 x 224的中心裁剪进行评估。

    我们使用Faster R-CNN [26]Mask R-CNN [10]RetinaNet [22]进一步评估我们在MS COCO上的方法,其中ResNet-50ResNet-101以及FPN [21]被用作主干模型。 我们使用MMDetection工具包[3]实现所有检测器,并使用默认设置。具体来说,将输入图像的短边调整为800,然后使用权重衰减为1e-4,动量为0.9和最小的SGD优化所有模型 -批大小为84GPU,每个GPU 2个图像)。 学习率被初始化为0.01,并分别在811epoch后降低了10倍。


    5. 结论

    在本文中,我们专注于为模型复杂度较低的深层CNN学习有效的渠道关注度。 为此,我们提出了一种有效的通道注意力(ECA)模块,该模块通过快速的1D卷积生成通道注意力,其内核大小可以通过通道尺寸的非线性映射来自适应确定。 实验结果表明,我们的ECA是一种极其轻巧的即插即用模块,可提高各种深度CNN架构的性能,包括广泛使用的ResNets和轻巧的MobileNetV2 此外,我们的ECA-Net在对象检测和实例分割任务中表现出良好的概括能力。 将来,我们会将ECA模块应用于更多的CNN架构(例如ResNeXtInception [31]),并进一步研究将ECA与空间关注模块的结合。

    虽然大家喜欢白嫖,但是我依然相信有人打赏,打赏二维码:

    展开全文
  • 通过剖析SENet中的通道注意模块,我们从经验上表明避免降维对于学习通道注意很重要,并且适当的跨通道交互可以在保持性能的同时显着降低模型的复杂性。因此,我们提出了一种无需降维的局部跨通.

    在这里插入图片描述

    Abstract

    最近,通道注意机制已被证明在改善深度卷积神经网络(CNN)的性能方面具有巨大潜力。然而,大多数现有方法致力于开发更复杂的注意模块以实现更好的性能,这不可避免地会增加模型的复杂性。 为了克服性能和复杂性折衷之间的矛盾,本文提出了一种有效的信道注意(ECA)模块,该模块仅包含少量参数,同时带来明显的性能提升。 通过剖析SENet中的通道注意模块,我们从经验上表明避免降维对于学习通道注意很重要,并且适当的跨通道交互可以在保持性能的同时显着降低模型的复杂性。因此,我们提出了一种无需降维的局部跨通道交互策略,该策略可以通过一维卷积有效地实现。 此外,我们提出了一种方法来自适应选择一维卷积的内核大小,确定局部跨通道交互的覆盖范围。提出的ECA模块既有效又有效,例如,针对ResNet50主干的模块参数和计算分别为80 vs. 24.37M和4.7e-4 GFLOP与3.86 GFLOP,Top-1准确性而言提升超过2% 。 我们使用ResNets和MobileNetV2的骨干广泛评估了ECA模块的图像分类,对象检测和实例分割。 实验结果表明,我们的模块效率更高,同时性能优于同类模块。
    在这里插入图片描述

    1. Introduction

    深卷积神经网络(CNN)已在计算机视觉社区中得到广泛使用,并且在图像分类,对象检测和语义分割等广泛的任务中取得了长足的进步。从开创性的AlexNet [17]开始,许多研究 不断研究以进一步改善深层CNN的性能。 近来,将通道注意力并入卷积块中引起了很多兴趣,显示出在性能改进方面的巨大潜力。 代表性的方法之一是挤压和激励网络(SENet)[14],它可以学习每个卷积块的通道注意,从而为各种深层CNN架构带来明显的性能提升。

    在SENet [14]中设置了压缩(即特征聚合)和激励(即特征重新校准)之后,一些研究通过捕获更复杂的通道相关性或结合额外的空间关注来改善SE块。 尽管这些方法已经实现了更高的精度,但是它们通常带来更高的模型复杂度并承受更大的计算负担。 与前面提到的以更高的模型复杂度为代价实现更好的性能的方法不同,本文重点关注的问题是:是否可以以一种更有效的方式来学习有效的通道注意力机制?

    为了回答这个问题,我们首先回顾一下SENet中的通道注意力模块。 具体而言,给定输入特征,SE块首先为每个通道独立采用全局平均池化,然后使用两个全连接(FC)层以及非线性Sigmoid函数来生成通道权重。 两个FC层旨在捕获非线性跨通道交互,其中涉及降低维度以控制模型的复杂性。 尽管此策略在后续的通道注意力模块中被广泛使用[33、13、9],但我们的经验研究表明,降维会给通道注意力预测带来副作用,并且捕获所有通道之间的依存关系效率不高且不必要。
    在这里插入图片描述
    因此,本文提出了一种用于深层CNN的有效通道注意(ECA)模块,该模块避免了维度缩减,并有效捕获了跨通道交互。如图2所示,在不降低维度的情况下进行逐通道全局平均池化之后,我们的ECA通过考虑每个通道及其k个近邻来捕获本地跨通道交互 。实践证明,这种方法可以保证效率和有效性。请注意,我们的ECA可以通过大小为k的快速一维卷积有效实现,其中内核大小k代表本地跨通道交互的覆盖范围,即有多少个相近邻参与一个通道的注意力预测。我们提出了一种自适应确定k的方法,其中交互作用的覆盖范围(即内核大小k)与通道维成比例。如图1和表3所示,与骨干模型[11]相比,带有我们的ECA模块(称为ECA-Net)的深层CNN引入了很少的附加参数和可忽略的计算,同时带来了显着的性能提升。例如,对于具有24.37M参数和3.86 GFLOP的ResNet-50,ECA-Net50的附加参数和计算分别为80和4.7e-4 GFLOP;同时,在Top-1准确性方面,ECA-Net50优于ResNet-50 2.28%。

    表1总结了现有的注意力模块,包括通道降维(DR),通道交互和轻量级模型方面,我们可以看到,我们的ECA模块通过避免通道降维,同时以极轻量的方式捕获了不同通道间的交互。 为了评估我们的方法,我们在ImageNet-1K [6]和MS COCO [23]上使用不同的深度CNN架构在各种任务中进行了实验。

    本文的主要工作概括如下:(1)解析SE块,并通过经验证明避免降维对于学习有效,适当的不同通道交互对于通道注意力非常重要。 (2)基于以上分析,我们尝试通过提出一种有效的通道注意(ECA)来用于深度CNN的极其轻量级的通道注意模块,该模块在增加明显改进的同时,增加了很少的模型复杂性。 (3)在ImageNet-1K和MS COCO上的实验结果表明,该方法具有比最新技术更低的模型复杂度,同时具有非常好的竞争性能。
    在这里插入图片描述

    2. Related Work

    事实证明,注意力机制是增强深层CNN的潜在手段。 SE-Net [14]首次提出了一种有效的机制来学习通道关注度并实现并有不错的效果。随后,注意力模块的发展可以大致分为两个方向:(1)增强特征聚合; (2)通道和空间注意的结合。具体来说,CBAM [33]使用平均池和最大池来聚合特征。 GSoP [9]引入了二阶池,以实现更有效的特征聚合。 GE [13]探索了使用深度卷积[5]聚合特征的空间扩展。 CBAM [33]和scSE [27]使用内核大小为k x k的2D卷积计算空间注意力,然后将其与通道注意力结合起来。与非本地(NL)神经网络[32]共享相似的哲学,GCNet [2]开发了一个简化的NL网络并与SE块集成在一起,从而形成了一个用于建模远程依赖性的轻量级模块。 Double Attention Networks(A2-Nets)[4]为图像或视频识别的NL块引入了一种新颖的关联函数。双重注意网络(DAN)[7]同时考虑了基于NL的信道和空间注意,以进行语义分割。但是,由于它们的高模型复杂性,大多数以上基于NL的注意力模块只能在单个或几个卷积块中使用。显然,所有上述方法都集中于提出复杂的注意力模块以提高性能。与它们不同的是,我们的ECA旨在以较低的模型复杂性来学习有效的通道注意力。
    在这里插入图片描述
    我们的工作还涉及为轻量级CNN设计的高效卷积。 两种广泛使用的有效卷积是组卷积和深度方向可分离卷积。 如表2所示,尽管这些有效的卷积涉及较少的参数,但它们在注意力模块中的作用不大。我们的ECA模块旨在捕获局部跨通道交互,这与通道局部卷积[36]和通道级卷积具有相似之处 [8]; 与它们不同的是,我们的方法研究了具有自适应内核大小的一维卷积来替换通道注意力模块中的FC层。 与分组和深度可分离卷积相比,我们的方法以较低的模型复杂度实现了更好的性能。

    3. Proposed Method

    在本节中,我们首先回顾了SENet [14]中的通道注意力模块(即SE块)。 然后,通过分析降维和跨通道交互的影响,对SE块进行经验判断。 这激励我们提出ECA模块。 此外,我们提出了一种自适应确定ECA参数的方法,并最终展示了如何将其用于深度CNN。

    3.1. Revisiting Channel Attention in SE Block

    3.2. Efficient Channel Attention (ECA) Module

    重新审视SE模块后,我们进行了实证比较,以分析通道降维和跨通道交互对通道注意力学习的影响。 根据这些分析,我们提出了有效的通道注意(ECA)模块。

    3.2.1 Avoiding Dimensionality Reduction

    为了验证其效果,我们将原始SE块与它的三个变体(即SE-Var1,SE-Var2和SEVar3)进行了比较,它们均不执行降维。如表2所示,SE-Var1不带参数仍然优于原始网络,这表明通道的注意力确实能够提高深层CNN的性能。同时,SE-Var2独立学习每个通道的权重,这比SE块略胜一筹,但涉及的参数较少。这可能表明通道及其权重需要直接关联,而避免降维比考虑非线性通道相关性更为重要。此外,采用单个FC层的SEVar3的性能要优于两个FC层,并且SE块的尺寸减小。以上所有结果清楚地表明,避免降维有助于学习有效的通道注意力。因此,我们提出的ECA模块不降低通道尺寸。
    在这里插入图片描述

    3.2.2 Local Cross-Channel Interaction
    3.2.3 Coverage of Local Cross-Channel Interaction

    在这里插入图片描述

    4. Experiments

    在本节中,我们使用所提出的方法在ImageNet [6]和MS COCO [23]数据集上的大规模图像分类,目标检测和实例分割任务进行评估。 具体来说,我们首先评估内核大小对ECA模块的影响,然后与ImageNet上的最新技术进行比较。 然后,我们使用Faster R-CNN [26],Mask R-CNN [10]和RetinaNet [22]验证了ECA-Net在MS COCO上的有效性。

    4.1. Implementation Details

    为了评估我们在ImageNet分类上的ECA-Net,我们使用了四个广泛使用的CNN作为骨干模型,包括ResNet-50 [11],ResNet-101 [11],ResNet-512 [11]和MobileNetV2 [28]。为了用我们的ECA训练ResNet,我们在[11,14]中采用了完全相同的数据扩充和超参数设置。具体地,通过随机水平翻转将输入图像随机裁剪到224 224。网络的参数是通过随机梯度下降(SGD)进行优化的,权重衰减为1e-4,动量为0.9,最小批量大小为256。通过将初始学习率设置为0.1,可以在100个epoch内训练所有模型。每30个时代减少10倍。为了用ECA训练MobileNetV2,我们遵循[28]中的设置,其中使用SGD在400个纪元内训练网络,权重衰减为4e-5,动量为0.9,最小批量为96。设定了初始学习率到0.045,并以0.98的线性衰减率减小。为了在验证集上进行测试,首先将输入图像的短边调整为256大小,并使用224 x 224的中心裁剪进行评估。

    我们使用Faster R-CNN [26],Mask R-CNN [10]和RetinaNet [22]进一步评估我们在MS COCO上的方法,其中ResNet-50和ResNet-101以及FPN [21]被用作主干模型。 我们使用MMDetection工具包[3]实现所有检测器,并使用默认设置。具体来说,将输入图像的短边调整为800,然后使用权重衰减为1e-4,动量为0.9和最小的SGD优化所有模型 -批大小为8(4个GPU,每个GPU 2个图像)。 学习率被初始化为0.01,并分别在8和11个epoch后降低了10倍。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5. Conclusion

    在本文中,我们专注于为模型复杂度较低的深层CNN学习有效的渠道关注度。 为此,我们提出了一种有效的通道注意力(ECA)模块,该模块通过快速的1D卷积生成通道注意力,其内核大小可以通过通道尺寸的非线性映射来自适应确定。 实验结果表明,我们的ECA是一种极其轻巧的即插即用模块,可提高各种深度CNN架构的性能,包括广泛使用的ResNets和轻巧的MobileNetV2。 此外,我们的ECA-Net在对象检测和实例分割任务中表现出良好的概括能力。 将来,我们会将ECA模块应用于更多的CNN架构(例如ResNeXt和Inception [31]),并进一步研究将ECA与空间关注模块的结合。

    展开全文
  • 3、Pytorch实现 下面给出SE模块的Pytorch实现,可以将下面的代码作为插件用于任意feature map之后,以增强其通道注意力。 import torch from torch import nn class SE_Block(nn.Module): def __init__(self, ch_in...

    论文地址:https://arxiv.org/pdf/1709.01507.pdf

    1、动机

    CNN中的核心操作就是卷积,早期大多研究都在探索如何增强空间编码能力,以提升CNN的性能。这篇文章探索了通道上的注意力,明确地建模通道间的依赖关系,并提出了一个新颖的模块,称为SE-block。

    2、方法

    SE的架构如上图所示,简单描述为:

    • 对于一个输入X,其经过卷积之后得到一个feature map(U),对于该feature map即可接上一个SE块,来附加上通道注意力;
    • 对于U,先将其每个通道的空间信息压缩到一个单值,也即从H*W*C大小的U得到了1*1*C大小的向量;
    • 然后,对该向量应用一组FC层进行权重调整,得到一个1*1*C的通道注意力向量;
    • 最后,将通道注意力向量加权到U,形成一个加权后的feature map。

    可以看出,SE的原理还是非常简单,总的来说,SE就是对每个通道上的权重进行了显式建模,然后再对原feature map加权,使其每个通道具有不同的重要程度,也即有了通道注意力机制。

    3、Pytorch实现

    下面给出SE模块的Pytorch实现,可以将下面的代码作为插件用于任意feature map之后,以增强其通道注意力。

    import torch
    from torch import nn
    
    
    class SE_Block(nn.Module):
        def __init__(self, ch_in, reduction=16):
            super(SE_Block, self).__init__()
            self.avg_pool = nn.AdaptiveAvgPool2d(1)  # 全局自适应池化
            self.fc = nn.Sequential(
                nn.Linear(ch_in, ch_in // reduction, bias=False),
                nn.ReLU(inplace=True),
                nn.Linear(ch_in // reduction, ch_in, bias=False),
                nn.Sigmoid()
            )
    
        def forward(self, x):
            b, c, _, _ = x.size()
            y = self.avg_pool(x).view(b, c) # squeeze操作
            y = self.fc(y).view(b, c, 1, 1) # FC获取通道注意力权重,是具有全局信息的
            return x * y.expand_as(x) # 注意力作用每一个通道上
    

     

    展开全文
  • 因此,通过对这些通道进行过滤,也就是注意,来得到优化后的特征。主要思路就是:增大有效通道权重,减少无效通道的权重 #实现方式1 class ChannelAttention(layers.Layer): def __init__(self, in_planes, ratio=8...

    我们知道一张图片经过几个卷积层会得到一个特征矩阵,这个矩阵的通道数就是卷积层核的个数。那么,一个常见的卷积核经常达到1024,2048个,并不是每个通道都对于信息传递非常有用了的。因此,通过对这些通道进行过滤,也就是注意,来得到优化后的特征。主要思路就是:增大有效通道权重,减少无效通道的权重

    #实现方式1
    class ChannelAttention(layers.Layer):
        def __init__(self, in_planes, ratio=8):
            super(ChannelAttention, self).__init__()
    
            self.avg_out= layers.GlobalAveragePooling2D()
            self.max_out= layers.GlobalMaxPooling2D()
    
            self.fc1 = layers.Dense(in_planes//ratio, kernel_initializer='he_normal',
                                    kernel_regularizer=regularizers.l2(5e-4),
                                    activation=tf.nn.relu,
                                    use_bias=True, bias_initializer='zeros')
            self.fc2 = layers.Dense(in_planes, kernel_initializer='he_normal',
                                    kernel_regularizer=regularizers.l2(5e-4),
                                    use_bias=True, bias_initializer='zeros')
    
        def call(self, inputs):
            avg_out = self.avg_out(inputs)
            max_out = self.max_out(inputs)
            out = tf.stack([avg_out, max_out], axis=1)  # shape=(None, 2, fea_num)
            out = self.fc2(self.fc1(out))
            out = tf.reduce_sum(out, axis=1)      		# shape=(256, 512)
            out = tf.nn.sigmoid(out)
            out = layers.Reshape((1, 1, out.shape[1]))(out)
    
            return out
    
    
    #实现方式2
    class ChannelAttention(layers.Layer):
        def __init__(self, in_planes):
            super(ChannelAttention, self).__init__()
    
            self.avg= layers.GlobalAveragePooling2D()
            self.max= layers.GlobalMaxPooling2D()
    
            self.fc1 = layers.Dense(in_planes//16, kernel_initializer='he_normal', activation='relu',
                                    use_bias=True, bias_initializer='zeros')
            self.fc2 = layers.Dense(in_planes, kernel_initializer='he_normal', use_bias=True,                             
            						bias_initializer='zeros')
    
        def call(self, inputs):
            avg_out = self.fc2(self.fc1(self.avg(inputs)))
            max_out = self.fc2(self.fc1(self.max(inputs)))
            out = avg_out + max_out
            out = tf.nn.sigmoid(out)
            out = tf.reshape(out, [out.shape[0], 1, 1, out.shape[1]])
            out = tf.tile(out, [1, inputs.shape[1], inputs.shape[2], 1])
    
            return out
    
    
    展开全文
  • 注意力模块一般有两种:一种是空间注意力模块,一种是通道注意力模块,SE模块属于后者。 SE-block:通过该机制,网络可以学习使用全局信息来选择性地强调信息特征,并抑制不太有用的特征。 SE-block流程: 特征图...
  • 提出CBAM的作者主要对分类网络和目标检测网络进行了实验,证明了CBAM模块确实是有效的。 以ResNet为例,论文中提供了改造的示意图,如下图所示: 在ResNet中的每个block中添加了CBAM模块,训练数据来自...
  • 通道注意力模块 通道注意力模块 通道注意力聚焦在“什么”是有意义的输入图像,为了有效计算通道注意力,需要对输入特征图的空间维度进行压缩,对于空间信息的聚合,常用的方法是平均池化。但有人认为,最大池化...
  • 为什么CBAM通道与空间注意力模块顺序排列性能最好 《CBAM–Convolutional Block Attention Module》 《SENet——Squeeze-and-...论文中有提到,将通道注意力与空间注意力模块以先通道再空间的顺序排列会得到...
  • 导读本文是通道注意力机制的又一重大改进,主要是在通道注意力的基础上,引入多尺度思想,本文主要提出了金字塔分割注意力模块,即PSA module。进一步,基于PSA ,我们将PSA注意力模...
  • 注意力模块比较 纵坐标为准确性,横坐标为模型...在SE-Net中,通道注意力模块通过公式(2)进行降维(简单来说,就是SE-Net模块中的全连接层),这样让通道和权值之间没有直接联系。下表中的SE-Var1(无参数)、SE-Va
  • 注意力模块通道(时间)注意力模块空间注意力模块 通道(时间)注意力模块 为了汇总空间特征,作者采用了全局平均池化和最大池化两种方式来分别利用不同的信息。 输入是一个 H×W×C 的特征 F, 我们先分别进行一...
  • 2.1 CBAM的通道注意力模块 如图,先对输入特征图Input_feature(H×W×C)分别进行全局平均池化和全局平均池化得到两个向量M(1×1×C)和A(1×1×C),在将这俩分别进行两次全连接操作第一次全连接压缩通道为C/r...
  • 自注意力机制-------通道注意力-----------压缩激活模块 参考文献(CVRP) https://arxiv.org/pdf/1709.01507.pdf Squeeze-and-Excitation Block:
  • 西安交大在注意力机制方面的探索,在通道注意力的基础上,引入多尺度思想,构建了本文所提的即插即用EPSA模块。相比其他注意力机制(比如SENet、FcaNet等),所提EPSANet在图像分类、目标检测以及实例分割任务上均取得...
  • 原文链接:通道注意力超强改进,轻量模块 ECANet 来了!即插即用,显著提高 CNN 性能|已开源 本文原创首发自极市平台公众号,请授权后转载。 极市导读:今天给大家推荐一篇CVPR2020上对通道注意力进行改进的文章—...
  • 参考链接: 深度学习卷积神经网络重要结构之通道注意力和空间注意力模块 参考链接: 用于卷积神经网络的注意力机制(Attention)----CBAM: Convolutional Block Attention Module 参考链接: link 参考链接: link 参考...
  • 论文主要是提出了一种轻量级的注意力模块,同时在空间和通道上进行特征的attention,可以加到现有的模型中,提升CNN网络的表达能力 CBAM 包含两个子模块,分别是 channel attention 模块和spatial attention 模块...
  • 卷积块注意模块

    千次阅读 2020-01-09 10:24:13
    目录 Abstract: Introduction Related Work(Attention mechanism) ...通道注意力模块 空间注意力模块 模块安排 实验 消融研究 Channel attention Spatial attention Channel and Spatial atten...
  • [pytorch] 试验--用CBAM注意力模块进行语义分割

    千次阅读 热门讨论 2019-09-16 10:17:49
    CBAM是IEEE 2018的一篇文章 Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块。是一种结合了空间(spatial)和通道(channel)的注意...通道注意力决定了网络“lookwhat”,因为每个通道...
  • 考虑到网络特征图中各个通道重要性的不同,将通道注意力机制分别引入基本RefineNet的编码器和解码器模块,以增强网络对重要特征的学习和关注;同时,使用focal loss函数代替传统的交叉熵损失函数,以处理多类语义...
  • 注意力模块: 物体间或者物体内一些区域的关联性是有助于目标检测任务的,但是之前没人有实际的证明如何使用这种关联性是一定可行的,本文作者就尝试在检测网络中添加注意力模块。《Relation Networks for Object ...
  • 前面分享了一篇《继SE,CBAM后的一种新的注意力机制Coordinate Attention》,其出发点在于SE只引入了通道注意力,CBAM的空间注意力只考虑了局部区域的信息,从而提出考虑全局空间信息的注意力机制。 在本文,将介绍另...
  • 通道注意力,通过所有通道,同一位置的单个特征点,进行注意力权重的计算与应用。能实现跨纬度的特征动态权重分配。 下面把两种注意力模式结合起来,实现代码如下: import tensorflow as tf from typing import ...
  • ILSVRC 2017 图像分类比赛冠军 Abstract 卷积神经网络建立在卷积运算的基础上,它通过在局部感受野内将...通过将这些SE模块堆叠在一起,可以构建SENet架构,本结构在具有挑战性的数据集上有较好的泛化能力。 以SENet.
  • 注意力机制模块——SE、CBAM

    千次阅读 2020-08-09 20:55:21
    https注意力机制模块SENetCBAM SENet SE全称Squeeze-and-Excitation,它注重通道信息。 SE的出现是为了解决在卷积池化过程中feature map的不同通道所占的重要性不同带来的损失问题。在传统的卷积池化过程中,默认...
  • 针对现有算法主要通过不同尺度感受野来学习特征,而无法高效利用多尺度特征的问题,文中设计了一个基于通道注意力机制的特征融合模块。该模块可以在训练模型时学习特征融合的分布情况,以高效利用多尺度特征。此外...
  • 深度学习中的注意力,就是网络在寻找label对应信息时候,将特征打上标签,认为它们重要或者不重要。 1 注意力机制 (1)SE模块 Squeeze(压缩)-and-Excitation(激发) Block 认为每个通道的重要程度是不一样的,...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 185
精华内容 74
关键字:

通道注意力模块