论文阅读(二十三):Squeeze-and-Excitation Networks

文章目录

  • 1.介绍
  • 2.原理
  • 3.代码
  • 4.SE模块的应用


  论文:Squeeze-and-Excitation Networks
  论文链接:Squeeze-and-Excitation Networks
  代码链接:Github

1.介绍

  卷积算子使网络能够在每一层的局部感受野中融合空间(spatial)和通道(channel)信息来构造信息特征。本文将重点放在通道(channel)关系上,提出SE(Squeeze-and-Excitation Block)模块,其显式建模通道之间的相互依赖性,自适应的重新校准通道方向上的特征响应,来提高所提取特征的质量。将SE模块堆叠在一起,就形成了SENet(Squeeze-and-Excitation Networks)。
  通俗来说,SENet的核心在于通过网络根据损失函数学习特征权重,使得特征图中有效通道的权重变大,无效或效果小的通道权重变小的方式训练模型达到更好的结果。而SE(Squeeze-and-Excitation Block)模块是一个子结构,可嵌入其他模型当中。

2.原理

在这里插入图片描述
  给定输入 x x x,其经一系列卷积操作(定义为 F t r ( ⋅ ; θ ) F_{tr}(·;θ) Ftr(⋅;θ))后得到通道数为 c w c_w cw的特征,其形状为 ( C , H , W ) (C,H,W) (C,H,W)。 之后通过三种运算来实现SE模块的功能:
【1. S q u e e z e Squeeze Squeeze操作】
  卷积核只能关注到局部感受野的空间信息,感受野区域之外的信息无法利用,这使得输出特征图就很难获得足够的信息来提取通道之间的关系。 S q u e e z e Squeeze Squeeze操作,定义为 F s q ( ⋅ ) F_{sq}(·) Fsq(),顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。这一操作通过全局平均池化实现:
F s q ( c 2 ) = 1 H × W ∑ i = 1 H ∑ j = 1 W c 2 ( i , j ) F_{sq}(c_2)=\frac{1}{H×W}\sum^{H}_{i=1}\sum^{W}_{j=1}c_2(i,j) Fsq(c2)=H×W1i=1Hj=1Wc2(i,j)
特征图经过 F s q ( ) F_{sq}() Fsq()运算后得到全局统计向量,形状为 ( 1 , 1 , c 2 ) (1,1,c_2) (1,1,c2)。此时一个像素值代表一个通道,从而屏蔽掉空间上的分布信息,更好的利用通道间的相关性。

【2. E x c i t a t i o n Excitation Excitation操作】
   E x c i t a t i o n Excitation Excitation操作,定义为 F e x ( ⋅ ; w ) F_{ex}(·;w) Fex(⋅;w),用于捕获通道之间的依赖关系。这里使用了神经网络的门机制,即使用两个全连接层+两个激活函数组成的结构输出和输入与特征同样数目的权重值,也就是每个特征通道的权重系数。并且,为了限制模型复杂度和辅助泛化,在构造全连接层时对通道 c 2 c_2 c2进行了降维处理,降维比例为 r r r。计算公式:
在这里插入图片描述
其中, W 1 ∈ R C r × C , W 2 ∈ R C r × C W_1∈R^{\frac{C}{r}}×C,W_2∈R^{\frac{C}{r}}×C W1RrC×CW2RrC×C,两个激活函数依次为 R e L U 、 s i g m o i d ReLU、sigmoid ReLUsigmoid。原理图:
在这里插入图片描述
【3. S c a l e Scale Scale操作】
   S c a l e Scale Scale操作定义为 F s c a l e ( ⋅ , ⋅ ) F_{scale}(·,·) Fscale(⋅,⋅),用于将前面得到的注意力权重加权到每个通道的特征上。论文中通过逐通道乘以权重系数,即在在通道维度上引入attention机制来实现。如下图所示:
在这里插入图片描述
不同颜色代表不同通道的重要程度。

3.代码

在这里插入图片描述

import torch.nn as nnclass SELayer(nn.Module):def __init__(self, channel, reduction=16):#channel:输入通道数;reduction:缩减比率super(SELayer, self).__init__()#1.Squeezeself.avg_pool = nn.AdaptiveAvgPool2d(1)#2.Excitationself.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()y = self.avg_pool(x).view(b, c)y = self.fc(y).view(b, c, 1, 1)#3.Scalereturn x * y.expand_as(x)

4.SE模块的应用

  例如,可将SE模块集成在残差块中:
在这里插入图片描述
以此形成集成后的ResNet网络:
在这里插入图片描述

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

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

相关文章

视频智能分析平台LiteAIServer摄像机视频分析软件下载检测工业排污

在全球环境保护与可持续发展的大潮中,工业排污的有效监控与管理成为了衡量一个国家或地区绿色发展能力的重要指标。面对这一挑战,视频智能分析平台LiteAIServer以其创新的技术手段,为工业排污监管开辟了新路径,展现了科技在环保领…

【git】 git 删除了文件,如何找回

