Xception: Deep Learning with Depthwise Separable Convolutions

tags: Inception, Xception

前言

深度可分离卷积(Depthwise Separable Convolution)率先是由 Laurent Sifre载气博士论文《Rigid-Motion Scattering For Image Classification》中提出。经典的MobileNet 系列算法便是采用深度可分离卷积作为其核心结构。

这篇文章主要从Inception 的角度出发,探讨了Inception和深度可分离卷积的关系,从一个全新的角度解释了深度可分离卷积。再结合stoa的残差网络,一个新的架构Xception应运而生。Xception取义自Extreme Inception,即Xception是一种极端的Inception,下面我们来看看它是怎样的一种极端法。

1. Inception回顾

Inception的核心思想是将channel分成若干个不同感受野大小的通道,除了能获得不同的感受野,Inception还能大幅的降低参数数量。我们看图1中一个简单版本的Inception模型

对于一个输入的Feature Map,首先通过三组1×11\times1卷积得到三组Feature Map,它和先使用一组1×11\times1卷积得到Feature Map,再将这组Feature Map分成三组是完全等价的(图2)。假设图1中1×11\times1卷积核的个数都是k1k_13×33\times3的卷积核的个数都是k2k_2,输入Feature Map的通道数为mm,那么这个简单版本的参数个数为

m×k1+3×3×3×k13×k23=m×k1+3×k1×k2m\times k_1 + 3\times 3\times 3 \times \frac{k_1}{3} \times \frac{k_2}{3} = m\times k_1+ 3\times k_1 \times k_2

对比相同通道数,但是没有分组的普通卷积,普通卷积的参数数量为:

m×k1+3×3×k1×k2m\times k_1 + 3\times3\times k_1 \times k_2

参数数量约为Inception的三倍。

2. Xception

如果Inception是将3×33\times3卷积分成3组,那么考虑一种极度的情况,我们如果将Inception的1×11\times1得到的k1k_1个通道的Feature Map完全分开呢?也就是使用k1k_1个不同的卷积分别在每个通道上进行卷积,它的参数数量是:

m×k1+k1×3×3m\times k_1 + k_1\times 3\times 3

更多时候我们希望两组卷积的输出Feature Map相同,这里我们将Inception的1×11\times1卷积的通道数设为k2k_2,即参数数量为

m×k2+k2×3×3m\times k_2 + k_2\times 3\times 3

它的参数数量是普通卷积的1k1\frac{1}{k_1},我们把这种形式的Inception叫做Extreme Inception,如图3所示。

在搭建GoogLeNet网络时,我们一般采用堆叠Inception的形式,同理在搭建由Extreme Inception构成的网络的时候也是采用堆叠的方式,论文中将这种形式的网络结构叫做Xception。

如果你看过深度可分离卷积的话你就会发现它和Xception几乎是等价的,区别之一就是先计算Pointwise卷积和先计算Depthwise的卷积的区别。

MobileNet v2中,我们指出bottleneck的最后一层1×11\times1卷积核为线性激活时能够更有助于减少信息损耗,这也就是Xception和深度可分离卷积(准确说是MobileNet v2)的第二个不同点。

结合残差结构,一个完整的模型见图4,其实现Keras官方已经开源

上图中要注意的几点:

  1. Keras的SeparalbeConv函数是由3×33\times3的depthwise卷积和1×11\times1的pointwise卷积组成,因此可用于升维和降维;

  2. 图5中的\oplus是add操作,即两个Feature Map进行单位加。

3. 总结

Xception的结构和MobileNet非常像,两个算法的提出时间近似,不存在谁抄袭谁的问题。他们从不同的角度揭示了深度可分离卷积的强大作用,MobileNet的思路是通过将普通3×33\times3卷积拆分的形式来减少参数数量,而Xception是通过对Inception的充分解耦来完成的。

最后更新于