Xception是在Inception的基础上提出来的一种新网络,其对Inception中的Inception module进行了改进,使用了深度可分离卷积来替换原来的Inception module。深度可分离卷积由Laurent Sifre在其博士论文《Rigid-Motion Scattering For Image Classification》中提出,经典的压缩网络MobileNet也是采用了深度可分离卷积。
要讲Xception,还是需要先从Inception谈起。在Inception中Inception module将输入feature map分成若几组不同的通道,每组中采用不同大小的卷积核,除了可以获得不同的感受野,还能有效的减少参数数量。一个典型的Inception module如下:
Inception module
让我们来看看简化版的Inception module:
简化版Inception module
而一个简化版的Inception module又等价于下面这个Inception module,在这个Inception module中,先整体使用一个1x1卷积,而后多个3x3卷积每个卷积都只使用1x1卷积结果的一部分通道作为输入:
假设输入为m×m×n,1×1卷积的通道数为c1,各个3x3卷积的通道数都为c2,则这个简化版的Inception module的参数就为:c1×n+3×3×(c1/3)×(c2/3)。而如果没有采用分组卷积,只是使用普通的卷积,则参数数量为:c1×n+3×3×c2×c1。可以看到这里参数减少为1/9。 将上个Inception module 进一步推广,如果输入经1x1卷积后,将每个通道分为一组使用一个3x3卷积与之进行计算,便得到了深度可分离卷积的雏形:
而将分组卷积推广到极限得到的Inception module的参数数量为:c1×n+3×3×c1。相比一般的分组卷积又少了更多。
而Xception中的深度可分离卷积与上面的分组卷积的极限非常相似,只有两个差别:
1、3x3卷积和1x1卷积放置的顺序不一样。在普通Inception module中是先1x1卷积再3x3卷积,而在深度可分离卷积中则是先3x3卷积后1x1卷积进行合并通道。
2、在普通卷积中,每个卷积后面都有非线性激活函数,但在深度可分离卷积中没有。
深度可分离卷积网络如下:
小结
Xception是在Inception的基础上考虑Inception module的极限情况,从而导出了深度可分离卷积。值得注意的是,深度可分离卷积的理论假设基础是不同feature map通道之间的关系与同一个feature map中的空间相关性充分解耦。Xception可以大大减少参数数量,文中将相同参数数量的Inception v3和xception进行比较结果是xception比Inception v3结果要好,这说明xception比Inception v3能更有效的利用参数。
此外,文中还探究了skip connection对于xception的重要性,结果是使用了skip connection后xception结果更好,说明skip connection对于xception很重要。
而对于每个深度可分离卷积后面没有使用非线性激活,作者也进行了实验,结果是不使用非线性激活效果更好,作者认为这可能是非线性激活丢掉了很多重要信息。
最后,作者提出xception是Inception module的一种极限情况,是否存在中间情况会有更好的结果还未可知。
参考:
Xception: Deep Learning with Depthwise Separable Convolutions.














网友评论