CNN 中千奇百怪的卷积方式大汇总

这篇总结很专业,并且很好的回答了评论中的疑问:

Depthwise Separable Convolution 就是卷积加 group 吧?

这篇文章里是这么说的:

要注意的是,Group conv 是一种 channel 分组的方式,Depthwise +Pointwise 是卷积的方式,只是 ShuffleNet 里面把两者应用起来了。因此 Group conv 和 Depthwise +Pointwise 并不能划等号。

我觉得 Depthwise +Pointwise 卷积是提供一种把 feature map 的空间信息(height&width)和通道信息(channel)拆分分别处理的方法,而 group 卷积只是单纯的通道分组处理,降低复杂度。

对于表述有误的地方欢迎更正!另外目前仅列举了一些比较著名且实用的卷积操作,对于没提到的,希望大家指出与补充

1. 原始版本

最早的卷积方式还没有任何骚套路,那就也没什么好说的了。

见下图,原始的 conv 操作可以看做一个 2D 版本的无隐层神经网络。

附上一个卷积详细流程:

【TensorFlow】tf.nn.conv2d 是怎样实现卷积的? - CSDN 博客

代表模型:

LeNet:最早使用 stack 单卷积 + 单池化结构的方式,卷积层来做特征提取,池化来做空间下采样

AlexNet:后来发现单卷积提取到的特征不是很丰富,于是开始 stack 多卷积 + 单池化的结构

