因为听说了 MobileNets 中的深度可分离卷积的大名,因此拜读了一下论文
封面《公主连结 Re:dive》,作者 QuAn_

引言

  在许多嵌入式设备上,受限于有限的计算资源,往往无法跑一些效果较好的大模型。在 MobileNet 以前,许多论文都是集中于减少模型体积,而不是速度。
  MobileNets 是基于深度可分离卷积 (depthwise separable convolutions),这在 Inception Model、Falattened networks 中都有提到。降低模型体积的方法有剪枝、压缩、哈希、霍夫曼编码和蒸馏等等。

创新点

  MobileNet 提出了一种深度可分离卷积结构,将标准卷积分为了深度卷积 (depthwise convolution) 和逐点卷积 (pointwise convolution) 两步。传统标准卷积往往在进行计算的时候会同时改变通道数和特征图的大小。而深度可分离卷积的第一步深度卷积则是不改变输出的通道数,只改变特征图的大小,第二步逐点卷积则是以 1*1 大小的卷积核对特征图做处理,只改变输出的通道数不改变特征图的大小。

计算量对比

  假定卷积的输入为 DFDFMD_F*D_F*M 的特征图,输出为 DFDFND_F*D_F*N 的特征图。DFD_F为特征图的长宽,MM 为特征图的通道数,NN 为输出的通道数。
  传统卷积需要一个大小为 MDKDKNM*D_K*D_K*N 的卷积核,DKD_K为其内核大小,MM 为输入通道数,NN 为输出通道数。则其计算量如下。

DKDKMNDFDFD_K*D_K*M*N*D_F*D_F

  对于深度可分离卷积来说需要一个 MDKDK1M*D_K*D_K*1 的深度卷积核核一个 M11NM*1*1*N 的逐点卷积核。其计算量如下,式子左边为深度卷积的计算量,右边为逐点卷积的计算量。

DKDKMDFDF+DFDFMND_K*D_K*M*D_F*D_F+D_F*D_F*M*N

  经过对比可以得知其压缩量如下。

DKDKMDFDF+DFDFMNDKDKMNDFDF=1N+1DK2\frac{D_K*D_K*M*D_F*D_F+D_F*D_F*M*N}{D_K*D_K*M*N*D_F*D_F} = \frac{1}{N}+\frac{1}{D_K^2}

  由于神经网络中经常使用 3*3 的卷积核,因此可以减少大约 8 到 9 倍的计算量。
标准卷积核深度可分离卷积结构对比

实验结果

这一部分有大量的对比实验详细可以看原文。使用全卷积和深度可分离卷积的 MobileNet 对比如下图,准确率下降了 1%,计算量下降到了原来的 11%,参数量下降到了 4.2%。全卷积和深度可分离卷积MobileNet对比

总结

  深度可分离卷积只是一种轻量级的网络结果,不是模型压缩方法。但是其降低计算量的效果的理论支持合理有据,虽然个人觉得准确率部分可能有点点夸张,需要后续自行实验验证一下。

参考文献

[1]Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.