《Xception--利用深度可分离卷积的深度学习》论文笔记

Xception

 之前介绍MobileNet的时候说过深度可分离卷积,不过说起来这篇Xception的论文还要更早利用/借鉴到深度可分离卷积(当然两者都不是原创,而是借鉴了2014年的一篇博士论文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》),该文章发表在了CVPR 2017上,原文可见Xception: Deep Learning with Depthwise Separable Convolutions。


摘要

 我们将卷积神经网络中的Inception模块解释为普通卷积和深度可分离卷积操作(深度卷积后接逐点卷积)之间的中间状态。从这个意义上讲,深度可分离卷积可以理解为一个具有最大数量tower的Inception模块。基于此,我们提出了一种新颖的深度卷积神经网络结构,该结构受到Inception的启发,Inception模块被深度可分离卷积所取代。我们展示了这个被称为Xception的架构,它在ImageNet数据集上稍微优于Inception V3 (Inception V3是为ImageNet数据集设计的),并且在一个包含3.5亿张图像和17000个类的更大的图像分类数据集上显著优于Inception V3。由于Xception体系结构具有与Inception V3相同的参数数量,所以性能的提高不是由于容量的增加,而是由于更有效地使用了模型参数。

1. 引言

 卷积神经网络是近年来计算机视觉领域中出现的一种主要算法,开发卷积神经网络的设计方法一直是一个备受关注的课题。卷积神经网络设计的历史始于LeNet风格的模型,它是用于特征提取的卷积和空间下采样的最大池化操作的简单堆栈。2012年,这些想法被提炼成AlexNet架构,其中卷积操作在最大池化操作之间重复多次,允许网络在每个空间尺度上学习更丰富的特征。随之而来的是一种趋势,使这种类型的网络越来越深,主要是由每年的ILSVRC竞赛推动;首先是2013年的Zeiler和Fergus,然后是2014年的VGG架构。

 此时,出现了一种新的网络风格,即Inception架构,由Szegedy等人于2014年以GoogLeNet(Inception V1)的形式引入,后来改进为Inception V2、Inception V3,以及最近的Inception-Resnet。 Inception本身受到了更早的Network-In-Network的启发。自首次引入以来,Inception一直是ImageNet数据集上(以及谷歌上使用的内部数据集,特别是JFT)性能最好的模型家族之一。

 Inception风格的模型的基本构建块是Inception模块,其中有几个不同的版本。在图1中,我们展示了Inception模块的规范形式,正如在Inception V3架构中所发现的那样。一个Inception模型可以理解为这些模块的堆栈。这与早期的VGG风格的网络不同,后者是由简单的卷积层堆积而成。

《Xception--利用深度可分离卷积的深度学习》论文笔记_第1张图片
图1. 规范的Inception模块(Inception V3)

 虽然Inception模块在概念上类似于卷积(它们是卷积特征提取器),但从经验上看,它们似乎能够用更少的参数学习更丰富的表示。它们是如何工作的,它们与普通卷积有什么不同?什么样的设计策略在Inception后出现?

1.1 Inception假设

 卷积层尝试在具有2个空间维度(宽、高)和通道维度的三维空间中学习滤波器;因此,单个卷积核的任务是同时映射跨通道相关性和空间相关性。

 Inception模块背后的想法是通过显式地将其分解为一系列独立地查看跨通道相关性和空间相关性的操作,从而使这个过程更加简单和高效。更准确地说,典型的Inception模块首先通过一组 1 × 1 1\times 1 1×1卷积来查看跨通道相关性,将输入数据映射到比原始输入空间小的3或4个单独的空间中,然后通过常规 3 × 3 3\times 3 3×3 5 × 5 5\times 5 5×5卷积映射这些较小的3D空间中的所有相关性。如图1所示。实际上,Inception背后的基本假设是,跨通道相关性和空间相关性已充分解耦,因此最好不要联合映射它们。

 考虑一个简化版的Inception模块,只使用一个尺寸的卷积(例如 3 × 3 3\times 3 3×3)且不包括平均池化tower(图2)。这个Inception模块可以重新设计为一个大的 1 × 1 1\times 1 1×1卷积,然后再进行空间卷积,这些空间卷积将在输出通道的非重叠段上运行(图3)。这一观察自然提出了一个问题:分区中的段数(及其大小)有什么影响?是否有理由提出比Inception假设更强有力的假设,并假设跨通道相关性和空间相关性可以完全分开映射?

