Abstract
我们将卷积神经网络中的Inception解释为从规则卷积到深度可分离卷积中间的一步。从这个角度说,深度可分离卷积可以被理解为具有最多towers的inception模块。受inception启发,借助这个发现引导我们设计了一个新颖的深度卷积神经网络框架,即将Inception中的卷积模块全部替换为深度可分离卷积。我们介绍的这个架构,名为Xception,在ImageNet数据集上比Inception V3稍微表现好一些,并且在包含3.5亿张图片和17000类的更大数据集显著优于Inception V3。因为Xception架构和Inception V3 有相同的参数量,因此性能上的收益不在于模型的容量提升,而是因为更高效地使用模型的参数。
1 Introduction
近年来,在计算机视觉领域,卷积神经网络已经成为最主流的算法,设计它们的策略成为值得广泛关注的主题。卷积神经网络设计的历史开始于LeNet风格的模型,该模型就是提取特征的卷积和空间下采样的最大池化操作之间的简单堆叠。在2012年,这个想法被AlexNet架构重新定义,其中卷积操作在最大池化操作之间反复多次,这样的做法能够使得网络学习每一个空间尺度上的丰富的特征。在ILSVRC竞赛的驱动下,接下来的趋势就是使得网络越来越深:首先就是2013年Zeiler和Fergus提出的ZFNet,然后就是2014年的VGG网络。
在这一点上,出现了新的网络设计方式-Inception架构,它首先由GoogLeNet作者Szegedy提出,然后被改进为Inception V2和Inception V3,以及最近的Inception-ResNet。Inception本身的设计是受早期的Network in Network架构启发。自从Inception被提出以来,始终是ImageNet数据集上表现最佳模型的家族之一,并且在Google内部的数据集,特别是JFT,上也是表现最好的模型之一。
Inception风格的模型基本的模块是Inception,它存在着一些不同的版本。图1展示了一个标准的Inception模块,正如Inception V3论文中所示。一个Inception模型可以理解为这样的模块的堆叠。这与早期的VGG模型不同,它仅仅是由简单的卷积层堆叠而成。
虽然Inception模块在概念上与卷积特征提取器相似,但从经验上看,它们似乎能够用更少的参数学习更丰富的特征表示。它们是如何工作的?它们与标准卷积有什么区别?Inception之后有哪些设计策略。
1.1 Inception Hypothesis
一个卷积层试图学习一个3D空间的特征过滤器,其中有2个空间维度和1个通道维度;因此,一个单独的卷积核是同时映射交叉通道关联和空间关联。
Inception背后的思想是想通过因式分解的方式明确地将卷积分解为一系列独立的关注交叉通道的关联和空间关联的操作来使得这个过程更加容易以及更高效。更准确地说,典型的Inception模块首先通过一组卷积核来关注交叉通道相关性,将输入数据映射到小于原始空间的3,4个单独的空间在,然后通过和卷积在这些较小的3D空间中映射所有相关性。如图1所示。实际上,Inception背后的基本假设是使交叉通道的相关性和空间相关性充分解耦的,最好不要将它们联合映射。
考虑一个Inception模块的简化版本,仅使用了一种尺寸的卷积核(如),并且不使用平均池化,如图2所示。这个Inception模块可以重新表示为一个大型卷积,后面跟着运行在不重叠输出通道片段上的空间卷积。如图3所示。这个观察自然引出一个问题:分区中的段数(及其大小)的影响是什么?制定一个比Inception假设更强的假设是否合理?这个假设是交叉通道相关性和空间相关性可以完全独立地映射。
1.2 The continuum between convolutions and separable convolutions
基于以上的强假设,Inception模块的一个“极端”版本先使用一个的卷积映射交叉通道相关性,接着分别映射每一个通道的空间相关性。如图4所示。我们注意到这种极端形式的Inception模块几乎等同于深度可分离卷积。这种操作早在2014年就被用于神经网络设计,并且自2016年被纳入TensorFlow框架以来,变得更加流行。
在深度学习框架(如Tensorflow和Keras)中通常被称为“Separable convolution”的depth separable convolution包括一个depthwise convolution和后接一个pointwise convolution。depthwise convolution就是在输入的每一个通道上独立地实施空间卷积;pointwise卷积就是卷积,将depthwise convolution输出的通道映射到一个新的通道空间。这个不应该跟“spatially separable”卷积相混淆,它在图像处理领域通常被称作“separable convolution”。
Inception模块的极端形式和depthwise separable convolution的两个细微差别是:
- 1)操作的顺序:depthwise separable convolution通常是首先通过执行通道空间卷积,然后执行卷积;而Inception 首先执行卷积。
-
2)第一次操作后是否存在非线性操作。在Inception中,两个操作后跟着RELU非线性操作,然而depthwise separable convolution的实现通常没有非线性操作。
我们认为第一个区别并不重要,特别是因为这些操作是用于堆栈设置的。第二个区别可能重要,我们在实验部分对此进行探究(如图10所示)。
我们还注意到位于标准Inception模块和depthwise separable convolution之间的inception模块之间的其他形式也是可能的:实际上,在标准卷积和depthwise separable convolution之间存在离散谱,以用于执行空间卷积的独立通道片段的数量为参数,这个离散谱的一个极端情况是标准卷积,对应着单段情况。depthwise separable convolution则对应着一个通道一段的情况。Inception模块处于它们之间,将数百个通道分为3~4段,这些中间模块的性能似乎还没被探索过。
在作出这些观察之后,我们建议可能用depthwise separable convolution替换inception模块,即堆叠depthwise separable convolution,来改进inception系列架构。在tensorflow框架下通过有效的depthwise convolution实现让这一切变得切实可行。在下文中,我们基于此思想提出新的卷积神经网络架构,它具有与Inception v3相当的参数量,并且我们在两个大规模的图像分类任务中比较与Inception V3的性能。
2 Prior work
目前的工作很大程度上依赖于以下领域的工作:
- 1)卷积神经网络,特别是VGG-16框架,它在一些方面和我们提出的框架在理论上相似。
- 2)卷积神经网络中的Inception系列架构首次证明了将卷积因式分解为在通道上和然后空间上的多个分支的优势。
- 3)我们提出的架构完全基于depthwise separable convolution。虽然在神经网络中使用空间可分离卷积有着悠久的历史,但是depthwise版本的卷积也是最近才使用的。 Laurent Sifre于2013年在Google Brain实习期间开发了depthwise separable convolutions,并用于AlexNet,在精度上获得了小幅度提升,在收敛速度上获得了大幅度的提高,同时显著减小了模型的规模。他的工作首先发表于ICLR2014。详细的实验结果呈现在他的论文6.2节。该方法是由Sifre和Mallat对变换不变散射的先验研究得到的。后来被用在Inception V1和Inception V2的第一层。在谷歌,Howard基于此提出了MobileNet。Jin在2014年和Wang在2016年也做了相关工作,旨在减少卷积神经网络的大小和计算成本。此外,由于TensorFlow框架中包含了深度可分离卷积的有效实现,所以我们的工作是可能的。
- 4)由He等人提出的残差结构在我们提出的框架中被广泛使用。
3 The Xception architecture
我们提出了一个完全基于depthwise separable convolution层的卷积神经网络框架。实际上,我们做出以下的假设:在卷积的特征映射中,交叉通道相关性和空间相关性的映射可以完全解耦的。因为这个假设是在Inception 架构下的增强假设版本,故我们将其命名为Xception,即“Extreme Inception”。
图5给出了网络架构的完整描述。Xception有36个卷积层形成了这个网络的特征提取基础。在我们的实验评估中,我们将专门研究图像分类,因此我们的特征卷积层后面将有一个逻辑回归层。在逻辑回归层之前可以选择性插入一个全连接层,这在实验评估中进行了探索。(特别地,如图7、8所示)。36个卷积层构成14个模块,所有模块都有线性残差连接围绕此,除了第一个模块和最后一个模块。
简单来说,Xception网络架构是一个带有残差架构的depthwise separable convolution层的线性堆叠。这使得此架构很容易被定义和修改:使用keras和Tensorflow-Slim这样的高级库近需要30-40行代码,这不仅不像VGG-16的架构不同,而且和Inception V2或者V3架构不同,例如它们的定义要复杂的多。一个使用Keras和TensorFlow的Xception的开源实现是作为Keras应用程序模块的一部分在MIT许可下提供的。
4 Experimental evaluation
我们选择Xception和Inception V3进行比较,因为它们在网络规模上相似:Xception和Inception V3有几乎相同的参数量(表3所示),因此任何性能的差异不能归因于网络容量。我们在两个图像分类数据任务上进行了对比:一个是众所众ImageNet数据集1000类的单标签分类任务,另一个是大规模JFT数据集上17000类的多标签分类任务。
4.1 JFT数据集
JFT是用于大规模图像分类的谷歌内部数据,由Hinton等人首先创建,其中包括3.5亿带标注的高分辨率图像,标签的类别有17000类。为了评估在JFL数据集上训练的模型,我们使用辅助数据集FastEval14k。
FastEval14k是一个包含14000张图像的数据集,具有6000个类别的密集标注(平均每个图像36.5个标签)。在这个数据集上,我们使用MAP对前100个预测评估性能,并对每个类别对MAP @ 100的贡献进行加权,并给出一个分数,以估算该类别在社交媒体图像中的普遍程度(因此很重要)。这个评估过程旨在从社交媒体上获取频繁出现的标签的性能,这对谷歌的生产模型至关重要。
4.2 Optimization configuration
ImageNet和JFT使用了不同的优化设置:
- 1 在ImageNet:
- Optimizer:SGD
- Momentum:0.9
- Initial learning rate:0.045
- Learning rate decay:decay of rate 0.94 every 2 epochs
- 2 在JFT:
- Optimizer:RMSprop
- Momentum:0.9
- Initial learning rate:0.001
- Learning rate decay:decay of rate 0.9 every 3,000,000 samples
对于两个数据集,Xception和Inception V3使用了完全相同的优化配置。请注意,这个是针对Inception V3最佳性能的调整配置。我们没有尝试为Xception调整最佳的优化配置。由于不同模型有不同的训练配置文件,这可能是次优的,特别是在ImgaeNet数据集上,该数据集上已针对Inception V3进行了仔细地优化参数调整。
此外所有模型在测试的时候均使用Polyak平均值来评估。
4.3 Regularization Configuration
- Weight decay:Inception V3使用4e-5的权重衰减率(L2正则化),这个权重衰减已经在ImageNet上仔细进行了调整。我们发现这个速率对于Xception是次优的,因此设置为1e-5。我们没有对最佳的衰减衰减率进行广泛的搜索。ImageNet实验和JFT实验都使用了相同的衰减率。
- Dropout:对于ImageNet,在逻辑回归层之前,两个模型都包含了以0.5为概率的dropout层。对于JFT实验,不包含dropout层,因为数据集的数量之大使得模型在任何一个合理的时间内过拟合都不可能发生。
- Auxiliary loss tower(辅助损失塔):Inception V3架构可以选择加入一个辅助损失塔,可以在网络中反向传播早期分类损失。为了简单起见,我们在所有的模型中都没有使用这个辅助塔。
4.4 Training infrastructure
所有的网络都使用Tensorflow作为网络框架,并分别在60块NVIDIA K
80上进行训练。对于ImageNet数据集实验,为了获得最佳的分类性能,我们使用了同步梯度下降的数据并行性,而对于JFT,我们使用异步梯度下降来加快训练速度。ImageNet实验每次大约花费3天,而JFT实验每次花费超过一个月。JFT模型没有进行完全收敛训练,完全的收敛训练每次实验需要花费3个月时间。
4.5 Comparison with Inception V3
4.5.1 Classification performance
所有评估都是通过单幅输入图像和单个模型进行的。ImageNet的结果是在验证集上而不是在测试集上报告的(即在ILSVRC 2012验证集的非黑名单图像上)。JFT的结果是在3000万次迭代(一个月的训练)之后报告的,而不是在完全收敛之后。结果如表1、表2、图6、图7、图8所示。在JFT上,我们测试了两个版本的网络,一个不包含任何全连接层,另一个版本在logistic回归层之前包含两个4096个单元的全连接层。
在ImageNet上,Xception显示的结果略好于Inception V3。在JFT上,Xception关于FastEval14k MAP@100指标有4.3%的相对改进。我们还注意到,Xception的表现优于He的文献报告的ResNet-50,resnet - 101 和resnet-152 的ImageNet结果。
与ImageNet数据集相比,Xception架构在JFT数据集上展现了更大的性能改进。
我们认为这可能是由于Inception V3是在关注ImageNet的基础上开发的,因此可能在这个特定的任务的模型设计过拟合了。另一方面,这两种架构都没有为JFT进行调优。在ImageNet上搜索更好的Xception超参数(特别是优化参数和正则化参数)可能会产生重大的额外改进。
4.5.2 Size and speed
在表3中,我们比较了Inception V3和Xception的大小和速度。 在ImageNet上报告参数计数(1000个类,没有完全连接的层),在具有60个运行同步梯度下降的K80 GPU的ImageNet上报告每秒的训练步骤(梯度更新)数。两种架构的大小大致相同(在3.5%以内),并且Xception稍微慢一些。我们希望在不久的将来,深度卷积操作级别的工程优化可以使Xception比Inception V3更快。两种体系结构具有几乎相同数量的参数这一事实表明,在ImageNet和JFT上看到的改进不是源于模型容量的增加,而是源于模型参数更高效地使用。
4.6 Effect of the residual connections
为了量化Xception体系结构中残差连接的好处,我们在ImageNet上对不包含任何残留连接的Xception的改进版本进行了基准测试。结果显示在图9中。从速度和最终分类性能的角度来看,残余连接显然对于帮助收敛至关重要。 但是,我们将注意到,以与残差模型相同的优化配置对非残差模型进行基准测试可能是不明智的,并且更好的优化配置可能会产生更具竞争力的结果。另外,我们注意到,该结果仅显示了此特定体系结构的残差连接的重要性,并且以构建深度可分离卷积堆栈的模型,绝无要求残差连接我们还用非残留的VGG样式模型获得了出色的结果,该模型将所有卷积层都替换为深度可分离的卷积(深度倍数为1),在相等参数数下优于JFT上的Inception V3。
4.7 Effect of an intermediate activation after pointwise convolutions
前面我们提到过,Depthwise separable convolution和Inception模块之间的类比表明,深度可分离卷积可能应包括深度和点运算之间的非线性。在迄今为止报道的实验中,没有包括这样的非线性。 但是,我们还通过实验测试了ReLU或ELU的包含作为中间非线性。 结果在ImageNet上的图10中进行了报道,结果表明,缺少任何非线性都会导致更快的收敛速度和更好的最终性能。
这是一个了不起的发现,因为塞格迪(Szegedy)在[21]中对Inception模块报告了相反的结果。可能应用了空间卷积的中间特征空间的深度对于非线性的有效性至关重要:对于较深的特征空间(例如,在Inception模块中找到的那些),非线性是有帮助的,但对于较浅的特征空间(例如,深度可分离卷积的1通道深特征空间),它可能是有害的,这可能是由于信息丢失所致。
5 Future directions
前面我们注意到,在常规卷积和深度可分离卷积之间存在离散频谱,其参数化是用于执行空间卷积的独立通道空间段的数量。初始模块是这一范围的一个点。 我们在经验评估中表明,与常规的Inception模块相比,Inception模块的极端形式(深度方向可分离卷积)可能具有优势。 但是,没有理由认为深度可分离卷积是最佳的。 也许频谱上的中间点位于常规的Inception模块与深度可分离的卷积之间,具有更进一步的优势。 这个问题留待将来调查。
6 conclusion
我们展示了卷积和深度可分离卷积如何位于离散频谱的两个极端,而Inception模块是介于两者之间的中间点。 这种观察导致我们提出在神经计算机视觉体系结构中用深度可分离卷积替换Inception模块。 我们基于此思想提出了一种新颖的架构,名为Xception,其参数计数与Inception V3相似。 与Inception V3相比,Xception在ImageNet数据集上的分类性能提高不大,而在JFT数据集上的分类性能却大增。 我们期望深度可分离卷积在将来成为卷积神经网络体系结构设计的基石,因为它们提供与Inception模块类似的属性,但与常规卷积层一样容易使用。