git 删除了文件,如何找回 使用 git revert 并不是恢复误删除文件的最佳方法,因为 git revert 通常用于撤销已经提交的更改(生成一个反向提交)。如果你误删除了文件,还未提交更改,或者已经提交但想恢复删除…

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包(UI Toolkit)不但可以用于创建编辑器UI,同样可以来创建运行时UI。 关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见: 1. Unity中的UI系统 2. 初识UI Toolkit - 编辑器UI 本文将通过一个简单示例来…

Docker Compose一键部署Spring Boot + Vue项目

目录 前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) …

动态代理:面向接口编程,屏蔽RPC处理过程

RPC远程调用 使用 RPC 时,一般的做法是先找服务提供方要接口,通过 Maven把接口依赖到项目中。在编写业务逻辑的时候,如果要调用提供方的接口,只需要通过依赖注入的方式把接口注入到项目中,然后在代码里面直接调用接口…

13.音乐管理系统(基于SpringBoot + Vue)

目录 1.系统的受众说明 ​​​​​​​ 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图(图2.2.1-1) 2.2.2 系统功能表(表2.2.2…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (一)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得(一) 一、前言 鸿蒙官网文档中蓝牙部分,对于之前没有开发过蓝牙的同学,使用和查阅起来不是很方便。因为只是API的调用说明。并没有蓝牙整个调用流程的讲解,所以看起来会…

Golang的多版本管理

Golang的多版本管理 一、 为什么需要多版本管理? 现代软件开发中,随着项目日益复杂,往往需要使用不同的Golang版本来适配不同的依赖库或者框架。同时,不同的项目也可能需要不同的Golang版本来编译和执行。因此,多版本管…

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中,这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据,但是迁移工具对一次迁移的数据是是有大小限制的,如果500条数据的总大小大于4194304,就会导致数据…

Nop平台与SpringCloud的功能对比

Nop平台是根据可逆计算原理从零开始设计并实现的新一代的低代码平台,它的目标并不是针对少数固化的场景提供预置的开发脚手架和可视化设计工具, 而是打破描述式编程和传统命令式编程之间人为制造的藩篱,建立两者无缝相容的一种新的编程范式。…

基于SpringBoot云养鸡互动平台的设计与实现

前言 对于当今社会的人们来说,互联网技术是必不可少的,随着经济和技术的不断发展,计算机已经深入到各个领域。云养鸡互动平台将人们的时间需求与计算机技术结合起来,架起一座桥梁,使云养鸡互动更加方便快捷。云养鸡互…

使用Kubernetes管理容器化应用

使用Kubernetes管理容器化应用 Kubernetes简介 安装Kubernetes 安装Minikube 启动Minikube集群 创建一个简单的Web应用 创建项目目录 初始化项目 安装Node.js依赖 创建Docker镜像 编写Dockerfile 构建并推送Docker镜像 创建Kubernetes配置文件 创建Deployment 创建Service …

使用飞桨AI Studio平台训练数据,并进行图像识别分析得牡丹花测试

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

自适应神经网络架构:原理解析与代码示例

个人主页:chian-ocean 文章专栏 自适应神经网络结构:深入探讨与代码实现 1. 引言 随着深度学习的不断发展,传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 在Python中,异常(Exception)是一种用于处理在程序运行时可能发生的错误情况的机制 异常允许程序在检测到错误时不是简单地崩溃,而是能够优雅地处理这些错误,可能包括记录错误信息、清理资源、或者向用户提…

A4-C四驱高防变电站巡检机器人

在电力行业数字化、智能化转型进程中,搭载多模态成像传感器的变电站巡检机器人、视频监控设备逐渐取代传统人工,成为变电设备状态监测的主要工具。变电站巡检机器人具有全天候、非接触式、多参量测量等特点,结合内置人工智能算法完成仪表识别…

MATLAB锂电概率分布模型

🎯要点 概率分布等效电路模型结合了路径相关速率能力及状态估计中滞后效应。纠正了充电状态中时间误差累积及避免开路电压中电压滞后现象。使用电流方向和电池容量相关函数描述开路电压,并使用微分方程描述电压滞后现象。模型结构基于一级相变的材料机制…

QT界面开发--我的第一个windows窗体【菜单栏、工具栏、状态栏、铆接部件、文本编辑器、按钮、主界面】

经过前面的铺垫,今天我们就开始我们图形化界面之旅了,我们的第一个窗体主要包括:菜单栏、状态栏、工具栏、铆接部件、还有Qt提供的一些主窗体的API。 第一部分:主界面(QMainWindow) 当创建好项目后,我们直接运行&…

Unity中的动画状态机(详解)

动画状态机的定义 Unity中的动画状态机(Animator Controller)是用于定义和管理角色或对象动画状态之间转换的工具。它允许动画师和开发者设计复杂的动画逻辑; 例如角色的行走、跑步、跳跃、攻击等动作,以及其他动作之间的平滑过渡…

Vue笔记-element ui中关于table的前端分页

对于 Element UI 表格的前端分页&#xff0c;可以在组件中使用 JavaScript 来实现数据的分页显示&#xff0c;而不必从后端获取已分页的数据。以下是一个简单的示例&#xff0c;演示如何在前端进行 Element UI 表格的分页&#xff1a; <template><div><el-tabl…