Xception论文记录

简要介绍

Inception是神经网络的著作之一,它提出了多尺寸卷积多个小卷积核代替大卷积核等概念。Xception是继Inception后提出的对Inception-v3的另一种改进。不同于VGG等传统网络通过堆叠简单3 * 3卷积实现特征提取,Inception模块通过组合1 * 1,3 * 3,5 * 5和pooling等结构进行特征提取,Inception结构将特征类型的选择留给网络自己训练,也就是将一个输入同时输给几种特征方式,然后做concat,用更少的参数和更少的计算开销来学习到更加丰富的特征表示。
通常在一组特征图上进行卷积需要三维卷积核,也即卷积核需要同时学习空间上的相关性和通道间的相关性。将这两种相关性显示地分离开,是Inception模块思想之一:Inception模块首先使用1 * 1的卷积核将特征图的各个通道映射到一个新的空间,在这一过程中学习通道间的相关性。再通过3 * 3或5 * 5卷积核进行卷积,这用于学习空间的相关性。
多尺寸卷积核
Inception最初提出的版本,核心思想是使用多尺寸卷积核去观察输入数据。
例如,我们看某个景象由于远近不同,同一个物体的大小也会有所不同,那么不同尺度的卷积核观察特征就会有这样的效果,于是设计下图的网络结构:
Xception论文记录
于是网络变胖了,增加了网络的宽度,同时也提高了对不同尺度的适应程度。
点卷积
当网络变胖时,相应的计算量也变大了,所以我们就要想办法减少参数量来减少计算量,于是在上图加上1 * 1卷积核。
Xception论文记录
使用1 * 1卷积核对输入的特征图进行降维处理,这样会极大地减少参数量,从而减少计算。
例如,输入的维度是256维,经过1 * 1卷积之后,我们输出的维度是64维,参数量变少了。这就是点卷积,也就是1 * 1卷积,主要用于数据降维,减少参数量,也有使用点卷积进行升维的(MobileNet V2),将三个特征图变成六个特征图,丰富了输入数据的特征。
卷积核替换
虽然有了点卷积,但是由于5 * 5的卷积核的计算量还是很大,训练时间比较长,我们还要再优化。所以想出来用多个小卷积核代替大卷积核的方法,就是Inception V3,如下图所示:
Xception论文记录
使用两个3 * 3卷积核代替5 * 5卷积核效果差不多,但是参数量减少很多,达到优化目的。不仅参数量变小了,层数多了,深度也加深了。
对Inception V3进行简化,去除avg pool后,仅保留3 * 3卷积的分支,输入的下一步操作就都是1 * 1卷积。
Xception论文记录
提取1 * 1卷积的公共部分,如下:
Xception论文记录
Xception:先进行普通卷积操作,再对1 * 1卷积后的每个通道分别进行3 * 3卷积操作,最后将结果concat:
Xception论文记录
进一步增多3 * 3的卷积分支数量,使它与1 * 1卷积的输出通道数相等,此时每个3 * 3的卷积仅作用于包含一个通道的特征图上,作者称为‘’极致的Inception‘’模块,这就是Xception的基本模块。事实上,调节每个3 * 3的卷积作用特征图的通道数,即调节3 * 3的卷积分支数量于1 * 1的卷积的输出通道数的比例,可以实现一系列处于传统Inception和Xception模块之间的转换状态。

深度可分卷积

深度可分卷积和Xception区别:
Xception:第一步进行1 * 1卷积,第二步对1 * 1卷积结果的每个通道分别进行3 * 3 卷积操作,并将结果concat。
深度可分卷积:第一步进行深度卷积,对每个输入的通道分别进行3 * 3卷积操作,并将结果concat。第二步进行点卷积,对深度卷积中concat结果进行1 * 1卷积。(作者认为这个差异并没有大的影响)。
深度可分卷积的两个卷积之间是不带**函数的,而Xception在经过1 * 1卷积之后会带上一个ReLU非线性**函数。
深度卷积的缺点:(1)深度卷积完成特征图的数量和输入层的通道数量是一致的,无法拓展特征图。(2)这种运算对输入层的每个通道独立进行卷积运算,没有有效利用在相同位置上的特征信息。

Xception结构

Xception结构如下,一共36层,分为14个模块,除了第一个和最后一个模块外,所有模块都有线性剩余连接。36层分为Entry flow,Middle flow,Exit flow。Entry flow包含8个conv,Middle flow包含3 * 8=24个conv,Exit flow包含4个conv,所以Xception共计36层。Xception结构基于ResNet,但是将其中的卷积层换成了Separable Convolution(Xception模块):Xception论文记录

实验

在ImageNet上对比VGG-16,ResNet-152,Inception V3,Xception,结果如下,在ImageNet上,Xception的准确率相比Inception V3有一定的提升,比ResNet-152和VGG-16有更多的提升。
Xception论文记录
同时和Inception V3相比,Xception的参数量有所下降,而训练时的迭代速度也没有明显变慢:
Xception论文记录
在ImageNet和JFT上的训练过程都显示,Xception在最终准确率更高的同时,收敛也比Inception V3快:
Xception论文记录
Xception论文记录
在Xception中加入类似ResNet的残差连接也显著加快了Xception的收敛过程并获得了显著更高的准确率:
Xception论文记录
在Xception模块中,用于学习通道间相关性的1 * 1卷积和用于学习空间相关性的3 * 3卷积之间,不加入任何非线性单元,比如ReLU或ELU**函数将会带来更快的收敛过程和更高的准确率:
Xception论文记录

总结

文章提到的深度卷积操作,即group数,输入通道数和输出通道数相等的卷积层。Xception的思想来自深度可分卷积这个操作,本质是假设并承认,卷积的时候将通道的卷积核空间的卷积进行分离,作用比较好。一个潜在的问题是,虽然深度可分卷积可以带来准确率的提升或是理论计算的大幅下跌,但是由于计算过程比较零散,现有的卷积神经网络实现它的效率都不高,比如Xception的理论计算量是远小于Inception V3的,但是其训练时的迭代速度反而更慢一点。期待更加高效的深度卷积的实现。