挤压激励注意力 SE | Squeeze-and-Excitation Networks

news2024/12/24 20:13:04

在这里插入图片描述

论文名称:《Squeeze-and-Excitation Networks》

论文地址:https://arxiv.org/pdf/1709.01507.pdf

代码地址: https://github.com/hujie-frank/SENet


卷积神经网络 (CNN) 的核心构建块是卷积运算符,它使网络能够通过在每一层的局部感受野中融合空间和通道信息,构建有用的特征。大量的先前研究已经探讨了这种关系的空间部分,旨在通过增强整个特征层次结构中的空间编码质量来加强 CNN 的表现能力。在这项工作中,我们转而关注通道关系,提出了一种新的结构单元,我们称之为 “Squeeze-and-Excitation” (SE) 块,它通过显式建模通道间的相互依赖关系,自适应地重新校准通道特征响应。我们展示了这些模块可以堆叠在一起,形成非常有效地跨不同数据集进行泛化的 SENet 架构。我们还证明,SE 块可以为现有的最先进 CNN 提供显著的性能改进,代价仅为轻微的计算开销。

Squeeze-and-Excitation 网络是我们在 ILSVRC 2017 分类提交的基础,该提交获得了第一名,并将 top-5 错误率降低到 2.251%,相较于 2016 年的获奖结果,取得了约 25% 的相对改进。


问题背景

随着深度学习和神经网络的发展,卷积神经网络(CNN)在许多视觉任务中取得了巨大成功。这些网络通过卷积操作来提取信息,将空间和通道特征融合在一起。然而,尽管在构建深度和复杂模型方面取得了显著进展,但仍有许多方法试图增强模型的表现力。一些研究集中在空间特征的增强上,而其他研究则试图提高深度网络的稳定性。本文提出了一种新的方式,即通过显式建模通道间的相互关系来增强卷积神经网络的表达能力。


核心概念

这篇文章的核心概念是 “Squeeze-and-Excitation”(简称SE)模块。该模块通过调整每个通道的权重,来实现对通道间依赖关系的建模。SE模块的设计目的是通过动态调整通道权重,增加网络的灵活性,从而提高网络的表现力。它通过两个关键步骤来实现这一目标:挤压和激发。


模块的操作步骤

在这里插入图片描述

SE模块的操作步骤包括两个主要部分:挤压和激发。在挤压步骤中,模块使用全局平均池化来聚合空间维度,从而生成一个通道描述符。这一操作可以帮助网络获得全局信息,并嵌入通道特征的统计数据。在激发步骤中,模块使用一个简单的门控机制,通过sigmoid激活来调整通道特征。激发操作通过两个全连接层来完成,这两个全连接层之间包含ReLU激活,用于学习通道间的非线性关系。最终,模块会根据激发结果对通道进行重加权,从而实现对特征的动态调整。


文章贡献

本文的主要贡献在于提出了SE模块,并通过将其嵌入到现有的卷积神经网络中,显著提高了网络的表现力。SE模块的设计非常灵活,既可以作为一种新的模块加入网络中,也可以直接替换已有的模块。本文展示了SE模块在不同深度、不同架构的网络中的应用,并证明了其有效性。此外,作者还在ImageNet等著名数据集上进行了实验,显示了SE模块带来的性能提升。


实验结果与应用

实验结果表明,SE模块在多种不同的网络架构中都能带来显著的性能提升。作者通过在ResNetInception和其他现代架构中加入SE模块,证明了其普适性和有效性。在ImageNet数据集上的实验结果显示,SE模块可以显著降低错误率,提高准确性。此外,本文还展示了SE模块在其他数据集和任务上的应用,包括场景分类和目标检测,进一步证明了其广泛的适用性。


对未来工作的启示

本文提出的SE模块不仅在提高卷积神经网络的表现力方面取得了成功,而且也为未来的研究提供了启示。首先,SE模块展示了通道间依赖关系的重要性,这可能激发进一步研究在其他领域中应用这一概念。其次,SE模块的设计相对简单,但带来了显著的性能提升,这表明在网络设计中,简单且有效的改进方法仍有很大的潜力。未来的工作可以进一步探索SE模块的其他应用场景,以及如何与其他网络改进技术相结合。

这种模块化的设计理念也可能对神经网络挤压和优化等领域带来启发。通过调整通道权重来优化网络,可以降低模型的复杂性,同时保持或提高性能。这一理念可能对移动设备和嵌入式系统等资源受限的应用领域产生积极影响。


代码

import numpy as np
import torch
from torch import nn
from torch.nn import init


class SE(nn.Module):

    def __init__(self, channel=512, reduction=16):
        super().__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        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()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)


if __name__ == "__main__":
    input = torch.randn(64, 256, 8, 8)
    model = SE(channel=256, reduction=8)
    output = model(input)
    print(output.shape)

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

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

相关文章

杰发科技AC7840——CAN通信简介(6)_监听模式

参考:http://t.csdnimg.cn/AFFPC 0. 简介 7840支持4种扩展模式,其中监听模式。 监听模式概念 作用: 这里写的用于诊断,实际上我还没有用到,不太理解为啥可以用作诊断。 我的理解是,在多个总线下,使用监听…

Bug记录:AttributeError: module ‘numpy‘ has no attribute ‘object‘

使用Tensorflow进行模型训练时,之前都好用的,突然报错:AttributeError: module numpy has no attribute object。 问题原因:Numpy版本不兼容,我之前是1.24.4,后来又重装了好几个版本都不太行。 最终解决方…

