SENet模型原理及代码介绍

一.模型简介:

        SENet的全称叫Squeeze-and-Excitation Networks(挤压-激励网络,简称SENet),于2017年提出,并拿下了当年的ImageNet分类比赛的冠军。ResNet是2015年ImageNet的冠军,2016年ResNeXt(由ResNet和Inception网络结合而成)拿下了亚军。论文链接:Squeeze-and-Excitation Networks

        这个网络通过学习channel之间的相关性,提出了针对通道的注意力机制,在增加了一点计算量的代价下,较大的提高了网络的效果。模型的原理图如下所示:

从原理图中大家可能理解优点困难,结合代码便比较容易理解了。使用pytorch实现的SE注意力机制的代码实现如下:

class SELayer(nn.Module):def __init__(self, channel, reduction=16):super(SELayer, self).__init__()# 1. squeeze过程,使用全局平均池化来获得具有全局感受野的特征图,输出特征图形状为1*1*Cself.avg_pool = nn.AdaptiveAvgPool2d(1)# 2. excitation过程,使用全连接层对squeeze之后的特征图进行非线性变换self.fc = nn.Sequential(nn.Linear(channel, channel // reduction, bias=False),nn.ReLU(inplace=True),nn.Linear(channel // reduction, channel, bias=False),nn.Sigmoid())def forward(self, x):b, c, _, _ = x.size()# 全局平均池化后展平得到形状为b*c的张量y = self.avg_pool(x).view(b, c)# 进行非线性变换后将形状调整为b*c*1*1y = self.fc(y).view(b, c, 1, 1)# 3. 特征重标定,使用得到的结果作为权重,乘到输入特征上。expand_as是调整y的形状与x一致。return x * y.expand_as(x)

可以看出SE注意力机制其实特别简单,它只针对特定的特征图做了一些变换工作,并不改变特征图的形状。这种注意力机制实现简单,使其可以任意加在某一个CNN网络的实现过程中。

SE注意力机制的工作步骤:

1.获取特征图x的形状 [b,c,H,W];

2.Squeeze过程。对特征图进行平均池化,调整形状为[b,c]; 对特征图的空间维度进行压缩,生成通道描述符。

3.Excitation过程。对输出的特征图进行非线性变换并调整形状为[b,c,1,1]; 对通道进行压缩,学习不同通道的依赖关系。

4.特征重标定。将得到的结果作为注意力权重与输入特征图x进行相乘,返回结果。

        总结来说,就是3个比较重要的过程:Squeeze,Excitation, 特征重标定。SE注意力机制通过明确建模通道之间的相互依赖性,可以自适应地重新校准通道特征响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620331.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

护眼台灯怎么选看哪些指标?细数五款性价比最高的护眼灯

在日常生活中,越来越多的人开始重视眼部保护。除了日常用眼要合理、阅读写作姿势要正确外,良好的用眼环境同样重要。很多人在写作、学习时都会开启台灯来补充光源,优化用眼环境。但如果台灯不护眼,反而可能加剧眼部疲劳、近视等问…

【服务器部署篇】Linux下Jenkins安装和配置

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

Java反序列化Commons-Collections-CC1链

环境搭建 JDK8u71以下,这个漏洞已经被修复了,这个JDK的以上版本都修复了漏洞 JDK8u65 下载地址 https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html这个时候来到 pom.xml 配置Maven依赖下载CommonsCollections3.2.…

【HTML】制作一个简单的实时字体时钟

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML代码,具体内容如下: 开始 首先新建文件夹,创建一个文本文档,两个文件夹,其中HTML的文件名改为[index.html]&am…

SpringSecurity源码分析3--UserDetail部分

UserDetailsService.class DaoAuthenticationProvider.class AbstractUserDetailsAuthenticationProvider.class 一个允许子类重写和处理UserDetails对象的基AuthenticationProvider。该类旨在响应UsernamePasswordAuthenticationToken身份验证请求。 AuthenticationProvider…

树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Ngi…

负载均衡(理解/解析)

目录 什么是负载均衡 应用场景 网络服务和应用: 云计算和虚拟化: 负载均衡分类 硬件负载均衡器 软件负载均衡器 部署方式 硬件部署: 软件部署: 云部署: 路由模式: 算法实现 轮询法(Round R…

【详细介绍下火绒安全】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

如何做信创测试

信创测试是一种系统化的方法,旨在评估和验证创意和创新项目的潜力和可行性。进行信创测试可以帮助企业在投入大量资源之前,对创意进行客观、科学的评估,以减少失败的风险并最大化成功的可能性。以下是一般性的信创测试步骤: 确定…

Web前端 JavaScript笔记4

1、元素内容 属性名称说明元素名.innerText输出一个字符串,设置或返回元素中的内容,不识别html标签元素名.innerHTML输出一个字符串,设置或返回元素中的内容,识别html标签元素名.textContent设置或返回指定节点的文本内容&#x…

Pygame经典游戏:贪吃蛇

------------★Pygame系列教程★------------ Pygame经典游戏:贪吃蛇 Pygame教程01:初识pygame游戏模块 Pygame教程02:图片的加载缩放旋转显示操作 Pygame教程03:文本显示字体加载transform方法 Pygame教程04:dra…