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相关推荐

  1. CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用

    CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用 目录 基于tensorflow框架采用CNN(改进 ...

  2. 卷积神经网络的整体结构、卷积层、池化、python实现

    卷积神经网络的整体结构.卷积层.池化.python实现 一.整体结构 二.卷积层 三.池化层 四.python实现卷积层.池化层 一.整体结构 神经网络相邻层所有神经元之间都有连接,称为全连接.前面用 ...

  3. 卷积神经网络架构不包含,卷积神经网络架构分析

    卷积神经网络结构基本单元层有哪些? . 输入层:输出特征矩阵卷积层:进行卷积运算池化层:进行pooling缩小维度中间激活层:可有可无,一般为ReLU类的计算简单的激活函数对特征值修正这里卷积层.池化 ...

  4. 医学图像处理医学图像处理-卷积神经网络卷积神经网络_基于深度卷积神经网络的刀具磨损量自动提取方法...

    ⬆点击上方蓝色字体,关注<工具技术>官方微信~ 数控加工实质上是刀具和毛坯的相互运动,包含众多的不可控因素,在工件成型的过程中,刀具不可避免发生磨损.为了提高加工效率,实际加工中一般采用高 ...

  5. 卷积神经网络是什么意思,卷积神经网络英文缩写

    cnn全称是什么? CNN的全称是ConvolutionalNeuralNetwork,是一种前馈神经网络.由一个或多个卷积层.池化层以及顶部的全连接层组成,在图像处理领域表现出色. 本文主要讲解CN ...

  6. 卷积神经网络的研究现状,卷积神经网络最新进展

    类脑和卷积神经网络什么关系 一."类脑"概念1.在早期,类脑一般是指从软硬件上模拟生物神经系统的结构与信息加工方式.随着软硬件技术的进步,以及神经科学与各种工程技术的多方面融合发展 ...

  7. 卷积神经网络的训练算法,卷积神经网络算法实现

    卷积神经网络算法是什么? 一维构筑.二维构筑.全卷积构筑. 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feed ...

  8. NNDL 实验六 卷积神经网络(1)卷积

    文章目录 前言 第5章 卷积神经网络 一.5.1 卷积 5.1.1 二维卷积运算 5.1.2 二维卷积算子 5.1.3 二维卷积的参数量和计算量 5.1.4 感受野 5.1.5 卷积的变种 5.1.5 ...

  9. 卷积神经网络的应用实例,卷积神经网络应用举例

    深度学习之损失函数与激活函数的选择 深度学习之损失函数与激活函数的选择在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结.其中使用的损失函数是均方差,而激活函 ...

最新文章

  1. c语言关闭其他进程tcp_tcp链接迁移
  2. docker 推送镜像到私有地址
  3. 使用debug工具修改寄存器中的值
  4. php七牛分片上传_ThinkPHP实现JavaScript上传大视频到七牛云实例
  5. Maven+Mybatis+Spring+SpringMVC实现分页
  6. mysql 获取递增id_如何在MySQL中获取下一个自动递增ID?
  7. 2、两数相加(python)
  8. Java实现简易的文本编辑器
  9. id导出pdf失败_InDesign 导出印刷用PDF时如何设置?
  10. It is a distutils installed project and thus we cannot accurately determine [已解决]
  11. 宁夏理工计算机管理与应用,宁夏理工学院计算机科学与技术中小学校(计算机教育)...
  12. 如何复制权限受限PDF文件的内容(亲测有效,Microsoft Edge打开pdf文件)
  13. FileZilla文件传输失败问题
  14. httpd +jk_虚拟主机+ Apache httpd服务器+ Tomcat + mod_jk连接器
  15. 七牛云存储java上传图片
  16. 排列组合思维导图_思维模型10 - 排列组合是什么?
  17. python 批量移动文件
  18. 迅雷将启动收费下载服务 因版权问题屡次被告
  19. 变态题大串烧:微软面试问题 -- 七. 情商测试
  20. 常见算法思想3:递归法

热门文章

  1. 托福听力专项 // Unit1 Listening for Main Ideas // Practice with Lectures // 共4篇
  2. 如何有效建立客户关系,提高复购率与客户的终生价值
  3. nginx 实现if嵌套类似逻辑
  4. 手把手教你做一个最最最简单的爱心飘落动画
  5. linux查看运行端口,Linux查看端口使用状态及启动
  6. topPanel在java中_java – 多个JPanel GridBagConstraints对齐
  7. DateTimePicker 日期时间选择器,清空事件。并添加默认当前时间,向前推进7天的事件
  8. android车机总是自动熄屏,APP总自动熄屏?100K的小工具完美保持亮屏
  9. c语言中读取电脑自带报警声音,关于电脑发出警报声的.
  10. Li‘s 核磁共振影像数据处理-26-ITK-SNAP半自动勾画病灶