2.1.13 MobileNet
网络越来越深,复杂度越来越高,计算代价也随之升高。MobileNet(移动端网络)(Howard et al.,2017)希望设计一种能用在移动端或嵌入式设备中的精简的网络结构,也就是想在保持网络性能基本不变的情况下尽量降低网络参数量和计算量。具体地说,MobileNet 将图2-19(a)中一个标准的卷积层替换为图2-19(b)中的Depthwise(逐通道)卷积和Pointwise(逐空间位置)卷积。假设卷积层输入和输出的维度都是,Depthwise卷积是指卷积核维度为、分组数为的分组卷积,输出通道数和输入通道数相同。Depthwise卷积是一种极端的分组卷积,该卷积层的每个通道对应一个独立的卷积核。Pointwise卷积是指卷积。实际在使用时,会在这两个卷积层之间增加 BN层和ReLU层,如图2-19(b)所示。标准卷积、Depthwise卷积以及 Pointwise卷积的计算过程如图2-20所示。这种将标准卷积层用多个卷积层近似的可分离卷积思想最早可以追溯到(Mamalet & Garcia,2012),Xception(Chollet,2017)也提出了类似的结构。
图2-19 标准卷积和MobileNet中使用的卷积
图2-20 标准卷积、Depthwise卷积和Pointwise卷积计算过程
回顾对于一个标准的卷积核维度为、输入通道数为、输出通道数为的卷积层,其输入特征维度为,输出特征维度为,忽略卷积层的偏置项,该卷积层的参数量为,计算复杂度为。
如表2-2所示,对于一个标准的卷积层,假设输入输出特征维度都是,那么该卷积层的参数量为,计算量为。Depthwise卷积等价于一个分组数为分组卷积,那么 Depthwise卷积的参数量为,计算量为。Pointwise卷积等价于一个卷积,那么 Pointwise卷积的参数量为,计算量为。
表2-2 标准卷积和Depthwise、Pointwise卷积对比
MobileNet 将一个标准的卷积替换为一个Depthwise卷积和一个Pointwise卷积。整体参数量与原标准卷积的参数量的比值为
(2.8)
整体计算量与原标准卷积的计算量的比值为
(2.9)
一般来说,卷积通道数比较大,可以近似地认为,即 Pointwise卷积的参数量和计算量要远大于Depthwise卷积,整体比值近似为1/9。也就是说,MobileNet 相比于标准卷积可以只有1/9的参数量和计算量。MobileNet 可以在很小的准确率损失的前提下,使网络变得更加精简。实验发现,MobileNet 准确率只比VGG-16 低1%,但是参数量只有VGG-16 的1/30。
计算时间方面,由于整个网络耗时主要集中在卷积层,而 MobileNet中的卷积层运算主要集中在Pointwise卷积中。卷积运算的一种主流实现方案是im2col(Image to Column,图像转为列向量),im2col 将与每个输出神经元相连的输入特征的感受野区域展开成一个列向量,并将所有的列向量拼接成一个矩阵,这样卷积运算可以用矩阵乘法实现。输入特征的im2col 变换取决于卷积层的卷积核维度,而 Pointwise卷积(即卷积)的一个优点在于,输入特征 im2col 变换前后一致,即输入特征不需要进行变换,即可得到 im2col的结果,从而进行矩阵乘法计算,这大大提高了卷积速度。由于MobileNet中的计算量主要集中在计算速度更快的Pointwise卷积中,因而网络整体的计算速度较快。
最后补充一点,MobileNet 设计的初衷是提升移动端或嵌入式设备上的网络预测速度,移动端或嵌入式设备主要是CPU 环境,因此上述内容都是基于CPU 推导的。如果在GPU 环境,MobileNet的速度提升并不明显。