《Xception: Deep Learning with Depthwise Separable Convolutios》笔记

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

介绍

文章链接

常规卷积网络是CONV->POOL形式。通过CONV学习特征,通过POOL下采样,使网络在不同尺度空间都能提取特征。

Inception结构最初在GoogLeNet出现(Inception V1),随后有了Inception V2、Inception V3和Inception-ResNet。

Inception-style的结构有很多版本,下面是Inception V3版本中的结构:
xception_01.jpg
Inception模型,是由连续多个Inception结构组成,就行VGG-style网络一样,由连续多个卷积组成。

Inception模型和卷积在概念上类似,都是卷积提取特征;但是Inception结构参数更少,提取的特征更加丰富。Inception结构工作原理是什么,和常规卷积有什么不同?Inception之后,设计网络的侧脸又是什么?

Inception假设

一个卷积层的卷积核是三个维度的,空间上width和height,还有一个channel维度。因此一个卷积层,既考虑映射cross-channel相关性,又考虑spatial相关性。

Inception背后的思想是通过分开独立处理cross-channel和spatial的相关性,使得处理过程更加简单高效。准确来说,Inception结构首先通过1x1卷积“看”cross-channel相关性,把输入映射到3或4个分开的空间(小于原输入空间),之后通过3x3或5x5卷积再映射到更小的3维空间,如上图所示。实际上,Inception基本的假设就是通过解耦和cross-channel和spatial相关性。

是否可以进一步假设cross-channel和spatial之间的相关性可以完全分开处理?

卷积和separable卷积之间的连续

基于上面进一步假设,有了“extreme”笨笨的Inception结构:
xception_02.jpg

上面这种结构,几乎等同于depthwise separable卷积。depthwise separable卷积又叫做“separable卷积”,是通过处理每一个channel上的空间卷积,之后再经过pointwise卷积(例如1x1卷积),在一个新的channel空间得到输出。

“extreme”版本的Inception和depthwise separable卷积两点主要不同:

  • 操作顺序:depthwise separable卷积首先channel-wise spatial卷积,之后1x1卷积;而Inception首先1x1卷积。

  • 第一个操作后是否有非线性。Inception中,第一步和第二部操作都有非线性(ReLU);而depthwise separable卷积后面通常没有非线性操作。

上面两点不同种,第一点不同不太重要,第二点不同比较重要。

输入的每一个channel空间(width和height)对应一个“频谱”。1x1卷积把这些“频谱”合成一个;而depthwise separable卷积对每一个“频谱”做卷积。Inception结构把几百个channel分成3或4个。

基于以上观察,可以把Inception结构替换为depthwise separable卷积。

Xception结构

基于cross-channel和spatial相关性可以完全解耦和,作者提出一个新的卷积网络结构。这个假设是基于Inception结构的强假设,名字叫做“Extreme Inception”,简称“Xception”。结构如下:
xception_03.jpg

Xception有36个卷积层,包含14个模块,线性Residual connection在这14个模块中。在图像分类中,最后一层是逻辑回归;可以在逻辑回归前面一层加上全连接层。

实验评估

对比Xception和Inception V3,因为它们两个参数个数接近。对比它们在图片分类上的效果。数据集一个是单标签的ImageNet,另一个是多标签的JFT。

优化方法配置

  • On ImageNet:
    – Optimizer: SGD
    – Momentum: 0.9
    – Initial learning rate: 0.045
    – Learning rate decay: decay of rate 0.94 every 2 epochs

  • On JFT:
    – Optimizer: RMSprop
    – Momentum: 0.9
    – Initial learning rate: 0.001
    – Learning rate decay: decay of rate 0.9 every 3,000,000 samples

正则化

  • Weight decay
    Inception V3使用L2正则化,weight decay rate为4e-5(在ImageNet上tune得到的)。Xception使用1e-5。

  • Dropout
    在逻辑回归前加上dropout层,dropout rate为0.5.

  • Auxiliary loss tower

Inception V3包含一个可选的auxiliary tower,在反向传播时当做正则化机制。为了简化,Xception没有包含。

训练工具

使用TensorFlow,60块NVIDIA K80 GPUs。

ImageNet使用同步梯度下降,训练了3天。

JFT使用异步梯度下降,训练了近一个月,并没有完全收敛。

和Inception V3对比

分类对比

ImageNet,使用validation set。Single model, single crop。
xception_04.jpg

JFT对比,使用模型为迭代30,000,000次的模型:

xception_05.jpg

Xception架构在JFT数据集性能提升明显高于在ImageNet数据集。可能是因为Inception V3设计时专注于ImageNet。

模型大小和速度

使用K80 GPU,同步梯度下降。

xception_06.jpg
两个模型参数个数类似。Xception速度稍慢于Inception V3。未来需要在depthwise卷积上做些优化。

residual connections影响

xception_07.jpg

Residual connection对收敛速度和精度都有帮助。需要注意,两者训练时都是用同一配置,对于不使用residual connection,调优配置可能得到更好的效果。

pointwise卷积后中间激活的影响

在depthwise和pointwise卷积之间使用不同激活函数
xception_08.jpg

上面结果,不使用非线性激活性能好于使用非线性激活。这和《Rethinking the inception architecture for computer vision》结论相反。这可能和特征空间深度相关:对于深的特征空间(Inception中的),非线性有帮助;对于浅的(例如depthwise卷积,1-channel特征空间)反而有负面作用。

猜你喜欢

转载自blog.csdn.net/KangRoger/article/details/69929915