当前位置: 代码迷 >> 综合 >> 【注意力机制】SENet(Squeeze-and-Excitation Networks)详解
  详细解决方案

【注意力机制】SENet(Squeeze-and-Excitation Networks)详解

热度:4   发布时间:2023-12-14 04:02:06.0

论文:《Squeeze-and-Excitation Networks》
论文链接:https://arxiv.org/abs/1709.01507
代码地址:https://github.com/hujie-frank/SENet
PyTorch代码地址:https://github.com/miraclewkf/SENet-PyTorch

1. 概述

       在深度学习领域,CNN分类网络的发展对其他计算机视觉任务如目标检测和语义分割都起到至关重要的作用,因为检测和分割模型通常是构建在CNN分类网络(称为backbone)之上。提到CNN分类网络,我们所熟知的是VGGNet、ResNet、Inception、DenseNet等模型,它们的效果已经被充分验证,而且被广泛应用在各类计算机视觉任务上。这里我们介绍一篇CVPR2017的文章SENet,它赢得了最后一届ImageNet2017竞赛分类任务的冠军。重要一点是SENet思路很简单,很容易扩展在已有网络结构中。
       作者在文中将SENet block插入到现有的多种分类网络中,都取得了不错的效果。作者的动机是希望显式地建模特征通道之间的相互依赖关系。另外,作者并未引入新的空间维度来进行特征通道间的融合,而是采用了一种全新的「特征重标定」策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。通俗的来说SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。SE block嵌在原有的一些分类网络中不可避免地增加了一些参数和计算量,但是在效果面前还是可以接受的 。Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中。

2. Squeeze-Excitation Block

       SE Block结构如下图所示:输入X经过任意变换之后变为输出U,假设输出的U不是最优的,每个通道的重要程度不同,有的通道更有用,有的通道不太有用。因此对于每一个输出通道,先进行global average pooling,每个通道得到一个标量,C个通道得到C个数,然后经过FC-ReLU-FC-Sigmoid得到C个0到1之间的标量,作为通道的权重。最后对原来输出通道的每个通道用对应的权重加权(对应通道的每个元素与权重分别相乘),得到新的加权后的特征图,作者称之为feature recalibration。
F_sq代表Squeeze操作,F_ex代表Excitation操作,Fscale代表Scale操作
注:F_sq代表Squeeze操作,F_ex代表Excitation操作,Fscale代表Scale操作。

1) Squeeze

       由于卷积只是在一个局部空间内进行操作,U很难获得足够的信息来提取channel之间的关系,对于网络中前面的层这更严重,因为感受野比较小。Squeeze操作将一个channel上整个空间特征编码为一个全局特征,采用global average pooling来实现(原则上也可以采用更复杂的聚合策略),公式如下:
在这里插入图片描述

2) Excitation

       Squeeze操作得到了全局描述特征,接下来需要另一种运算来抓取channel之间的关系,这个操作需要满足两个原则:首先要灵活,它要可以学习到各个channel之间的非线性关系;第二点是学习的关系不是互斥的,因为这里允许多channel的特征,而不是one-hot形式。基于此,这里采用sigmoid形式的gating机制:
在这里插入图片描述
       其中,W_1∈R(C/r×C),W_2∈R(C×C/r),为了降低模型的复杂度以及泛化能力,这里采用包含两个全连接层的bottleneck结构,其中第一个FC层起到降维的作用,降维系数为r是一个超参数(实验证明当r为16的时候效果最好)。然后采用ReLU激活,最后的FC层恢复原始的维度。

3) Scale

       Scale操作是将学习到的各个channel的激活值(sigmoid激活,值为0到1)乘以U上的原始特征:
在这里插入图片描述

       总的来说,SE Block首先对卷积得到的特征图进行Squeeze操作,得到channel级的全局特征,然后对全局特征进行Excitation操作,学习各个channel间的关系,得到不同channel的权重。最后进行Scale操作,即将得到的不同channel的权重乘以原来的特征图得到最终特征。本质上,SE Block是在channel维度上做attention或者gating操作。这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。另外一点是SE Block是通用的,这意味着其可以嵌入到现有的网络框架中。

3. SE Block在Inception Module和ResNet Module上的应用

在这里插入图片描述

  相关解决方案