聊一下 MobileNet 网络结构
聊一下 MobileNet 网络结构
最近了解了下 MobileNet,感觉很多资料对于网络的结构解释得不是很清楚,一不小心就乱了 ,遂自己看论文总结了一下。
本文只总结了网络结构,没有论文中其他部分内容。
(想写blog好久一直磨叽到现在才开始hhh,冲鸭~!)
MobileNet 由 Google 团队提出,发表于 CVPR 2017,目的是减少计算时间和参数数量,以便在移动端使用。
实现方法:把标准卷积分成 Depth-wise convolution 和 Point-wise convolution
一、对传统卷积的改进
传统卷积
1、假设输入有 M 个 channel,则每个卷积核也有 M 个 channel(即卷积核shape:DK×DK×M)
2、每个卷积核跟输入在所有 channel 上卷积,所有 channel 对应数值相加,成为 1 层,这样每个卷积核得到一个 DF×DF×1 的输出
3、N 个卷积核得到 DF×DF×N 个输出,即特征图 DF×DF×N
计算量为:DK×DK×M×DF×DF×N
(计算量的计算:卷积核 shape × 输出特征图 shape)
depth-wise convolution
1、输入有 M 个channel,每个卷积核有 1 个 channel(即 DK×DK×1)
2、每个卷积核只对输入的 1 个 channel 卷积,得到 DF×DF×1 的输出
3、M 个卷积核得到 DF×DF×M 个输出。
计算量为:DK×DK×1×DF×DF×M
point-wise convolution
1、输入是 DF×DF×M(即 depth-wise convolution 的输出),使用 1×1×M 的卷积核去卷积,得到 DF×DF×1 的输出
2、N 个卷积核得到 N 个输出,即 DF×DF×N
计算量为:1×1×M×DF×DF×N
计算量与传统卷积相比:
论文中计算了对于3*3的卷积核,计算量缩小了8~9倍。
模型压缩
网络还引入了两个用于压缩模型的超参数:width multiplier 和 resolution multiplier。
width multiplier
即参数 α ∈ (0, 1],通常取 1,0.75,0.5,0.25。α = 1 是 baseline MobileNets,α < 1是压缩的 MobileNets。
目的:压缩 channels,使模型 thinner
实现:在输入channel M 与输出 channel N 前分别乘 α:
width multiplier
即参数 ρ ∈ (0, 1],同样 ρ = 1 是 baseline,ρ < 1是压缩的 MobileNets。
目的:通过减小输出特征图的大小,进一步减少计算量
实现:在输出特征图的宽高前乘 ρ:
二、MobileNet 网络结构
网络中使用 depth-wise convolution 和 point-wise convolution 替换传统卷积,同样每层卷积后使用 BN 和 ReLU 。
把 depth-wise convolution 和 point-wise convolution 看作不同的层的话,网络共有28层。
第一个卷积层使用传统卷积,之后全部使用 depth-wise convolution 和 point-wise convolution (图中的 dw 表示 depth-wise convolution,dw 后边那层卷积就是 point-wise convolution)
下采样不使用池化,使用步长为 2 的 dw。