当前位置:网站首页>注意力机制
注意力机制
2022-08-02 10:44:00 【咸咸咸咸的】
1,Squeeze-and-Excitation网络
论文:Squeeze-and-Excitation Networks
论文链接:https://arxiv.org/abs/1709.01507
代码地址:https://github.com/hujie-frank/SENet
PyTorch代码地址:https://github.com/miraclewkf/SENet-PyTorch
首先,Squeeze-and-Excitation Networks(SE)并不是一个完整的网络模型,它是一个子结构,我们可以将它加在很多模型中。SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。
Figure1就是 SENet的结构,首先Ftr这一步是转换操作(严格讲并不属于SENet,而是属于原网络,可以看后面SENet和Inception及ResNet网络的结合),在文中就是一个标准的卷积操作而已,输入输出的定义如下表示。
接下来就是Squeeze操作,公式非常简单,就是一个global average pooling(全局平均池化)
因此公式2就将U(H*W*C)的输入转换成Z(1*1*C)的输出,
再接下来就是Excitation操作,如公式3。
前面squeeze得到的结果是z,这里先用W1乘以z,就是一个全连接层操作,W1的维度是C/r * C,这个r是一个缩放参数,在文中取的是16,这个参数的目的是为了减少channel个数从而降低计算量。又因为z的维度是11C,所以W1z的结果就是11C/r;然后再经过一个ReLU层,输出的维度不变;然后再和W2相乘,和W2相乘也是一个全连接层的过程,W2的维度是C*C/r,因此输出的维度就是11C;最后再经过sigmoid函数,得到s。
也就是说最后得到的这个s的维度是11C,C表示channel数目。
在得到s之后,就可以对原来的U操作了,就是下面的公式4。也很简单,就是channel-wise multiplication,什么意思呢?uc是一个二维矩阵,sc是一个数,也就是权重,因此相当于把uc矩阵中的每个值都乘以sc。对应Figure1中的Fscale。
举例,怎样将SENet加入到模型中。
Figure2是在Inception中加入SE block的情况,这里的Inception部分就对应Figure1中的Ftr操作。
2,Convolutional Block Attention Module
论文地址:https://arxiv.org/pdf/1807.06521.pdf
代码地址:https://github.com/Jongchan/attention-module
CBAM(Convolutional Block Attention Module)它包含了两部分,结构如下:
上图可以看到,CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)两个子模块,分别进行通道和空间上的Attention。
首先,具体看一下CAM
首先,对输入层并行进行MaxPool和AvgPool两个操作,输入从C*W*H变成两个了C*1*1,这两个c*1*1分别进行Shared MLP操作,在该模块中,它先将通道数压缩为原来的1/r(Reduction,减少率)倍,再扩张到原通道数,经过ReLU激活函数得到两个激活后的结果。将这两个输出结果进行逐元素相加,再通过一个sigmoid激活函数得到Channel Attention的输出结果,再将这个输出结果乘原图,变回C*H*W的大小。
再来看一下,SAB:
图解:将Channel Attention的输出结果通过最大池化和平均池化得到两个1*H*W的特征图,然后经过Concat操作对两个特征图进行拼接,通过7*7卷积变为1通道的特征图(实验证明7*7效果比3*3好),再经过一个sigmoid得到Spatial Attention的特征图,最后将输出结果乘原图变回C*H*W大小。
空间注意力公式:
3,ECA-Net
论文地址:
结构如下:
与SE类似,先全局平均池化,SE是先用全连接层进行压缩再扩充,ECA通过大小为 k 的快速一维卷积实现,其中核大小k表示 局部跨通道交互
的覆盖范围,即有多少领域参与了一个通道的注意预测,
4,Coordinate Attention
Paper:https://arxiv.org/pdf/2103.02907.pdf
GitHub:https://github.com/Andrew-Qibin/CoordAttention
SE只考虑内部通道信息而忽略了位置信息的重要性,而视觉中目标的空间结构是很重要的。
BAM和CBAM尝试去通过在通道上进行全局池化来引入位置信息,但这种方式只能捕获局部的信息,而无法获取长范围依赖的信息(过几层的卷积后feature maps的每个位置都包含了原图像一个局部区域的信息,CBAM是通过对每个位置的多个通道取最大值和平均值来作为加权系数,因此这种加权只考虑了局部范围的信息)。
来看一下Coordinate Attention,它包括坐标信息嵌入(coordinate information embedding)和坐标注意力生成(coordinate attention generation),它的具体结构如下图。
1,对输入 X (C*H*W),先使用尺寸 ( 1,W) 和 (H,1)的池化核沿着水平坐标方向和竖直坐标方向对每个通道进行编码,得到两个特征图大小分别是(C*H*1)和(C*1*W)。
2,先级联之前模块生成的两个特征图,再用1*1的卷积核进行卷积,输出为C/r*1*(W+H)。
3,批归一化和非线性变换
4,将C/r*1*(w+h)分裂成C/r*H*1和C/r*1*W两个特征图,再用1*1的卷积核卷积,结果为C*H*1和C*1*W两个特征图,再用激活函数sigmoid.
5,最后,输出为
Xc为输入原图的第c个通道,Gch,Gcw是步骤四两个特征图的第c个通道。
边栏推荐
- 一款优秀的中文识别库——ocr
- R language ggplot2 visualization: use the ggbarplot function of the ggpubr package to visualize the horizontal column chart (bar chart), use the orientation parameter to set the column chart to be tra
- 多线程(基础) - 4万字总结
- R language ggplot2 visualization: based on the fill parameter and shape parameter in the aes function, custom draw a grouped line chart and add data points (scatter points), use the legend.position fu
- 记一次mysql查询慢的优化历程
- MapStruct
- WPF 截图控件之文字(七)「仿微信」
- C#/VB.NET to add more lines more columns image watermark into the Word document
- LayaBox---TypeScript---模块解析
- c#反射和特性
猜你喜欢
随机推荐
外包学生管理系统架构文档
Hongxing, donate another million
ECCV22|PromptDet:无需手动标注,迈向开放词汇的目标检测
MP的几种查询方式
全新荣威RX5,27寸大屏吸引人,安全、舒适一个不落
多大数量级会出现哈希碰撞
关于#oracle#的问题,如何解决?
sqlmap安装教程用w+r打开(sqlyog安装步骤)
After 21 years of graduation, I switched to software testing. From 0 income to a monthly salary of over 10,000, I am really lucky...
AlphaFold又放大招,剑指整个生物界!
详细总结SoC、DSP、MCU、GPU和FPGA等基础概念
8年软件测试工程师的感悟:与薪资相匹配的永远是实力
Question about #oracle#, how to solve it?
行为型模式-模板方法模式
2022年8月初济南某外包公司全栈开发面试题整理
MSYS2 QtCreator Clangd 代码分析找不到 mm_malloc.h的问题补救
Weak yen turns game consoles into "financial products" in Japan: scalpers make big profits
学习笔记-支付宝支付
How to technically ensure the quality of LED display?
X86函数调用模型分析