深度可分离卷积

深度可分离卷积(depthwise separable convolution)

在可分离卷积(separable convolution)中,通常将卷积操作拆分成多个步骤。而在神经网络中通常使用的就是深度可分离卷积(depthwise separable convolution)。

举个例子,假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。

那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么32个卷积核一共需要(3×3×16)×32 =4068个参数。

标准卷积与深度可分离卷积的不同

用一张图来解释深度可分离卷积,如下:

深度可分离卷积pytorch代码 深度可分离卷积网络_深度可分离卷积

可以看到每一个通道用一个filter卷积之后得到对应一个通道的输出,然后再进行信息的融合。而以往标准的卷积过程可以用下面的图来表示:

深度可分离卷积pytorch代码 深度可分离卷积网络_深度学习_02

深度可分离卷积的过程

举例说明,应用深度可分离卷积的过程:

①用16个3×3大小的卷积核(1通道)分别与输入的16通道的数据做卷积(这里使用了16个1通道的卷积核,输入数据的每个通道用1个3×3的卷积核卷积),得到了16个通道的特征图,我们说该步操作是depthwise(逐层)的,在叠加16个特征图之前;

②接着用32个1×1大小的卷积核(16通道)在这16个特征图进行卷积运算,将16个通道的信息进行融合(用1×1的卷积进行不同通道间的信息融合),我们说该步操作是pointwise(逐像素)的。这样我们可以算出整个过程使用了3×3×16+(1×1×16)×32 =656个参数。

深度可分离卷积的优点

可以看出,运用深度可分离卷积比普通卷积减少了所需要的参数。重要的是深度可分离卷积将以往普通卷积操作同时考虑通道和区域改变成,卷积先只考虑区域,然后再考虑通道,实现了通道和区域的分离。

使用深度可分离卷积,可以加速训练进程,并且训练出来的模型参数更少,速度更快,适用于轻量化模型。