论文:《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》
论文链接:https://arxiv.org/abs/1704.04861
概述
卷积神经网络(CNN)已经普遍应用在计算机视觉领域,并且已经取得了不错的效果。为了追求分类准确度,模型深度越来越深,模型复杂度也越来越高,如深度残差网络(ResNet)其层数已经多达152层。然而,在某些真实的应用场景如移动或者嵌入式设备,如此大而复杂的模型是难以被应用的。首先是模型过于庞大,面临着内存不足的问题,其次这些场景要求低延迟,或者说响应速度要快,想象一下自动驾驶汽车的行人检测系统如果速度很慢会发生什么可怕的事情。所以,研究小而高效的CNN模型在这些场景至关重要。
这篇论文是谷歌在2017年提出了,专注于移动端或者嵌入式设备中的轻量级CNN网络。该论文最大的创新点是,提出了深度可分离卷积(depthwise separable convolution)。
深度可分离卷积
MobileNet的基本单元是深度可分离卷积(depthwise separable convolution),深度可分离卷积其实是一种可分解卷积操作,其可以分解为两个更小的操作:depthwise convolution和pointwise convolution。Depthwise convolution和标准卷积不同,对于标准卷积其卷积核是作用在所有的输入通道上,而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个通道,所以说depthwise convolution是depth级别的操作。而pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。
上图即为深度可分离卷积的完整过程,输入特征图大小为7x7x3,第一步进行depthwise convolution操作:使用3个3x3x1大小的卷积核分别对每一个通道进行卷积,得到5x5x3大小的特征图;第二步进行pointwise convolution操作:使用128个1x1x3大小的卷积核对整个特征图进行普通卷积,最终得到5x5x128大小的特征图。
计算量对比
上图给出了深度可分离与标准卷积在计算量上的差别,step1为depthwise convolution,step2为pointwise convolution。对于深度可分离,其首先就是采用depthwise convolution对不同输入通道分别进行卷积,然后采用pointwise convolution将上面的输出再进行结合,这样其实整体效果和一个标准卷积是差不多的,但是会大大减少计算量和模型参数量。
一般情况下 N (即通道数)比较大,那么如果采用3x3卷积核的话,深度可分离卷积相较标准卷积可以降低大约9倍的计算量,下图给出了具体实例对比。
MobileNet-v1网络结构
Depthwise eparable convolution的基本结构如下图所示,在真正应用中会加入BN(Batch Normalization)层,并使用ReLU激活函数。
MobileNetv1整体的网络结构如下图所示,总共有28层,该网络基本去除了pool层,使用stride来进行下采样。
宽度因子和分辨率因子
宽度因子(width multiplier)
为了构造这些结构更小且计算量更小的模型,引入了一个参数α,称为宽度因子。宽度因子α的作用是在每层均匀地稀疏网络,为每层通道乘以一定的比例(M、N分别为输入通道数和输出通道数),从而减少各层的通道数。常用值有1、0.75、0.5、0.25。
分辨率因子(resolution multiplier)
为了减少计算量,引入了第二个参数ρ,称为分辨率因子。其作用将每层特征图的大小乘以一定的比例。
ρ仅仅影响计算量,但是不改变参数量。引入两个参数会给肯定会降低MobileNet的性能,具体实验分析可以见paper。