SE-Net Squeeze-and-Excitation Networks 压缩并激活

链接:https://blog.csdn.net/qq_36104364/article/details/79972251?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight
中文的译文

链接:https://blog.csdn.net/bryant_meng/article/details/88041204
有些地方读英文还是很形象的 还能学外语,,,
1 Background and Motivation
CNN extract informative features by fusing spatial and channel-wise information together within local receptive fields.
CNN通过融合局部感受野的空间和信道信息来提取信息特征。
为了 增强 CNN 的 representation power 描述的能力
几种增强空间编码的方法(空间相关性、空间注意)
several methods:enhancing spatial encoding(spatial correlations、spatial attention)比如,inception 中的多个感受野 concatenate
作者:focus on the channel relationship
因此作者设计出 Squeeze-and-Excitation 结构,emphasise informative features and suppress less useful ones(channel-wise)
强调信息性特征,抑制不太有用的功能(渠道方面
来张图说明:
在这里插入图片描述
1 概述
这两个全连接层的作用就是融合各通道的feature map信息,因为前面的squeeze都是在某个channel的feature map里面操作。
SENet通过学习channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果提升较明显
Squeeze-and-Excitation(SE) block是一个子结构,可以有效地嵌到其他分类或检测模型中。
SENet的核心思想在于通过网络根据loss去学习feature map的特征权重来使模型达到更好的结果
SE模块本质上是一种attention机制
2 Squeeze-and-Excitation模块
Squeeze 操作对 C x H x W 进行global average pooling,得到大小为 C x 1 x 1 的特征图
Excitation 操作 使用一个全连接神经网络,对Sequeeze之后的结果做一个非线性变换
Reweight 操作 使用Excitation 得到的结果作为权重,乘到输入特征上
https://blog.csdn.net/shanglianlm/article/details/104370739
pytorch代码 我pycharm一直安不上。。。没试

就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

链接:https://blog.csdn.net/qq_38807688/article/details/84332066
背景:
最后一届ImageNet 2017竞赛 Image Classification任务的冠军.作者采用SENet block和ResNeXt结合在ILSVRC 2017的分类项目中拿到第一,在ImageNet数据集上将top-5 error降低到2.251%,原先的最好成绩是2.991%。
论文工作:
提出一种有效的架构单元,“Squeeze-and-Excitation”(SE)块,它专注于通道(以往的架构注意点在网络的深度和宽度上),建模了通道间的相互依赖关系(我对通道的理解是指输出的各个Fm特征图之间的关系),可学习地重新校准通道间的特征响应,通过将这些快堆叠在一起,构建SeNet架构。
通道关系可以被表述为具有局部感受野的实例不可知的函数的组合(即不同通道间的关系)。我们就可以通过某种机制重新校准特征,这样就可以达到强调有用特征并抑制无用特征的目的。
过程:
1.特征U首先通过squeeze操作,该操作跨越空间维度W×H聚合特征映射来产生通道描述符(也就是聚合一张Fm)。这个描述符嵌入了通道特征响应的全局分布(对一张Fm的描述),使来自网络全局感受野的信息能够被其较低层利用(指这个模块的较底层部分,就是一提取完就给最近的层用)。

2.这之后是一个excitation(激励)操作,其中通过基于通道依赖性的自门机制为每个通道学习特定采样的激活,控制每个通道的激励

3.然后特征映射U被重新加权以生成SE块的输出,然后可以将其直接输入到随后的层中。

SE网络可以通过简单地堆叠SE构建块的集合来生成。SE块也可以用作架构中任意深度的原始块的直接替换。然而,虽然构建块的模板是通用的,正如我们6.3节中展示的那样,但它在不同深度的作用适应于网络的需求。

SE快在网络不同部分的作用有所不同:
1.在前面的层中,它学习以类不可知的方式激发信息特征,增强共享的较低层表示的质量。
2.在后面的层中,SE块越来越专业化,并以高度类特定的方式响应不同的输入。
因此,SE块进行特征重新校准的好处可以通过整个网络进行累积。

2.注意力和门机制:

从广义上讲,可以将注意力视为一种工具,将可用处理资源的分配偏向于输入信号的信息最丰富的组成部分。这种机制的发展和理解一直是神经科学社区的一个长期研究领域[15,16,28],并且近年来作为一个强大补充,已经引起了深度神经网络的极大兴趣[20,25]。注意力已经被证明可以改善一系列任务的性能,从图像的定位和理解[3,17]到基于序列的模型[2,24]。它通常结合门函数(例如softmax或sigmoid)和序列技术来实现[11,37]。(Highway Networks)高速网络[36]采用门机制来调节快捷连接,使得可以学习非常深的架构。王等人[42]受到语义分割成功的启发,引入了一个使用沙漏模块[27]的强大的trunk-and-mask注意力机制。这个高容量的单元被插入到中间阶段之间的深度残差网络中。
相比之下,我们提出的SE块是一个轻量级的门机制,专门用于以计算有效的方式对通道关系进行建模,并设计用于增强整个网络中模块的表示能力。
Squeeze-and-Excitation块是一个计算单元,可以为任何给定的变换构建(就是给某个变换结束了,对它产生的结果进行一个处理)。
我们的分析:
从上式不难知道输出的某个Fm是通过所有通道的和来产生的,所以通道依赖性(这里指的通道依赖性指的是上一批通道,也就是输入信号的那批通道,后面我们处理的是后面一批通道)被隐式地嵌入到vc中,而vc是滤波器(卷积核),它的作用是捕获图片像素点的空间相关性,所以我们说通道间的依赖性与滤波器捕获的空间相关性是纠缠在一起的。
δ是指Relu激活函數,W1和W2是用于降维和升维的两个全连接层的权重,目的是为了(1)限制模型复杂度(2)辅助模型泛化。
通过在非线性周围形成两个全连接(FC)层的瓶颈来参数化门机制,即降维层参数为W1,降维比例为r。一个ReLU,然后是一个参数为W2的升维层。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在实践中提出的SE块是可行的,它必须提供可接受的模型复杂度和计算开销。每个SE块利用压缩阶段的全局平均池化操作和激励阶段中的两个小的全连接层,接下来是几乎算不上计算量的通道缩放操作。

为了说明模块的成本,作为例子我们比较了ResNet-50和SE-ResNet-50,其中SE-ResNet-50的精确度明显优于ResNet-50,接近更深的ResNet-101网络(如表2所示)。对于224×224像素的输入图像,ResNet-50单次前向传播需要∼ 3.86 GFLOP。总的来说,SE-ResNet-50需要∼ 3.87 GFLOP,相对于原始的ResNet-50只相对增加了0.26%。
总的来说,SE-ResNet-50在ResNet-50所要求的∼2500万参数之外引入了∼250万附加参数,相对增加了∼10%的参数总数量。这些附加参数中的大部分来自于网络的最后阶段(后面的Cs较大)。然而,我们发现SE块相对昂贵的最终阶段可以在性能的边际成本(ImageNet数据集上<0.1%的top-1错误率)上被移除,将相对参数增加减少到∼4%,这在参数使用是关键考虑的情况下可能证明是有用的。
虽然应该注意SE块本身增加了深度,但是它们的计算效率极高,即使在扩展的基础架构的深度达到收益递减的点上也能产生良好的回报。而且,我们看到通过对各种不同深度的训练,性能改进是一致的,这表明SE块引起的改进可以与增加基础架构更多深度结合使用。
SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。
图像分类,物体检测,语义分割,实例分割的联系和区别 :https://blog.csdn.net/niaolianjiulin/article/details/52948274
链接:https://blog.csdn.net/niaolianjiulin/article/details/75567743
看来一下前辈们投论文时候的艰辛,砥砺前行!
卷积操作相对于空间上的操作:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def Squeeze_excitation_layer(self, input_x, out_dim, ratio, layer_name):
    with tf.name_scope(layer_name) :
        squeeze = Global_Average_Pooling(input_x)
        excitation = Fully_connected(squeeze, units=out_dim / ratio, layer_name=layer_name+'_fully_connected1')
        excitation = Relu(excitation)
        excitation = Fully_connected(excitation, units=out_dim, layer_name=layer_name+'_fully_connected2')
        excitation = Sigmoid(excitation)
        excitation = tf.reshape(excitation, [-1,1,1,out_dim])
        scale = input_x * excitation
        return scale

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/zqx951102/article/details/107951454
今日推荐