GoogleNet论文中研究 group size 而搞出了Inceptionv1(即多group的CNN分支)。此后,Inception不断迭代,group size被越玩越复杂,一直发展到了v4版本。
这时,Inception的鼻祖Google团队又提出了 Extreme Inception ,即赫赫有名的 Xception 。只不过,这次不再是之前的 并行式group 了,取而代之的是 串行式group 。
具体来说,就是:
在channel上进行逐片分治,然后group之。
而这一 串行式group 的module,被起名 separable convolution 。
separable convolution是通过如下图所示(图片来源:Xception: Deep Learning with Depthwise Separable Convolutions)的演化而诞生的:
从此,group操作进入了“串行”时代。
传统的卷积操作如下图:
而separable convolution的操作如下图:
完整的一个SeparableConv组合如下图(图片来源):
整个网络结构并没有太多的创新点,可以视为将ResNeXt的Inception module替换为SeparableConv module:
换言之:
Xception是ResNeXt的一个变种。
Note:
并行式group –> 串行式group 。
在SeparableConv module看来,channel之间的信息融合,交给Conv1×1就够了:
channel数个Conv3×3则只需对单channel负责,这样就可以更专心地学到本channel的location信息:
两部分各司其职,共同组成了SeparableConv module。
经过实验,Xception在ImageNet上稍优于Inceptionv3:
参数数量和Inceptionv3基本一致,速度也差不多:
在ImageNet上的收敛情况也好于Inceptionv3:
[1] Xception: Deep Learning with Depthwise Separable Convolutions [2] Google Xception Network