注意力机制:SENet详解

news/2024/9/24 9:18:46/

  SENet(Squeeze-and-Excitation Networks)是2017年提出的一种经典的通道注意力机制,这种注意力可以让网络更加专注于一些重要的featuremap,它通过对特征通道间的相关性进行建模,把重要的特征图进行强化来提升模型的性能。论文链接 代码实现

模型

  SENet的模型结果如图所示:
在这里插入图片描述
  网络的输入 X X X是个多通道的图片,其维度为 [ H ′ , W ′ , C ′ ] [H',W^′,C^′] [H,W,C] ,经过一系列卷积等维度变化操作后得到U,其维度是 [ H , W , C ] [H,W,C] [H,W,C] ,其中C是通道的数量,那么我们融合不同通道的特征呢,这个时候就进入到了SENet,对于U,先经过全局平均池化的操作,即将U的维度由 [ H , W , C ] [H,W,C] [H,W,C]变成 [ 1 , 1 , C ] [1,1,C] [1,1,C],这一步对应着上图中的 F s q ( ⋅ ) F_{sq} ( \cdot) Fsq() ,实际上是对每一个特征图的特征通过池化的方式做了一个总结,这个总结作为初始值送入后面的多层神经网络,学习到不同通道的权重。全连接层的结构为:
在这里插入图片描述
  这个多层感知机的结构非常简单,就是两个全连接层和两个激活函数,在第一次全连接层后使用Relu激活函数,此时得到的输出维度为 [ 1 , 1 , C ′ ′ ] [1,1,C''] [1,1,C′′] 。第二个全连接层后使用Sigmoid函数,将每层数值归一化到0-1之间,以此表示每个通道的权重,第二个全连接的输出也为 [ 1 , 1 , C ] [1,1,C] [1,1,C]。得到了最后 [ 1 , 1 , C ] [1,1,C] [1,1,C]的输出后,我们将 U U U和刚刚得到的权重结果相乘,得到最终的特征图 X ^ \hat X X^,它和 U U U的维度一致,但是在 X ^ \hat X X^中,不同特征图已经根据权重结果进行了重新加权。

代码

附上SENet的一个简单实现:

def SENet(input):#全局平均池化x = nn.AdaptiveAvgPool2d((1,1))(input)x = x.view(1, -1)#第一个全连接层x = nn.Linear(2, 1)(x)x = nn.functional.relu(x)#第二个全连接层x = nn.Linear(1, 2)(x)x = nn.functional.sigmoid(x)return xif __name__ == '__main__':input = torch.ones(1, 2 ,2 ,2)output = SENet(input)# 将SENet的输出维度进行变化,以便后面的乘机操作output = output.view(input.shape[0], input.shape[1],1, 1)SE_output = input*output

http://www.ppmy.cn/news/1440964.html

相关文章

Docker容器部署overleaf

overleaf在线版限制很多,好在开源,准备在本地Docker部署,网上翻了翻,似乎本地部署并非易事,我也尝试了一下,发现直接使用docker-compose拉官方最新镜像部署的确问题很多,不过最终还是完美解决。…

打印给定数组中每一个数字

如何给定1-10的数字 #include<stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };// 0 9//[]--下标引用操作符int i;int sz sizeof(arr) / sizeof(arr[0]);//10个数for (i 0; i < sz; i){printf("%d ", arr[i]);}re…

微信小程序[黑马笔记]

简介 常用组件 视图组件 <!--pages/list/list.wxml--><scroll-view class"container1" scroll-y><view>A</view><view>B</view><view>A</view></scroll-view><!--pages/list2/list.wxml--><swiper …

Kafka 3.x.x 入门到精通(07)——Java应用场景——SpringBoot集成

Kafka 3.x.x 入门到精通&#xff08;07&#xff09;——Java应用场景——SpringBoot集成 4. Java应用场景——SpringBoot集成4.1 创建SpringBoot项目4.1.1 创建SpringBoot项目4.1.2 修改pom.xml文件4.1.3 在resources中增加application.yml文件 4.2 编写功能代码4.2.1 创建配置…

uniapp中action与mutation的区别

在 uniapp 的 Vuex 状态管理库中&#xff0c;action 和 mutation 是两个非常重要的概念&#xff0c;它们各自有不同的职责和使用场景。虽然它们都是用来修改状态&#xff08;state&#xff09;的&#xff0c;但它们在使用的方式和执行的时机上存在一些关键的区别。 Mutation …

用C实现通讯录(详细讲解+源码)

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL.. &#x1f4da;以后会将数据结构收录为一个系列&#xff0c;敬请期待 ● 本期内容会给大家带来通讯录的讲解&#xff0c;主要是利用结构体来实现通讯录&#xff0c;该通讯…

ITMS-90426: Invalid Swift Support

原文 Please correct the following issues and upload a new binary to App Store Connect. ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it. 解决方式 ITMS-…

FIR补偿滤波器——matlab的FDA实现

输入采样频率&#xff1a;192KHz 抽取倍数&#xff1a;2 通带截至频率&#xff1a;20KHz 通带衰减&#xff1a;0.1dB 阻带衰减&#xff1a;120dB 在更多选项那里&#xff0c;设置c为0.5&#xff0c;代表抽取倍数为1/c&#xff0c;p设置为4&#xff0c;代表级联阶数。FIR补偿…