Xception论文笔记

    论文:Franc¸ois Chollet.Xception: Deep Learning with Depthwise Separable Convolutions


引言

    本文将Inception模块解释为标准卷积深度可分离卷积的中间步骤。此时深度可分离卷积可以看作一个具有最大分枝数的Inception模块。因此本文提出了一种新的卷积神经网络结构,其中Inception模块使用深度可分离卷积替代,称为Xception。在ImageNet数据集上,Xception性能轻微胜过Inception V3,而在更大的分类数据集JFT上(包含3.5亿图片和1.7万类)大幅超越。因为Xception与Inception V3的参数量一样多,因此Xception超越Inception V3不是因为参数量,而是因为模型参数更有效的使用。


1.引言

    近年来,CNNs已成为计算机视觉领域的主流算法。CNNs开始于LeNet,接着卷积层和最大池化层叠加的网络AlexNetVGG-net在ImageNet数据集上取得了很高的精度。2014年,Szegedy等人受到NIN的启发提出了Inception架构,即GoogLeNet。后面他们又提出了改进版本Inception V2、Inception V3,以及最新的Inception-ResNet等。Inception系列模型在ImageNet数据集上达到了SOTA。Inception模型的基础模块称为Inception模块,如下图所示:

图片1.jpg

    Inception模块与VGG-net那种简单堆叠卷积层不同,它也是一个特征提取器,但是用更少的参数学到了更丰富的特征。

1.1Inception的假设

    卷积层在具有2个空间维度和1个通道维度的特征图中学习滤波器,单个卷积核的任务是同时映射跨通道相关性和空间相关性。Inception模块通过显式地将其分解为两个步骤,独立地映射跨信道相关性和空间相关性,从而使该过程更简单、更高效。具体地说,Inception模块首先通过1x1卷积映射跨通道的相关性,然后将输入数据映射到3或4个独立空间中(即不同的路径),这些独立空间的更小(1x1卷积后通道数更少),接着每个独立空间通过3x3卷积或5x5卷积映射到更小的空间(通道数变小)。如上图1所示。事实上,Inception背后的基本假设是,跨信道相关性和空间相关性能够充分解耦,因此最好不将它们联合映射。考虑一个Inception模块的简化版本,仅仅使用3x3卷积和1x1卷积,如下图所示:

图片2.jpg

    上面这个Inception模块可以将其中的1x1卷积合并为一个,后面的3x3卷积处理1x1卷积输出特征图的不同而且不重叠的通道,如下图所示:

图片3.jpg

    一个自然的问题是,上图中3x3卷积的数量和大小有什么影响?如何确定?是否可以提出一个比Inception假设更强的假设,并假设跨通道相关性和空间相关性可以完全分开映射?

1.2卷积和可分离卷积之间

    将上图3的假设推广到极端:首先使用1x1卷积用于映射跨通道相关性,接着对输出特征图的每个通道都单独应用一个3x3卷积,如下图所示:

图片4.jpg

    可以发现这与深度可分离卷积(depthwise separable convolution)非常像。深度可分离卷积在2014年就在L. Sifre的博士论文[Rigid-motion scattering for image classification]中被提出。深度可分离卷积由深度卷积(3x3卷积)和逐点卷积(1x1卷积)组成。深度卷积对输入特征图的每个通道进行单独映射,而逐点卷积将各个通道联合映射到新的特征空间。

    “极端”版本的Inception模块与深度可分离卷积的略微存在一点差别:

    1.计算的顺序:深度可分离卷积首先执行逐通道空间卷积,再执行1x1卷积;而Inception首先执行1x1卷积。

    2.是否两个卷积操作的后面都接非线性激活函数。在Inception中,两个卷积都后接ReLU;而深度可分离卷积通常第一个卷积后不接非线性激活函数。

    上面的第一个不同点实际上并不重要,尤其是当这些模块堆叠在一起的时候。第二个不同点,实际上有些深度可分离卷积后面接非线性,比如在MobileNet中。

    标准的卷积每个卷积核处理所有的输入通道,深度可分离卷积每个卷积核只处理一个输入通道,而Inception模块可以看作每个卷积核处理几个输入通道。因此在标准卷积和深度可分离卷积之间存在一种更好的中间模块也是可能的。

    说了这么多,若要提高Inception系列网络的性能,一个可能的选择是使用深度可分离卷积替代Inception模块。因此本文基于这个思想提出一个CNNs,在于Inception V3的参数量差不多的情况下实现精度超越。


