个人学习笔记
如有错误,请指正;
如有侵权,请联系删除;
MobileNet-V1
MobileNet 提出使用深度可分例卷积,将一个标准卷积分解成一个只对单通道卷积的 Depthwise Convolutional 和一个
1
×
1
1\times 1
1×1的 Pointwise Conv,可以牺牲少量性能而大大降低计算量。
但是深度可分离卷积也存在隐患:Depthwise 的 kernel 只有单通道,维度太小,在 Relu 激活后很容易变成 0,会训废掉,在 ShuffleNet 和 Xception 中都提到了在 Depthwise 后面不加非线性激活。
论文地址
官方github
Abstract & Introduction
MobileNet是一种流线型架构,使用深度可分离卷积(depthwise separable convolutions)来构建轻型深度神经网络,推出了两个超参 α 、 ρ \alpha 、\rho α、ρ来平衡网络性能和准确率,适用于移动端嵌入式视觉应用,包括目标检测、细粒度分类、人脸属性、大规模地理位置定位等。
Prior Work
构建小型高效神经网络的方法:
- 压缩预训练网络
- 直接训练小网络
MobileNet提出了一种新的网络架构,可以让开发者根据硬件情况,调节两个超参 α 、 ρ \alpha 、\rho α、ρ来设定网络的计算量。
在MobileNet之前的轻型网络有:
- Flattened networks
- Factorized Networks
- Xception Network
- Squeezenet
- Structured Transform Networks
- Deep Fried Convnets
获得小网络的方法:
- 收缩 (shrinking)
- 分解(factorizing)
- 压缩预训练网络
- 乘积量化(product quantization)
- 哈希(hashing)
- 剪枝(pruning)
- 矢量量化(vector quantization)
- 霍夫曼编码(Huffman coding)
- 蒸馏(distillation): 大网络teach小网络(大网络给出label,小网络拟合?好像不是)
- low bit network
MobileNet Architecture
Depthwise Separable Convolution
深度可分离卷积:将一个标准卷积分解成一个深度(depthwise)卷积和一个逐点(pointwise)卷积,depthwise卷积在每个通道使用一个滤波器,pointwise卷积使用 1 × 1 1 \times 1 1×1的卷积组合depthwise卷积的输出,如下图所示:
标准卷积将输入同时进行滤波和组合,提取到一个新的集合中,深度可分离卷积将这一步分成了两层,depthwise用于过滤,pointwise用于组合。
下面说明MobileNet的深度可分离卷积是怎么降低计算量的:
设定输入特征图大小为
D
F
×
D
F
×
M
D_F \times D_F \times M
DF×DF×M(长-宽-通道数),输出特征图大小为
D
G
×
D
G
×
N
D_G \times D_G \times N
DG×DG×N(长-宽-通道数),标准卷积的卷积核大小为
D
K
×
D
K
×
M
×
N
D_K \times D_K \times M \times N
DK×DK×M×N,
则
标准卷积的计算公式为
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_{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,其中,
K
K
K为卷积核,
F
F
F为输入的特征图。
计算代价为
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
标准卷积的计算代价与输入、输出通道数
M
、
N
M、N
M、N,卷积核大小、输入大小有关。
深度卷积计算公式为
G
^
k
,
l
,
m
=
∑
i
,
j
K
^
i
,
j
,
m
⋅
F
k
+
i
−
1
,
l
+
j
−
1
,
m
\hat{G}_{k,l,m}=\sum _{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
计算代价为
D
K
×
D
K
×
M
×
D
F
×
D
F
D_K \times D_K \times M \times D_F \times D_F
DK×DK×M×DF×DF
深度卷积可以输入特征图的每一个通道进行特征提取,但是无法组合不同通道的特征以产生新的特征,所以需要逐点卷积来组合通道信息,产生新的特征。
深度可分离卷积的计算代价为
D
K
×
D
K
×
M
×
D
F
×
D
F
+
1
×
1
×
M
×
N
×
D
F
×
D
F
D_K \times D_K \times M \times D_F \times D_F+1 \times 1 \times M \times N \times D_F \times D_F
DK×DK×M×DF×DF+1×1×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
\frac{D_K \times D_K \times M \times D_F \times D_F+ M \times N \times D_F \times 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
Network Structure and Training
网络架构:
除全连接层外,所有层后面都接着BN、Relu,如下图,全连接层接Softmax用于分类。
MobileNet共有28层。
实际运算速度不仅与乘-加(Mult-Adds)操作的次数有关,还与矩阵的稀疏度有关,非结构化稀疏矩阵的运算速度通常低于稠密矩阵的运算速度。矩阵运算时需要使用im2col将矩阵转化为列向量进行计算,im2col的示意图如下图所示:
但是MobileNet中使用的 1 × 1 1\times 1 1×1的卷积不需要im2col操作,可以节省大量时间,MobileNet花费95%的时间在 1 × 1 1\times 1 1×1的卷积上, 1 × 1 1\times 1 1×1的卷积上包含了75%的参数,剩下的参数大都在全连接层上,具体参数见下表。
MobileNet使用的优化方法为asynchronous gradient descent,与Inception-V3相同,因为是小网络,不用担心过拟合,所以只使用少量/不用正则与数据增强。
Width Multiplier: Thinner Models
MobileNet提出的第一个超参:宽度乘子(width multiplier)
α
\alpha
α ,用于减少通道数
M
M
M,加入
α
\alpha
α的深度可分离卷积的计算代价为
D
K
×
D
K
×
α
M
×
D
F
×
D
F
+
α
M
×
α
N
×
D
F
×
D
F
D_K \times D_K \times \alpha M \times D_F \times D_F+ \alpha M \times \alpha N \times D_F \times 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
1, 0.75,0.5,0.25
1,0.75,0.5,0.25。该超参大约可以减少计算量
α
2
\alpha ^2
α2.
Resolution Multiplier: Reduced Representation
MobileNet提出的第二个超参:分辨率乘子(resolution multiplier)
ρ
\rho
ρ ,用于减少输入图像及内部特征图的大小,在实践中,通过设置输入图像分辨率来隐性设置
ρ
\rho
ρ(这也算创新点???),加入
ρ
\rho
ρ的深度可分离卷积的计算代价为
D
K
×
D
K
×
α
M
×
ρ
D
F
×
ρ
D
F
+
α
M
×
α
N
×
ρ
D
F
×
ρ
D
F
D_K \times D_K \times \alpha M \times \rho D_F \times \rho D_F+ \alpha M \times \alpha N \times \rho D_F \times \rho D_F
DK×DK×αM×ρDF×ρDF+αM×αN×ρDF×ρDF
其中,
ρ
∈
(
0
,
1
]
\rho \in (0,1]
ρ∈(0,1],输入图像分辨率通常设置为
224
,
192
,
160
,
128
224, 192,160,128
224,192,160,128。该超参大约可以减少计算量
ρ
2
\rho ^2
ρ2.
下表为在输入为 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情况下,标准卷积、标准深度可分离卷积、分别加入 α \alpha α、 ρ \rho ρ之后的深度可分离卷积的计算量与参数量比较。
Experiments
- 与全卷积网络相比,可分离卷积的性能在ImageNet上只下降一点,但计算量与参数量大幅下降
- 深而窄(通道数少)的网络优于浅层网络
- 超参
α
\alpha
α可以牺牲少量性能来大幅减少计算量和参数量
- 超参
ρ
\rho
ρ 可以牺牲少量性能来大量减少计算量(乘-加运算),但参数量不变(参数量与输入的大小无关)
- 精度与计算量之间的关系
- 在宽度乘子为
α
∈
{
1
,
0.75
,
0.5
,
0.25
}
\alpha \in \{1,0.75,0.5,0.25\}
α∈{1,0.75,0.5,0.25},输入分辨率为
{
224
,
192
,
160
,
128
}
\{224,192,160,128\}
{224,192,160,128}时,精度与计算量之间的关系
- MobileNet的性能稍低于VGG,但计算量减少32倍;性能优于GoogleNet,计算量减少3.2倍
- 与当前流行的小模型的比较结果
- 细粒度识别,在 Stanford Dogs Dataset 数据集上识别狗的种类的结果
- 大规模地理定位
- 人脸识别
- 目标检测
-
- Face Embedding
distillation的方法,使用 L2 来拟合 FaceNet 的效果。