主干网络系列(6) - Xception: 使用深度可分离卷积的深度学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kevin_zhao_zl/article/details/87900023

论文地址: Xception: Deep Learning with Depthwise Separable Convolutions
工程代码: Github链接

0. 摘要

  该论文对Inception模块做了新的解释,认为Inception模块是常规卷积神经网络到深度可分离卷积神经网络的过渡手段,基于这种思想,深度可分离卷积可以看作一个具有最大数量tower的Inception模块(tower是指Inception模块中各个path的数量)。这样通过使用深度可分离卷积来代替Inception模块产生了一个新的网络架构,即Xception(Extreme Inception)。Xception在ImageNet上的效果比InceptionV3略好(InceptionV3是针对ImageNet设计的),在更大的数据集上Xception效果相比InceptionV3显著提升。由于二者的参数量相同,所以效果的提升并不是由于模型容量的增加,而是因为更高效的模型参数的利用。

1. 简介

  卷积神经网络是计算机视觉领域的主要算法,其设计是一个引起学界高度关注的话题。卷积神经网络的历史要追溯到LeNet结构的模型,它通过简单的堆叠用于特征提取的卷积层和用于下采样的最大池化层来完成构造,这种思想也被用于AlexNet,其中卷积操作和最大池化操作多次重复,以使网络在每个空间维度都能提取到更加丰富的特征。之后网络设计的趋势就是不断加深,例如VGG-nets。
  这之后新的网络被提出,即Inception架构,目前已经有四种版本,包括Inception V1(GooLeNet),Inception V2,Inception V3和Inception V4(Inceotion-Resnet)。Inception模块受到NiN架构的影响,已经提出,就成为ImageNet数据集上变现最好的网络族之一(之前提到过Inception模块的设计具有很强的针对性,模型泛化到其他数据集上效果并不好)。
  网络的基础模块是Inception模块,它有几种变体,比如下图所示的是一个典型的Inception模块,在Inception V3中有应用。一个Inception模型就是有多个这样的模块堆叠而成的(与早期的VGG-nets并不相同),它能够用较小的参数学习到更丰富的信息。
在这里插入图片描述

1.1 Inception假设

  一个卷积层试图在一个3D空间(空间维度宽和高,通道维度)学习一些滤波器,因此一个卷积核的任务是同时处理通道关系映射和空间关系映射。
  而Inception的思想就是将这两个任务分别处理。具体来讲,Inception模块首先通过一系列1x1卷积来处理通道关系映射,将输入映射为3个或者4个独立的比原始输入更小的空间,然后通过3x3或者5x5的标准卷积来分别处理其空间关系,上图也能很好的说明。实际上,Inception模块的基础假设就是通道关系映射和空间关系映射能够完全解耦。
在这里插入图片描述

  考虑如上图所示的一个简化的Inception模块结构,它仅仅使用一种尺寸的卷积也没有包含平均池化这一个路径。这个Inception模块可以下图所示的一个大的1x1卷积后跟一些空间卷积,但这回带来几个问题:分段数量如何确定?空间关系映射和通道关系映射是否能够完全解耦,有没有更一般的假设?
在这里插入图片描述

1.2 常规卷积和可分离卷积之间具有连续性

  基于这个更强的假设,Inception的极端版本会先使用1x1卷积来处理通道关系映射,然后分别对每一个通道做空间关系映射得多个输出通道,如下图所示,Inception模块也就和深度可分离卷积相同。
在这里插入图片描述

  深度可分离卷积通常在一些深度学习框架中被称为可分离卷积,首先进行空间关系映射(depthwise convolution)再进行通道关系映射(pointwise convolution),这和也被称为可分离卷积的空间可分离卷积不同,Inception的这个极端版本和深度可分离卷积的区别主要在于:

  • 深度可分离卷积首先进行基于通道的空间关系映射然后进行1x1卷积,Inception则相反。
  • Inception中两个操作后面都跟ReLU激活函数,而深度可分离卷积不跟
      第一个差别影响不大因为这些操作都是堆叠在一起的。第二个区别更加关键,后面的实验部分会加以说明。
      而且常规的Inception模块和深度可分离卷积还可以有一个这样的过渡方式,即常规卷积可以将所有通道都分开,分别做1x1卷积操作,这种方式的一个极端是就是常规卷积那样只有一条路径,另一个极端就是深度可分离卷积那样将所有通道都分开,每个通道为一条路径。Inception模块介于二者之间即分成三四个路径,每个路径包含几个通道。
      基于这些假设,论文通过将所有的Inception模块替换为深度可分离卷积得到Xception。

2. 先前的工作

VGG-nets:模块堆叠的思想
Inception架构的网络族:最先证实多分支进行空间和通道关系映射的优势
深度可分离卷积:Xception架构正是基于此。深度可分离卷积用于神经网络的历史久远实现方式也有很多。
残差连接:也就是ResNet恒等快速连接和残差连接

3. Xception架构

  网络的整个流程如下图所示,Xception架构有36个卷积层作为网络特征提取的基础,这36个卷积层被分为14个模块,除了第一个和最后一个,其他每一个模块都使用了残差连接。
在这里插入图片描述

  简而言之,Xception架构是一个深度可分离卷积层的线性叠加,这个架构易于修改,仅使用30-40行代码就可以完成。

4. 实验验证

  实验在两个大型的图片分类数据集上进行,将Xception和Inception V3进行比较(二者拥有几乎相同的参数数量)。

4.1 JFT dataset

  JFT是一个大规模图片分类数据集,包括3.5亿张高清图像,和17000个类别。实验使用FastEval14k这个数据集即从中选取包含6000个类别的14000张图像 。

4.2 优化参数设置

  在ImageNet上:

  • 优化器:SGD
  • 动量:0.9
  • 初始学习率:0.045
  • 学习率衰减:每个epoch衰减率0.94
      在JFT上:
  • Optimizer:RMSprop
  • 动量:0.9
  • 初始学习率:0.001
  • 学习率衰减:每3000000个样例后衰减率0.9
4.3 正规化设置

权重衰减:Inception V3权重衰减率4e-5,xception为1e-5
Dropout:dropout rate=0.5;JFT因为数据集够大,过拟合发生的可能性较低
辅助损失函数:实验中不适用Inception V3架构中包含的辅助损失分路

4.4 实验结果
4.4.1 分类效果

  在ImageNet上:
在这里插入图片描述

  在JFT上:
在这里插入图片描述

4.4.2 模型规模和速度

  在ImageNet上:
在这里插入图片描述

4.5 残差连接的影响

在这里插入图片描述

4.4.6 点卷积后跟激活函数的影响

在这里插入图片描述

5. 未来方向

  深度可分离卷积并不一定是最优的,可能介于常规卷积和深度可分离卷积之间的通道分组效果会更好,这也是未来探索的方向。

6. 结论

  论文展示了常规卷积和深度可分离卷积的区别,二者之间产生了Inception。这个观察结果使得我们将Inception替换为深度可分离卷积从而提出Xception。与Inception V3相比,Xception在ImageNet上的分类效果小幅度提升,JFT上显著提升。作者也希望深度可分离卷积能够称为卷积神经网络的一个奠基石,因为它们能够提供Inception模块相似的效果而且更容易扩展。

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kevin_zhao_zl/article/details/87900023
今日推荐