卷积神经网络经过不断的改进和优化,卷积早已不是当年的卷积,诞生了分组卷积(Group convolution)、空洞卷积(Dilated convolution 或 À trous)等各式各样的卷积。今天主要讲一下深度可分离卷积(depthwise separable convolutions),这是 Xception 以及 MobileNet 系列的精华所在。

从 Inception module 到 深度可分离卷积

Xception 的论文中提到,对于卷积来说,卷积核可以看做一个三维的滤波器:通道维+空间维(Feature Map 的宽和高),常规的卷积操作其实就是实现通道相关性和空间相关性的联合映射。Inception 模块的背后存在这样的一种假设:卷积层通道间的相关性和空间相关性是可以退耦合的,将它们分开映射,能达到更好的效果。

以上的图中,Figure 1 是一个典型的 Inception 模块,它先在通道相关性上利用 1×1 卷积将输入的 Feature Map 映射到几个维度比原来更小的空间上,相当于每个通道图乘上不同的因子做线性组合,再用 3×3 卷积这些小空间,对它的空间和通道相关性同时做映射。

其中,1*1卷积所作的操作即是将输入进行降维处理,减少通道数以便后面的卷积操作,这其实也就证明了空间相关性与通道相关性可以进行解耦分别处理。

举例计算说明:以第二个分支为例,假设 Input 是 28×28×192 的 Feature Maps,在通道相关性上利用 32 个 1×1×192 的卷积核做线性组合,得到 28×28×32 大小的 Feature Maps,再对这些 Feature Maps 做 256 个 3×3×32 的卷积,即联合映射所有维度的相关性,就得到 28×28×256 的 Feature Maps 结果。可以发现,这个结果其实跟直接卷积 256 个3×3×192 大小的卷积核是一样。也就是说,Inception 的假设认为用 32 个 1×1×192 和 256 个 3×3×32 的卷积核退耦级联的效果,与直接用 256个 3×3×192 卷积核等效。而两种方式的参数量则分别为32×1×1×192 + 256×3×3×32 = 79872 和 256×3×3×192 = 442368。

小小结:Inception 的假设认为用 32 个 1×1×192 和 256 个 3×3×32 的卷积核退耦级联的效果,与直接用 256个 3×3×192 卷积核等效。而两种方式的参数量则分别为32×1×1×192 + 256×3×3×32 = 79872 和 256×3×3×192 = 442368。两种连接方式,效果相同,但可以明显减少参数量。

Figure 2 是简化后的 Inception 模块(仅使用3×3卷积并去除 Avg pooling),基于 Figure 2 的简化模块可以将所有的 1×1 卷积核整合成一个大的 1×1 卷积,如将 3 组 32 个 1×1×192 的卷积核重组为 96个 1×1×192 的卷积核,后续再接3组 3×3卷积,3×3卷积的输入为前序输出的1/3(Figure 3),即将通道分组,每组进行不同的卷积操作,最后融合结果。。Xception 论文进而提出在 Figure 3 的基础上考虑一种极端情况,即分的组数等于通道数,让通道相关性和空间相关性是完全可分的,由此得到 Figure 4 中的 “extreme” Inception。如 Figure 4 所示,先进行 1×1 的通道相关性卷积,后续接的 3×3 卷积的个数与 1×1 卷积的输出通道数相同。

Figure 4 中的 Inception 模块与本文的主角-深度可分离卷积就近乎相似了,但仍然存在两点区别:

1、顺序相反:深度可分离卷积先进行 channel-wise 的空间卷积,再进行1×1 的通道卷积,Inception则相反;
2、是否有非线性激活:Inception中,每个操作后会有一个ReLU的非线性激活,而深度可分离卷积则没有。

论文当中论证第一点其实不太重要,第二点不加非线性激活的效果要好一些。

