从最开始的卷积层,发展至今,卷积已不再是当初的卷积,而是一个研究方向。在反卷积这篇博客中,介绍了一些常见的卷积的关系,本篇博客就是要梳理这些有趣的卷积结构。

阅读本篇博客之前,建议将这篇博客结合在一起阅读,想必会有更深的理解。另外,不管是什么类型的卷积,我们都把它理解成一种运算操作。

  1. Group convolution

Group convolution是最早应用在2012年Alexnet的双GPU架构模型中,相当于把channel这一维度均分到两个GPU,进行分组卷积。如图所示:

这篇论文是:ImageNet Classification with Deep Convolutional Neural Networks。由图可见,上下两个并行的网络结构只有在部分层中才有信息交互,而且网络结构一模一样,这就是Group convolution最早的应用,但是在caffe中经常使用的单机多GPU并行训练和上述问题存在本质区别,因为Group convolution是指将channel维度细分成多个group,然后再分组进行Convolution,而多GPU的训练只是一个数据并行分组的方式,其中minibatch和batch之间的关系就是batch=minibatch*GPU_num,这并不存在对channel的分组。

总之,Group convolution是一种卷积操作,想要切分channel,然后分组卷积,运算上没有什么特别的地方。

2.Pointwise convolution

点积,就是卷积核大小是1*1的,那为啥起名点积呢?就是因为这和向量中的点积运算很类似,举个例子,一张3通道的feature map,卷积核大小是1*1*3,那它的运算其实就是:Σ卷积核*单通道feature map。

总之,Pointwise convolution是一种卷积操作,而且是一种特殊的卷积运算,代表着卷积核的大小是1*1。

3.Separable convolution

可分离卷积,这种思路其实就是起了个高深的名字,也很常见。也是想在channel维度上改变经典的卷积运算,咋办呢?经典的卷积核都是k*k*channel大小的,其中channel是上一层的输出即本层的输入,这不太好,我们想任意指定一个channel,作为卷积核的大小,这样并不影响输入输出的特征图的长宽尺寸,仅仅改变了channel这一维度。这就变得很有意思了,同Group convolution不一样的是,可分离卷积可增加channel维度,而并没有依赖GPU。

举个例子,对于经典的卷积运算,如果说所需的参数量为256*3*3*256=589824。而对于可分离卷积,假设我们指定的卷积核是3*3*4,那首先是256*3*3*4=9216,接下来我们得到了4*256=1024个通道数,但是呢?这并没有完成,因为还需要下一个过程将channel重新压缩回256,接着有1024*1*1*256=262144,整个过程就是9216+262144=271360,看看,589824是271360的两倍多。虽然,这在很多框架上也许未能比较出效果的显著差异,那是多方面的原因。

值得一提的是,上面举的例子可以认为是Separable convolution 和Pointwise convolution结合在一起,事实上就是配套使用的。

最早的Separable convolution来源于论文:Simplifying ConvNets for Fast Learning,作者用的是k*1和1*k的卷积核,起名为可分离卷积,而本处的可分离卷积来源于另一篇论文:Xception: Deep Learning with Depthwise Separable Convolutions

总之,Separable convolution是一种卷积操作,而且是一种特殊的卷积运算,代表着卷积核的channel维度可以自己任意选取。

4.Depthwise convolution

深度卷积,这名字又开始很高深了,其实它的意思就是拓展Separable convolution而来,我们可以让卷积核的channel维度等于1啊,这样就是深度卷积,意为在每一个channel上做卷积。值得注意的是,往往Separable convolution和Depthwise convolution是统称为Depthwise convolution。假设卷积核的shape是[filter_height, filter_width, in_channels, channel_multiplier],区别仅在于channel_multiplier,由于参考同一篇论文,此处将其统一。

这样说来,前面的例子中其实就是Depthwise separable convolution = Depthwise convolution + Pointwise convolution,这就是深度可分离卷积的真正内涵。这也就是以下论文的工作:Xception: Deep Learning with Depthwise Separable Convolutions

总之,Depthwise convolution是一种卷积操作,和Separable convolution一样,表示对channel维度进行卷积的一种方式。

5.Dilated convolution

空洞卷积是解决pixel-wise输出模型的一种常用的卷积方式。一种普遍的认识是,pooling下采样操作导致的信息丢失是不可逆的,通常的分类识别模型,只需要预测每一类的概率,所以我们不需要考虑pooling会导致损失图像细节信息的问题,但是做像素级的预测时(譬如语义分割),就要考虑到这个问题了。那么空洞卷积可以用下图来说明:

(a)图对应3x3的1-dilated convolution,就是典型的卷积(b)图对应3x3的2-dilated convolution,实际的卷积kernel size还是3x3,但是空洞为1,相当于kernel的size为7x7,图中只有红色点的权重不为0,其余都为0,把3*3的感受野增大到了7*7。(c)图是4-dilated convolution,能达到15x15的感受野。

也就是以下论文:Multi-scale context aggregation by dilated convolutions

总之,空洞卷积是卷积运算的一种方式,在于增大了感受野却不丢失语义信息。

各种卷积类型Convolution的更多相关文章

  1. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  2. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  3. 卷积(convolution)与相关(correlation)(matlab 实现)

    1. 卷积(convolution) 输出 y(n) 是作为在 x(k) 和 h(n−k)(反转和移位)重叠之下的样本和求出的. 考虑下面两个序列: x(n)=[3,11,7,0,−1,4,2],−3 ...

  4. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (三)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  5. 转置卷积Transposed Convolution

    转置卷积Transposed Convolution 我们为卷积神经网络引入的层,包括卷积层和池层,通常会减小输入的宽度和高度,或者保持不变.然而,语义分割和生成对抗网络等应用程序需要预测每个像素的值 ...

  6. 信号处理——卷积(convolution)的实现

    作者:桂. 时间:2017-03-07  22:33:37 链接:http://www.cnblogs.com/xingshansi/p/6517301.html 前言 信号时域.频域对应关系,及其D ...

  7. [翻译] 扩张卷积 (Dilated Convolution)

    英文原文: Dilated Convolution 简单来说,扩张卷积只是运用卷积到一个指定间隔的输入.按照这个定义,给定我们的输入是一个2维图片,扩张率 k=1 是通常的卷积,k=2 的意思是每个输 ...

  8. 空洞卷积(dilated Convolution) 与感受野(Receptive Field)

    一.空洞卷积 空洞卷积是是为了解决基于FCN思想的语义分割中,输出图像的size要求和输入图像的size一致而需要upsample,但由于FCN中使用pooling操作来增大感受野同时降低分辨率,导致 ...

  9. tensorflow的卷积和池化层(二):记实践之cifar10

    在tensorflow中的卷积和池化层(一)和各种卷积类型Convolution这两篇博客中,主要讲解了卷积神经网络的核心层,同时也结合当下流行的Caffe和tf框架做了介绍,本篇博客将接着tenso ...

随机推荐

  1. Linux_02

    1.vim编辑器 vim操作命令 --在命令模式下进行 pageup 往上翻页 pagedown 往下翻页 H 移动到屏幕首行 gg 移动光标到文档的首行 前面加数字n表示移动到n行内容 G 移动到文 ...

  2. (三)Hyperledger Fabric 1.1安装部署-chaincode测试

    环境搭建完毕,需要的工具和镜像安装完毕,就可以进行chaincode测试了,接下来参考官方教程运行first-network. 进入first-netwok: cd first-network fir ...

  3. 简言MVC

    什么是MVC? MVC是一种代码的组织结构,在一个工程项目中,将代码的数据处理,逻辑单元和交互部分分离开来达到一种低耦合的效果,便于工程的修改.MVC中M代表Model,V代表View,C代表Cont ...

  4. (Alpha)Let's-技术文档(技术规格说明书)

    技术规格说明书 抽象 首先,对抽象原则的理解,“抽象”这一概念本身就很抽象.抽象体现的是一种概括能力.我们生活中遇到的很多客体,其在某些方面具备有一些相似甚至相同的性质,以这些特点而非事物本身来认识鉴 ...

  5. Python入门:for循环、while循环

    Python中有两种循环,分别为:for循环和while循环. 1. for循环 for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的 ...

  6. OneZero第二周第二次站立会议(2016.3.29)

    会议时间:2016年3月29日  13:05~13:16 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会后修改内容或分配下一步任务. 会议内容:以下是会议插图 1 ...

  7. MyBatis关联查询,一对一关联查询

    数据库E-R关系 实体类 public class City { Long id; String name; Long countryId; Date lastUpdate; } public cla ...

  8. 利用git从github上拉取项目

    (一)准备工作 (1)安装git,下载地址是git官网:https://git-scm.com/点击打开链接 (二)拉取项目的步骤 1.新建文件夹,最好为英文名project 2.进入文件夹,空白处右 ...

  9. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

  10. Codeforces 817

    A 你可以按如下方式移动 问能不能从给定的一个坐标走到另一个. [solution] 裸,奇偶性注意 #include<stdio.h> #include<stdlib.h> ...