分类模型 Xception
背景
$Xception$ 是 $google$ 继 $inception$ 后提出的对 $inception \ v3$ 的另一种改进,主要是采用 $depthwise \ separable \ convolution$ (深度可分离卷积)来替换原来 $inception \ v3$ 中的卷积操作。
网络结构
$xception$ 的结构基于 $resnet$,但是将其中的卷积层换成了 $depthwise \ separable \ conv$。如下图所示,整个网络被分为了三个部分:$Entry$,$Middle$ 和 $Exit$:
网络技巧
xception block
在 $inception v3$ 中,一个典型的 $inception$ 模块长下面这个样子:
对于一个卷积层来说,它要学习的是一个三维的 $filter$,包括两个空间维度($spatial \ dimension$),即 $width$ 和 $height$;以及一个通道维度($channel \ dimension$)。这个 $filter$ 和输入,在 $3$ 个维度上进行卷积操作,得到最终的输出。可以用伪代码表示如下:
// 对于第i个filter
// 计算输入中心点(x, y)对应的卷积结果
sum = 0
for c in 1:C
for h in 1:K
for w in 1:K
sum += in[c, y-K/2+h, x-K/2+w] * filter _ i[c, h, w]
out[i, y, x] = sum
可以看到,在三维卷积中,$channel$ 这个维度和 $spatial$ 的两个维度并无不同。
在 $Inception$ 中,卷积操作更加轻量级。输入首先被 $1 \times 1$ 的卷积核处理,得到了跨 $channel$ 的组合($cross-channel \ correlation$),同时将输入的 $channel \ dimension$ 减少了 $3-4$ 倍(一会$4$个支路要做 $concat$ 操作)。这个结果被后续的 $3 \times 3$ 卷积和 $5 \times 5$ 卷积核处理,处理方法和普通的卷积一样。
由此作者想到,$inception$ 能够 $work$ 证明:卷积的通道($channel$)相关性和空间($spatial$)相关性是可以解耦的,没必要把它们一起完成。
作者将 $Inception$ 结构做简化,保留了主要结构,去掉了 $avg \ pooling$ 操作,如下所示:
将底层的 $3$ 个 $1 \times 1$ 的卷积核组合起来,其实图 $1$ 和图 $2$ 是等价的。一个“大的” $1 \times 1$ 的卷积核($channels$ 数目变多),其输出结果在 $channels$ 上被分为若干组($group$),每组分别和不同的 $3 \times 3$ 卷积核做卷积,再将这 $3$ 份输出 $concat$ 起来,得到最后的输出,如下图所示:
那么,如果把分组数目继续调大呢?极限情况,可以使得 $group \ number = channel \ number$,即先进行普通卷积操作,再对 $1 \times 1$ 卷积后的每个 $channel$ 分别进行 $3 \times 3$ 卷积操作,最后将结果 $concat$,如下所示:
Depthwise Separable Convolution
$xception$ 中的这种结构和一种名为 $Depthwise \ Separable \ Convolution$ 的技术很相似,$Depthwise \ Separable \ Convolution$ 首先使用 $group \ conv$ 在 $spatial \ dimension$ 上卷积,然后使用 $1 \times 1$ 的卷积核做 $cross \ channel$ 的卷积(又叫做 $pointwise \ conv$)。主要有两点不同:
- 操作循序不一致:$Depthwise \ Separable \ Convolution$ 先进行 $3 \times 3$卷积,再进行 $1 \times 1$ 卷积;$inception$ 先进行 $1 \times 1$ 卷积,再进行 $3 \times 3$ 卷积。
- 是否使用非线性激活操作:$inception$中,两次卷积后都使用 $Relu$;$Depthwise \ Separable \ Convolution$ 中,在 $depthwise$ 卷积后一般不添加 $Relu$。
基于的假设
$cross \ channel$ 的相关和 $spatial$ 的相关可以完全解耦。
优势
- 使分类效果进一步提升