《Xception--利用深度可分离卷积的深度学习》论文笔记_第2张图片
图2. 简化的Inception模块
《Xception--利用深度可分离卷积的深度学习》论文笔记_第3张图片
图3. 一个严格等价的简化的Inception模块的重新构造

1.2 卷积与可分离卷积之间的连续性

 Inception模块的“极端”版本,基于这个更强的假设,将首先使用 1 × 1 1\times 1 1×1卷积来映射跨通道的相关性,然后将单独映射每个输出通道的空间相关性。如图4所示。我们注意到,Inception模块的这种极端形式几乎等同于一种深度可分离卷积,这种运算早在2014年就被用于神经网络设计,自2016年被纳入TensorFlow框架以来变得越来越流行。

《Xception--利用深度可分离卷积的深度学习》论文笔记_第4张图片
图4. 我们的Inception模块的一个“极端”版本,每个1X1卷积输出通道有一个空间卷积

 在诸如TensorFlow和Keras这样的深度学习框架中,一种深度可分离卷积,通常称为“可分离卷积”,首先包含深度卷积,即在输入的每个通道上独立执行的空间卷积,然后是逐点卷积,即 1 × 1 1\times 1 1×1卷积,将深度卷积输出的通道投影到新的通道空间。与空间可分离卷积是不可混淆的,在图像处理领域,空间可分离卷积也被称为“可分离卷积”。

 Inception模块的“极端”版本和深度可分离卷积之间的两个微小区别是:

  • 操作顺序:通常实现的深度可分离卷积(例如在TensorFlow中)首先执行通道方向的空间卷积,然后执行 1 × 1 1\times 1 1×1卷积,而Inception首先执行 1 × 1 1\times 1 1×1卷积。

  • 在第一次操作后是否存在非线性。在Inception中,这两种操作都有一个ReLU非线性(激活函数),但是深度可分离卷积通常是在没有非线性(激活函数)的情况下实现的。

 我们认为第一个区别并不重要,特别是因为这些操作是用于堆栈设置的。第二个差异可能很重要,我们将在实验部分对此进行研究(请参见图10)。

 我们还注意到,位于常规Inception模块和深度可分离卷积之间的Inception模块的其他中间构造也是可能的:实际上,在常规卷积和深度可分离卷积之间存在离散序列,通过用于执行空间卷积的独立通道空间段的数量来参数化。在这个序列的一个极端,一个常规卷积(前面是1x1卷积)对应于单段情况;深度可分离卷积对应于另一个极端,即每个通道有一个段;Inception模块位于两者之间,将数百个通道分成3或4段。这些中间模块的性质似乎还没有被研究过。

 通过这些观察,我们建议可以通过用深度可分离卷积替换Inception模块来改进Inception体系结构家族,也就是说,通过构建模型,这些模型将是深度可分离卷积的堆栈。这是通过TensorFlow中有效的深度卷积实现来实现的。在接下来的工作中,我们提出了一个基于这一思想的卷积神经网络架构,其参数数目与Inception V3相似,并在两个大规模的图像分类任务上与Inception V3进行性能比较。

