简介
在某些真实的应用场景如移动或者嵌入式设备,大而复杂的模型是难以被应用的,模型过于庞大,面临着内存不足的问题,其次这些场景要求低延迟,或者说响应速度要快。
目前的研究总结来看分为两个方向:一是对训练好的复杂模型进行压缩得到小模型;二是直接设计小模型并进行训练。不管如何,其目标在保持模型性能(accuracy)的前提下降低模型大小(parameterssize),同时提升模型速度(speed, low latency)。MobileNet属于后者,其是Google最近提出的一种小巧而高效的CNN模型,其在accuracy和latency之间做了折中。
MobileNet的基本单元是深度级可分离卷积(depthwise separable convolution---DSC),
深度级可分离卷积其实是一种可分解卷积操作(factorized convolutions),其可以分解为两个更小的操作:depthwise convolution和pointwise convolution。Depthwise convolution和标准卷积不同,对于标准卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道。而pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。对于DSC,其首先是采用depthwise convolution对不同输入通道分别进行卷积,然后采用pointwise convolution将上面的输出再进行结合,这样其实整体效果和一个标准卷积是差不多的,但是会大大减少计算量和模型参数量。
在真正应用中会加入batchnorm,并使用ReLU激活函数
MobileNet的网络结构
首先是一个3x3的标准卷积,然后后面就是堆积depthwise separable convolution,并且可以看到其中的部分depthwise convolution会通过strides=2进行downsampling。
然后采用average pooling将feature变成1x1,根据预测类别大小加上全连接层,最后是一个softmax层。
如果单独计算depthwise convolution和pointwise convolution,整个网络有28层(这里Avg Pool和Softmax不计算在内)
参考链接:CNN模型之MobileNet_小白学视觉的博客-CSDN博客