Xception

论文:https://arxiv.org/abs/1610.02357
代码:https://keras.io/applications/#xcepti

1 摘要

本文中作者介绍了Inception结构可以看作是介于普通卷积操作和深度可分卷积的中间。深度可分卷积由逐层卷积和逐点卷积组成。深度可分卷积可以理解成具有最多层的Inception结构。作者使用深度可分卷积代替Inception结构形成了本文的Xception结构,在ImageNet数据集上效果略优于Inception V3,但在包含17000类的350百万图像的数据集上效果远远好于Inception V3.Xception结构和Inception V3具有相同的参数数量,因此获得的性能提升不是来自于网络容量的增加,而是来自于对模型参数的更有效地利用。

本文谷歌出品。

2 简介

近年来,CNN以经成为了计算机视觉领域的主流算法,开发设计具有良好性能的CNN已经引起了广泛的重视。

CNN的设计起源于LeNet,它只是堆砌卷积层用于特征提取,使用最大池化层用于空间下采样。这个思想在2012年的AlexNet模型中再次体现,将卷积操作和最大池化操作交叉使用,从而使得学得的CNN模型在各空间尺度学习到了丰富的特征。在后续各年的ILSVRC比赛中,以ZFNet和VGGNet为例,设计的CNN结构越来越深。

在2014年,谷歌在GoogleNet论文中设计了称之为Inception的结构,后续进一步提出了Inception V2,Inception V3,最近又结合ResNet提出了Inception-ResNet。Inception结构的提出受NIN网络的启发。自从Inception结构提出以来,其已经成为了在ImageNet数据竞赛上性能最好的一族模型,同样在谷歌内部的数据集JFT-300M上也取得了良好的性能。

Inception模块的经典结构如下图所示,该结构也在Inception V3论文中进行了使用。
在这里插入图片描述
Inception结构从概念上看类似于卷积操作,都是作为特征提取器进行使用。但是其可以在使用更少参数的情况下提取更加丰富的特征。它是如何做到的?它和普通卷积有什么区别?使用Inception结构时应该遵守什么设计策略?

2.1 Inception结构

CNN中的卷积层使用3维的卷积核,分别是宽、高和通道三个维度。所以,单个卷积核同时进行跨通道的相关操作和空间上的相关操作。

Inception模块的核心思想是通过将跨通道的相关操作和空间上的相关操作分解为一系列的独立操作,从而使得特征提取过程更加高效。具体来说,如Fig. 1所示,Inception结构中通过一系列的1×11 \times 1卷积实现跨通道的相关操作。将原始的输入数据映射到比原数据空间更小的3个或4个独立空间。然后通过常规的3×33 \times 35×55 \times 5卷积将所有的相关操作映射到更小的3维空间。实际上,Inception结构的核心思想是跨通道的和空间相关操作完全可以解耦(独立进行)

在这里插入图片描述
考虑如图2所示的简化版本的Inception结构,只使用单个尺寸的卷积核,没有使用平均池化操作。如图3所示,该Inception结构可以理解成先进行一个大的1×11 \times 1卷积操作,然后在将输出通道划分为多个非重叠部分,分别进行空间卷积。

在这里插入图片描述基于上述的观察,可以提出几个问题:一是各部分的通道数量有什么影响?二是是否应该提出一个比Inception结构更加强的假设,假设跨通道相关操作和空间相关操作完全可以独立进行?

2.2 Inception结构介于普通卷积和深度可分卷积之间

基于上一节最后提出的强假设,可以得到如图4所示的示例,是否应该先使用1×11 \times 1卷积进行跨通道相关操作,然后再在各输出通道独立进行空间相关操作?
在这里插入图片描述图4所示的Inception过程几乎等同于深度可分卷积。深度可分卷积最早2014年被应用与神经网络设计,并在2016年被Tensorflow实现之后,应用越来越广泛。

深度可分卷积,如出现在MobeilNet论文中的下图所示,在Tensorflow和Keras中常被成为分离卷积,就是先进行逐层卷积 — 在输入数据的每一个通道独立进行空间卷积,然后再进行逐点卷积 — 使用1×11 \times 1卷积将逐层卷积的输出映射到新的通道空间。图像处理过程中一般将深度可分卷积称之为分离卷积。
在这里插入图片描述分离卷积和图4所示的极端版本的Inception结构的区别主要有两点:

  • 操作顺序不同:分离卷积一般是先进行逐层操作再进行逐点操作,但这里的Inception结构则是先进行1×11 \times 1的逐点卷积;
  • 在第一个卷积后是否进行非线性处理:在Inception中,每一个卷积层后都使用了ReLU进行非线性映射,但是在分类卷积中一般没有使用非线性映射。

作者认为第一个区别是不重要的,因为是在重复堆砌Inception结构,至于第二个区别的影响会在实验部分进行验证(Fig. 10)。

作者认为在其他方面Inception结构也可以认为是介于普通卷积和分离卷积之间,区别是应用空间卷积的独立通道的数目。常规卷积所有的输入通道一起处理,分离卷积单个通道单独处理,Inception结构介于两者之间,将数百个输入通道划分为3或4部分进行处理

根据上面的介绍,作者认为可以用分离卷积代替Inception结构构建Inception网络族。作者就基于该思想对原有的Inception V3网络进行了改进,在两个图像分类任务上取得了一定的提升。

3 Xception网络

作者完全基于分离卷积设计了Xception结构。之所以这样设计是基于一个假设 — 跨通道卷积和空间卷积是完全独立的。因为该假设是Inception结构的特例,因此作者称之为Xception,表示特殊的Inception结构。

下图(Fig. 5)给出了完整的Xception网络。
在这里插入图片描述Xception网络包含36个卷积层。在实验部分使用logistic回归进行图像分类,一个可选的细节是是否要在logistic回归之前使用全连接层。36个卷积层分为了14块,除了第一个和最后一个块之外,其他块都包含线性残差连接。

简言之,Xception结构是包含残差连接的分离卷积层的堆砌。这使得模型非常易于实现,代码https://keras.io/applications/#xcepti。

4 实验

由于Xception结构和Inception V3具有相近的参数数量,因此作者将两者进行了比较,这样两者之间任何的性能差异都不是由于模型容量不同所造成,而是由于不要模型的性能差异造成。作者在ImageNet和JFT-300M数据集上进行了性能对比。

4.1 JFT数据集

JFT数据集是谷歌内部的数据集,包括超过350Million的17000类高分辨率图像。为了验证在JFT数据集上训练的模型的性能,作者在FastEval14K数据集上进行验证。

FastEval14K数据集包括14000张图像,标注了6000类标签。平均每幅图像有36.5个label。在该数据集上,使用Mean Average Percision(MAP@ 100)来衡量最大的100个预测结果,同时使用一个score值来衡量每一类对MAP@ 100的贡献大小,并用该分数评估这个类别在社交媒体图像中是否常见。 此评估程序旨在捕获社交媒体上频繁出现的标签的性能,这对Google的生产模型至关重要。

4.2 最优化参数

在ImageNet和JFT数据集上使用了不同的最优化参数:
在ImageNet数据集上,使用动量为0.9的SGD最优化,初始学习率0.045,每2个epoch学习率变为原来的0.94倍;
在JFT数据集上,使用动量为0.9的RMSprop优化,初始学习率0.001,每处理3百万图像学习率变为原来的0.9倍。

对Inception V3和Xception结构使用了相同的最优化参数,这些参数是Inception V3的最优参数,但并不是Xception结构的最优参数。

4.3 正则化参数

  • 权重衰减:Inception V3结构使用了系数为4e-5的L2正则化,Xception结构的L2正则化系数为1e-5,对于ImageNet和JET数据集使用的都是1e-5,没有进行最优参数调节;
  • Dropout:对ImageNet数据集,在logistic回归层之前使用了系数为0.5的dropout层,对JFT数据集,因为有充足的训练样本,所有没有使用dropout;
  • 附加输出:在Inception V3结构中,使用了附加输出进行分类模型的训练,该附加输出也是一个额外的正则化措施。但本文中的Inception V3和Xception网络都没有使用该措施。

4.4 训练设备

