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

那年仲夏 提交于 2020-08-20 02:28:26

卷积神经网络经过不断的改进和优化,卷积早已不是当年的卷积,诞生了分组卷积(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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!