回过头来看一下从常规卷积 -> 典型的Inception -> 简化的Inception -> “极限”Inception,实际上是输入通道分组的一个变化过程常规卷积可看做将输入通道当做整体,不做任何分割;Inception则将通道分割成3至4份,进行1×1的卷积操作;“极限”Inception则每一个通道都对应一个1×1的卷积。

引入深度可分离卷积的 Inception,称之为 Xception(Extreme Inception),其结构图如下,图中的SeparableConv即是深度可分离卷积,将Inception中的卷积层换成了深度可分离卷积。另外可以看出每个模块均采用残差连接(开头和结尾的几个除外):

Xception 作为 Inception v3 的改进版,Xception在与Inception V3参数数量相差无几的情况下,在数据集ImageNet上性能有略微上升,数据集JFT上有明显提高。下图是 ImageNet 上 1000 类分类网络的训练参数和训练速度对比:


xception深刻研究了inception的思想,指出inception网络的实质就是将空间的相关性与通道的相关性进行解耦,但解耦的并不完全,所以论文要解决的问题就是怎么将空间的相关性与通道的相关性进行完全的解耦。

2、深度可分离卷积,其进行的操作是首先对每一个通道的特征图进行标准的卷积操作,再利用1*1的卷积融合这些通道的信息,可以减小运算量。

下面简单讨论一下Inception的优势与缺陷

Inception提出优势

Inception的计算成本也远低于VGGNet,这使得可以在大数据场景中,在大量数据需要以合理成本处理的情况下或在内存或计算能力固有地受限情况下,利用Inception网络变得可行,例如在移动视觉设定中。通过应用针对内存使用的专门解决方案,或通过计算技巧优化某些操作的执行,可以减轻部分这些问题。但是这些方法增加了额外的复杂性。此外,这些方法也可以应用于优化Inception架构,再次扩大效率差距。

小小结:Inception的计算成本也远低于VGGNet,适用于在大量数据需要以合理成本处理的情况下或在内存或计算能力固有地受限情况。

Inception缺陷

然而,Inception架构的复杂性使得更难以对网络进行更改。如果单纯地放大架构,大部分的计算收益可能会立即丢失。此外,并没有提供关于导致GoogLeNet架构的各种设计决策的贡献因素的明确描述。这使得它更难以在适应新用例的同时保持其效率。例如,如果认为有必要增加一些Inception模型的能力,将滤波器组大小的数量加倍的简单变换将导致计算成本和参数数量增加4倍。这在许多实际情况下可能会被证明是禁止或不合理的,尤其是在相关收益适中的情况下。

我们将在各种设定中探索卷积分解的其它方法,特别是为了提高解决方案的计算效率。由于Inception网络是全卷积的,每个权重对应每个激活的一次乘法。因此,任何计算成本的降低会导致参数数量减少。这意味着,通过适当的分解,我们可以得到更多的解耦参数,从而加快训练。此外,我们可以使用计算和内存节省来增加我们网络的滤波器组的大小,同时保持我们在单个计算机上训练每个模型副本的能力。

小小结:Inception架构的复杂性使得更难以对网络进行更改。如果单纯地放大架构,大部分的计算收益可能会立即丢失。它更难以在适应新用例的同时保持其效率。

小小结:Xception 作为 Inception v3 的改进版,Xception在与Inception V3参数数量相差无几的情况下,在数据集ImageNet上性能有略微上升,数据集JFT上有明显提高。xception将Inception的思想推向极致,减少计算量,加快训练速度。最重要的是,它的模型参数的数量和 Inception 一样多,说明它的计算效率也更高。

参考:https://www.jianshu.com/p/3ea7766890c4

参考:https://www.jianshu.com/p/38dc74d12fcf

