本文提出了MobileNets的模型,有助于减少inference的时间,使得其可以在移动端开展运行。最重要的算法为depthwise separable convolutions,是将传统的卷积算法分解为了两步,可以减少卷积的时间复杂度和实际的运行时间。同时为了在移动端更加灵活地应用,文章提出了两个全局的超参数用来权衡latency和accuracy。
相比于其他的将CNN移植到移动端的方法,MobileNets的关注点不在于压缩整个模型,而是更注重对于Latency的优化。
1 MobileNet Architecture
1.1 Depthwise Separable Convolution
基本思想是将传统卷积拆分成两步:depthwise convolution和pointwise convolution(1×1的卷积)。
首先depthwise convolution,对于每一张input channel施加一个filter;然后使用1×1的pointwise convolution将得到的depthwise convolution的output组合起来。所以,现在我们可以将传统卷积视为一个两层的卷积网络,一层做depthwise convolution,一层做pointwise convolution。
下面来分析一下两种卷积方式的时间复杂度,假设input有M个channel,每个kernel size是Dk×Dk,在卷积之后得到的是N个channel的output,每个feature map是Df×Df。
Standard convolution
总体需要的计算量为:
Depthwise convolution & pointwise convolution
第一步是depthwise convolution,具体的做法是每一个input channel只用一个filter,得到M个Df×Df的feature map。所以总共需要的计算量为:
第二步是pointwise convolution,使用N个1×1×M的kernel将上一步的结果合并,得到N个Df×Df的feature map。所以总共需要的计算量为:
故最终的计算量为
减少的计算量的比例为:,其中MobileNets使用的是3×3的filter,所以最终可以提升8~9倍的performance。
2.2 Networkarchitecture and training
第一层为full convolution,其他的都是按照2.2中的分解的卷积进行操作的。
每一层(除了最后的soft-max)都进行了Batchnorm和ReLU的操作。
详细的架构如下:
最训练的时候使用了RMSprop和asynchronous gradient descent。
几乎没有使用regularization和data augmentation,因为小model的overfitting问题不大。
在depthwise convolution层没有使用weight decay,因为参数太少了。
2.3 Width multiplier: thinner models
这里引入了一个关乎模型大小的超参数α,用来调节每一层input的channel数量。每一层的channel数量就是αM。
所以最终的计算量为:
2.4 Resolution multiplier: reduced representations
通过这个超参数ρ来调节input image的resolution。
所以最终的计算量为:
3 Experiment