深度学习——卷积块回顾
Bottleneck块
Bottleneck模块的思想是通过1×1卷积先减少维度再增加维度,启到减少参数降低运算量的作用。
def bottleneck_module(x, out_dim, ratio=4):conv = Conv2D(filters=out_dim // ratio, kernel_size=1)(x)conv = Conv2D(filters=out_dim // ratio, kernel_size=3)(conv)conv = Conv2D(filters=out_dim, kernel_size=1)(conv)return conv
Inception块
Inception模块的思想是并行使用不同类型的卷积核,进行多特征融合,同时引入Bottleneck思想采用1×1的卷积先对特征通道降维减少计算量。
def inception_module(x, out_dim, ratio=4):conv1_1 = Conv2D(filters=out_dim, kernel_size=1)(x)conv3_3 = Conv2D(filters=out_dim // ratio, kernel_size=1)(x)conv3_3 = Conv2D(filters=out_dim, kernel_size=3)(conv3_3)conv5_5 = Conv2D(filters=out_dim // ratio, kernel_size=1)(x)conv5_5 = Conv2D(filters=out_dim, kernel_size=5)(conv5_5)maxpool = GlobalMaxPooling2D(kernel_size=3, strider=1)(x)maxpool = Conv2D(out_dim, kernel_size=1)(maxpool)return convatenate([conv1_1, conv3_3, conv5_5, maxpool])
ResNet块
ResNet模块的思想是通过跳跃结构解决深度网络退化问题,并在改进版本中引入Bottleneck思想。
def resnet_module(x, out_dim):conv = Conv2D(filters=out_dim, kernel_size=3)(x)conv = Conv2D(filters=out_dim, kernel_size=3)(conv)result = add([x, conv])return result
ResNeXt块
ResNeXt模块的思想是Inception+ResNet+Group convolution,对于所有的输入通道,将它们分成组。卷积只在组中进行,不会跨组。可以发现,每个组会学到不同的特征,提高了权值的效率。。打破deeper或者wider改善网络性能的常规思路,引入新的维度cardinality。左边是ResNet结构,可以看作是两个branch的网络,其中一个branch则是identity mapping。此时,对于ResNet来说,该网络的cardinality为2。而右边则是ResNeXt结构,可以看作是32个branch组成的网络。右边的ResNeXt结构则很容易让我们想起GooLeNet上的Inception,在Inception网络中,有个重要的策略则是split-transform-merge. 对输入进行split成a few lower-dimention embeding(1x1),然后在通过(3x3或5x5)的卷积核进行transformed,最后由concatenation来进行merge。
def resnext_module(x, out_dim=32, ratio=2, c=4):l = []for i in range(c):conv = Conv2D(filters=out_dim // (c * ratio), kernel_size=1)(x)conv = Conv2D(filters=out_dim // (c * ratio), kernel_size=3)(conv)conv = Conv2D(conv, out_dim, kernel_size=1)l.append(conv)conv = add(l)return add([x, conv])
DenseNet块
Dense块是残差块的一种极端的版本,每一个卷积层都会得到该模块中之前的所有卷积层的输出。第一,我们将输入的激活加到一个列表中,然后进入一个循环,遍历这模块的深度。每个卷积的输出都会加到这个列表中,所以下面的循环会得到越来越多的输入特征图,直到到达预定的深度。
def dense_module(x, out_dim=32, d=5):l = xfor i in range(d):conv = Conv2D(out_dim=32)(l)l = concatenate([l, conv])return l
SENet块
SENet核心思想:通过显式地建模卷积特征通道之间的相互依赖性自适应地重新校准通道的特征响应来提高网络的表示能力。由输入X得到输出U以后,对U的每个通道进行全局平均池化得到通道描述子(Squeeze),再利用两层FC得到每个通道的权重值,对U按通道进行重新加权得到最终输出(Excitation),这个过程称之为feature recalibration,通过引入attention重新加权,可以得到抑制无效特征,提升有效特征的权重,并很容易地和现有网络结合,提升现有网络性能,而计算量不会增加太多。
def squeeze_excitation_module(x, out_dim, ratio=16):squeeze = GlobalAveragePooling2D()(x)excitation = Dense(units=out_dim // ratio)(squeeze)excitation = Activation(excitation)excitation = Dense(units=out_dim)(excitation)excitation = Activation(excitation, 'sigmoid')excitation = Reshape((1, 1, out_dim))(excitation)scale = multiply([x, excitation])return scale
每个学习到的滤波器都对局部感受野进行操作,因此变换输出U的每个单元都无法利用该区域之外的上下文信息,在网络较低层次上其感受野尺寸很小,该问题尤为严重。故如图红色框标记的Squeeze操作,采用全局平均池化使得网络低层也能利用全局信息。紫色框标注的Excitation操作引入两个全连接层(都是1*1的conv层),即降维层参数为W1,降维比例为r,然后经过一个ReLU,然后是一个参数为W2的升维层。最后得到1*1*C的实数数列结合U通过Scale操作得到最终的输出。
深度学习——卷积块回顾相关推荐
- 毕设 深度学习卷积神经网络的花卉识别
文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...
- 毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...
- 想知道深度学习卷积在GPU上如何优化吗?“大神”赵开勇带你深入浅出
想知道深度学习卷积在GPU上如何优化吗?"大神"赵开勇带你深入浅出 2016-08-19 11:54 转载 陈杨英杰 0条评论 雷锋网(搜索"雷锋网"公众号关注 ...
- 深度学习 卷积神经网络-Pytorch手写数字识别
深度学习 卷积神经网络-Pytorch手写数字识别 一.前言 二.代码实现 2.1 引入依赖库 2.2 加载数据 2.3 数据分割 2.4 构造数据 2.5 迭代训练 三.测试数据 四.参考资料 一. ...
- 深度学习 卷积神经网络原理
深度学习 卷积神经网络原理 一.前言 二.全连接层的局限性 三.卷积层 3.1 如何进行卷积运算? 3.2 偏置 3.3 填充 3.4 步长 3.5 卷积运算是如何保留图片特征的? 3.6 三维卷积 ...
- 深度学习二三事-回顾那些经典卷积神经网络
前言 卷积神经网络从2012年开始逐步火热起来.我是在2017年开始接触深度学习技术,完成硕士课题研究,在2019年毕业后以算法工程师职位进入AI创业公司,如今工作3年了.俗话说,温故而知新,结合自己 ...
- 深度学习卷积算法指南
A guide to convolution arithmetic for deeplearning 本文是中文翻译版本. https://github.com/vdumoulin/conv_arit ...
- 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)
1. CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 2. LeNet-5网络 输入尺寸: ...
- 直观理解深度学习卷积部分
转载自https://www.leiphone.com/news/201807/RQ4sBWYqLkGV4ZAW.html,有删节 [嵌牛导读]:在本文中,我们将逐步分解卷积操作的原理,将他与标准的全 ...
最新文章
- jwt用户注销 PHP,flask_jwt 如何实现用户注销
- 【PHP学习】—数组的定义和遍历(三)
- 网件rax40可以刷梅林_支持WiFi6,带宽达到3000Mbps,网件RAX40路由器评测 | 钛极客...
- Practical Node.js摘录(2018版)第1,2章。
- Linux网络配置之二ip、ss、网络相关配置文件
- 乘风破浪,遇见未来新能源汽车(Electric Vehicle)之特斯拉提车必须知道的十个流程
- 服务器pe装系统教程,U盘pe如何重装系统_U盘pe系统安装教程
- 用【快剪辑】给视频打马赛克
- SSIM(structural similarity index) ---图像质量评价指标之结构相似性
- js室内地图开发_微信小程序室内地图导航开发-微信小程序JS加载esmap地图
- 帆软报表扩展列计算同比环比
- C基础 工程中常用的排序
- HCL Domino/Notes专业课程和认证体系介绍
- 神马搜索php,php判断神马搜索引擎蜘蛛的方法
- PubMed数据下载
- arduino和轮毂电机接线_四. 测试电机相线和霍尔线接线顺序
- SlickEdit 之windows 版本安装
- 又一款开源客服系统开放了
- Okio—— 更加高效易用的IO库
- 【转帖】【转帖】武侠界潜水多年所见的最强原创,不转一下对不起大家!!!
热门文章
- pytorch 生成随机数Tensor的方法 torch.rand torch.randn torch.normal torch.linespace
- python+tkinter出现错误
- Excel里如何更改坐标轴起始位置使图落在正中心
- python实现水仙花
- js判断浏览器是否安装或启用了flash的方法总结
- 手写哈希(实现简单的加数、查询)
- python 基础 - 4.15 re模块
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
- 认识position=fixed
- 使用Pack200压缩你的代码