2. 之前的工作

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

  • 卷积神经网络,特别是VGG-16体系结构,在一些方面与我们提出的体系结构在图式上相似。

  • 卷积神经网络的Inception架构家族,该家族首先展示了将卷积分解为多个分支的优点,这些分支依次在通道上和空间上运行。

  • 深度可分离卷积,我们提出的架构完全基于此。虽然在神经网络中使用空间可分离卷积已有很长的历史,至少可以追溯到2012年(但可能更早),但深度版本是最近的。Laurent Sifre于2013年在谷歌Brain实习期间开发了深度可分离卷积,在AlexNet中使用,获得了较小的精度提升和较大的收敛速度提升,模型尺寸显著减小。在ICLR 2014年大会上,他的工作概述首次被公开。详细的实验结果在Sifre的论文6.2中有报道。这项关于深度可分离卷积的初步工作受到了Sifre和Mallat之前关于变换不变散射的研究的启发。后来,用深度可分离卷积作为Inception V1和Inception V2的第一层。在谷歌中,Andrew Howard引入了使用深度可分离卷积的高效移动模型MobileNets。Jin等人在2014年的[Flattened convolutional neural networks for feedforward acceleration]和Wang等人在2016年的[Factorized convolutional neural networks]也做了相关工作,目的是利用可分离卷积降低卷积神经网络的规模和计算成本。此外,我们的工作之所以能够实现,是因为在TensorFlow框架中包含了深度可分离卷积的有效实现。

  • 残差连接,由He等人在[Deep residual learning for image recognition]中引入,我们提出的体系结构广泛使用了残差连接。

3. Xception架构

 提出了一种完全基于深度可分离卷积层的卷积神经网络结构。实际上,我们做了如下假设:卷积神经网络特征图中的跨通道相关性和空间相关性可以完全解耦。因为这个假设是在Inception架构下的假设的一个更强的版本,所以我们将我们提出的架构命名为Xception,它代表“极端的Inception”。

 图5给出了网络规范的完整描述。Xception体系结构由36个卷积层构成网络的特征提取基础。在我们的实验评估中,我们将专门研究图像分类,因此我们的卷积基后面将有一个逻辑回归层。或者,可以在逻辑回归层之前插入完全连接的层,这在实验评估部分进行了探讨(特别是,参见图7和图8)。36个卷积层被构造成14个模块,除第一个和最后一个模块外,所有模块周围都有线性残差连接。

