深度学习理论篇之 ( 十八) -- 注意力机制之SENet

article/2025/9/19 19:27:25

科普知识

ILSVRC(ImageNet Large Scale Visual Recognition Challenge)是机器视觉领域最受追捧也是最具权威的学术竞赛之一,代表了图像领域的最高水平。 ImageNet数据集是ILSVRC竞赛使用的是数据集,由斯坦福大学李飞飞教授主导,包含了超过1400万张全尺寸的有标记图片。ILSVRC比赛会每年从ImageNet数据集中抽出部分样本,以2012年为例,比赛的训练集包含1281167张图片,验证集包含50000张图片,测试集为100000张图片。

02f0e44ed6247d55d11057992507bf2a.gif

前言

    上一期文章中我们一同学习了DenseNet网络,该网络核心在于每一个密集块中的每一层的输入都包含了前面的所有层,这些层通过在通道维度上进行拼接,从而一同作为下一层的输入。此举在一定程度上缓解了梯度消失的问题,也由此可以构建更加深层次的神经网络。

今天我们继续来学习一种新的网络-->SENet,它的出现又一次刷新了卷积神经网络的前进方向。该网络是针对什么问题提出的呢?最终又做了哪些工作呢?效果怎么样呢?我们接着往下走!

SENet之概述 

1

SENet: Squeeze-and-Excitation Networks, 直译就是挤压和激励的网络,该网络是2017年ILSVRC比赛的第一名,同时由于其可以很方便的嵌入到其余的卷积神经网络中提升精度,受到了颇多的关注,也由此引发了卷积神经网络对于注意力机制的思考,随后诞生了各式各样的注意力机制,如CBAM,DACNet等。

论文截图

267abfada76c98b821a62c6ab395bd23.png

56b3579899f9a1343c3bd35f3c8b4d3c.png

a1c7b41fc42f06e0072ba305631e12b6.png

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

SENet之提出缘由

2

    我们首先来思考这样一个问题,在之前的经典网络学习中,这些网络到底在改进什么?是从什么角度改进的呢?其实主要是从网络的结构和深度上做了改进,也就是说主要改进的是网络的堆叠和连接方式,很少从网络本身出发去做改进。SENet这篇文章就从网络本身出发做了一定的改进,因此它的核心思想可以很容易的嵌入到之前的经典神经网络架构中(主要是卷积神经网络)。

1、从摘要可以看到:先前的研究试图通过增强CNN整个特征层次的空间编码的质量来提升CNN的表达(表征)能力。这句话稍微专业了,简单一点就是:试图通过提高CNN中特征的质量(为啥呢?所有特征都有用?不一定,那就该增强的增强,该弱化的弱化呗),进而实现一种特征增强的功能(弱化也是增强的的一种负表现),从而使得CNN的特征更具代表性。

2、在引言中:最近的一些研究者通过集成学习机制来捕获特征间的空间相关性来提高CNN(生成的)表征能力。

3、综上所述,之前所述的都是从空间关系上着手提升CNN的表征能力,还有别的地方可以实现同样的功能吗?

4、随后作者提出了是否可以研究特征图通道之间的关系(相互依赖性)以此来提升CNN的表征能力呢?

SENet之贡献

3

本文中,作者研究了网络设计的另一个方面-->通道间的关系。进而提出了一种新的结构单元, 命名为:Squeeze-andExcitation (SE) block。

