赞
踩
论文下载地址:Xception: Deep Learning with Depthwise Separable Convolutions(2017).
论文主要内容:该论文是对【Inception-V3】网络的改进,添加了深度可分离卷积(Depthwise Separable Convolutions)以及残差连接模块(residual connection),在此基础上构成了【Xception】网络结构。整体的网络结构如下图所示(注意:下图是论文中的截图,展示的是Xception-41 结构,而DeepLab-V3+应用的是Xception-65,结构不同):
在 Inception 模块中,通过 1 × 1卷积,3 × 3卷积,5 × 5卷积,pooling 等卷积单元组合在一起进行特征提取。Inception 结构将特征的选择留给网络自己训练,也就是将一个输入同时输给几种提取特征方式,然后做 concat 。Inception-v3的基本模块如下图所示:
通过去除【Avg Pool】,简化的【Inception】模块如下图所示:
再将【Figure2】进一步延伸,得到【Figure3】。对于一个输入,先用统一的【1x1】卷积核卷积,然后连接3个【3x3】的卷积,这3个卷积操作只将前面【1x1】卷积结果中的一部分作为自己的输入(这里是将1/3 channel 作为每个【3x3】卷积的输入),具体见下图所示:
上述【Inception】模块的变化,我们会有这样的疑问:经过【1x1】卷积后得到特征图的通道数量或者尺寸具有怎样的影响?我们进行这样强烈的假设,或者说是【Inception】模块的假设,即交叉通道的相关性和空间的相关性(cross-channel correlations and spatial correlations)是否可以分开考虑?
基于上述强烈的独立性假设,一种极端的【Inception】模块,得到【Figure4】的变化形式,也就是【3x3】卷积的个数和【1x1】卷积的输出 channel 个数一样,每个【3x3】卷积都是和输入的一个 channel 做卷积。这种形式的模块比较接近深度可分离卷积了,具体如下图所示:
卷积神经网络在图像处理中的地位已然毋庸置疑。大量卷积运算的叠加具备强大的特征提取能力、相比全连接又消耗更少的参数,应用在图像这样的二维结构数据中有着先天优势。然而受限于目前移动端设备硬件条件,显著降低神经网络的运算量依旧是网络结构优化的目标之一。本文所述的【Separable Convolution】就是降低卷积运算参数量的一种典型方法。
假设输入层为一个大小为64×64像素、三通道彩色图片。经过一个包含4个Filter的卷积层,最终输出4个Feature Map,且尺寸与输入层相同。整个过程可以用下图来概括:
此时,卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:
N_std = 4 × 3 × 3 × 3 = 108
深度可分离卷积【Separable Convolution】在 Google 的Xception[1]以及MobileNet[2]论文中均有描述。它的核心思想是将一个完整的卷积运算分解为两步进行,分别为【Depthwise Convolution】与【Pointwise Convolution】。
Depthwise Convolution
同样是上述例子,一个大小为64×64像素、三通道彩色图片首先经过第一次卷积运算,不同之处在于此次的卷积完全是在二维平面内进行,且Filter的数量与上一层的Depth相同。所以一个三通道的图像经过运算后生成了3个Feature map,如下图所示:
其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:
N_depthwise = 3 × 3 × 3 = 27
【Depthwise Convolution】完成后的 feature map 数量与输入层的 depth 相同,但是这种运算对输入层的每个 channel 独立进行卷积运算后就束了,没有有效的利用不同 map 在相同空间位置上的信息。因此需要增加另外一步操作来将这些 map 进行组合生成新的 Feature map,即接下来的【Pointwise Convolution】。
Pointwise Convolution
【Pointwise Convolution】的运算与常规卷积运算非常相似,不同之处在于卷积核的尺寸为【1×1×M】,M为上一层的【depth】。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个Filter就有几个Feature map。如下图所示:
由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:
N_pointwise = 1 × 1 × 3 × 4 = 12
经过【Pointwise Convolution】之后,同样输出了4张 Feature map,与常规卷积的输出维度相同。
参数对比
回顾一下,常规卷积的参数个数为:
N_std = 4 × 3 × 3 × 3 = 108
【Separable Convolution】的参数由两部分相加得到:
N_depthwise = 3 × 3 × 3 = 27
N_pointwise = 1 × 1 × 3 × 4 = 12
N_separable = N_depthwise + N_pointwise = 39
相同的输入,同样是得到4张Feature map,【Separable Convolution】的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。
主要分为3部分:输入数据依次通过【Entry flow】=> 【Middle flow】=> 【Exit flow】,得到最终的结果。
Entry flow
【Entry flow】整体结构如下图所示,网络的输入为:【?x 513 x 513 x 3】,包含两层普通卷积(3x3x3x32,3x3x32x64)+ block1 + block2 + block3,下图是tensorboard展示的网络结构图:
每一个【block】的结构如下图所示,如图红色圆圈所示,每个【block】总共有 3 个深度可分离卷积层,并且添加残差连接通道,具体如下图所示:
每个深度可分离卷积层的结构为【depthwise + BN】+ 【pointwise + BN】 。先用【3 x 3】卷积进行通道上的分离计算,然后使用【1 x 1】卷积将特征进行合并,并且都有添加【BN】层,具体如下图所示,可以对比上面深度可分离卷积的原理进行理解:
Middle flow
该模块总共有16个单元,每一个单元的结构与【Enty flow】的一个【block】结构一样,差别是卷积核的数量不一样
Exit flow
该模块有2个【block】,【block1】与上面的结构一样,【block2】唯一不同的就是没有残差连接,见下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。