使用Tensorflow在60块NVIDIA K80显卡上训练。对ImageNet数据集,使用了同步梯度下降和数据并行以获得最佳分类性能。JFT数据集训练时使用了异步梯度下降以加速训练过程。ImageNet模型训练需要3天,JFT模型训练需要接近一个月。

4.5 Xception和Inception V3实验结果对比

4.5.1 分类性能对比

所有的测试都是基於单个模型、单个测试图像crop进行。

ImageNet的对比实验是在验证集上进行的。JFT的实验是进行了3千万次迭代,而不是训练到完全收敛。在JFT数据集上,训练了两个版本的模型,分别是不包含全连接层和包含两个4096个神经元的全连接层。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在ImageNet数据集上,Xception略好于Inception V3,且优于ResNet-50,ResNet-101,ResNet-152。在JFT数据集上,使用FastEval14K MAP@100度量,Xception比Inception V3提升了4.3%。

相比Inception V3,Xception网络在JFT数据集上的提升要比在ImageNet数据集上的提升更大。作者认为这是因为Inception V3结构主要就是针对ImageNet数据集进行设计的,可能存在了一定程度的过拟合。但没有任何一个模型是针对JFT数据集进行设计的。本文的实验并没有针对JFT数据集选取最优的正则化参数和最优化参数,若进行最优参数的选取,有可能Xception相比Inception V3的提升会更大。

4.5 模型大小和运算速度

在这里插入图片描述在ImageNet数据集上比较了设计的模型的参数数量和每秒钟在60块K80上的迭代次数。Xception参数略少,但是训练速度略慢,这主要是由于Xception的实现还可以继续优化。Inception V3和Xception具有相近的参数数量,因此性能的提升不是来自于模型容量的扩充,而是设计了性能更优的模型。

4.6 残差连接的作用

在这里插入图片描述为了衡量Xception结构中残差连接的作用,作者在ImageNet数据集上设计了不包含全连接层及残差连接版本的Xception网络。模型对比结果如上图Fig. 9所示。残差连接已经被证明在帮助模型收敛上是必需的,对于模型的训练速度和最终性能都有正面作用。但是我们的实验结果表明,使用相同的最优化参数对非残差版本的模型进行训练是不合理的,使用针对非残差版本的模型选取更合适的参数可以取得更优的结果。

另外,上述实验只是针对该模型证明了残差连接的意义。但是,对于堆砌分离卷积获取模型而言,残差连接不是必需的。作者还设计了无残差连接、使用分离卷积的的VGG版本的模型,在相同参数数量的情况下在JFT数据集上取得了比Inception V3更好的性能。

4.7 在逐点卷积之后使用中间层激活函数的作用

在这里插入图片描述
图10给出了在逐点卷积后使用ReLU、ELU激活函数和不使用激活函数对模型训练过程的影响。结果表明,不使用非线性激活函数可以使得模型训练收敛的更快且可以取得更好的分类效果。

作者认为这是一组很有意义的对比实验,因为在Inception实验中曾经得到过相反的结论。作者认为这可能是因为在逐点卷积之后,要应用空间卷积操作,那么逐点卷积结果的通道数对是否应用非线性函数有决定性的作用。如果逐层卷积输出的通道数很大,那么应用非线性激活函数是有用的。但如果逐层卷积输出的通道数很小,例如分离卷积中逐通道进行空间卷积,那么使用非线性激活造成了信息丢失,起到了反向作用。

5 后续研究方向

在普通卷积和分离卷积之间,存在一个中间形式,主要是由应用空间卷积的通道数目决定。从这个视角出发,Inception是一种特殊形式的分离卷积。本文的实验证明了极端形式的Inception结构 — 分离卷积要由于普通的Inception结构。但是,在分离卷积之外,可能还存在其他形式的性能更好的卷积。这值得后续继续研究。

6 总结

普通卷积一次性处理输入数据的所有通道,分离卷积每次对输入数据的单个通道进行空间卷积,他们都是分离卷积的特殊形式。Inception结构介于两者之间。

本文用分离卷积代替Inception结构构建Xception网络,和Inception V3网络具有相近的参数数量,但是在ImageNet和JFT数据集上都取得了更好的分类性能。

作者认为分离卷积可能会成为未来卷积神经网络设计的基础。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章