1、引入了一种叫做SE block的新的结构单元,该结构可以做啥呢?它能够建模特征图通道间的相互依赖关系,这种关系有啥用呢?用来增强CNN的表征质量(相当于特征做了提纯,使得特征表达能力更强,that's right?)。

2、该模块可以很容易到嵌入到大多数CNN,任何层次,任何深度,从早期阶段到后期阶段都可以嵌入,因为它的能力可以实现累积。

3、该模块构成的网络霸榜了当年的ILSVRC比赛,刷新了在ImageNet上的战绩。几乎可以提升之前的所有经典CNN架构的性能。

SEet之网络架构 

4

其实该模块的架构非常简单,但往往简单的东西确实最让人忽略的。总的来说,该模块,精简,高效,轻量化,便于集成。

SE块结构图:

cdbd8d0051f73c4338780b9afd805af6.png

嵌入到主流CNN网络中的示意图:

e9e195dc8873e366174af604061926ec.png

看到第一个图大家有点不是那么懂,或许还得好好看看论文中的公式,但是当看到第二幅图应该就大概明白所谓的SE块是个啥庐山真面目了吧。简单点:SE块嵌入到某一层后,对接收到的特征图首先进行全局平均池化 使得特征图的尺寸变成1x1,通道数不变(为啥不变?要学习的就是通道间的依赖关系?变了怎么学呢?),随后紧跟全连接层--激活层---全连接层--sigmoid激活层层(为啥是它而不是别的激活层,这个函数可以将前面的通道数的具体数值归一化到0-1,由此学习比较容易嘛),后面的Scale层就是将刚才学到的通道数的数值与原始输入的特征图做矩阵乘法(广播形势的点乘)。等等,到这里我们是不是有点醒悟了,SE模块不就是学习了与原始特征图中通道数量的数值吗(0-1范围),这不就相当于为每一个通道学习一个权重吗?确实,能看懂这里,你也就懂了SE的思想了,SE本质就是为每一个通道学习一个自适应的权重,由此决定哪些通道是更需要关注的,哪些是不太重要的,甚至一些是不需要的(权重很接近0),问题来了,每一个通道包含了那么多特征点,我们学习的是一个值啊(每一个通道),所以学习到的权重其实是给每一个通道的所有特征点的,在实际计算的时候会进行将每一个通道的权重广播到该通道上每一个特征点上,这,每一个特征点都得了学习到的权重,这也从侧说明,SE关注的是通道全局性,通道中每一个特征点都视为同样重要的位置。

the end

d840bafaba0ca7015fbdcedfad10d5bd.png

本期SENet分享就到这里了,有时间的同学可以提前学习论文中给出的代码哦,下期我们将会采用pytorch框架开启实战篇哦,敬请期待!                                                                   

编辑:玥怡居士 | 审核:小圈圈居士

9042a48e3043012c6474d97858b959c4.png

扫码关注

IT进阶之旅

NO.1

往期回顾

深度学习理论篇之 ( 十八) -- DenseNet之囊括万千

深度学习理论篇之 ( 十七) -- ResNet之深之经典

深度学习理论篇之 ( 十六) -- GoogLeNet之再探深度之谜

过往曾经:

【年终总结】辞旧迎新,2020,我们再出发

【年终总结】2021,辞旧迎新再出发

【年终总结】致敬远去的2021,拥抱不一样的2022

点赞哦


http://chatgpt.dhexx.cn/article/0MhwBm4y.shtml

相关文章

【深度学习】(8) CNN中的通道注意力机制(SEnet、ECAnet),附Tensorflow完整代码

各位同学好,今天和大家分享一下attention注意力机制在CNN卷积神经网络中的应用,重点介绍三种注意力机制,及其代码复现。 在我之前的神经网络专栏的文章中也使用到过注意力机制,比如在MobileNetV3、EfficientNet网络中都是用了SE注…

[ 注意力机制 ] 经典网络模型1——SENet 详解与复现

🤵 Author :Horizon Max ✨ 编程技巧篇:各种操作小结 🎇 机器视觉篇:会变魔术 OpenCV 💥 深度学习篇:简单入门 PyTorch 🏆 神经网络篇:经典网络模型 💻 …

算法 雪花算法 Python

Twitter 于 2010 年开源了内部团队在用的一款全局唯一 ID 生成算法 Snowflake,翻译过来叫做雪花算法。Snowflake 不借助数据库,可直接由编程语言生成,它通过巧妙的位设计使得 ID 能够满足递增属性,且生成的 ID 并不是依次连续的。…

聊聊雪花算法?

随便聊聊 哈喽,大家好,最近换了份工作,虽然后端技术栈是老了点,但是呢,这边的前端技术确是现在市面上最新的那一套技术:Vue3ViteTSXPinaElement-PlusNativeUI。我本人主要是学后端的,确被拉去做…

雪花算法生成实例

雪花算法生成实例 一、集群高并发情况下如何保证分布式唯一全局id生成?1.1 为什么需要分布式全局唯一ID以及分布式ID的业务需求1.2 ID生成规则部分硬性要求1.3 ID号生成系统的可用性要求 二、一般通用方案2.1 UUID2.2 数据库自增主键2.3 基于Redis生成全局id策略2.4…

算法 —— 雪花算法

文章目录 算法 —— 雪花算法简介实现原理结构图 算法 —— 雪花算法 简介 雪花算法是由 Twitter 公布的分布式主键生成算法,它能够保证不同进程主键的不重复性,以及相同进程主键的有序性。 实现原理 在同一个进程中,它首先是通过时间位保…

java雪花算法实现

基于雪花算法(Snowflake)模式雪花算法(Snowflake)是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器。 Snowflake生成的是L…

雪花算法的实现原理

一位工作4年的小伙伴,去某东面试时被问到这样一道题,说请你简述一下雪花算法的实现原理。屏幕前的小伙伴,如果你遇到这个问题,你会怎么回答? 今天,我给大家分享一下我的理解。 1、什么是雪花算法 雪花算…

Python 实现雪花算法

Python 实现雪花算法 雪花算法:雪花算法是一种分布式全局唯一ID,一般不需要过多的深入了解,一般个人项目用不到分布式之类的大型架构,另一方面,则是因为,就算用到市面上很多 ID 生成器帮我们完成了这项工作…

雪花算法简介以及代码实现

文章目录 雪花算法分布式ID分布式ID需要满足的要求全局唯一:高性能:高可用:方便易用:安全:有序递增:要求具体的业务含义:独立部署: 组成代码实现Java代码实现Go语言实现 雪花算法 简介: 雪花算法是Twitter开源的分布式ID生成算法 Github仓库地址 雪花算法主要用于分布式系统中…

雪花算法(id生成算法)

SnowFlake 雪花算法 SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。 实现原理 雪花算法原理就是生成一个的64位比特位的 long 类型的唯一 id。 最高1位固定值0&#xff0c…

什么是雪花算法?啥原理?

1、SnowFlake核心思想 SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。 其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳,基本上保持自增的&#xf…

雪花算法-java

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:计算机基础专栏 📧如果文章知识点有错误的地方&#…

数据库中雪花算法是什么?

一、为何要用雪花算法 1、问题产生的背景 现如今越来越多的公司都在用分布式、微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题。 例如之前单体项目中一个表中…

snowflake算法(雪花算法)

snowflake算法(雪花算法) 1.snowflake算法介绍 Snowflake算法产生是为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器…

分布式ID生成算法——雪花算法

一、分布式ID ID可以唯一标识一条记录。 对于单体架构,我们可以使用自增ID来保证ID的唯一性。但是,在分布式系统中,简单的使用自增ID就会导致ID冲突。这也就引出了分布式ID问题。分布式ID也要求满足分布式系统的高性能、高可用、高并发的特点…

【SnowFlake】雪花算法(Java版本)

SnowFlake雪花算法(Java版本) 一、SnowFlake算法二、代码实现三、应用场景四、优缺点五、分布式生成ID方式 一、SnowFlake算法 雪花算法(Snowflake)是twitter公司内部分布式项目采用的ID生成算法 Snowflake生成的是Long类型的ID,一个Long类型…

雪花算法以及具体实现

一、为何要用雪花算法 1、问题产生的背景 现如今越来越多的公司都在用分布式、微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题。 例如之前单体项目中一个表中的…

什么是雪花算法,详解雪花算法原理

雪花算法(SnowFlake) 雪花算法是Twitter开源的分布式ID生成算法. 主要是由64bit的long型生成的全局ID,引入了时间戳和ID保持自增的属性. 64bit分为四个部分: 第一个部分是1bit, 这不 使用,没有意义; 第二个部分是41bit, 组成时间戳; 第三个部分是10bit, 工作机器ID,里面分为…

雪花算法原理及实现

背景 分布式高并发的环境下,最常见的就是每年双十一的十二点,大量用户同时抢购同一商品,毫秒级的时间下可能生成数万个订单,此时确保生成订单ID的唯一性变得至关重要。此外,在秒杀环境下,不仅要保障ID唯一…