Xception: Deep Learning with Depthwise Separable Convolutions
我们将卷积神经网络中的Inception模块解释为是常规卷积和深度可分离卷积操作(深度卷积然后是点向卷积)之间的中间步骤。因此,可以将深度方向上可分离的卷积理解为具有最大数量塔架的Inception模块。这项观察结果导致我们提出了一种受Inception启发的新型深度卷积神经网络体系结构,其中Inception模块已被深度可分离卷积替代。我们证明了这种被称为Xception的体系结构在ImageNet数据集(Inception V3为它设计)上略胜于Inception V3,并且在包含3.5亿张图像和17,000个类别的较大图像分类数据集上明显优于Inception V3。由于Xception架构的参数数量与Inception V3相同,因此性能的提高并不是由于容量的增加,而是由于模型参数的使用效率更高。
近年来,卷积神经网络已经成为计算机视觉领域的主流算法,开发卷积神经网络的设计方法一直是一个备受关注的课题。卷积神经网络的历史是以LeNet-style模型的设计开始的,在这些模型中通过简单的堆积卷积来进行特征提取,并用最大池化操作来进行空间下采样。在2012年,这些想法被提炼为AlexNet架构,其中卷积运算在最大池操作之间重复多次,允许网络在每个空间尺度上学习更丰富的特征。接下来的趋势是使这种类型的网络越来越深,主要是由每年的ILSVRC竞赛推动;首先是Zeiler和Fergus在2013年提出的ZFNet,然后是2014年的VGG架构。
在此节点上,一种新的网络架构出现了,Inception网络,由Szegedy等人在2014年引入的GoogLeNet (Inception V1),后来精炼为InceptionV2、InceptionV3,还有最近的Inception-ResNet。Inception本身的灵感来自于早期的Network-in-Network架构。自从首次推出以来,Inception一直是ImageNet数据集以及Google使用的内部数据集(尤其是JFT)中性能最好的模型系列之一。
Inception样式模型的基本构建块是Inception模块,其中存在几个不同的版本。在图1中,我们显示了Inception V3体系结构中的Inception模块的规范形式。初始模型可以理解为这样的模块的堆叠。这与早期的VGG样式网络不同,后者是简单的卷积层的堆叠。
虽然Inception模块在概念上与卷积相似(它们是卷积特征提取器),但从经验上看,它们似乎能够以较少的参数学习更丰富的表示。它们如何工作?它们与常规卷积有何不同?Inception之后的设计策略是什么?
卷积层尝试在具有2个空间维度(宽度和高度)和一个通道维度的3维空间中学习卷积核;因此,单个卷积核映射同时考虑跨通道相关性和空间相关性。
Inception模块背后的想法是通过显式地将其分解成一系列独立查看跨通道相关性和空间相关性的操作,使这个过程更容易和更有效。准确的说,常规的Inception模块首先通过1x1的卷积处理通道相关性,将输入数据映射到3或4个比原始输入空间小的独立空间中,然后通过常规的3x3或5x5卷积映射到这些更小的3D空间。如图1所示。实际上,Inception背后的基本假设是,跨通道相关性和空间相关性已充分解耦,因此最好不要将它们共同映射。
考虑Inception模块的一个简化版本,只使用一种尺寸的卷积(如3x3),并且不包含平均池化塔(如图2)
这种Inception可以被重新构造为一个大的1x1卷积接着许多空间卷积,这些空间卷积在输出通道上的不重叠部分分别进行卷积操作(如图3)。
这种观察很自然地会想到一些问题:分区中的段数(及其大小)会产生什么影响?是否可以进一步假设通道相关性和空间相关性可以完全独立地映射?
基于这个进一步的假设,存在一个Inception模块的极端版本,首先使用一个1x1卷积来映射跨通道的相关性,然后将分别映射每个输出通道的空间相关性。如图4所示
我们注意到,Inception模块的这种极端形式几乎与深度可分离卷积相同,这种操作早在2014年就已经被用于神经网络设计中,并且自从2016年它被包含在TensorFlow框架中之后变得更加流行。
深度可分离卷积,在诸如TensorFlow和Keras等深度学习框架中通常称为“可分离卷积”,由深度卷积即在每个输入通道上独立执行的空间卷积,然后是逐点卷积,即1x1卷积,将深度卷积输出的通道投射到新的通道空间。不要将它与空间可分卷积混淆,在图像处理领域中也通常称为“可分卷积”。
Inception模块的极端版本和深度可分离卷积间两个极小的区别是:
操作顺序:通常实现的深度可分卷积(例如在TensorFlow中)首先执行沿通道的空间卷积,然后执行1x1卷积,而Inception首先执行1x1卷积。
第一次操作后是否存在非线性。在Inception中,1x1卷积和空间卷积后面都接着ReLU非线性,然而深度可分离卷积通常是在没有非线性的情况下实现的。
我们认为,第一个区别并不重要,特别是因为这些操作是要在堆叠的环境中使用的。第二个差异可能很重要,我们在实验部分对此进行了调查(特别是参见图10)
我们还注意到,在常规Inception模块和深度可分卷积之间的Inception模块的其他中间公式也有可能:实际上,在常规卷积与深度可分离卷积之间有一个离散谱,该离散谱由独立通道空间段的数量参数化,用于空间卷积。在此频谱的一个极端情况下,常规卷积(以1x1卷积开头)对应于单段情况;深度可分离卷积对应于每个通道有一个分段的另一个极端;Inception模块位于两者之间,将数百个通道分成3或4个段。这些中间模块的属性似乎还没有被研究过。
经过这些观察,我们建议通过用深度可分离卷积替换Inception模块来改进Inception系列架构,即通过构建深度方向可分离卷积堆叠的模型。这是通过tensorflow中有效的深度卷积实现的,接下来,我们基于这一思想提出了一个卷积神经网络,其参数量与InceptionV3差不多,并且我们在两个大规模数据集上比较了本文模型与InceptionV3的表现。
目前的工作在很大程度上依赖于以下领域的之前成果:
我们提出了一个完全基于深度可分卷积层的卷积神经网络结构。实际中,我们做了如下假设:卷积神经网络特征图中的跨通道相关性和空间相关性的映射可以被完全解藕。由于这个假设是Inception架构的假设的增强版,因此我们将提出的架构命名为Xception,代表“Extreme Inception ”。
图5给出了网络规范的完整描述,Inception结构具有36个卷积层,构成了网络的特征提取基础。在我们的实验评估中,我们将专门研究图像分类,因此我们的卷积基之后将有一个逻辑回归层。也可以选择在逻辑回归层之前插入全连接层,这在实验评估部分中进行讨论(具体参见图7和图8)。这36个卷积层被构造成14个模块,除了第一个模块和最后一个模块外,所有模块周围都有线性残差连接。
简单的说,Xception架构是由具有残差连接的深度分离卷积层线性堆叠而成的,这使得架构可以非常简单的去定义和修改;使用Keras或TensorFlow-Slim这样的高级库只需要30到40行代码,不像VGG-16这样的架构,更不像Inception V2或V3这样的架构,它们的定义要复杂得多。在MIT许可下,一个使用Keras和TensorFlow实现的Xception的已经开源了,它是Keras应用程序模块的一部分。
我们选择将Xception与Inception V3架构进行比较,是因为它们的尺度相似:Xception和Inception V3具有几乎相同数量的参数(表3),因此任何性能差异都不能归咎于网络容量的差异。我们在两个数据集上进行了我们的实验,一个是著名的imageNet数据集(1000类单标签分类),另一个是大规模的JFT数据集(17000类多标签分类)。
JFT是一个用于大规模图像分类数据集的内部Google数据集,由Hinton等人引入,它包含超过3.5亿张高分辨率图像,包含17000个类别。为了评估在JFT上训练的模型的性能,我们使用了一个辅助数据集FastEval14k。
FastEval14k是一个包含14000个密集标注图像的数据集,包含大约6000个类(平均每个图像有36.5个标签)。。在此数据集上,我们使用平均平均精度对前100个预测(MAP @ 100)进行评估,并对每个类别对MAP@100的贡献进行加权,并给出一个评分,以估计该类别在社交媒体图像中的普遍程度(因此很重要)。这个评估过程旨在从社交媒体上获取频繁出现的标签上的效果,这对于Google的生产模型而言至关重要。
ImageNet和JFT使用了不同的优化配置:
此外,所有模型在推断时都使用Polyak平均法进行评估。
所有网络使用TensorFlow框架实现,每个网络使用60个NVIDIA K80 gpu进行训练,在ImageNet实验中,我们采用了数据并行化和同步梯度下降的方法来获得最佳的分类性能,而在JFT中,我们采用了异步梯度下降的方法来加快训练速度。ImageNet实验各耗时约3天,而JFT实验各耗时1个多月。JFT模型没有被训练到完全收敛的程度,每次实验都需要三个多月的时间。
所有评估都是通过单幅输入图像和单个模型进行的。ImageNet的结果是在验证集上而不是在测试集上报告的(即在ILSVRC 2012的验证集上的非黑名单图像上)。JFT结果是在3000万次迭代(一个月的训练)后报告的,而不是在完全收敛之后。结果如表1、表2、图6、图7、图8所示。在JFT上,我们测试了两个版本的网络,一个版本没有包含任何完全连接的层,另一个版本在逻辑回归层之前包含两个4096个单位的完全连接层。
在ImageNet上,Xception比Inception V3稍好一些。在JFT上,Xception在FastEval14k MAP@100度量标准上相比Inception有4.3%的改进。我们还注意到,Xception优于He等人所报告的ImageNet在ResNet-50, ResNet-101和ResNet-152上的结果。
与ImageNet数据集相比,Xception架构在JFT数据集上显示出了更大的性能改进。我们认为这可能是由于Inception V3是专门为ImageNet开发的,因此可能是被设计的非常适合这个特定的任务。另一方面,两种架构都没有针对JFT进行调整。在ImageNet上搜索更好的Xception超参数(特别是优化参数和正则化参数)可能会带来显著的额外改进。
我们比较了InceptionV3和Xception的参数量和速度。这个比较是在ImageNet上进行的(1000类别,没有全连接层),在60块 K80 GPUs上进行同步梯度下降训练,在表3中展示了参数量和平均每秒训练的步数。两种架构的大小基本相同(差距在3.5%以内),Xception稍微慢一些。我们期望在不久的将来,深度卷积操作级别的工程优化可以使Xception比Inception V3更快。两种体系结构的参数数量几乎相同,这一事实表明,ImageNet和JFT上的改进并不是来自于增加的容量,而是来自于更有效地使用模型参数。
为了定量的分析Xception中残差连接的好处,我们在ImageNet上对Xception的修改版本进行了基准测试,该版本不包含任何残差连接。结果如图9所示。无论在速度还是最终的分类性能方面,残差连接对于帮助收敛都是非常重要的。然而,我们将注意到,用与残差模型相同的优化配置对非残差模型进行基准测试可能是苛刻的,而且更好的优化配置可能产生更具竞争力的结果。
另外,我们注意到这个结果仅仅显示了残差连接对于这个特定架构的重要性,并且而残差连接绝不是构建深度可分离卷积堆栈的模型所必需的。在没有残差连接的VGG模型中,当所有的卷积层都被替换为深度可分的卷积我们也获得了很好的结果(深度乘数为1),在JFT等参参数计数上优于Inception V3。
前面我们提到过,深度可分卷积和Inception模块相比,深度可分卷积本身在深度操作和点操作之间不包括非线性激活。在目前报道的实验中,还没有发现这种非线性现象。但是我们也通过实验测试了ReLU或ELU作为中间非线性的结果。在ImageNet上的结果如图10所示,结果表明缺少任何非线性都会导致更快的收敛速度和更好的最终性能。
这是一个值得注意的发现,因为Szegedy等人在讨论Inception时报道了相反的结论。可可能应用空间卷积的中间特征空间的深度对于非线性的有用性至关重要:对于深特征空间(如Inception模块)非线性是有帮助的,但是对于浅层网络(如深度分离卷积的一通道深度特征空间),它变得不利,可能是由于信息丢失。
我们在前面已经注意到常规卷积和深度可分卷积之间存在一个离散谱,该离散谱由用于执行空间卷积的独立通道空间段的数量来参数化。Inception是这个图谱内的一点。在我们的实验评估中,我们展示了一个Inception模块的极端形式,深度可分离卷积,可能比常规Inception模块有优势。然而,没有理由认为深度可分卷积是最优的。可能是频谱上的中间点位于常规的Inception模块与深度可分离的卷积之间,具有其他优势。这个问题留待将来调查。
我们展示了卷积和深度可分离卷积在离散谱的两个极端,Inception模块是两者之间的一个中间点。基于这一观察,我们提出用深度可分卷积代替Inception模块,用于神经计算机视觉架构。我们提出了一个基于这种思想的新架构,名为Xception,它的参数计数与Inception V3类似。与Inception V3相比,Xception在ImageNet数据集上的分类性能提高很小,而在JFT数据集上的分类性能提高了很多。我们期望深度可分卷积在未来能够成为卷积神经网络架构设计的基石,因为它们提供了与Inception模块类似的特性,并且与常规卷积层一样易于使用。