SENet

通道注意力

谷歌学术引用超2万次

深度学习在大量数据的基础上\在高维的向量空间来进行计算,从而来挖掘数据潜在的最重要的一个特征

image-20250420102805731

  • 例如可以学习一个模型,来识别小狗和小猫,这个模型一定是掌握了猫狗最重要的特征,这样才能够将它们区分开
  • 或者是学习一个模型,来预测未来的天气状况,模型通过分析重要的特征,掌握数据的变化规律
  • 通道注意力的提出就是为了帮助模型去强调一些重要的特征,忽略掉一些不重要的特征
  • 例如要强调这个小猫的胡子特征\眼睛特征,这都是小猫的独特之处
  • 通道注意力,可以把 看中的某个指标 权重加大,不感兴趣的地方减小,甚至忽略掉它

通道注意力的理论基础,分为两个步骤,压缩和激励

前提:给定图像,表示先进行变换,这个变换可以是简单的卷积操作,或者是一个网络,它输出的维度是一个H×W×C的特征,HW分别是图片的高和宽,C是通道的数量或者说是特征的数量

image-20250420104714603

(1)压缩:作者在这个空间方向上即H×W这个层面上进行压缩,将原本H×W大小的图片,压缩到1×1的大小,变成1×1×C的向量,在每一个特征对应的空间图上,都进行压缩,这里的压缩使用的是平均池化,当压缩完成之后,就进入到了第二个阶段

(2)激励:首先通过两层的全连接层,来学习通道和通道之间的相关性,这两层全连接先降维,从C降到$\frac{C}{r}$ ,再升维

先降维再升维的目的是为了提高计算效率

r 是降维的倍数,再通过两层全连接之后,再通过Sigmoid的门控机制,来生成权重表示

  • sigmoid会把每个数值映射到0~1之间的范围内,一个天然的权重生成器
  • 还有一点需要注意,Sigmoid函数是没有参数的,如果输入不变的话,它生成的权重也是不会变化的,所以为了增强表达能力,通常和全连接层一块使用
  • 两层全连接层的另外一个作用:为了参数化门控机制,最后将得到的权重,与输入的特征图进行相乘,通道对应相乘,每一个通道都有对应的权重,与之相乘,(广播操作), 得到输出
随手补充

两层全连接的好处:

(1)减少参数

(2)参数化门控机制

流程图

image-20250420105656614

(1)输入X,通过网络进行特征提取,然后在空间层面上通过平均池化操作,压缩为一个$1×1×C$的一个向量表示,然后进入到绿色框(激励的阶段)

(2)首先通过两层的全连接网络,(FC-ReLU-FC),先降维到 $\frac{C}{r}$ ,然后再升维到 $1×1×C$ ,为了提取通道间的依赖性关系

(3)然后两层全连接网络之后,再接 Sigmoid 函数生成权重表示,然后将生成的权重与之前的输入进行相乘,对不同的通道进行强调 或者抑制,这就是通道注意力

随手补充:拓展

多尺度通道建模\空间建模\通道空间交互建模

学习通道注意力,不能只学SENet,要好好学别人的论文是怎么应用通道注意力的,怎么把它迁移到其他领域中去的,学习改进学习迁移

拓展

image-20250420122241871

(1)最简单的思路:串联

一个模块后面紧接着通道注意力

(2)压缩层面:

作者在压缩部分,也就是在空间层面 $H × W$ ,应用平均池化操作,获得 $1×1×C$ 的通道描述符表示

==有两个可以改进的方向==

  • ① 压缩操作如何压缩
  • ② 是否可以在其他层面进行压缩

① 压缩操作

平均池化\最大池化\卷积,都可以起到压缩的作用,还可以使用聚类算法,或者使用线性层,映射到低维向量

②压缩层面

在这个H方向或者W方向上,单独运用池化操作

除了空间层面,还能在C方向,通道方向上单独应用池化操作

空间(H×W)和通道(C/特征)都能够运用池化操作,还能在空间和通道层面,联合应用池化操作(eg.$W×C$/$H×C$)

③ 激励层面:

作者使用的是两层的全连接网络,先降维到 $\frac{C}{r}$ ,再升级到通道 $C$,学习所有通道之间的相关性

改进:(通道建模)

(1)通道方向的卷积,进行局部通道建模(?)

(2)在通道上执行注意力,进行全局性建模

(3)卷积和注意力一块使用,同时建模局部和全局的通道相关性

(4)使用多个不同大小的卷积,建模多尺度通道相关性


以上是压缩和激励(对单个输入的所有通道,进行加权),是模型层面,下面是输入输出层面

构造多个输入,对多个输入分别进行加权,来获得多尺度的特征

(1)最直观的想法,多个SENet,通道注意力,并行,各自没有交集,仅从输出层面上进行相加

image-20250420125115452

emmm…不行,毫无创新点,改进思路:

