论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
这是第一版的mobilenet,它是一个轻量级的网络,既可以保证accurate掉点不严重,又可以保证高速,是可以在CPU上或者其他嵌入式设备上实施运行的模型。这篇论文引入了两个全局超参数来权衡时延和accurate。
常规缩小模型的操作:depthwise separable convolutions;卷积层提速;模型压缩:量化,哈希,剪枝,哈夫曼编码;模型蒸馏。
Mobilenet Architecture
depthwise separable filters
Depthwise Separable Convolution
把常规conv分解:depthwise conv+1×1(pointwise conv)
depthwise conv是放在输入经过的第一层的单卷积核,随后是1×1,来连接depthwise conv的输出。他把常规的conv分成了两步,他减小了模型规模,降低了运算量
假设feature map的大小为
D
F
D_{F}
DF×
D
F
D_{F}
DF×M
标准卷积的运算:
D
F
D_{F}
DF×
D
F
D_{F}
DF×M×
D
K
D_{K}
DK×
D
K
D_{K}
DK×N
depthwise conv输出特征为:(
D
G
D_{G}
DG,
D
G
D_{G}
DG,M)
计算量为:
D
F
D_{F}
DF×
D
F
D_{F}
DF×M×
D
K
D_{K}
DK×
D
K
D_{K}
DK
pointwise conv输出特征为:(
D
G
D_{G}
DG,
D
G
D_{G}
DG,N)
计算量为:
D
F
D_{F}
DF×
D
F
D_{F}
DF×M×N
计算量一共减少:
Network Structure and Training
Mobilenet除了第一层用来完整的卷积核之外,其他使用的都是depthwise separable conv。他的每个卷积操作后面都加了BN和Relu,他的结构如下:
他的下采样用在了每一个block的第一层卷积里。
模型几乎将所有的密集运算放到1×1 卷积上,占用了95%的计算时间,这可以使用general matrix multiply (GEMM) functions优化。这部分也占了75%的参数:
Mobilenet在tensorflow上用了RMSprop,但是没有用其他正则化方式和数据增强,因为小型网络面临的问题是欠拟合。同时权重衰减和L2正则没有啥作用,因为参数真的太少了
Width Multiplier: Thinner Models
如何让运行速度进一步加快:引入宽度因子 α α α。他可以让网络变瘦。他让每个输入层的channel变为 α M αM αM,输出的channel变成 α N αN αN。所以最后的运算量变为: D F × D F × α M × D K × D K + D F × D F × α M × α N D_{F}×D_{F}× αM×D_{K}×D_{K}+D_{F}×D_{F}×αM ×αN DF×DF×αM×DK×DK+DF×DF×αM×αN,他使计算量减少了 α 2 α ^2 α2
α α α取[0,1],一般来说取1,0.75,0.5,0.25
Resolution Multiplier: Reduced Representation
第二个超参数分辨率因子
ρ
ρ
ρ,他用于控制输入和每一层的大小,他是输入的分辨率。引入
ρ
ρ
ρ和
α
α
α之后的计算量为:
ρ
D
F
×
ρ
D
F
×
α
M
×
D
K
×
D
K
+
ρ
D
F
×
ρ
D
F
×
α
M
×
α
N
ρD_{F}×ρD_{F}× αM×D_{K}×D_{K}+ρD_{F}×ρD_{F}×αM ×αN
ρDF×ρDF×αM×DK×DK+ρDF×ρDF×αM×αN
Experiments
为了进一步缩小模型,可将MobileNet中的5层14×14×512 14×14×51214×14×512的深度可分离卷积去除
table 5 相同参数和计算量下,精度衰减了3%。(中间的深度卷积用于过滤作用,参数量少,冗余度相比于大量的逐点卷积应该是少很多的)
交叉验证计算量对精度影响
图4显示了16个交叉的模型在ImageNet上的表现,宽度因子取值为α∈{1,0.75,0.5,0.25}分辨率取值为{224,192,160,128} 。当模型越来越小时,精度可近似看成对数跳跃形式的。
交叉验证参数量对精度影响
图5显示了16个交叉的模型在ImageNet上的表现,宽度因子取值为α∈{1,0.75,0.5,0.25} ,分辨率取值为{224,192,160,128} 。