Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

论文链接:https://arxiv.org/abs/1610.02357

声明:本文属于个人阅读论文时理解的中文意思,并不是对每个单词的翻译,如有错误,敬请谅解。欢迎大家的指点。

摘要

在卷积神经网络中,我们将Incpetion模块解释为规则卷积到depthwise separable convolutions操作(一个depthwise convolution后面跟一个pointwise convolution)中间的那个换代技术。从这个角度来看,一个depthwise separable convolution可以理解为一个具有最大数量towers的inception模块。受Inception的启发,这个观察引导我们提出了一个新颖的深度卷积神经网络架构,Inception模块已经被depthwise separable convolutions替代。我们展现的这个架构,被命名为Xception,在ImageNet数据集上(Inception V3就是为其设计的)比Inception V3稍微优秀,并且在包含3.5亿张图片和17000个类的更大的图像分类数据集上显著优于Inception V3。因为Xception架构和Inception V3又相同的参数数量,因此性能上的收益不在于模型压缩,而是由于更高效地使用模型参数。

1 简介

近年来,在计算机视觉中,卷积神经网络已经成为主要的算法,设计他们的方法一直是一个相当受关注的主题。卷积神经网络设计的历史开始于LeNet风格的模型,该模型就是简单的堆叠:为了特征提取的卷积层和为了空间降采样的空间最大池化层。在2012年,这个想法被AlexNet架构重新定义,其中卷积操作在最大池化操作之间重复多次,允许网络在每个空间尺度上学习到更丰富的特征。接下来的一种趋势就是网络变得越来越深,主要由ILSVRC竞赛驱动;首先是2013年的Zeiler和Fergus提出ZFNet,然后是2014年的VGG架构和GoogLeNet,随后有2015年ResNet、2016年DenseNet、2017年SENet。

在这一点上,出现了一种新的网络架构——在2014年作为GoogLeNet(Inception V1)被Szegedy等人介绍的Inception架构,随后被改进为Inception V2和Inception V3,以及最近的Inception-ResNet。Inception本身被早期的Network-In-Network架构所鼓舞。自从Inception首次被介绍,Inception一直是ImageNet数据集上表现最佳的模型之一,和谷歌使用的内部数据集性能一样好,特别是JFT。

Inception风格的模型的基本构建块是Inception模块,其中存在几个不同的版本。图1我们展示一个标准的Inception模块,正如在Inception V3架构中所示的一样。一个Inception模型可以被理解为这样模块的堆叠。这与早期的VGG风格的网络不同,VGG是简单卷积层的堆叠。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

虽然Inception模块在概念上和卷积(它们是卷积特征提取器)相似,但是它们在经验上似乎能够用较少的参数学习到更丰富的表示。他们是如何工作的,它们与标准卷积有何不同?在Inception之后有哪些设计策略?

1.1 Inception假设

一个卷积层试图学习一个3D空间的过滤器,其具有2个空间维度(宽度和高度)和1个通道维度;因此,一个单独的卷积核的任务是同时映射交叉通道相关分析和空间相关分析(个人理解不同通道之间的相关性就是交叉通道相关性分析,一个通道的相关性就是空间相关分析)。

Inception模块背后的思想是通过明确地因式分解将其分解为一系列独立的考虑交叉通道相关性和空间相关性操作,使这个过程更容易,更有效。更准确地说,标准的Inception模块首先通过一组1*1卷积考虑交叉通道相关性,将输入数据映射到小于原始输入空间的3或4个单独的空间,然后通过3*3或5*5卷积映射这些较小的3D空间中的所有相关性。如图1所示。实际上,Inception背后的基本假设使交叉通道相关性和空间相关性事充分解耦的,最好不要将它们联合起来。(1*1卷积的三个作用:1、实现跨通道的交互和信息(特征)整合;2、进行卷积核(特征)通道数的升维和降维;3、减少卷积核参数。具体请看:https://blog.****.net/wonengguwozai/article/details/72980828

考虑一个Inception模块的简化版本,仅仅使用一种大小的卷积(如3*3),并且不使用平均池化塔,如图2所示。这个Inception模块可以重新表示为一个大的1*1卷积,后面跟着空间卷积,空间卷积在输出通道的非重叠片段上运行,如图3所示。这个观察很自然的提出这个问题:在分段的过程中什么是影响分段的数量(和大小)?制定一个比Inception假设更强的假设是否是合理的?即假设交叉通道相关性和空间相关行可以完全独立地映射。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

 

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

1.2 卷积和分离卷积之间的连续统一体

基于这个更强的假设,Inception模块的一个“极端”版本首先使用一个1*1的卷积映射交叉通道相关性,然后分别映射每个输出通道的空间相关性。如图4所示。我们注意到这种极端形式的Inception模块几乎和depthwise separable convolution相同,这种操作早在2014年就被用于神经网络设计,并且变得更加流行,因此,在2016年它被纳入TensorFlow框架。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

在深度学习框架(如TensorFlow和Keras)中通常被称为“separable convolution”的depthwise separable convolution包括一个depthwise convolution和其后的一个pointwise convolution。depthwise convolution就是在输入的每个通道上独立地执行空间卷积;pointwise convolution就是1*1卷积,将depthwise convolution输出的通道映射到一个新的通道空间。这不应与空间分离卷积相混淆,空间分离卷积在图像处理社区中通常也被称为“separable convolution”。

Inception模块的“极端”版本和depthwise separable convolution之间的两个细微差别是:

1、操作的顺序:depthwise separable convolution的通常实现(如在TensorFlow中)首先执行通道空间卷积,然后执行1*1卷积;而Inception首先执行1*1卷积。

2、第一次操作之后是否存在非线性操作。在Inception中,两个操作后都跟着ReLU非线性操作;然而depthwise separable convolution的通常实现没有非线性操作。

我们认为第一个区别并不重要,特别是因为这些操作打算在堆叠设置中使用。第二个区别可能重要,我们在实验部分研究它(如图10)。

我们还注意到,位于规范Inception模块和depthwise separable convolution之间的Inception模块的其他中间公式也是可能的:实际上,在规范卷积和depthwise separable convolution之间存在离散谱,通过用于执行空间卷积的独立通道空间片段的数量参数化,在这个光谱的极端处的规范卷积(在1*1卷积之前)对应单段情况;depthwise separable convolution对应每个通道有一个分段的另一个极端;Inception模块在它们之间,将数百个通道分成3或4个段。这些中间模块的性能似乎还没有被探索过。

在做出这些观察后,我们建议用depthwise separable convolution替换Inception模块,即通过堆叠depthwise separable convolution构建模型,可能改进Inception架构系列。通过TensorFlow中有效地实现depthwise separable convolution,这变得切实可行。在下文中,我们展示了一个基于这个思想的卷积神经网络架构,它具有与Inception V3相似的参数数量,并且我们在两个大规模图像分类任务中评估其针对Inception V3的性能。

2 之前的工作

目前的工作在很大程度上依赖于以下领域的先前工作:

1、卷积神经网络,特别是VGG-16架构,它在一些方面如图所示和我哦们提出的架构是相似的。

2、卷积神经网络的Inception系列架构首次证明了在通道上将卷积因式分解为多个分支操作然后在空间上进行操作的优点。

3、我们提出的depthwise separable convolution架构完全基于以上。在神经网络中使用空间可分离卷积有一个悠久的历史,至少可以追溯到2012年(甚至更早),而depthwise版本是最近的。Laurent Sifre于2013年在Google Brain实习期间开发了depthwise separable convolutions,并在AlexNet中使用它们,从而在精确度上获得了小幅的提升,在收敛速度上获得了大幅的提升,同时显著减少了模型大小。他工作的概述首先在2014年的ICLR公布。详细的实验结果发表在Sifre论文的6.2节。depthwise separable convolution的初始工作受到Sifre和Mallat在变形-不变形散射研究的启发。随后,depthwise separable convolution被用作Inception V1和Inception V2的第一层。在谷歌内部,Andrew Howard已经介绍了使用depthwise separable convolution的高效地移动模型,被叫做MobileNets。在2014年Jin等人和2016年Wang等人也使用separable convolution做了相关的研究,旨在减少卷积神经网络的大小和计算成本。此外,我们的工作成为可能是因为TensorFlow框架中包含了高效的depthwise separable convolution的实现。

4、由He等人介绍的残差连接在我们的架构中广泛使用。

3 Xception架构

我们提出了一种完全基于depthwise separable convolution层的卷积神经网络架构。实际上,我们做出了以下假设:在卷积神经网络的特征映射中,交叉通道相关性和空间相关性的映射可以完全解耦。因为这个假设是在Inception架构假设的基础上的假设增强版本,我们将我们提出的架构命名为Xception,它代表“极端Inception”。

图5给出了规范网络的一个完整的描述。Xception架构有36个卷积层形成了这个网络的特征提取基础。在我们的实验评估中,我们专门研究图像分类,因此我们的卷积基础后面跟着一个逻辑回归层。在逻辑回归层之前可以选择插入一个全连接层,这在实验评估部分进行了探索(特别地,请看图7、8)。36个卷积层被构成了14个模块,所有的模块都有线性残差(每个小块的连接采用残差连接,就是图中的+号,不是原Inception中的concat)连接围绕它们,除了第一个和最后一个模块外。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

简单地说,Xception架构是一个带有残差连接的depthwise separable convolution层的线性堆叠。这使得架构非常容易定义和修改;使用像Keras或TensorFlow-Slim这样的高级库仅仅需要30到40行代码,这不仅和像VGG-16这种架构不同,而且和像Inception V2或V3这种架构不同,Inception V2或V3这些架构的定义远远复杂的多。使用Keras或TensorFlow的Xception开源实现是作为Keras应用程序模块的一部分,在MIT许可下提供。

4 实验评估

我们选择Xception与Inception V3架构进行比较,因为它们在规模上相似:Xception和Inception V3有几乎相同的参数数量(表3),因此任何性能差距都不能归因于不同的网络能力。我们在两个图像分类任务中进行对比:一个是ImageNet数据集上众所周知的1000类的单标签分类任务,另一个是在大规模JFT数据集上17000类的多标签分类任务。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

4.1 JFT数据集

JFT是用于大规模图像分类数据集的Google内部数据集,由Hinton等人首先创建,其中包括超过3.5亿张带标注的高分辨率图像,标签的类别有17,000类。 为了评估在JFT上训练的模型的性能,我们使用辅助数据集FastEval14k。

FastEval14k是一个包含14,000张图像的数据集,具有约6,000个类别的密集标注(平均每个图像36.5个标签)。 在这个数据集上,我们使用Mean Average Precision对前100个预测([email protected])评估性能,我们将每个类别对[email protected]的贡献加权,并用分数评估这个类别在社交媒体图像中是否常见(这也是很重要的)。 此评估程序旨在捕获社交媒体上频繁出现的标签的性能,这对Google的生产模型至关重要。

4.2 优化配置

ImageNet和JFT使用了不同的优化配置:

1、在 ImageNet:

     - Optimizer(优化器):SGD

     - Momentum(动量):0.9

     - Initial learning rate(初始学习率):0.045

     - Learning rate decay(学习衰减率):每2个epochs(批次)衰减0.94

2、在 JFT

     - Optimizer:RMSprop

     - Momentum:0.9

     - Initial learning rate:0.001

     - Learning rate decay:每3,000,000个样本衰减0.9

对于这两个数据集,Xception和Inception V3使用了完全相同的优化配置。请注意,这个配置以针对Inception V3进行了微调来获得最好的性能;我们没有尝试为Xception调整优化超参数。由于网络有不同的训练配置文件(图6),这可能是次优的,特别是在ImageNet数据集,该数据集上的优化配置已针对Inception V3进行了仔细调整。

此外所有的模型在推理的时候均使用Polyak平均值来评估。

4.3 正则化配置

  1. 权重衰减:Inception V3模型使用4e-5的权重衰减率(L2正则化),这个权重衰减率已经在ImageNet中仔细进行了微调。我们发现这个速率对Xception来说非常不理想,对Xception使用1e-5才可以勉强接受。我们没有对最佳权重衰减率进行广泛的搜索。ImageNet实验和JFT实验都使用相同的权重衰减率。
  2. Dropout:对于ImageNet实验,在逻辑回归层之前,两个模型都包含一个以0.5为概率的dropout层。对于JFT实验,不包含dropout层,因为数据集的大小使得在任何合理的时间内都不可能使得过拟合。
  3. 辅助损失塔:Inception V3架构可以选择包含一个辅助塔,它可以在网络中反向传播早期的分类损失,作为一种附加的正则化机制。简单起见,在我们的模型中不包含此辅助塔。

4.4 训练基础设施

所有网络均使用TensorFlow框架实施,并分别使用60个NVIDIA K80 GPU进行训练。 对于ImageNet实验,我们使用具有同步梯度下降的数据并行性来实现最佳分类性能,而对于JFT,我们使用异步梯度下降以加速训练。 ImageNet实验每次大约需要3天,而JFT实验每次花费超过一个月。 JFT模型没有接受完全收敛的训练,完全收敛的训练每次实验需要花费三个月的时间。

4.5 和Inception V3对比

4.5.1 分类性能

所有评估都使用单个输入图像和单个模型进行。 ImageNet结果报告在验证集而不是测试集上(即来自ILSVRC 2012验证集的非黑名单图像)。 JFT结果在3000万次迭代(一个月的训练)之后报告,而不是在完全收敛之后报告。结果在表1和表2以及图6,图7和图8中提供。在JFT上,我们测试了不包含任何完全连接层的两个版本的网络,以及包含两个完全连接层的版本,该版本在逻辑回归层之前每个完全完全连接层各有4096个单元。

在ImageNet上,Xception显示出比Inception V3稍微更好的结果。在JFT上,Xception在显示FastEval14k [email protected]指标上相对提高4.3%。我们还注意到Xception优于He等人报告的对于ResNet-50,ResNet-101和ResNet152的ImageNet结果。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

Xception体系结构在JFT数据集上显示出比ImageNet数据集上更大的性能改进。我们认为这可能是因为Inception V3的开发重点是针对ImageNet,因此可能是设计过于适合这一特定任务。另一方面,这两种架构都没有针对JFT进行调整。在ImageNet上搜索Xception的更好的超参数(特别是优化参数和正则化参数)可能会产生显着的额外改进。

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

4.5.2 大小和速度

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

在表3中,我们对比了Inception V3和Xception的大小和速度。图3显示的是,使用60个K80 GPU运行同步梯度下降,在ImageNet上的总参数(1000个类,没有完全连接的层)和每秒的训练步长(梯度更新)。其中。 两种体系结构的大小大致相同(在3.5%以内),而Xception的速度稍慢。 我们期望depthwise convolution运算水平的工程优化可以在不久的将来使Xception比Inception V3更快。 两个体系结构具有几乎相同数量的参数的事实表明,在ImageNet和JFT上看到的改进不在于模型压缩,而是来自更有效地使用模型参数。

 

4.6 残差连接的影响

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

为了量化Xception体系结构中残留连接的好处,我们在ImageNet上对Xception的修改版本进行了基准测试,该版本不包含任何残余连接。结果显示在图9中。在速度和最终分类性能方面,残余连接对于帮助收敛显然是必不可少的。然而,我们将注意到,使用与残差模型相同的优化配置对非残差模型进行基准测试可能是不合理的,并且更好的优化配置可能产生更具竞争力的结果。

另外,请注意,该结果仅显示了针对该特定架构的残余连接的重要性,并且为了构建depthwise separable convolution堆叠的模型,绝不需要残差连接。我们还使用非残差VGG样式模型获得了优异的结果,其中所有卷积层都被depthwise separable convolutions(深度乘数为1)替换,在JFT上相同的模型大小优于Inception V3。

4.7 pointwise卷积后中间**的影响

Xception:Deep Learning with Depthwise Separable Convolutions论文阅读解释

我们前面提到depthwise separable convolutions和Inception模块之间的类比表明,depthwise separable convolutions可能包括一个在深度和逐点运算之间的非线性操作。在迄今为止报告的实验中,没有包括这种非线性。然而,我们还通过实验测试了包含ReLU或ELU作为中间非线性操作。在ImageNet上报告的结果如图10,并且表明没有任何非线性导致更快的收敛和更好的最终性能。

由于Szegedy等人对Inception模块报告了相反的结果。可能应用空间卷积的中间特征空间的深度对于非线性的有用性至关重要:对于深度特征空间(例如在Inception模块中找到的那些),非线性是有帮助的,但对于浅度特征空间(例如,深度可分离卷积的1通道深特征空间)它可能由于信息丢失而变得有害。

个人认为非线性模块必不可少!

5 未来的方向

我们之前注意到在规范卷积和depthwise separable convolutions之间存在离散频谱,通过执行空间卷积的独立空间通道段的数量参数化。 初始模块是此频谱中的一个点。 我们在实证评估中表明,Inception模块的极端构想,即depthwise separable convolution,可能优于常规的规范Inception模块。 不管怎样,没有原因表明depthwise separable convolution是最佳的。 可能是频谱上的中间点位于规范的Inception模块和depthwise separable convolution之间,具有进一步的优点。 这个问题留给将来的调查。

6 总结

我们在离散谱的两个极端展示了如何进行卷积和depthwise separable convolutions,其中Inception模块是两者之间的折中。 这一观察结果使我们提出在计算机视觉神经网络架构中用depthwise separable convolutions替换Inception模块。 我们基于这种思想提出了一种新颖的架构,命名为Xception,它具有与Inception V3类似的参数量(也就是模型大小)。 与Inception V3相比,Xception在ImageNet数据集上的分类性能提升较小,在JFT数据集上的分类性能提升较大。 我们期望depthwise separable convolutions成为未来卷积神经网络架构设计的基石,因为它们提供与Inception模块类似的属性,但可以作为规范卷积层同样易于使用。