深度学习论文精读(3):MobileNets
论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
参考博文1:https://blog.csdn.net/wfei101/article/details/78310226
参考博文2:https://blog.csdn.net/t800ghb/article/details/78879612
1 总体介绍
-
在移动端或嵌入式设备上使用CNN存在困难,对模型大小、计算力都有限制。
-
深度学习模型通常模型较大,计算力需求过高。难以部署在移动端或嵌入式设备上。
-
提出了使用depth-wise separable convolutions (深度可分离卷积结构) 构建的小权重DNN的精简构架。
-
在网络中设置两个超参数(width multiplier, resolution multiplier)来平衡准确率和模型大小。
-
起到的效果:
- 显著减小后的模型也能在ImageNet上取得很好的效果。
2 Depthwise Separable Convolution
Depthwise Separable Convolution的主旨是通过拆分standard convlution(标准卷积) 为depthwise convlution 和 pointwise convlution两个过程,以达到减少计算量的目的。其中:
- 输入: D F ⋅ D F ⋅ M D_F\cdot D_F\cdot M DF⋅DF⋅M,其中 D F D_F DF为输入尺寸( H , W H,W H,W), M M M为输入通道数(channel)。
- 输出: D F ⋅ D F ⋅ N D_F\cdot D_F\cdot N DF⋅DF⋅N,其中 D F D_F DF为输出尺寸( H , W H,W H,W), N N N为输出通道数(channel)。
2.1 标准卷积
- 卷积核: N N N个 D K ⋅ D K ⋅ M D_K\cdot D_K\cdot M DK⋅DK⋅M
- 输入: D F ⋅ D F ⋅ M D_F\cdot D_F\cdot M DF⋅DF⋅M, 输出: D F ⋅ D F ⋅ N D_F\cdot D_F\cdot N DF⋅DF⋅N
- 计算量:
- FLOTS(参考链接,包括乘与加): ( 2 ⋅ D K ⋅ D K ⋅ M − 1 ) ⋅ N ⋅ D F ⋅ D F (2\cdot D_K \cdot D_K \cdot M -1)\cdot N\cdot D_F\cdot D_F (2⋅DK⋅DK⋅M−1)⋅N⋅DF⋅DF
- 仅乘(论文中采用方式): D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F D_K\cdot D_K\cdot M\cdot N \cdot D_F\cdot D_F DK⋅DK⋅M⋅N⋅DF⋅DF
2.2 Depthwise Separable Convolution
2.2.1 depthwise convlution
- 卷积核: M M M个 D K ⋅ D K ⋅ 1 D_K\cdot D_K\cdot 1 DK⋅DK⋅1
- 输入: D F ⋅ D F ⋅ M D_F\cdot D_F\cdot M DF⋅DF⋅M, 输出: D F ⋅ D F ⋅ M D_F\cdot D_F\cdot M DF⋅DF⋅M
- 计算量: D K ⋅ D K ⋅ M ⋅ D F ⋅ D F D_K\cdot D_K\cdot M\cdot D_F\cdot D_F DK⋅DK⋅M⋅DF⋅DF
- 直观理解:将输入的 D F ⋅ D F ⋅ M D_F\cdot D_F\cdot M DF⋅DF⋅M看做 M M M个 D F ⋅ D F D_F\cdot D_F DF⋅DF的feature-map,然后分别用 M M M个 D K ⋅ D K D_K\cdot D_K DK⋅DK的卷积核对其进行卷积。直观上即理解为将feature-map从通道上进行分解并分别标准卷积。
2.2.2 pointwise convlution
- 卷积核: N N N个 1 ⋅ 1 ⋅ M 1\cdot 1\cdot M 1⋅1⋅M
- 输入: D F ⋅ D F ⋅ M D_F\cdot D_F\cdot M DF⋅DF⋅M, 输出: D F ⋅ D F ⋅ N D_F\cdot D_F\cdot N DF⋅DF⋅N
- 计算量: M ⋅ N ⋅ D F ⋅ D F M\cdot N\cdot D_F\cdot D_F M⋅N⋅DF⋅DF
- 直观理解:将 M M M层feature-map以 1 ⋅ 1 1\cdot 1 1⋅1卷积的方式产生新的 N N N层feature-map。
2.3 计算量对比
Depthwise Separable Convolution的总计算量为: D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F D_K\cdot D_K\cdot M\cdot D_F\cdot D_F+M\cdot N\cdot D_F\cdot D_F DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF
Standard Convolution的计算量为: D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F D_K\cdot D_K\cdot M\cdot N \cdot D_F\cdot D_F DK⋅DK⋅M⋅N⋅DF⋅DF
则比值为: D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F = 1 N + 1 D K 2 {\Large\frac{D_K\cdot D_K\cdot M\cdot D_F\cdot D_F+M\cdot N\cdot D_F\cdot D_F}{D_K\cdot D_K\cdot M\cdot N \cdot D_F\cdot D_F} = \frac{1}{N}+\frac{1}{D_K^2}} DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF=N1+DK21
以 3 ⋅ 3 3\cdot 3 3⋅3的卷积核为例,Depthwise Separable Convolution可以以微小的准确率损失为代价,将计算量减少到 1 8 {\large \frac{1}{8}} 81到 1 9 {\large \frac{1}{9}} 91之间。
3 Two Hyper-parameters
3.1超参数width multiplier: α \alpha α
-
用来对每一层的输入输出宽度进行缩减(channel)。比如该层原始input channel为 M M M,output channel为 N N N。添加width multiplier α \alpha α后,input channel 变为 α M \alpha M αM, output channel 变为 α N \alpha N αN。其中, α ∈ ( 0 , 1 ] \alpha \in (0, 1] α∈(0,1]。
-
添加width multiplier α \alpha α后,Depthwise Separable Convolution计算量减少为:
D K ⋅ D K ⋅ α M ⋅ D F ⋅ D F + α M ⋅ α N ⋅ D F ⋅ D F D_K\cdot D_K\cdot \alpha M\cdot D_F\cdot D_F+\alpha M\cdot \alpha N\cdot D_F\cdot D_F DK⋅DK⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF
3.2超参数resolution multiplier: ρ \rho ρ
-
用来调节输入图片的分辨率。如原始图片为 H ∗ W H*W H∗W,添加resolution multiplier ρ \rho ρ后,图片变为 ρ H ∗ ρ W \rho H*\rho W ρH∗ρW。
-
添加resolution multiplier ρ \rho ρ后,Depthwise Separable Convolution计算量减少为:
D K ⋅ D K ⋅ α M ⋅ ρ D F ⋅ ρ D F + α M ⋅ α N ⋅ ρ D F ⋅ ρ D F D_K\cdot D_K\cdot \alpha M\cdot \rho D_F\cdot \rho D_F+\alpha M\cdot \alpha N\cdot \rho D_F\cdot \rho D_F DK⋅DK⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF
要注意,调节了width multiplier: α \alpha α或resolution multiplier: ρ \rho ρ后,需要从头训练网络。
4 MobileNet结构
4.1 卷积层结构
采用Depthwise Separable Convolution。采用 C o n v − B N − R e L U Conv-BN-ReLU Conv−BN−ReLU。
4.2 总体结构
除第一个卷积层外,均使用Depthwise Separable Convolution。
4.3 资源分配情况
- 几乎所有的计算量、75%的参数,都在 1 ∗ 1 1*1 1∗1卷积层内。
- 由于 1 ∗ 1 1*1 1∗1卷积层直接使用高度优化的数学库来完成。因此Depthwise Separable Convolution不仅减少了计算量,也在计算层面上有巨大的优化。在以Caffe为例,如果要使用这些数学库,要首先使用im2col的方式来对数据进行重新排布,从而确保满足此类数学库的输入形式。
5 总结
- 提出了基于Depthwise Separable Convolution实现的MobileNet,减少了计算量和参数,降低了延迟。
- 提出了width multiplier α \alpha α 和 resolution multiplier ρ \rho ρ,用来平衡准确率和模型大小延迟。
- 减小模型主要由两条路,一条是压缩参数,如剪纸,蒸馏,压缩参数的精度等。另一条是发现新的更优的结构,如文中的分离卷积。本文主要是第二条路。
单词整理:
- embedded 嵌入式的
- streamline 精简
- sparable(sprase)可分离的,稀疏的
- latency 延迟
- extensive 广泛的
- demonstrate 展示,演示
- timely 适当的
- restriction 限制
- factorized 分解,因式分解
- shrink 压缩,缩小
- distillation 蒸馏
- complementary 补充
- drastically 大幅
- spatial 空间
- multiplicatively 乘法
- topology 拓扑
- contrast 对比
- uniformly 平均,均匀地