2.相关工作

    A.LeNet,AlexNet,ZF-net,VGG-net等,与本文的架构在某些方面存在相似。

    B.Inception系列:GoogLeNet,Inception-BN,Inception V3,Inception V4,Inception-resnet。将标准卷积分解为多个分支,然后先映射所有的通道,再进行空间卷积。Inception系列展示了这种操作的高效性。

    C.本文提出的CNNs基于深度可分离卷积。可分离卷积的历史最早可以追溯到2012年,Lauren Sifre在此基础上提出了深度可分离卷积。深度可分离卷积也曾经被应用在Inception V1和Inception V2上,然后被用于构建MobileNet。

    D.残差连接,由何凯明等人提出,也在本文中用到。


3.Xception架构

    本文基于深度可分离卷积提出了一个新的卷积神经网络架构:Xception。基于假设:跨通道相关性的映射和空间相关性的映射可以被完全解耦。因为这个假设比Inception架构的假设更强,因此将这个架构称为Xception,意为“Extreme Inception”。架构如下图:

图片5.jpg

    Xception架构共有36个卷积层组成特征抽取器。因为主要用于图像分类,因此最后一层接logistic regression。这36个卷积层划分为14个模块,每个模块都有除了第一个和最后一个模块之外都有残差连接。

    所以Xception就是深度可分离卷积和残差连接的堆叠网络,因此非常容易修改。


4.实验评估

    本文的实验主要比较Xception和Inception V3,两个模型的参数量差不多。主要在两个分类任务:ImageNet数据集和JFT数据集上。

4.1JFT数据集

    JFT是Google内部的大型数据集,最初由Hinton等人收集。包含了3.5亿张高分辨率的图片,标注了1.7万类。在JFT上训练后,使用了辅助数据集:FastEval14k用于评估。FastEval14k是一个包含14000张图像、6000类别的数据集,平均每个类别36.5张图像。这个数据集中评估top 100的MAP(MAP@100)。

4.2优化配置

    在ImageNet上:SGD,动量系数0.9,初始学习率0.045,学习率衰减:每2epochs系数0.94。

    在JFT上:RMSprop,动量系数0.9,初始学习率0.001,学习率衰减:每3000000个样本0.9。

    Xception和Inception V3均使用相同的优化配置。

4.3正则化配置

    权重衰减:Inception V3使用L2权重衰减,系数为4e-5,这个值是在ImageNet上仔细微调过的。Xception的L2权重衰减系数为1e-5。

    Dropout:对于ImageNet,在logistic regression层之前使用0.5的Dropout层。对于JFT由于这个数据集很大不容易过拟合因此不使用dropout。

    辅助损失分枝:在Inception V3中包含辅助损失分枝来为网络提供反向传播提供梯度。为了简单,本文不包含辅助损失分枝。

4.4训练

    本文用到的模型都在Tensorflow上实现,在NVIDIA K80 GPUs上训练60轮。

4.5与Inception V3的比较

4.5.1分类性能比较

    下面的表1 表2 图6 图7 图8是比较的结果:

图片6.jpg

图片7.jpg

图片8.jpg

图片9.jpg

图片10.jpg

    如上面的结果所示,Xception在ImageNet上稍微比Inception V3的精度高。而在JFT上训练,在FastEval14k上评估,Xception比Inception V3提高了4.3%。而且在ImageNet上,Xception同样超越了ResNet-50、ResNet-101、ResNet-152。

    Xception在JFT数据集上胜过Inception V3表明:Inception V3过于专注ImageNet数据集了,因此这个任务上过拟合了。因此在JFT上Xception才能明显展示性能。

4.5.2大小和速度

    下表比较了Inception V3和Xception的参数量和速度:

图片11.jpg

    两个模型的参数量差不多,Xception的训练速度稍微慢点。

4.6残差连接的效果

    为了量化Xception中残差连接的效果,本文还设计了另一个无残差的Xception版本。有无残差的对别结果如下:

图片12.jpg

    当然上面的结果只是针对Xception这个架构,并不一定说残差连接一定是能提升很大的。

4.7逐点卷积后接激活函数的影响

    如下图所示:

图片13.jpg

    结果表明深度可分离卷积中间不加入非线性激活函数收敛会快一点,而且最终精度更高这与Inception V3模块相反。



上一篇:

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于