MobileNet是用在移动端的轻量级CNN,本文简单介绍MobileNet V1到V3的版本。
MobileNet V1
- 主要特点:把卷积拆分为Depthwise和Pointwise两部分(深度可分离卷积Separable convolution),用步长为2的卷积代替池化。
- Depthwise和Pointwise图解:
假设有 N × H × W × C N \times H \times W \times C N×H×W×C的输入,普通卷积是做 k k k个3x3的卷积,且same padding, s t r i d e = 1 stride=1 stride=1,输出为 N × H × W × k N \times H \times W \times k N×H×W×k。depthwise是将此输入分为 g r o u p = C group=C group=C组,然后每组做一次卷积,相当于收集了每个channel的特征,输出依然是 N × H × W × C N \times H \times W \times C N×H×W×C。pointwise是做 k k k个普通的1x1卷积,相当于收集了每个点的特征。depthwise+pointwise的输出也为 N × H × W × k N \times H \times W \times k N×H×W×k。
- 普通卷积和MobileNet卷积对比如下图所示。计算一下两者的参数量:
- 普通卷积为:
C
×
k
×
3
×
3
C \times k \times 3 \times 3
C×k×3×3
- depthwise+pointwise:
C
×
3
×
3
+
C
×
k
×
1
×
1
C \times 3 \times 3 + C \times k \times 1 \times 1
C×3×3+C×k×1×1
- 压缩率为
d
e
p
t
h
w
i
s
e
+
p
o
i
n
t
w
i
s
e
c
o
n
v
=
1
k
+
1
3
×
3
\frac{depthwise+pointwise}{conv}=\frac{1}{k} + \frac{1}{3 \times 3}
convdepthwise+pointwise=k1+3×31
- 进一步压缩模型:引入了width multiplier,所有通道数乘以 α ∈ ( 0 , 1 ] \alpha \in (0,1] α∈(0,1](四舍五入),以降低模型的宽度。
MobileNet V2
- 主要特点:引入残差结构;采用linear bottenecks + inverted residual结构,先升维后降维;使用relu6(最大输出为6)激活函数,使模型在低精度计算下有更强的鲁棒性。
- linear bottenecks + inverted residual结构如下图所示。
- V2版本依然是使用depthwise和pointwise,不同的是在depthwise前加了一个1x1卷积来扩大通道数目扩张系数为 t t t,即通道数目扩大 t t t倍,以增加特征丰富性。在pointwise之后再加1x1卷积将通道数目压缩至原输入的数目。
- V2版本去掉了第二个1x1卷积之后的激活函数,称为linear bottleneck。作者认为激活函数在高维空间能够有效地增加非线性,但在地位空间会破坏特征。
与残差模块的对比:
V2网络结构:
MobileNet V3
- 主要特点:引入SE(squeeze and excitation)结构;使用hard swish激活函数;头部卷积通道数量由32变为16;V2在预测部分使用了一个bottleneck结构来提取特征,而V3用两个1x1代替了这个操作;结构用NAS技术生成
- SE轻量级注意力结构,如下图所示。在depthwise后加入SE模块,首先globalpool,然后1x1卷积将其通道压缩为原来的1/4,然后再1x1卷积扩回去,再乘以SE的输入。SE即提高了精度,同时还没有增加时间消耗。
- 尾部修改:
- hard swish激活函数如下所示。swish激活函数可以提高精度,但计算量比较大,作者用relu近似模拟,称为hard swish
s w i c h x = x ⋅ σ ( x ) h − s w i s h [ x ] = x R e L U 6 ( x + 3 ) 6 \Bbb{swich} x=x \cdot \sigma(x) \\ \Bbb{h-swish}[x]=x\frac{ReLU6(x+3)}{6} swichx=x⋅σ(x)h−swish[x]=x6ReLU6(x+3)
- v2头部卷积为32x3x3,作者发现可以改为16,保证了精度且降低了延时时间。
- 网络结构搜索,借鉴了MansNet和NetAdapt,这部分以后再详细补充。
- 网络结构: