MobileNetV1


MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNet v1

简单来说,MobileNet v1将常规卷积替换为深度可分离卷积(depthWise convolution)的VGG网络

Left: Conventional Conv, Right: DepthWise Conv

从上图中可以看出,VGG的卷积块就是1个常规3*3卷积、1个BN、1个ReLU激活层;MobileNet v1则是1个3*3深度可分离卷积和1个1*1卷积,后面分别跟着1个BN和1个ReLU激活函数。需要注意的是,MobileNet v1的ReLU指的是ReLU6,ReLU6对激活输出做了一个输出限幅,使得Max Output不超过6,目的是防止过大的激活输出值带来较大的精度损失

Depthwise Convolution

从维度的角度看,卷积核可以看成是一个空间维(Width and Height)和通道维的组合,而卷积操作则可以视为空间相关性和通道相关性的联合映射。从inception的1*1卷积来看,卷积中的空间相关性和通道相关性是可以解耦的,将它们分开进行映射,可能会达到更好的效果。

深度可分离卷积是在1*1卷积基础上的一种创新。主要包括两个部分:深度卷积和1*1卷积。深度卷积的目的在于对输入的每一个通道都单独使用一个卷积核对其进行卷积,也就是通道分离后再组合。1*1卷积的目的则在于加强深度。下面以一个例子来看一下深度可分离卷积。

假设我们用128个3*3*3的filter对一个7*7*3的输入进行卷积,可得到5*5*128的输出。如下图所示:

Conventional Convolution

其计算量为5*5*128*3*3*3=86400。

现在看如何使用深度可分离卷积来实现同样的结果。深度可分离卷积的第一步是深度卷积(Depth-Wise)。这里的深度卷积,就是分别用3个3*3*1的滤波器对输入的3个通道分别做卷积,也就是说要做3次卷积,每次卷积都有一个5*5*1的输出,组合在一起便是5*5*3的输出。

现在为了拓展深度达到128,我们需要执行深度可分离卷积的第二步:1x1卷积(Point-Wise)。现在我们用128个1*1*3的滤波器对5*5*3进行卷积,就可以得到5*5*128的输出。完整过程如下图所示:

Depthwise Convolution

第一步深度卷积的计算量:5*5*1*3*3*1*3=675。第二步1x1卷积的计算量:5*5*128*1*1*3=9600,合计计算量为10275次。

相同的卷积计算输出,深度可分离卷积要比常规卷积节省12倍的计算成本。所以深度可分离卷积是MobileNet v1能够轻量化的关键原因

MobileNet v1 Body Architecture

MobileNet v1 Body Architecture

Comparison with VGG 16 and GoogleNet

Testing on ImageNet acc

相比于VGG 16,MobileNet v1精度损失极小的前提下,参数量几乎减少为VGG 16的1/32。


Author: cipher
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source cipher !
  TOC