深度可分离卷积(Xception 相关)相关推荐

  1. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  2. 深度可分离卷积(Xception 与 MobileNet)

    前言 从卷积神经网络登上历史舞台开始,经过不断的改进和优化,卷积早已不是当年的卷积,诞生了分组卷积(Group convolution).空洞卷积(Dilated convolution 或 À tr ...

  3. Xception深度可分离卷积-论文笔记

    Xception Xception: Deep Learning with Depthwise Separable Convolutions 角度:卷积的空间相关性和通道相关性 . 笔记还是手写好,都 ...

  4. 可分离卷积及深度可分离卷积详解

    可分离卷积 再来看一下nn.Conv2d(): torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, ...

  5. 【深度学习】利用深度可分离卷积减小计算量及提升网络性能

    [深度学习]利用深度可分离卷积减小计算量及提升网络性能 文章目录 1 深度可分离卷积 2 一个深度可分离卷积层的代码示例(keras) 3 优势与创新3.1 Depthwise 过程3.2 Point ...

  6. 深度可分离卷积Depthwise Separable Convolution

    从卷积神经网络登上历史舞台开始,经过不断的改进和优化,卷积早已不是当年的卷积,诞生了分组卷积(Group convolution).空洞卷积(Dilated convolution 或 À trous ...

  7. 【CV】MobileNet:使用深度可分离卷积实现用于嵌入式设备的 CNN 架构

    论文名称:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文下载:https:/ ...

  8. [Pytorch]torch.nn.functional.conv2d与深度可分离卷积和标准卷积

    torch.nn.functional.conv2d与深度可分离卷积和标准卷积 前言 F.conv2d与nn.Conv2d F.conv2d 标准卷积考虑Batch的影响 深度可分离卷积 深度可分离卷 ...

  9. 分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/

    文章目录 1. 常规卷积 2. 分组卷积 3. 转置卷积 4. 空洞卷积 5. 可变形卷积 6. 深度可分离卷积(Separable Convolution) 6.1 Depthwise Convol ...

最新文章

  1. 谷歌提出「卷积+注意力」新模型,超越ResNet最强变体
  2. 找出最大和第二大的数PHP,2020-09-01 十大经典排序算法总结php为例
  3. 中国交通建设PPP模式产业投资现状及运营前景规划咨询报告2021版
  4. 嵌入式linux镜像,使用Openembedded定制嵌入式Linux镜像
  5. 2019.1.23 01迷宫
  6. python保存模型与参数_Pytorch - 模型和参数的保存与恢复
  7. RHCSA学习笔记-基础操作命令
  8. 使用File I/O类实现文件的读写操作
  9. IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待
  10. 百度云盘下载限速破解的方法
  11. ydui时间组件报错nvalid prop: custom validator check failed for prop “startDate“.
  12. ethool工具之TSO、UFO、GSO、LRO、GRO和RSS介绍
  13. 致我爱的动漫--Fate 系列 Part 1:《Fate/Zero》
  14. 15个富有创意的单页设计
  15. STM32开发笔记106:解决ST-LINK的Old ST-LINK firmware/ST-LINK already usde问题
  16. PAC bounding学习记录
  17. 【Materials Studio学习六】构建固液表面
  18. 腾讯爬虫python_【Python爬虫+js逆向】Python爬取腾讯漫画!
  19. 抓取百度地图瓦片(离线GIS)
  20. 做一个墨水屏电子钟,炫酷!

热门文章

  1. 函数库,GDB调试,结构体
  2. origin刻度消失_Origin中坐标轴被误删了,怎么恢复坐标轴及刻度
  3. 浏览器如何解析HTML字符编码
  4. vba模拟鼠标点击_核对数据总看错,试试这个方法,点击单元格自动为整行填充颜色...
  5. php 复杂表格,Linux_使用JavaScript将复杂表格导出为Excel,使用JavaScript将表格导出为Excel - phpStudy...
  6. 线性插值——如何根据两点确定一条线段
  7. 船舶驾驶虚拟仿真模拟训练系统软件
  8. linux发邮件报错,Linux ExtMail登录界面报错
  9. 如何写一个好checker
  10. 生命的超级能量(宇宙真相)