verilog 从入门到看得懂---matlab 自动生成verilog

matlab 的强大不用多说,以前经常用simulink 生成c,最近尝试用simulink进行了verilog的生成,方法也很简单。 一个简单的示例如下。 1,新建一个模型文件,并且根据需要进行模型搭建 2.配置HDL生成模块 3.点击 generation…

基于Springboot的玩具租赁系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的玩具租赁系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

系统服务(22年国赛)—— DHCPDHCP Relay(中继)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! 系统服务(22年国赛)—— DHCP&&DHCP Relay(中继)https://myweb.myskillstree.cn/94.html 目录 一、题目 DHCP AppSrv 二…

【Burpsuite靶场】XSS专题精讲

【个人】:NEUQ大一学生 【专业】:通信工程 (Communication Engineering) 【个人方向】:网安、开发双管齐下 【座右铭】:真正的英雄主义,就是看清生活的真相后依然热爱生活 -- 罗曼.罗兰 一、认识XSS(跨站脚本攻击&…

4.28总结

根据项目要求进行在线状态功能的实现(还未真正实现,仅在数据库进行修改状态并与服务器断开连接) 在登录界面时 此时服务器等待连接 连接成功后数据库里的在线状态进行更改 我设置了两种方式来进行改变状态 一: 通过不退出界面进…

基础动态规划 - 过河卒

过河卒 兵从A点走到B点的所有路径方案,且不能经过 “马能吃棋子”的格子。 如果没有马,那么这道题就是一个简单的从A点走到B点的所有路径情况的简单动态规划。 状态转移方程为 dp[i,j] dp[i - 1,j] dp[i,j - 1]。 但如果加上了马这个棋子&#xff0…

Day 21 LAMP架构和DNS域名

LAMP架构简介 针对不同的后端开发语言,使用不同的架构,后端项目开发语言有:Java,PHP,Python...... 针对于PHP项目 LAMP架构 LinuxApacheMysql/MariadbPhp LNMP架构 LinuxNginxMysql/MariadbPhp 针对于Java项目 w…

windows电脑改造为linux

有个大学用的旧笔记本电脑没啥用了,决定把它改成linux搭一个服务器; 一、linux安装盘制作 首先要有一个大于8G的U盘,然后去下载需要的linux系统镜像,我下的是ubuntu,这里自选版本 https://cn.ubuntu.com/download/d…

第三节课,后端登录【1】.1--本人

一、后端登录逻辑,检测账户密码是否合法及密码输入是否正确 视频链接: 网址: 第三节:【视频】后端登录逻辑,检测账户密码是否合法及密码输入是否正确视频链接:-CSDN博客 从5.1开始 这是一个Java方法&am…

新能源设备远程监控解决方案

新能源设备远程监控解决方案 在当今全球能源转型的大背景下,新能源设备的广泛应用已成为应对环境挑战、推动可持续发展的重要途径。然而,新能源设备的高效运维与管理却面临诸多挑战,尤其是在地域广阔、环境复杂的应用场景中,如何…

Ragas

文章目录 一、关于 Ragas二、安装🛡️三、快速使用 🔥Open Analytics 🔍 四、References五、生成综合测试集文档数据生成 六、使用您的测试集进行评估数据Metrics 指标评估 七、监控生产中的 RAG需要监控的方面 一、关于 Ragas Ragas 是 RAG…

FPGA -手写异步FIFO

一,FIFO原理 FIFO(First In First Out)是一种先进先出的数据缓存器,没有外部读写地址线,使用起来非常简单,只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成&a…

游戏新手村20:游戏落地页广告页如何设计

在互联网营销中,着陆页(Landing Page,有时被称为首要捕获用户页)就是当潜在用户点击广告或者搜索引擎搜索结果页后显示给用户的网页,LandingPage对于游戏广告的转化率和重要性就不言而喻了。 网页游戏LP页面 上图就是我们大家在浏览网站时不小心蹦出或者主动点击某…

一文讲解Android车载系统camera架构 - EVS

Android的camera开发中,使用最多的是camera2 以及现在Google主推的cameraX 架构,而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构,针对Automotive的版本&#x…

数据库介绍(Mysql安装)

前言 工程师再在存储数据用文件就可以了,为什么还要弄个数据库? 一、什么是数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质: 磁…

Blender游戏资产优化技巧

创建视频游戏资产既具有挑战性又富有回报。 经过一些研究并根据我的经验,这里有三个技巧可以帮助你使用 Blender 优化游戏资产。 在 Blender 中优化游戏资源的三种技术可以归结为拥有高效的 3D 模型拓扑、通过烘焙优化纹理,以及最后通过 Blender 节点的…

智慧校园建设有哪些新策略?

在现有智慧校园建设方案中,智慧校园主要是用于解决学校日常事务,如学工管理,教工管理等,并利用数据分析,指导学校的一些决策行为。但随着新技术的不断发展,尤其是云计算、大数据、物联网、移动互联网、人工…

python应用-socket网络编程(1)

目录 1 先简单回顾下客户端和服务端通信的知识 2 服务端常用函数 3 客户端常用函数 4 服务端和客户端都用的函数 5 示例介绍客户端和服务端通信过程 6 建立服务端套接制 7 创建服务端函数socket.create_server() 8 创建客户端套接字 9 客户端连接函数socket.create_co…