论文:Xception: Deep Learning with Depthwise Separable Convolutions
论文链接:https://arxiv.org/abs/1610.02357
Xception是google继Inception后提出的对Inception v3的另一种改进,主要是采用depthwise separable convolution来替换原来Inception v3中的卷积操作。
Inception
Inception v3的结构图如下Figure1。
当时提出Inception的初衷可以认为是:特征的提取和传递可以通过1*1卷积,3*3卷积,5*5卷积,pooling等,到底哪种才是最好的提取特征方式呢?Inception结构将这个疑问留给网络自己训练,也就是将一个输入同时输给这几种提取特征方式,然后做concat。Inception v3和Inception v1(googleNet)对比主要是将5*5卷积换成两个3*3卷积层的叠加。
于是从Inception v3联想到了一个简化的Inception结构,就是Figure 2。
再将Figure2延伸,就有了Figure3,Figure3表示对于一个输入,先用一个统一的1*1卷积核卷积,然后连接3个3*3的卷积,这3个卷积操作只将前面1*1卷积结果中的一部分作为自己的输入(这里是将1/3channel作为每个3*3卷积的输入)。再从Figure3延伸就得到Figure4,也就是3*3卷积的个数和1*1卷积的输出channel个数一样,每个3*3卷积都是和1个输入chuannel做卷积。
Xception
在Xception中主要采用depthwise separable convolution。
Figure5是Xception的结构图。这里的sparsableConv就是depthwise separable convolution。
其实depthwise separable convolution和上面的Figure4是很像的。差别有两个:
- 顺序不一样,在depthwise separable convolution中是先进行一个channel-wise的spatial convolution,也就是上图的(b),然后是1*1的卷积。而在Figure4中是先进行1*1的卷积,再进行channel-wise的spatial convolution,最后concat。
- 在Figure4中,每个操作后都有一个ReLU的非线性激活,但是在depthwise separable convolution中没有。