本文作者: slience_me
我看的论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
内容
1. 标准卷积
假设输入为DF×DF×M,输出为输入为DF×DF×N,卷积核为DK×DK×M,共有N个卷积核进行卷积操作
下图为标准的卷积过程,每个卷积核对输入的向量进行卷积操作,得到一个特征映射,共有N个卷积核进行卷积操作,则可以得到N个特征映射,即DK×DK×N
示意图如下:一般卷积
2. 深度可分离卷积(Depthwise Separable Convolution)
2.1 Depthwise Convolution
对于深度可分离卷积而言,
进行逐通道卷积,Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积①
根据我的第二个图可知,每一个卷积核只负责一个通道的卷积操作,共有M个通道,则需要M个卷积核,对每一个通道进行卷积操作。
详细过程描述为:
- 使用尺寸为DK×DK×1×M的宽度卷积核(M个尺寸为DK×DK×1的卷积核),对每个通道的特征进行卷积
- 得到M个尺寸为DF×DF的特征映射
2.2 Pointwise Convolution
逐点卷积,采用了1×1×M的卷积核对2.1中深度卷积的结果进行逐点卷积操作,详细来说:
- 使用尺寸为1×1×M×N的1×1卷积核(N个尺寸为1×1 ×M的卷积核),对上一步得到的特征进行1×1卷积,每个卷积核对M个特征相同位置上的卷积结果进行整合,即上一步的map在深度方向上进行加权组合
- 得到一个DF×DF×1的结果
- N个1×1卷积得到尺寸为DF×DF×N的输出结果
优点
标准卷积的计算成本为:
深度可分离卷积的计算成本为:
通过该操作,相同的输入,Depthwise Separable Convolution的参数个数是常规卷积的约1/N+1/D2K, 计算量可以大大减少,提高性能。因此,在参数的数量相同的前提下,采用Depthwise Separable Convolution的神经网络层数可以做的更深。
一些研究从增加网络整体非线性表达能力的角度出发,认为在Depthwise Convolution之后加入激活函数和BatchNorm有助于提高网络的非线性表达能力,进而使网络有更强大的能力去拟合更加复杂的函数。但从近期的一些研究结果来看,在Depthwise Convolution之后不加入激活函数和BatchNorm是更优的选择,因此这也逐步成为了使用DSC的一种最佳实践。
简单总结一下,DSC作为普通卷积的一种替代品,它的最大优点是计算效率非常高。因此使用DSC构建轻量级模型是当下非常常见的做法。不过DSC的这种高效性是以低精度作为代价的。目前看来,设计高效率、高精度的DSC变体模块仍然是非常热点的研究方向之一②。
参考内容如下:
①: 深度可分离卷积
②:卷积神经网络之深度可分离卷积(Depthwise Separable Convolution)