SENet 学习

ILSVRC

是一个比赛,全称是ImageNet Large-Scale Visual Recognition Challenge,平常说的ImageNet比赛指的是这个比赛。
使用的数据集是ImageNet数据集的一个子集,一般说的ImageNet(数据集)实际上指的是ImageNet的这个子集,总共有1000类,每类大约有1000张图像。完整的 ImageNet,有大约1.2million的训练集,5万验证集,15万测试集。ILSVRC从2010年开始举办,到2017年是最后一届。ILSVRC-2012的数据集被用在2012-2014年的挑战赛中(VGG论文中提到)。ILSVRC-2010是唯一提供了test set的一年。
ImageNet可能是指整个数据集(15 million),也可能指比赛用的那个子集(1000类,大约每类1000张),也可能指ILSVRC这个比赛。需要根据语境自行判断。
12-17年期间在ImageNet比赛上提出了一些经典网络,比如AlexNet,ZFNet,VGG, GoogLeNet, ResNet,DenseNet,SENet。我之前的博文都有相应模型及其变体的介绍。

在这里插入图片描述

  • 13 年 ZFNet
  • 16 年 DenseNet

SENET简介

提出背景:卷积核通常被看做是在局部感受野上,在空间上和通道维度上同时对信息进行相乘求和的计算。现有网络很多都是主要在空间维度方面来进行特征的融合(如Inception的多尺度)。
通道维度的注意力机制:在常规的卷积操作中,输入信息的每个通道进行计算后的结果会进行求和输出,这时每个通道的重要程度是相同的。而通道维度的注意力机制,则通过学习的方式来自动获取到每个特征通道的重要程度(即feature map层的权重),以增强有用的通
道特征,抑制不重要的通道特征。
说起卷积对通道信息的处理,有人或许会想到逐点卷积,即kernel大小为1X1的常规卷积。与1X1卷积相比,SENet是为每个channel重新分配一个权重(即重要程度)。而1X1卷积只是在做channel的融合计算,顺带进行升维和降维,也就是说每个channel在计算时的重要程度是相同的。

SENet 模块

在这里插入图片描述

X经过一系列传统卷积得到U,对U先做一个Global Average Pooling,输出的1x1xC数据(即,上图梯形短边的白色向量),这个特征向量一定程度上可以代表之前的输入信息,论文中称之为Squeeze操作。
再经过两个全连接来学习通道间的重要性,用sigmoid限制到[0,1]的范围,这时得到的输出可以看作每个通道重要程度的权重(即上图梯形短边的彩色向量),论文中称之为Excitation操作。
最后,把这个1x1xC的权重乘到U的C个通道上,这时就根据权重对U的channles进行了重要程度的重新分配。

效果

  • 与SE模块可以嵌入到现在几乎所有的网络结构中,而且都可以得到不错的效果提升,用过的都说好。
  • 在大部分模型中嵌入SENet要比非SENet的准确率更高出1%左右,而计算复杂度上只是略微有提升,具体如下图所示。而且SE块会使训练和收敛更容易。CPU推断时间的基准测试:224×224的输入图 像,ResNet-50 164ms, SE-ResNet-50 167ms。在这里插入图片描述

代码

