-
MobileNet_v1
- 论文:MobileNets Efficient Convolutional Neural Networks for Mobile Vision
- caffe实现:https://github.com/shicai/MobileNet-Caffe
- pytorch实现:https://github.com/marvis/pytorch-mobilenet
- tensorflow实现:https://github.com/Zehaos/MobileNet
1.创新点
Google
在2017
年提出的适用于手机端的神经网络模型- 主要使用了深度可分离卷积
Depthwise Separable Convolution
将卷积核进行分解计算来减少计算量 - 引入了两个超参数减少参数量和计算量
- 宽度乘数(
Width Multiplier
): [减少输入和输出的channels
] - 分辨率乘数(
Resolution Multiplier
):[减少输入输出的feature maps
的大小]
- 宽度乘数(
2.深度可分离卷积(Depthwise Separable Convolution
)
- 可以将一个标准卷积核分成一个深度卷积
depthwise convolution
和 一个1X1
的卷积(叫作逐点卷积pointwise convolution
)。depthwise convolution实际上就是卷积核和feature map的对应通道相卷积,这个操作仅涉及单个通道,在代码中用分组卷积实现,即分的组数和feature map的通道数目相等,这样卷积之后不改变输出的通道数目,重要的是这个操作的信息仅在当前通道中流动,没有通道间的信息交互。因此DW卷积之后跟着1X1
的卷积进行通道间的信息融合。通过这两个操作级联来模拟通过少的多的计算量来模拟常规卷积。 - 如下图所示
深度可分离卷积与标准卷积的结构对比如下:
3. 宽度乘数(Width Multiplier)
- 引入超参数α, 目的是使模型变瘦,
- 即输入层的
channels
个数M,变成αM,输出层的channels
个数N变成了αN - 所以引入宽度乘数后的总的计算量是
Dk⋅Dk⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF
- 一般α∈(0,1],常取的值是
1, 0.75, 0.5, 0.25,
- 大约可以减少参数量和计算量的α2
- 一般α∈(0,1],常取的值是
4. 分辨率乘数 (Resolution Multiplier)
- 引入超参数ρ,目的是降低图片的分辨率
- 即作用在输入的
feature map
上 - 所以再引入分辨率乘数后总的计算量是:
Dk⋅Dk⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF
- 一般输入图片的分辨率是
224, 192, 160 or 128
- 大约可以减少计算量的ρ2
- 一般输入图片的分辨率是
5. 交叉验证的实验结果
宽度因子取值为α∈{1,0.75,0.5,0.25},分辨率取值为{224,192,160,128} 。
6.细节
【1】deep-wise卷积核含有的参数较少,作者发现这部分最好使用较小的weight decay或者不使用weight decay
【2】精度和vgg差不多,但是运算量减少了30倍