Xception

1、网络结构(CVPR2017)

  如果说ResNeXt是ResNet的增强版,那毫无疑问,Xception就是Inception家族的增强版,为什么?因为牛X呀。这篇文章深入分析了Inception的卷积,在Inception模块中,从跨通道的关系看,先是由一系列1*1的卷积把输入映射为3到4个分离的比原始空间小的特征图,然后从跨空间的角度看,再用3*3或者5*5的卷积对这些小的特征图进行映射(如下左图)。Inception之后的一个假设是跨通道的关系和跨空间的关系可以被充分地解耦合,这比起同时映射跨通道和跨空间而言更可取。那么问题来了,1*1的卷积映射为多少个小的特征图比较好呢?极端的情况下(如下右图),就是先用1*1的卷积映射跨通道的关系,然后每个通道进行独立地空间关系的映射。

        Xception_第1张图片                  Xception_第2张图片

    极端情况的Inception和深度可分离卷积非常相似了,深度可分离卷积先是对每个通道独立进行跨空间的卷积,然后接着是跨通道的卷积(通常是一个1*1的卷积)来映射跨通道的关系。极端情况的Inception模块深度可分离卷积的区别如下1)顺序不一样,深度可分离卷积是逐通道跨空间卷积,然后才是1*1的跨通道卷积,而Inception极端情况恰好相反;2)Inception的极端情况中两种卷积之后都有激活函数ReLU,而深度可分离卷积逐通道跨空间卷积之后没有激活函数ReLU。总结来说,极端情况的Inception模块的形式为: Conv(1*1) + BN + ReLU + Depthconv(3*3) + BN + ReLU;深度可分离卷积的形式为:Depthconv(3*3) + BN + Conv(1*1) + BN + ReLU。

  下图是标准卷积和深度可分离卷积的区别:

                                      Xception_第3张图片

      这篇论文在Inception v3的基础上,把Inception模块替换为深度可分离卷积,然后结合ResNet的跳跃连接,提出了Xception,整体网络结构如下:

    Xception_第4张图片

    整个网络由36个卷积层组成,这36个卷积层分为14个模块,除了第一个和最后一个模块外,每个模块都有一个线性的跳跃连接,这使得网络结构非常容易定义和修改。

2、实验结果

     Xception_第5张图片    Xception_第6张图片

   可以看出,Xception比Inception v3的效果更好,但是参数比Inception v3更少,这证明了Xception的有效性。此外,论文中还做了一个实验,那就是在深度可分离卷积的中间层,即逐通道的卷积之后加上激活函数ReLU,结果证明加上后效果会更差:

                                        Xception_第7张图片

3、参考

Xception官方源码:https://github.com/tensorflow/models/blob/master/research/deeplab/core/xception.py

Xception预训练模型:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md  

论文:《Xception: Deep Learning with Depthwise Separable Convolutions》

你可能感兴趣的:(Classification,Networks)