卷积神经网络的改进 —— 分组卷积、DW 与 PW
1、普通卷积
对于一张5×5像素、三通道彩色输入图片(shape为5×5×3)。经过3×3卷积核的卷积层(假设输出通道数为4,则卷积核shape为3×3×3×4),最终输出4个Feature Map,如果有same padding则尺寸与输入层相同(5×5),如果没有则为尺寸变为3×3。
此时,卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:
N_std = 4 × 3 × 3 × 3 = 108
运算量可以用如下公式来计算:
5 X 5 X 3 X 3 X 3 X 4 = 2700
2、分组卷积(group convolution )
将卷积的输入 feature map 进行分组组,每个卷积核也相应地分成组,在对应的组内分别做卷积,如上图所示。图中分组数为 g,每一组 feature map 只和对应的一组卷积核做卷积。每组卷积都生成一个feature map,共生成 g 个feature map。
我们用了同等的参数量运算量生成了 g 个 feature map
。
所以
group conv 常用在轻量型高效网络中,因为它用少量的参数量和运算量就能生成大量的 feature map
,大量的 feature map 意味着能够编码更多的信息!
从分组卷积的角度来看,分组数就像一个控制旋钮,最小值是1,此时的卷积就是普通卷积;最大值是输入 feature map 的通道数,此时的卷积就是 depthwise sepereable convolution,即深度分离卷积,又叫逐通道卷积。
分组卷积的用途
3、深度分离卷积(Depthwise Separable Convolution)
不同于常规卷积操作,Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积
。上面所提到的常规卷积每个卷积核是同时操作输入图片的每个通道。
同样是对于一张 5×5 像素、三通道彩色输入图片(shape为5×5×3),Depthwise Convolution首先经过第一次卷积运算,不同于上面的常规卷积,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5)。
其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:
N_depthwise = 3 × 3 × 3 = 27
Depthwise Convolution 完成后的 Feature map 数量与输入层的通道数相同
,无法扩展 Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息
。因此需要 Pointwise Convolution 来将这些Feature map进行组合生成新的Feature map。
DW卷积的计算量和标准卷积计算量之间比例关系为:(注意是运算量,不是参数量)
4、逐点卷积(Pointwise Convolution)
Pointwise Convolution 的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M
,M 为上一层的通道数。所以这里的卷积运算会将上一步的 Feature map 在深度方向上进行加权组合,生成新的 Feature map,有几个卷积核就有几个输出 Feature map
。如上图所示。
由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:
N_pointwise = 1 × 1 × 3 × 4 = 12
经过 Pointwise Convolution 之后,同样输出了4张 Feature map,与常规卷积的输出维度相同。
参数对比
回顾一下,常规卷积的参数个数为:
N_std = 4 × 3 × 3 × 3 = 108
Separable Convolution的参数由两部分相加得到:
N_depthwise = 3 × 3 × 3 = 27
N_pointwise = 1 × 1 × 3 × 4 = 12
N_separable = N_depthwise + N_pointwise = 39
相同的输入,同样是得到 4 张 Feature map,Separable Convolution的参数个数是常规卷积的约1/3。
因此,在参数量相同的前提下,采用 Separable Convolution 的神经网络层数可以做的更深
。
卷积神经网络的改进演化
1、卷积可以不在同一组进行-- Group convolution
Group convolution 分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。
2、卷积核不一定越大越好 – 3×3卷积核
lexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核,之前人们的观念是,卷积核越大,receptive field(感受野)越大,看到的图片信息越多,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。于是在VGG(最早使用)、Inception网络中,利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1 VS 5×5×1+1)被降低,因此后来3×3卷积核被广泛应用在各种模型中。
3、每层卷积不一定只能用一种尺寸的卷积核 – Inception结构
传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,谷歌的GoogleNet,或者说Inception系列的网络,就使用了多个卷积核的结构。
4、减少卷积层参数量 – Bottleneck
发明GoogleNet的团队发现,如果仅仅引入多个尺寸的卷积核,会带来大量的额外的参数,受到Network In Network中1×1卷积核的启发,为了解决这个问题,他们往Inception结构中加入了一些1×1的卷积核,如图所示:
5、越深的网络不一定越难训练 – Resnet残差网络
传统的卷积层层叠网络会遇到一个问题,当层数加深时,网络的表现越来越差,很大程度上的原因是因为当层数加深时,梯度消散得越来越严重,以至于反向传播很难训练到浅层的网络。为了解决这个问题,何凯明大神想出了一个“残差网络”,使得梯度更容易地流动到浅层的网络当中去,而且这种“skip connection”能带来更多的好处。
7、卷积操作时不用必须同时考虑通道和区域 – DepthWise操作
标准的卷积过程可以看上图,一个2×2的卷积核在卷积时,对应图像区域中的所有通道均被同时考虑,问题在于,为什么一定要同时考虑图像区域和通道?我们为什么不能把通道和空间区域分开考虑?
Xception网络就是基于以上的问题发明而来。我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature maps之后,这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution” ,缩写“DW”。
这种操作是相当有效的,在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数。
8、分组卷积对通道进行随机分组 – ShuffleNet
在AlexNet的Group Convolution当中,特征的通道被平均分到不同组里面,最后再通过两个全连接层来融合特征,这样一来,就只能在最后时刻才融合不同组之间的特征,对模型的泛化性是相当不利的。为了解决这个问题,ShuffleNet在每一次层叠这种Group conv层前,都进行一次channel shuffle,shuffle过的通道被分配到不同组当中。进行完一次group conv之后,再一次channel shuffle,然后分到下一层组卷积当中,以此循环。
经过channel shuffle之后,Group conv输出的特征能考虑到更多通道,输出的特征自然代表性就更高。另外,AlexNet的分组卷积,实际上是标准卷积操作,而在ShuffleNet里面的分组卷积操作是depthwise卷积,因此结合了通道洗牌和分组depthwise卷积的ShuffleNet,能得到超少量的参数以及超越mobilenet、媲美AlexNet的准确率!
要注意的是,Group conv是一种channel分组的方式,Depthwise +Pointwise是卷积的方式,只是ShuffleNet里面把两者应用起来了。因此Group conv和Depthwise +Pointwise并不能划等号。
8、通道间的特征可以不平等 – SEnet
无论是在Inception、DenseNet或者ShuffleNet里面,我们对所有通道产生的特征都是不分权重直接结合的,那为什么要认为所有通道的特征对模型的作用就是相等的呢? 这是一个好问题,于是,ImageNet2017 冠军SEnet就出来了。
一组特征在上一层被输出,这时候分两条路线,第一条直接通过,第二条首先进行Squeeze操作(Global Average Pooling),把每个通道2维的特征压缩成一个1维,从而得到一个特征通道向量(每个数字代表对应通道的特征)。然后进行Excitation操作,把这一列特征通道向量输入两个全连接层和sigmoid,建模出特征通道间的相关性,得到的输出其实就是每个通道对应的权重,把这些权重通过Scale乘法通道加权到原来的特征上(第一条路),这样就完成了特征通道的权重分配。
9、让固定大小的卷积核看到更大范围的区域 – Dilated convolution
标准的3×3卷积核只能看到对应区域3×3的大小,但是为了能让卷积核看到更大的范围,dilated conv使其成为了可能。dilated conv原论文中的结构如图所示:
上图b可以理解为卷积核大小依然是3×3,但是每个卷积点之间有1个空洞,也就是在绿色7×7区域里面,只有9个红色点位置作了卷积处理,其余点权重为0。这样即使卷积核大小不变,但它看到的区域变得更大了。
10、卷积核形状不一定是矩形-- Deformable convolution 可变形卷积核
传统的卷积核一般都是长方形或正方形,但MSRA提出了一个相当反直觉的见解,认为卷积核的形状可以是变化的,变形的卷积核能让它只看感兴趣的图像区域 ,这样识别出来的特征更佳。
卷积神经网络的改进思考
现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的mobilenet、ShuffleNet(体积能降低到0.5mb!),我们可以看到这样一些趋势:
1、卷积核方面:
● 大卷积核用多个小卷积核代替;
● 单一尺寸卷积核用多尺寸卷积核代替;
● 固定形状卷积核趋于使用可变形卷积核;
● 使用1×1卷积核(bottleneck结构)。
● 空洞卷积
2、卷积层通道方面:
● 标准卷积用depthwise卷积代替;
● 使用分组卷积;
● 分组卷积前使用channel shuffle;
● 通道加权计算。3、卷积层连接方面:
● 使用skip connection,让模型更深;
● densely connection,使每一层都融合上其它层的特征输出(DenseNet)
启发
类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise 的结合会不会成为以后降低参数量的标准配置?
卷积神经网络的改进 —— 分组卷积、DW 与 PW相关推荐
- CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用
CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用 目录 基于tensorflow框架采用CNN(改进 ...
- 卷积神经网络的整体结构、卷积层、池化、python实现
卷积神经网络的整体结构.卷积层.池化.python实现 一.整体结构 二.卷积层 三.池化层 四.python实现卷积层.池化层 一.整体结构 神经网络相邻层所有神经元之间都有连接,称为全连接.前面用 ...
- 卷积神经网络架构不包含,卷积神经网络架构分析
卷积神经网络结构基本单元层有哪些? . 输入层:输出特征矩阵卷积层:进行卷积运算池化层:进行pooling缩小维度中间激活层:可有可无,一般为ReLU类的计算简单的激活函数对特征值修正这里卷积层.池化 ...
- 医学图像处理医学图像处理-卷积神经网络卷积神经网络_基于深度卷积神经网络的刀具磨损量自动提取方法...
⬆点击上方蓝色字体,关注<工具技术>官方微信~ 数控加工实质上是刀具和毛坯的相互运动,包含众多的不可控因素,在工件成型的过程中,刀具不可避免发生磨损.为了提高加工效率,实际加工中一般采用高 ...
- 卷积神经网络是什么意思,卷积神经网络英文缩写
cnn全称是什么? CNN的全称是ConvolutionalNeuralNetwork,是一种前馈神经网络.由一个或多个卷积层.池化层以及顶部的全连接层组成,在图像处理领域表现出色. 本文主要讲解CN ...
- 卷积神经网络的研究现状,卷积神经网络最新进展
类脑和卷积神经网络什么关系 一."类脑"概念1.在早期,类脑一般是指从软硬件上模拟生物神经系统的结构与信息加工方式.随着软硬件技术的进步,以及神经科学与各种工程技术的多方面融合发展 ...
- 卷积神经网络的训练算法,卷积神经网络算法实现
卷积神经网络算法是什么? 一维构筑.二维构筑.全卷积构筑. 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feed ...
- NNDL 实验六 卷积神经网络(1)卷积
文章目录 前言 第5章 卷积神经网络 一.5.1 卷积 5.1.1 二维卷积运算 5.1.2 二维卷积算子 5.1.3 二维卷积的参数量和计算量 5.1.4 感受野 5.1.5 卷积的变种 5.1.5 ...
- 卷积神经网络的应用实例,卷积神经网络应用举例
深度学习之损失函数与激活函数的选择 深度学习之损失函数与激活函数的选择在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结.其中使用的损失函数是均方差,而激活函 ...
最新文章
- c语言关闭其他进程tcp_tcp链接迁移
- docker 推送镜像到私有地址
- 使用debug工具修改寄存器中的值
- php七牛分片上传_ThinkPHP实现JavaScript上传大视频到七牛云实例
- Maven+Mybatis+Spring+SpringMVC实现分页
- mysql 获取递增id_如何在MySQL中获取下一个自动递增ID?
- 2、两数相加(python)
- Java实现简易的文本编辑器
- id导出pdf失败_InDesign 导出印刷用PDF时如何设置?
- It is a distutils installed project and thus we cannot accurately determine [已解决]
- 宁夏理工计算机管理与应用,宁夏理工学院计算机科学与技术中小学校(计算机教育)...
- 如何复制权限受限PDF文件的内容(亲测有效,Microsoft Edge打开pdf文件)
- FileZilla文件传输失败问题
- httpd +jk_虚拟主机+ Apache httpd服务器+ Tomcat + mod_jk连接器
- 七牛云存储java上传图片
- 排列组合思维导图_思维模型10 - 排列组合是什么?
- python 批量移动文件
- 迅雷将启动收费下载服务 因版权问题屡次被告
- 变态题大串烧:微软面试问题 -- 七. 情商测试
- 常见算法思想3:递归法
热门文章
- 托福听力专项 // Unit1 Listening for Main Ideas // Practice with Lectures // 共4篇
- 如何有效建立客户关系,提高复购率与客户的终生价值
- nginx 实现if嵌套类似逻辑
- 手把手教你做一个最最最简单的爱心飘落动画
- linux查看运行端口,Linux查看端口使用状态及启动
- topPanel在java中_java – 多个JPanel GridBagConstraints对齐
- DateTimePicker 日期时间选择器,清空事件。并添加默认当前时间,向前推进7天的事件
- android车机总是自动熄屏,APP总自动熄屏?100K的小工具完美保持亮屏
- c语言中读取电脑自带报警声音,关于电脑发出警报声的.
- Li‘s 核磁共振影像数据处理-26-ITK-SNAP半自动勾画病灶