从Xception网络中聊聊深度可分离卷积

Xception: Deep Learning with Depthwise Separable Convolutions,在这篇文章中应用了深度可分离卷积。对于卷积来说可以看作三维的滤波器:通道维度+空间维度,常规的卷积就实现空间相关性和通道相关性。传统的卷积就是把所有通道当作一个整体来进行卷积,而在Xception文章中把通道数进行分组然后再卷积,然后再联合。

从Xception网络中聊聊深度可分离卷积

这幅图和Xception最接近,先进行1*1的卷积,然后再每个通道上进行3*3的卷积。将这个结果Concat起来就是卷积的结果,当然这也是一个可分离的卷积过程。 当Figure4和本文中还是有一点差别的:

  • 深度可分离是先进行每个通道的卷积,然后得到结果concat起来,再进行1*1的卷积
  • Inception中,每个操作后会有一个ReLU的非线性**,深度分离是没有。

从Xception网络中聊聊深度可分离卷积

Xception的整体框架如下:

可以看到使用了残差网络的结构;接下来就聊聊每个模块中都用的SeparableConv卷积,也叫做深度可分离卷积

 

从Xception网络中聊聊深度可分离卷积

深度可分离卷积(Depthwise separable convolution) 将完整的卷积运算分解为两个部分:

  • 对每个通道分别卷积,然后再Concat
  • 在进行1*1的点积

假如现在有一个图像是7*7*3,然后进行卷积之后变成5*5*128.接下来就对比普通的卷积和深度可分离卷积:

  • 普通卷积
    • 从Xception网络中聊聊深度可分离卷积

      卷积核大小是3*3*3,用一个这样的大小卷积核进行卷积得到的结果是5*5*1.如果要得到通道数是128,那么就卷积参数就是3*3*3*128=3456
  • 深度可分离卷积
    • 从Xception网络中聊聊深度可分离卷积

      使用三个卷积核,每个核的大小是3*3*1,对每个通道也就是7*7*1进行卷积,然后把得到的结果contact起来,得到5*5*3
    • 从Xception网络中聊聊深度可分离卷积

      为了扩展深度,使用1*1*3进行卷积,得到5*5*1的特征图
    • 从Xception网络中聊聊深度可分离卷积

      使用了128个1*1*3的卷积核就可以得到5*5*128.这样一个深度可分离卷积就实现了。
    • 有两个步骤组成,所以卷积的参数两是两个卷积之和:3*3*1*3+1*1*3*128=1536
  • 结论
    • Separable Convolution的参数个数是常规卷积的1/3
    • 参数量相同的前提下,采用Separable Convolution网络的层数可以更深,提取特征也就更多,也就是有更多的通道数表达,通道数也叫宽度。一般情况下,网络越宽,性能越好。宽度就让每一次学习到更加丰富的特征,比如不同方向上,不同频率的纹理特征。在EfficientNet网络中就是从网络的宽度,深度,分辨率出发进行缩放达到一个好的效果,提取到更好的特征。

以上几个图分别来自Xception论文和一文读懂12中卷积方法