class SqueezeExcite(nn.Module):def __init__(self,input_c: int,   # block input channelexpand_c: int,  # block expand channelse_ratio: float = 0.25):super(SqueezeExcite, self).__init__()squeeze_c = int(input_c * se_ratio)self.conv_reduce = nn.Conv2d(expand_c, squeeze_c, 1)self.act1 = nn.SiLU()  # alias Swishself.conv_expand = nn.Conv2d(squeeze_c, expand_c, 1)self.act2 = nn.Sigmoid()def forward(self, x: Tensor):scale = x.mean((2, 3), keepdim=True)scale = self.conv_reduce(scale)scale = self.act1(scale)scale = self.conv_expand(scale)scale = self.act2(scale)return scale * x

总结

  • SE block 可以理解为 channel维度上的注意力机制(即重分配通道上 feature map对后续计算的权重),与Stochastic Depth Net一样,本论文的贡献更像一种思想,而非模型。在之后的模型中,会经常看见SE block 的身影。例如,SKNet,MobileNet等等。

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

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

相关文章

容器类之QT

容器类之QT 顺序容器 关联容器 STL迭代容器 STL风格的反向迭代容器 QVariant类 QFlags类 QRandomGenerator类

金属纳米颗粒通过水基剥离方案使用嵌段共聚物模板

引言 随着纳米结构表面和界面在广泛的科学和技术应用中变得越来越重要,确定可扩展和廉价的方法来实现这些变成了一个关键的挑战。特别是有序、非密集、表面支撑的金属纳米颗粒的大面积阵列的制造,由于其在不同领域如等离子体增强薄膜太阳能电池中的应用…

Jupyter中使用parse报错[args = pp.parse_args()]

在Jupyter Notebook中使用parse报错了, pp argparse.ArgumentParser(description) pp.add_argument(--dataset, typestr, choices[pascal, coco, nuswide, cub], requiredTrue) pp.add_argument(--num-pos, typeint, default1, requiredFalse, helpnumber of posi…

NULL和const

// In C, NULL is limited to identifying a null pointer. // 在C中,它是一个宏 #define NULL ((void *)0)\0 is defined to be a null character - that is a character with all bits set to zero.const // const表示read-only的变量,和完全意义上的常量还不太一样 The con…

【电路笔记】-波特图(Bode Diagrams)

波特图(Bode Diagrams) 文章目录 波特图(Bode Diagrams)1、概述2、定义3、波特图的呈现4、常见的波特图4.1 一阶滤波器4.2 二阶滤波器 5、总结 1、概述 上世纪30年代末,一位名叫 Hendrick Wade Bode 的美国工程师设计了一个著名的表示法来研究频域中的交流电路。 这…

论文-分布式-并发控制-Lamport逻辑时钟

目录 前言 逻辑时钟讲解 算法类比为面包店内取号 Lamport算法的时间戳原理 Lamport算法的5个原则 举例说明 算法实现 参考文献 前言 在并发系统中,同步与互斥是实现资源共享的关键Lamport面包店算法作为一种经典的解决并发问题的算法,它的实现原…

docker部署rabbitmq的坑

背景 今天用docker部署rabbitmq,启动都一起正常,但是当访问15672端口时,不能加载出页面。 排查 1.防火墙是否开启 ufw status2.ip是否能ping通 ping 192.168.x.x3.检查docker日志 docker psdocker logs -f 容器id4.进入容器&#xff0c…

Vue3项目创建+组合式API使用+组件通信+渲染微博热搜+打包上线

摘要 Vue3的组合式API大大减少了代码量,以及使用也方便了很多,本案例使用Vite创建一个Vue3示例,简单介绍Vue3的组合式API使用以及父传子组件传参示例。 创建Vue3项目 1、首先要安装 Node.js 下载地址:https://nodejs.org/en/do…

Windows安装virtualenv虚拟环境

需要先安装好python环境 1 创建虚拟环境目录 还是在D:\Program\ 的文件夹新建 .env 目录(你也可以不叫这个名字,一般命名为 .env 或者 .virtualenv ,你也可以在其他目录中创建) 2 配置虚拟环境目录的环境变量 3 安装虚拟环境 进…

2310D导入c部分可用

看看简单的示例(该示例不使用.di文件): 这里 克隆它并放文件在方便的地方. 现在,试使用它. 在此例中,map.c和app.d在同一目录中. import std.stdio : writeln; //使用map.c import map; import std.string : toStringz; alias c toStringz; void main() {hashmap* m hashmap…

如何集成验证码短信API到你的应用程序

引言 当你需要为你的应用程序增加安全性和用户验证功能时,集成验证码短信API是一个明智的选择。验证码短信API可以帮助你轻松实现用户验证、密码重置和账户恢复等功能,提高用户体验并增强应用程序的安全性。本文将介绍如何将验证码短信API集成到你的应用…

AutoCAD 2024 Mac中文附激活补丁 兼容M1.M2电脑

AutoCAD 2024是一款功能强大的CAD设计绘图工具,旨在帮助用户创建和编辑高质量的设计图纸和模型。该软件支持2D和3D设计,具有丰富的功能和工具,可用于绘图、建模、注释、标注、尺寸设置等多种操作。AutoCAD 2024还引入了智能对象捕捉、实时预览…

【AGC】.p12证书文件如何获取MD5

近期在使用DevEco Studio3.1打包应用时遇到了一个问题,我使用Build—Generate Key and CSR创建了密钥库文件。 我这里需要获取到创建的.p12证书文件的MD5值,于是在控制台使用了keytool -list -v -keystore D:\myapp.p12命令获取证书指纹,但是…

【51单片机】:智能施工电梯系统

项目效果: 基于51单片机的智能施工电梯系统 摘 要 智能施工电梯系统目前广泛应用于人们建筑工程中,为人们施工时上下搬运提供了极大的便利。智能施工电梯系统包括密码开启、超重提示,电梯运作及相关信息显示等等功能,施工电梯为我…

坤坤的加法

描述 坤坤现在很苦恼,现在的他计算不出来位数比较大的数了,因为他不好好学习,导致他的计算力大大下降了,现在老师布置了一个任务,关于两个数进行相加的情况,并且将和先进行正序表示,在进行逆序表…

ROS学习笔记——配置环境变量

重点解决:避免每次都source ros2环境,每次都要设置ros_domain_id等等设置 Background ROS 2 relies on the notion of combining workspaces using the shell environment. ros2 依赖于“组合工作区”这个改变,使用shell 环境来实现 …

DevOps持续集成-Jenkins(1)

文章目录 DevOpsDevOps概述Code阶段工具(centos7-gitlab主机)Windows下安装Git(作用是:使我们可以上传代码到GitLab)Linux下安装GitLab⭐(作用是:运行一个GitLab接收代码)环境准备先…

数据结构 C语言 2.1 线性表抽象数据类型 2.2 小议顺序表

一、线性表抽象数据类型 线性表的定义 定义:零个或多个数据元素的有限序列 线性表的特点: 1.它是一个序列 数据元素之间是有序的 数据元素之间是一对一的关系 2.有限性 线性表的数据元素个数是有限的 注意:零个数据元素的有限序列又…

统信UOS专业版服务器无人值守安装

1、UOS系统版本说明 UOS系统桌面版本分为:家庭版、专业版、教育版、社区版 (1)、家庭版: cpu目前仅支持X86架构,主要面向普通(C端)消费者,试用期免费获得1年的使用,但可…

【Qt样式(qss)-5】qss局部渲染混乱,错乱,不生效的一种原因

前言: 之前写过一些关于qss的文章: 【Qt样式(qss)-1】手册小结(附例:软件深色模式)_深蓝色主题qss表-CSDN博客 【Qt样式(qss)-2】使用小结(软件换肤&#…