VGG([1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition):结构没怎么变,只是更深了

2. 多隐层非线性版本

这个版本是一个较大的改进,融合了 Network In Network 的增加隐层提升非线性表达的思想,于是有了这种先用 1*1 的卷积映射到隐空间,再在隐空间做卷积的结构。同时考虑了多尺度,在单层卷积层中用多个不同大小的卷积核来卷积,再把结果 concat 起来。

这一结构,被称之为 “Inception”

代表模型:

Inception-v1([1409.4842] Going Deeper with Convolutions):stack 以上这种 Inception 结构

Inception-v2(Accelerating Deep Network Training by Reducing Internal Covariate Shift):加了 BatchNormalization 正则,去除 5*5 卷积,用两个 3*3 代替

Inception-v3([1512.00567] Rethinking the Inception Architecture for Computer Vision):7*7 卷积又拆成 7*1+1*7

Inception-v4([1602.07261] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning):加入了残差结构

3. 空洞卷积

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

所以就要有一种卷积代替 pooling 的作用(成倍的增加感受野),而空洞卷积就是为了做这个的。通过卷积核插 “0” 的方式,它可以比普通的卷积获得更大的感受野,这个 idea 的 motivation 就介绍到这里。具体实现方法和原理可以参考如下链接:

如何理解空洞卷积(dilated convolution)?

膨胀卷积 --Multi-scale context aggregation by dilated convolutions

我在博客里面又做了一个空洞卷积小 demo 方便大家理解

【Tensorflow】tf.nn.atrous_conv2d 如何实现空洞卷积? - CSDN 博客

代表模型:

FCN([1411.4038] Fully Convolutional Networks for Semantic Segmentation):Fully convolutional networks,顾名思义,整个网络就只有卷积组成,在语义分割的任务中,因为卷积输出的 feature map 是有 spatial 信息的,所以最后的全连接层全部替换成了卷积层。

Wavenet(WaveNet: A Generative Model for Raw Audio):用于语音合成。

4. 深度可分离卷积

Depthwise Separable Convolution,目前已被 CVPR2017 收录,这个工作可以说是 Inception 的延续,它是 Inception 结构的极限版本。

为了更好的解释,让我们重新回顾一下 Inception 结构(简化版本):

上面的简化版本,我们又可以看做,把一整个输入做 1*1 卷积,然后切成三段,分别 3*3 卷积后相连,如下图,这两个形式是等价的,即 Inception 的简化版本又可以用如下形式表达:

OK,现在我们想,如果不是分成三段,而是分成 5 段或者更多,那模型的表达能力是不是更强呢?于是我们就切更多段,切到不能再切了,正好是 Output channels 的数量(极限版本):

于是,就有了深度卷积(depthwise convolution),深度卷积是对输入的每一个 channel 独立的用对应 channel 的所有卷积核去卷积,假设卷积核的 shape 是 [filter_height, filter_width, in_channels, channel_multiplier],那么每个 in_channel 会输出 channel_multiplier 那么多个通道,最后的 feature map 就会有 in_channels * channel_multiplier 个通道了。反观普通的卷积,输出的 feature map 一般就只有 channel_multiplier 那么多个通道。

具体的过程可参见我的 demo:

【Tensorflow】tf.nn.depthwise_conv2d 如何实现深度卷积? - CSDN 博客

既然叫深度可分离卷积,光做 depthwise convolution 肯定是不够的,原文在深度卷积后面又加了 pointwise convolution,这个 pointwise convolution 就是 1*1 的卷积,可以看做是对那么多分离的通道做了个融合。

这两个过程合起来,就称为 Depthwise Separable Convolution 了:

【Tensorflow】tf.nn.separable_conv2d 如何实现深度可分卷积? - CSDN 博客

代表模型:Xception(Xception: Deep Learning with Depthwise Separable Convolutions

5. 可变形卷积

可形变卷积的思想很巧妙:它认为规则形状的卷积核(比如一般用的正方形 3*3 卷积)可能会限制特征的提取,如果赋予卷积核形变的特性,让网络根据 label 反传下来的误差自动的调整卷积核的形状,适应网络重点关注的感兴趣的区域,就可以提取更好的特征。

如下图:网络会根据原位置(a),学习一个 offset 偏移量,得到新的卷积核(b)(c)(d),那么一些特殊情况就会成为这个更泛化的模型的特例,例如图(c)表示从不同尺度物体的识别,图(d)表示旋转物体的识别。

这个 idea 的实现方法也很常规:

上图中包含两处卷积,第一处是获取 offsets 的卷积,即我们对 input feature map 做卷积,得到一个输出(offset field),然后再在这个输出上取对应位置的一组值作为 offsets。假设 input feature map 的 shape 为 [batch,height,width,channels],我们指定输出通道变成两倍,卷积得到的 offset field 就是 [batch,height,width,2×channels],为什么指定通道变成两倍呢?因为我们需要在这个 offset field 里面取一组卷积核的 offsets,而一个 offset 肯定不能一个值就表示的,最少也要用两个值(x 方向上的偏移和 y 方向上的偏移)所以,如果我们的卷积核是 3*3,那意味着我们需要 3*3 个 offsets,一共需要 2*3*3 个值,取完了这些值,就可以顺利使卷积核形变了。第二处就是使用变形的卷积核来卷积,这个比较常规。(这里还有一个用双线性插值的方法获取某一卷积形变后位置的输入的过程)

这里有一个介绍性的 Slide:http://prlab.tudelft.nl/sites/default/files/Deformable_CNN.pdf

代表模型:Deformable Convolutional Networks(Deformable Convolutional Networks):暂时还没有其他模型使用这种卷积,期待后续会有更多的工作把这个 idea 和其他视觉任务比如检测,跟踪相结合。

6. 特征重标定卷积

这是 ImageNet 2017 竞赛 Image Classification 任务的冠军模型 SENet 的核心模块,原文叫做”Squeeze-and-Excitation“,我结合我的理解暂且把这个卷积称作” 特征重标定卷积 “。

和前面不同的是,这个卷积是对特征维度作改进的。一个卷积层中往往有数以千计的卷积核,而且我们知道卷积核对应了特征,于是乎那么多特征要怎么区分?这个方法就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照计算出来的重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

这个想法的实现异常的简单,简单到你难以置信。

首先做普通的卷积,得到了一个的 output feature map,它的 shape 为 [C,H,W],根据 paper 的观点,这个 feature map 的特征很混乱。然后为了获得重要性的评价指标,直接对这个 feature map 做一个 Global Average Pooling,然后我们就得到了长度为 C 的向量。(这里还涉及到一个额外的东西,如果你了解卷积,你就会发现一旦某一特征经常被激活,那么 Global Average Pooling 计算出来的值会比较大,说明它对结果的影响也比较大,反之越小的值,对结果的影响就越小)

然后我们对这个向量加两个 FC 层,做非线性映射,这俩 FC 层的参数,也就是网络需要额外学习的参数。

最后输出的向量,我们可以看做特征的重要性程度,然后与 feature map 对应 channel 相乘就得到特征有序的 feature map 了。

虽然各大框架现在都还没有扩展这个卷积的 api,但是我们实现它也就几行代码的事,可谓是简单且实用了。

另外它还可以和几个主流网络结构结合起来一起用,比如 Inception 和 Res:

代表模型:Squeeze-and-Excitation Networks(Squeeze-and-Excitation Networks

7. 比较

我们把图像(height,width)作为空间维度,把 channels 做为特征维度。

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-09-12 07:16:03

CNN 中千奇百怪的卷积方式大汇总的相关文章

阿里云迁云方式大汇总

前不久,阿里云发布了一款迁云神器,即 阿里云迁云工具,使用该迁云神器您可以方便快捷地将服务器迁移至阿里云. 其实,除了迁云神器之外,还有其他迁移服务器至阿里云的途径. 以下分别从迁云方式和服务器来源维度,分析可能的迁云途径. 相信总有一款适合您! 迁云方式维度 迁云方式 适用场景 特点 限制条件 阿里云迁云工具 适用于迁移所有类型的服务器,包括物理服务器.虚拟服务器.其他云平台的云主机等. 免安装 操作简单 全托管 支持数据盘 待迁移服务器必须能访问公网 镜像导入 已经将需要迁移的服务器在线下制

ANDROID内存优化(大汇总——中)

写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). OOM: 内存泄露可以引发很多的问题: 1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC) 2.莫名消失(当你的程序所占内存越大,它在

【译】如何应对 CNN 中的过拟合问题

本文讲的是[译]如何应对 CNN 中的过拟合问题, 摘要:理解神经卷积网络.欠拟合 & 过拟合.批量归一化 什么是卷积.最大池化和 Dropout? 这篇文章是深度学习系列中一篇文章.请查看#系列1和#系列2 数据增强(Data augmentation) 欢迎来到本系列教程的第三部分的学习!这周我会讲解一些卷积神经网络(Convolutional Neural Network, CNN)的内容并且讨论如何解决欠拟合和过拟合. 一.卷积(Convolution) 那么究竟什么是卷积呢?你可能还记

ANDROID内存优化(大汇总——上)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). 内存简介: RAM(random acc

浏览器兼容性问题大汇总_javascript技巧

JavaScript 1.HTML对象获取问题 FireFox:document.getElementById("idName"); ie:document.idname或者document.getElementById("idName"). 解决办法:统一使用document.getElementById("idName"); 2.const问题 说明:Firefox下,可以使用const关键字或var关键字来定义常量; IE下,只能使用var

2013流行词句大汇总,不知道真就out了!!

      转眼间,2013即将画上一个完美句号,此时此刻,不禁想说一句话:"2013表走,我稀饭你,舍不得你,表走,表走!"还记得,那些陪我们一起走过的华丽丽的流行词汇吗?今年的那些标准,你还记得吗?        1.新世纪女性       上得了厅堂,下得了厨房,写得了代码,查得出异常,杀得了木马,翻得了围墙,开得起好车,买得起新房,斗得过二奶,打得过流氓!       2.六种新说法       我不叫我,叫"偶":不错不叫不错,叫"8错"

Java面试笔试题大汇总(最全+详细答案)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个题都自己测试给出了答案 ,如果你对某个题有疑问或者不明白,可以电脑端登录把题目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步! 以下内容来自这位前辈 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题

电子地图-gis中,怎么处理大数据量的信息点定位?

问题描述 gis中,怎么处理大数据量的信息点定位? 在GIS开发中,大数据量的信息点进行定位后,导致页面直接卡死,请问这种情况有什么好的处理方式吗?

ecmascript-ECMAScript中工厂模式方式和混合工厂方式 有什么却别么?

问题描述 ECMAScript中工厂模式方式和混合工厂方式 有什么却别么? 这两种看起来一样啊 求大神说明区别在哪 解决方案