image-20250420141158328

(一)

  • 首先,要知道多个输入的关系是什么
  • input1/input2/input3,它们之间的关系是什么
  • 一般来说它们是同一种信息的不同表达①通过三个不同的全连接层,得到三个不同的表示②通过三个不同大小的卷积层,来获得三种不同尺度的信息;同一种信息的不同表达,这样才更加的有意义

(二)压缩阶段

将三个输入进行相加,融合了多尺度信息之后,通过一个全局池化操作,获得一个通道描述符,表示将其压缩为 $1×1×C$

(三)

在激励阶段,继续照猫画虎,也是通过两层的全连接层,来建立通道之间的关系,但是需要注意,在第一个全连接层,先将C降维到 $\frac{C}{r}$ ,但是在第二个全连接层,就不能仅仅的恢复到C,因为最开始接收有三个输入,也就意味着要产生三个权重才行,所以在第二个全连接层,需要将它升维到3C,然后再在通道上进行分割操作,平均分割为三份,然后分别通过Sigmoid函数来生成权重表示,然后将权重与对应的三个输入分别进行相乘,最后再通过加权和,得到最后的输出

SKNet

CVPR2019

可选择卷积核的网络

动机:SENet只进行单一尺度的映射,限制了模型的表达能力,因此SKNet从多尺度出发,多尺度是主要动机

🚩 :当只有一个输入的时候,一定要想办法构造多种输入

有了多个输入,框架会更容易搭建,模块之间的交互会更加的灵活

随手补充:回顾通道注意力

分为压缩和激励两个部分,可创新的切入点有四种,分别是直接应用在压缩部分或者是激励部分上做改进,最后是构造多尺度,SKNet属于最后一种构造多尺度的性质

SKNet的框架图

作者将其分为三部分,第一部分是分割,第二部分是融合,第三部分是选择

image-20250420185906492

首先看第一部分,==分割==

作者通过两个不同大小的卷积核,来提取空间特征,分别是3×3的卷积核和5×5的卷积核,然后将它们的特征来进行相加,对比 SENet中只是经过了一个简单的变换, 因此相比SENet,本模型关注了不同区域大小的一个空间特征,在一般情况下,提取多个特征有助于性能提高

划重点提取多尺度多特征/自身门控

第二部分是融合

对相加后的特征U,首先用全局平均池化层来压缩空间特征,来生成通道描述符表示,也就是这个S,对比一下SENet在压缩空间特征的时候,每个空间像素点只有自己的本身特征,而SKNet的每个像素点,包含了周围像素点的信息,就是比SENet信息多,同样在池化之后,信息还是比 SENet 多,这就是SKNet的优点,然后通过全连接层来学习通道之间的相关性,为了提高计算效率,先暂时降维一下,得到Z

第三部分选择部分,既然有选择,必须有权重,确保能识别特征的重要性,获得权重的主流函数:Sigmoid(生成0~1内的值,天然的权重生成器,但它是独立的,考虑不到交互,) Softmax(但不够独立,必须依靠对比,才能得到重要性),SKNet通过两个全连接层分别生成A向量和B向量,这是两个不同空间下的通道描述符,为了表示特征的相对重要性,用softmax为它们分出高低,权重就大,表示的信息就多一点,权重小的表示的信息就少一点,最后将这两部分进行加权求和.

最后,三个算法的对比,

(1)第一个老祖SENet

(2)第二个继承人SKNet

(3)自定义构造的改进模块

image-20250420194151392

相同点:分割\融合\压缩,思想都是构造多尺度,然后在空间层面上进行压缩

看区别:

  • SKNet通过两个全连接层,FC1和FC2,生成两个子空间下的向量表示, $1×1×C$ 和 $1×1×C$
  • 自定义的模块:将通道描述符直接升维到了3C,做法是不同的,但是思想是一致的
  • SKNet通过softmax让多个尺度进行对比,认清自己几斤几两
  • 自定义的模块:将它们在通道上进行分割,分割为三个通道描述符,让它们自己给自己一个评价,SKNet好像更有道理,因为对比,差距是对比产生的
  • 基于此,改进自定义的模块:让多个尺度进行交互,在FC的下面再次添加一个全连接层,就可以在3C的通道之间,捕捉全局的依赖性,起到了交互作用(全连接层也可以交互)
  • 当建模完通道之间依赖性,再分割为三个通道描述符表示,这样的过程就是三个对象先交流一下,再让它们给出自己的评价

CBAM

卷积block注意力模块

ECCV2018

补充:SENet 2017年9月5号fabn 在 arxiv 上的

ECCV2018截稿时间是2018年3月14号(半年的时间)

for us:平时也要多关注一下顶会顶刊的录用列表

👾 本站运行时间:
发表了59篇文章 · 总计11万6千字
使用 Hugo 构建
主题 StackJimmy 设计