深度学习图像分类(九):SENet
深度学习图像分类(九):SENet
文章目录
- 深度学习图像分类(九):SENet
- 前言
- 一、Motivation
- 二、SE模块
- 三、效果
- 四、代码
- 总结
前言
SENet,胡杰(Momenta)在2017.9提出,通过显式地建模卷积特征通道之间的相互依赖性来提高网络的表示能力,SE块以微小的计算成本为现有的最先进的深层架构产生了显著的性能改进,SENet block和ResNeXt结合在ILSVRC 2017赢得第一名。
一、Motivation
- 提出背景:现有网络很多都是主要在空间维度方面来进行特征通道间的融合(如Inception的多尺度)。卷积核通常被看做是在局部感受野上,将空间上和特征维度上的信息进行聚合的信息聚合体。
- channel维度的注意力机制:通过学习的方式来自动获取到每个特征通道的重要程度(即feature map层的权重),以增强有用的特征,抑制不重要的特征。
- 与1X1卷积相比,SE是为每个channel重新分配一个权重(即重要程度);而逐点卷积只是在做channel的融合,顺带进行升维和降维。
二、SE模块
Squeeze:全局信息嵌入,全局平均池化成1*1
Excitation:自适应调整,用两个全连接,训练参数W,得到每通道的权重s
总流程:
- X经过一系列传统卷积得到U,对U先做一个Global Average Pooling ,输出的1x1xC数据
(即上图梯形短边的白色向量)。 - 再经过两个全连接后 ,用sigmoid限制到[0, 1]的范围,这时得到的输入可以看作每个通道的权重(即上图梯形短边的彩色向量)。
- 把这个1x1xC的值乘到U的C个通道上,这时就对channles进行了重要程度的重新分配。
Squeeze:
顺着空间维度来压缩特征,就是在空间上做全局平均池化,每个通道的二维特征变成了一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的通道数相匹配。用全局平均池化是因为scale是对整个通道作用的,利用的是通道间的相关性,要屏蔽掉空间分布相关性的干扰。
Excitation:
用2个全连接来实现 ,第一个全连接把C个通道压缩成了C/ratio 个通道来降低计算量(后面跟了RELU,增加非线性并减少计算量),ratio是指压缩的比例一般取r=16;第二个全连接再恢复回C个通道(后面跟了Sigmoid归一化到0~1),Sigmoid后得到权重 s。s就是U中C个feature map的权重,通过训练的参数 w 来为每个特征通道生成权重s,其中参数 w 被学习用来显式地建模特征通道间的相关性。用全连接是因为全连接层可以融合全局池化后各通道的feature map信息。
三、效果
与SE 模块可以嵌入到现在几乎所有的网络结构中,而且都可以得到不错的效果提升,用过的都说好。
在所有的结构上SENet要比非SENet的准确率更高出1%左右,而计算复杂度上只是略微有提升(增加的主要是全连接层,全连接层其实主要还是增加参数量,对速度影响不会太大)。在MobileNet上提升更高。而且SE块会使训练和收敛更容易。CPU推断时间的基准测试:224×224的输入图像,ResNet-50 164ms,SE-ResNet-50 167ms。
四、代码
这里给出模型搭建的python代码(基于pytorch实现)。完整的代码是基于图像分类问题的(包括训练和推理脚本,自定义层等)详见我的GitHub: 完整代码链接
class SqueezeExcitation(nn.Module):def __init__(self, pervious_layer_channels, scale_channels=None, scale_ratio=4):super().__init__()if scale_channels is None:scale_channels = pervious_layer_channels# assert input_channels > 16, 'input channels too small, Squeeze-Excitation is not necessary'squeeze_channels = make_divisible8(scale_channels//scale_ratio, 8)self.fc1 = nn.Conv2d(pervious_layer_channels, squeeze_channels, kernel_size=1, padding=0)self.fc2 = nn.Conv2d(squeeze_channels, pervious_layer_channels, kernel_size=1, padding=0)def forward(self, x):weight = F.adaptive_avg_pool2d(x, output_size=(1,1))weight = self.fc1(weight)weight = F.relu(weight, True)weight = self.fc2(weight)weight = F.hardsigmoid(weight, True)return weight * x
总结
SE block 可以理解为channel维度上的注意力机制(有重点的重分配通道权重),与Stochastic Depth Net一样,本论文的贡献更像一种算法,而非模型。 在之后的模型中,会经常看见SE block的身影。例如,mobileNet等等。
深度学习图像分类(九):SENet相关推荐
- 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类
深度学习 图像分类 前言 (Foreword) Computer vision is a subject to convert images and videos into machine-under ...
- 【视频课】一课彻底掌握深度学习图像分类各种问题,学习CV你值得拥有
课程介绍 对于刚接触深度学习计算机视觉的初学者来说,图像分类问题是最常见的问题,如何最好图像分类任务,关系到大家能否正确顺利地入门.读了许多论文,可能仍然不懂代码如何实现.跑了代码,仍旧不懂如何运用图 ...
- 【AI-1000问】为什么深度学习图像分类的输入多是224*224
文章首发于微信公众号<有三AI> [AI-1000问]为什么深度学习图像分类的输入多是224*224 写在前边的通知 大家好,今天这又是一个新专栏了,名叫<有三AI 1000问> ...
- 花书+吴恩达深度学习(九)优化方法之二阶近似方法(牛顿法, CG, BFGS, L-BFGS)
目录 0. 前言 1. 牛顿法 2. 共轭梯度法(CG) 3. BFGS 4. L-BFGS 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(五)正则化 ...
- 深度学习图像分类(六):Stochastic_Depth_Net
深度学习图像分类(六):Stochastic_Depth_Net 文章目录 深度学习图像分类(六):Stochastic_Depth_Net 前言 一.Motivation 二.核心结构:Drop P ...
- PyTorch深度学习图像分类--猫狗大战
PyTorch深度学习图像分类--猫狗大战 1.背景介绍 2.环境配置 2.1软硬件清单 2.1.1配置PyPorch 2.1.2开发软件 2.1.3 显卡 2.2 数据准备 3 基础理论 3.1Py ...
- 【深度学习基础】SENet——PyTorch实现CNN的SE结构改造
[深度学习基础][深度学习基础]SENet--PyTorch实现CNN的SE结构改造 1 论文关键信息 1.1 SE block 1.1.1 squeeze 1.1.2 Exitation 2 pyt ...
- 10篇论文带你入门深度学习图像分类(附下载)
来源:计算机视觉联盟 本文约7600字,建议阅读10+分钟. 本文将介绍10篇最佳论文供初学者阅读. 前言 计算机视觉是将图像和视频转换成机器可理解的信号的主题.利用这些信号,程序员可以基于这种高级理 ...
- 深度学习——图像分类相关模型一览
这一章我们一起来梳理一下深度学习中图像分类相关的算法. 推荐一个B站上讲解图像分类相关算法的很好的视频:https://space.bilibili.com/18161609/channel/deta ...
- 深度学习图像分类:植物幼苗图像分类入门(Plant Seedlings Classification)
前言:深度学习考试期末的题目,植物幼苗分类,可以帮助农业领域的进步. 题目介绍:kaggle原题:可以下载数据集,查看一些参与者的思路等. 易用的深度学习框架Keras简介及使用 部分图片如下: 思路 ...
最新文章
- C# 发送Http请求 - WebClient类
- 《effective java》类和对象
- 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
- 一年赚上亿的生意_如何一年不到的时间2万赚10个亿?
- kdj超卖_一个判断股票超买超卖现象的指标——KDJ,简单明了,准确且省心
- WebSoket 的广泛应用
- powerdesigner显示工具面板_10分钟看懂Photoshop 绘画(画笔面板1-3)
- 一个长文档里,包括封面、不同的章节,如果我想封面不设置页眉页脚,每个章节的页眉都不同,请问应该如何设置页眉页脚?
- SpringBoot番外篇(一):使用Spring Initializer快速创建Spring Boot项目(IDEA版)
- Bootstrap table分页问题汇总
- Mac os x 系统的发展史
- Python爬取唐人街探案3豆瓣短评并生成词云
- 《Nmap渗透测试指南》—第7章7.10节扫描Web漏洞
- 持久化消息队列memcacheq的安装配置
- 关于EasyUI中DataGrid控件的一些使用方法总结
- sv信道模型是什么_信道模型(信道模型分类)
- AgentWeb嵌套h5 上传图片文件
- angularUI之accordion的用法
- 双向可控硅晶片光耦(TLP160J TLP260J TLP525G)基本原理及应用实例
- TOGAF认证考试总结
热门文章
- javascript基础(对象继承与引用)
- 如何使用JS来改变CSS样式
- java 算法基础之三合并排序法
- 《人月神话》之外科手术队伍
- RHEL4-VNC服务(二)vnc服务器的配置
- 十年Java面向对象编程心路——函数与方法的概念区别
- [UESTC SC T3] 蛋糕
- php如何取屏幕大小,JavaScript_JS获取当前网页大小以及屏幕分辨率等,效果如下:代码如下:- phpStudy...
- python 服务端渲染_详解React 服务端渲染方案完美的解决方案
- python pdf转txt_Python之pdf转txt