《Xception--利用深度可分离卷积的深度学习》论文笔记_第5张图片
图5. Xception结构:数据首先通过Entry flow,然后通过重复8次的Middle flow,最后通过Exit flow。请注意,所有卷积和可分离卷积层后面都跟着批归一化(图中未包含)。所有可分离卷积层使用1的深度乘数(无深度扩展)。

 简而言之,Inception体系结构是一个具有残差连接的深度可分离卷积层的线性堆栈。这使得架构非常容易定义和修改;使用诸如keras或tensorflow slim之类的高级库只需要30到40行代码,这与诸如VGG-16之类的体系结构没有什么不同,而与诸如Inception V2或V3之类的体系结构不同,后者定义起来要复杂得多。一个使用Keras和TensorFlow的Xception开源实现是作为Keras应用程序模块的一部分在MIT许可下提供的(https://keras.io/applications/#xception)。

4. 实验评估

 我们选择将Xception与Inception V3体系结构进行比较,因为它们的规模相似:Xception与Inception V3具有几乎相同数量的参数(表3),因此任何性能差异都不能归因于网络容量的差异。我们对两个图像分类任务进行了比较:一个是ImageNet数据集上著名的1000级单标签分类任务,另一个是大型JFT数据集上的17000级多标签分类任务。

4.1 JFT数据集

 JFT是一个用于大型图像分类数据集的内部谷歌数据集,最早由Hinton等人在[Distilling the knowledge in a neural network]中引入,包含超过3.5亿张高分辨率的图像,这些图像使用17000个类的标签进行标注。为了评估基于JFT的模型的性能,我们使用了一个辅助数据集FastEval14k

 FastEval14k是一个包含14000张图像的数据集,包含大约6000个类的密集注释(平均每个图像有36.5个标签)。在这个数据集中,我们使用前100预测的Mean Average Precision(MAP@100)来评估性能,并用一个分数评估类在社交媒体图像中有多常见(因此也很重要)来对每个类对MAP@100的贡献进行加权。这个评估过程旨在从社交媒体上获取频繁出现的标签的性能,这对谷歌的生产模型至关重要。

4.2 优化配置

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

  • ImageNet上:

    • 优化器:SGD

    • Momentum:0.9

    • 初始学习率:0.045

    • 学习率衰减:每2个epoch衰减0.94

  • JFT上:

    • 优化器:RMSProp

    • Momentum:0.9

    • 初始学习率:0.001

    • 学习率衰减:每300万个样本衰减0.9

 对于这两个数据集,Xception和Inception V3都使用了完全相同的优化配置。注意,这个配置在Inception V3中被调优为最佳性能;我们没有尝试为Xception调优优化超参数。由于网络具有不同的训练profile(图6),这可能不是最优的,特别是在ImageNet数据集上,因为在Inception V3中对所使用的优化配置进行了仔细的调优。

 此外,所有模型在推断时使用Polyak averaging进行评估。

4.3 正则化配置

  • 权重衰减: Inception V3模型使用的权重衰减率(L2正则化)为4e-5,这是为ImageNet上的性能而精心调整的。我们发现这个速率对于Xception来说是相当不理想的,因此我们选择了1e-5。我们没有对最优权重衰减率进行广泛的搜索。在ImageNet实验和JFT实验中使用了相同的权重衰减率。

  • Dropout: 对于ImageNet实验,两种模型在logistic回归层之前都包含一个比率为0.5的dropout层。在JFT实验中,由于数据集的大尺寸,使得在任何合理的时间内都不太可能发生过拟合,因此没有dropout。

  • 附加的损失tower: Inception V3架构可以选择性地包含一个附加的tower,它在网络的早期传播分类损失,作为一个额外的正则化机制。为了简单起见,我们选择不在任何模型中包含这个附加tower。

4.4 训练基础设施

 所有网络均使用TensorFlow框架实现,并在60台NVIDIA K80 GPU上进行训练。在ImageNet实验中,我们使用同步梯度下降的数据并行来获得最佳分类性能,而在JFT中,我们使用异步梯度下降来加快训练速度。ImageNet实验各耗时约3天,JFT实验各耗时1个多月。JFT模型没有经过完全收敛的训练,否则每次实验需要三个多月的时间。

4.5 与Inception V3的比较

4.5.1 分类性能

 所有的评估都使用输入图像的single crop和单一的模型运行。ImageNet的结果是在验证集上而不是在测试集上报告的(即在ILSVRC 2012验证集的非黑名单图像上)。JFT的结果是在3000万次迭代(一个月的训练)之后报告的,而不是在完全收敛之后。结果如表1、表2、图6、图7、图8所示。在JFT上,我们测试了两个版本的网络,一个不包含任何全连接层,另一个版本在logistic回归层之前包含两个具有4096个单元的全连接层。

《Xception--利用深度可分离卷积的深度学习》论文笔记_第6张图片
表1. ImageNet(single crop,单模型)分类性能比较。VGG-16和Resnet-152仅作为提醒。作为基准的Inception V3版本不包括附加tower。
《Xception--利用深度可分离卷积的深度学习》论文笔记_第7张图片
表2. JFT(single crop,单模型)分类性能比较
《Xception--利用深度可分离卷积的深度学习》论文笔记_第8张图片
图6. ImageNet上的训练profile
《Xception--利用深度可分离卷积的深度学习》论文笔记_第9张图片
图7. JFT上的训练profile,没有全连接层
《Xception--利用深度可分离卷积的深度学习》论文笔记_第10张图片
图8. JFT上的训练profile,有全连接层

 在ImageNet上,Xception显示的结果略好于Inception V3。在JFT上,Xception在FastEval14k MAP@100指标上有4.3%的相对改进。我们还注意到,在ResNet-50、ResNet-101和ResNet-152上,Xception要优于He等人报告的ImageNet结果。

 与ImageNet数据集相比,Xception架构在JFT数据集上显示了更大的性能改进。我们认为这可能是由于Inception V3是在关注ImageNet的基础上开发的,因此可能在设计上过于适合这个特定的任务。另一方面,这两种架构都没有为JFT进行调优。在ImageNet上搜索Xception的更好的超参数(特别是优化参数和正则化参数)可能会产生显著的额外改进。

4.5.2 大小和速度

 在表3中,我们比较了Inception V3和Xception的大小和速度。在ImageNet上报告参数量(1000个类,没有完全连接的层),在ImageNet上用60个K80 GPU上运行同步梯度下降的情况下报告每秒的训练步骤数(梯度更新)。两种架构的大小大致相同(在3.5%以内),并且Xception稍微慢一些。我们期望在不久的将来,深度卷积操作级别的工程优化可以使Xception比Inception V3更快。两种体系结构具有几乎相同数量的参数,这一事实表明,ImageNet和JFT上的改进并不是来自增加的容量,而是来自更有效地使用模型参数。


表3. 大小和训练速度比较

4.6 残差连接的效果

 为了量化Xception架构中残差连接的好处,我们在ImageNet上对一个修改后的Xception版本进行了基准测试,该版本不包含任何残差连接。结果如图9所示。从速度和最终的分类性能来看,残差连接对于帮助收敛显然是必不可少的。但是,我们将注意到,用与残差模型相同的优化配置对非残差模型进行基准测试可能是不公平的,而且更好的优化配置可能产生更具竞争力的结果。

《Xception--利用深度可分离卷积的深度学习》论文笔记_第11张图片
图9. 有/无残差连接的训练profile

 此外,让我们注意到,这个结果仅仅显示了残差连接对于这个特定体系结构的重要性,而残差连接对于构建深度可分离卷积堆栈的模型并不是必需的。在非残差的VGG风格模型中,我们也得到了很好的结果,所有卷积层都被深度可分卷积替换(深度乘子为1),在等参数量下,在JFT上优于Inception V3。

4.7 逐点卷积后的一个中间激活的效果

 我们之前提到过深度可分离卷积和Inception模块之间的类比表明深度可分离卷积可能包含深度操作和逐点操作之间的非线性。在目前报道的实验中,没有包含这种非线性。然而,我们也通过实验测试了将ReLU或ELU作为中间非线性。在ImageNet上的结果如图10所示,结果表明,没有任何非线性,收敛速度更快,最终性能更好。

《Xception--利用深度可分离卷积的深度学习》论文笔记_第12张图片
图10. 在可分离卷积层的深度操作和逐点操作之间具有不同激活的训练profile

 这是一个值得注意的观察,因为Szegedy等人在[Rethinking the inception architecture for computer vision]中对于Inception模块报告了相反的结果。可能是,应用空间卷积的中间特征空间的深度对非线性的有用性至关重要:对于深特征空间(例如,在Inception模块中发现的那些),非线性是有用的,但对于较浅的非线性(例如深度可分卷积的1通道深特征空间)则是有害的,可能是由于信息丢失。

5. 未来方向

 我们在前面已经注意到普通卷积和深度可分离卷积之间存在一个离散序列,该离散序列由用于执行空间卷积的独立通道空间段的数量参数化。先启模块是这个序列内的一点。在我们的经验评估中,我们证明了Inception模块的极端形式,深度可分离卷积,可能比常规Inception模块有优势。然而,没有理由相信深度可分离卷积是最优的。可能是序列上的中间点,位于常规Inception模块和深度可分离卷积之间,具有进一步的优势。这个问题留待以后调查。

6. 结论

 我们展示了卷积和深度可分离卷积如何位于离散序列的两个极端,Inception模块是两者之间的一个中间点。这一发现促使我们提出在神经计算机视觉结构中,用深度可分离卷积代替Inception模块。我们提出了一个基于这种思想的新架构,名为Xception,它的参数量与Inception V3类似。与Inception V3相比,Xception在ImageNet数据集的分类性能上有小的提升,而在JFT数据集上则有大的提升。我们期望深度可分离卷积在未来成为卷积神经网络架构设计的基石,因为它们提供了与Inception模块类似的特性,但与常规卷积层一样易于使用。


个人看法

 这篇文章是Google对其之前的Inception系列所做的改进,通过解耦通道间的相关性与空间相关性,实现网络参数量的降低,这其实也是深度可分离卷积的根本思想所在,只不过Xception所采用的的深度卷积和逐点卷积的顺序以及采用激活函数的策略有所不同。

你可能感兴趣的:(轻量级网络)