MobileNets简介
\space\space\space\space\space\space MobileNets使用深度可分离卷积,构建一种轻量级的深度卷积网络,这样可以将其运用于移动端和嵌入式视觉应用程序。论文引入两个全局超参数,有效地在延迟和准确性之间进行权衡。
MobileNets细节
深度可分离卷积
\space\space\space\space\space\space
MobileNets基于深度可分离卷积。深度可分离卷积将标准卷积分解为一个深度卷积(depthwise convolution)和一个1
×
\times
× 1的逐点卷积(pointwise convolution)。深度卷积对特征图的每个通道使用一个卷积核作卷积操作。然后,逐点卷积再对深度卷积输出的特征图用1
×
\times
× 1的卷积核作卷积操作,将分开运算的各通道特征图重新组合在一起,形成一个新特征图。具体过程如下图所示。
\space\space\space\space\space\space
假设输入和输出特征图的大小保持一致。对于一个
D
F
×
D
F
×
M
D_F\times D_F\times M
DF×DF×M的特征图,一个标准的
D
k
×
D
k
×
M
D_k\times D_k\times M
Dk×Dk×M大小的卷积核对原始特征图作卷积操作,生成一个
D
F
×
D
F
×
1
D_F\times D_F\times 1
DF×DF×1的特征图,标准卷积将卷积运算和通道组合在一步(层)做完;而深度可分离卷积将这一步拆为两步(层):先用
M
M
M个
D
k
×
D
k
×
1
D_k\times D_k\times 1
Dk×Dk×1的卷积核对
D
F
×
D
F
×
M
D_F\times D_F\times M
DF×DF×M的特征图的
M
M
M个通道分别作卷积运算,产生
D
F
×
D
F
×
M
D_F\times D_F\times M
DF×DF×M的特征图(深度卷积过程,进行卷积运算);然后再用
1
×
1
×
M
1\times1\times M
1×1×M的卷积核将
D
F
×
D
F
×
M
D_F\times D_F\times M
DF×DF×M的特征图的
M
M
M个通道结合起来,生成一个
D
F
×
D
F
×
1
D_F\times D_F\times 1
DF×DF×1的特征图(逐点卷积过程,进行通道合并)。
\space\space\space\space\space\space
这样的分解将极大的减少计算量以及模型尺寸。
标准卷积的计算如下(步长为1,
1
×
1
1\times 1
1×1的padding):
G
k
,
l
,
n
=
∑
i
,
j
,
m
K
i
,
j
,
m
,
n
⋅
F
k
+
i
−
1
,
l
+
j
−
1
,
m
G_{k,l,n}=\sum\limits_{i,j,m}K_{i,j,m,n}\cdot F_{k+i-1,l+j-1,m}
Gk,l,n=i,j,m∑Ki,j,m,n⋅Fk+i−1,l+j−1,m
这里,
G
k
,
l
,
n
G_{k,l,n}
Gk,l,n表示输出特征图
G
G
G的第
k
k
k行第
l
l
l列第
n
n
n个通道元素的值;
K
i
,
j
,
m
,
n
K_{i,j,m,n}
Ki,j,m,n表示第n个卷积核
K
K
K的第
i
i
i行第
j
j
j列第
m
m
m个通道的值;
F
k
+
i
−
1
,
l
+
j
−
1
,
m
F_{k+i-1,l+j-1,m}
Fk+i−1,l+j−1,m表示输入特征图
F
F
F第
k
+
i
−
1
k+i-1
k+i−1行第
l
+
j
−
1
l+j-1
l+j−1列(因为有padding所以减1)第
m
m
m个通道的值。
标准卷积的计算量为:
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
\space\space\space\space\space\space
深度可分离卷积将标准卷积的运算分解为两步:深度卷积(过滤特征filtering)和逐点卷积(组合特征combining)。在每一步(层)中都运用了batch normalization和ReLU激活函数。
深度卷积的计算如下(步长为1,
1
×
1
1\times 1
1×1的padding):
G
^
k
,
l
,
m
=
∑
i
,
j
K
^
i
,
j
,
m
⋅
F
k
+
i
−
1
,
l
+
j
−
1
,
m
\hat{G}_{k,l,m}=\sum\limits_{i,j}\hat{K}_{i,j,m}\cdot F_{k+i-1,l+j-1,m}
G^k,l,m=i,j∑K^i,j,m⋅Fk+i−1,l+j−1,m
其中,
G
^
k
,
l
,
n
\hat{G}_{k,l,n}
G^k,l,n表示输出特征图
G
^
\hat{G}
G^的第
k
k
k行第
l
l
l列第
m
m
m个通道元素的值;
K
^
i
,
j
,
m
\hat{K}_{i,j,m}
K^i,j,m表示第m个卷积核
K
^
\hat{K}
K^的第
i
i
i行第
j
j
j列的值;
F
k
+
i
−
1
,
l
+
j
−
1
,
m
F_{k+i-1,l+j-1,m}
Fk+i−1,l+j−1,m表示输入特征图
F
F
F第
k
+
i
−
1
k+i-1
k+i−1行第
l
+
j
−
1
l+j-1
l+j−1列(因为有padding所以减1)第
m
m
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
\space\space\space\space\space\space
通过对比可以发现,深度卷积的计算量比标准卷积减少了
N
N
N倍。然而这一层只是对输入特征图逐通道地进行了卷积运算,还没有将各通道的特征图组合产生新的特征。所以添加逐点卷积层,用
1
×
1
1\times 1
1×1的卷积将深度卷积层输出的特征图线性组合在一起产生新特征。
\space\space\space\space\space\space
综上,深度可分离卷积的计算量是深度卷积层的计算量与逐点卷积层计算量之和,即
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。深度可分离卷积的计算量与标准卷积对比如下:
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
\dfrac{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}=\dfrac{1}{N}+\dfrac{1}{D_K^2}
DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF=N1+DK21
\space\space\space\space\space\space
MobileNets中深度可分离卷积使用
3
×
3
3\times 3
3×3大小的卷积核,相比标准卷积,计算量减少了8~9倍,且准确率只有很小的损失。
MobileNets的网络结构
\space\space\space\space\space\space
MobileNets的网络结构如下所示。除了第一层卷积使用标准卷积外,其他层均使用深度可分离卷积。每一个卷积层后都跟有BN层和ReLU非线性激活函数,最后一层全连接层没有非线性激活函数。下采样操作通过将卷积的步长设为2来实现(对于深度可分离卷积是在深度卷积层将步长设为2)。
\space\space\space\space\space\space
下图是标准卷积层与深度可分离卷积层的对比图。
\space\space\space\space\space\space
整个网络的参数和计算量分布如下图所示。可以看到整个网络的计算量集中在
1
×
1
1\times 1
1×1的卷积上。一般来说,卷积操作会通过一种叫im2col方式进行内存重组,然后才可以用一种高效的矩阵乘法函数GEMM进行矩阵运算。但对于
1
×
1
1\times 1
1×1的卷积,不需要进行内存重组就可以直接用GEMM进行矩阵运算,底层实现更快。
宽度乘数(Width Multiplier)
\space\space\space\space\space\space
虽然MobileNets体量已经很小,延迟也很低,但是一些应用所需要的模型可能要求体量更小,速度更快。为了进一步缩小模型和减少计算量,文章引入了宽度乘数
α
\alpha
α,来减少每一层输入和输出特征图的通道数。如果输入特征图的通道数为
M
M
M,输出特征图的通道数为
N
N
N,那么加入宽度乘数后,输入和输出特征图的通道数变为
α
M
\alpha M
αM和
α
N
\alpha N
αN。
深度可分离卷积加入宽度乘数后的计算量:
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
这里
α
∈
(
0
,
1
]
\alpha\in(0,1]
α∈(0,1],通常取1、0.75、0.5、0.25。宽度乘数
α
\alpha
α将计算量和参数量减少了大约
α
2
\alpha^2
α2倍。
分辨率乘数(Resolution Multiplier)
\space\space\space\space\space\space
另一个可以减少计算量的超参数是分辨率乘数
ρ
\rho
ρ。通过确定输入图像的分辨率大小,
ρ
\rho
ρ的大小也就隐含的确定了,而且中间生成的特征图也隐式的乘了分辨率乘数
ρ
\rho
ρ。比方说,不加入分辨率乘数
ρ
\rho
ρ时,输入图像的分辨率大小是
224
×
224
224\times 224
224×224;现在将输入图像的分辨率大小设置为
192
×
192
192\times 192
192×192,那么此时就隐式的设
ρ
≈
0.857
\rho\approx0.857
ρ≈0.857,随后的特征图也相当于隐式的乘了
ρ
≈
0.857
\rho\approx0.857
ρ≈0.857,例如第二层原来的输入大小为
112
×
112
112\times 112
112×112,现在变为
96
×
96
96\times 96
96×96。
ρ
∈
(
0
,
1
]
\rho\in(0,1]
ρ∈(0,1],通常输入图像分辨率取224、192、160、128来隐式的设置
ρ
\rho
ρ。分辨率乘数
ρ
\rho
ρ将计算量减少了大约
ρ
2
\rho^2
ρ2倍。
深度可分离卷积加入宽度乘数和分辨率乘数后的计算量:
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
文章举了一个例子来说明深度可分离卷积可以很大程度减少计算量和参数量,如下图所示。(输入特征图大小为
14
×
14
×
512
14\times 14\times 512
14×14×512,卷积核大小为
3
×
3
×
512
×
512
3\times 3\times 512\times 512
3×3×512×512)
1、标准卷积
a)计算量:
3
×
3
×
512
×
512
×
14
×
14
≈
462
3\times 3\times 512\times 512\times 14\times 14\approx462
3×3×512×512×14×14≈462M
b)参数量:
3
×
3
×
512
×
512
≈
2.36
3\times 3\times 512\times 512\approx2.36
3×3×512×512≈2.36M
2、深度可分离卷积
a)计算量:
3
×
3
×
512
×
14
×
14
+
512
×
512
×
14
×
14
≈
52.3
3\times 3\times 512\times 14\times 14+512\times 512\times 14\times 14\approx52.3
3×3×512×14×14+512×512×14×14≈52.3M
b)参数量:
3
×
3
×
512
+
1
×
1
×
512
×
512
≈
0.27
3\times 3\times 512+1\times 1\times 512\times 512\approx0.27
3×3×512+1×1×512×512≈0.27M
2、深度可分离卷积+宽度乘数
a)计算量:
3
×
3
×
512
×
0.75
×
14
×
14
+
512
×
0.75
×
512
×
0.75
×
14
×
14
≈
29.6
3\times 3\times 512\times 0.75\times 14\times 14+512\times 0.75\times 512\times 0.75\times 14\times 14\approx29.6
3×3×512×0.75×14×14+512×0.75×512×0.75×14×14≈29.6M
b)参数量:
3
×
3
×
512
×
0.75
+
1
×
1
×
512
×
0.75
×
512
×
0.75
≈
0.15
3\times 3\times 512\times 0.75+1\times 1\times 512\times 0.75\times 512\times 0.75\approx0.15
3×3×512×0.75+1×1×512×0.75×512×0.75≈0.15M
2、深度可分离卷积+宽度乘数+分辨率乘数
a)计算量:
3
×
3
×
512
×
0.75
×
14
×
0.714
×
14
×
0.714
+
512
×
0.75
×
512
×
0.75
×
14
×
0.714
×
14
×
0.714
≈
15.1
3\times 3\times 512\times 0.75\times 14\times 0.714\times 14\times 0.714+512\times 0.75\times 512\times 0.75\times 14\times 0.714\times 14\times 0.714\approx15.1
3×3×512×0.75×14×0.714×14×0.714+512×0.75×512×0.75×14×0.714×14×0.714≈15.1M
b)参数量:
3
×
3
×
512
×
0.75
+
1
×
1
×
512
×
0.75
×
512
×
0.75
≈
0.15
3\times 3\times 512\times 0.75+1\times 1\times 512\times 0.75\times 512\times 0.75\approx0.15
3×3×512×0.75+1×1×512×0.75×512×0.75≈0.15M
论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications