MobileNet是用在移动端的轻量级CNN,本文简单介绍MobileNet V1到V3的版本。


MobileNet V1


  • 主要特点:把卷积拆分为Depthwise和Pointwise两部分(深度可分离卷积Separable convolution),用步长为2的卷积代替池化。
  • Depthwise和Pointwise图解:

MobileNet系列_.net

假设有 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​

MobileNet系列_激活函数_02

  • 进一步压缩模型:引入了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。作者认为激活函数在高维空间能够有效地增加非线性,但在地位空间会破坏特征。


MobileNet系列_ide_03



与残差模块的对比:
MobileNet系列_卷积_04



V2网络结构:



MobileNet系列_html_05

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即提高了精度,同时还没有增加时间消耗。

MobileNet系列_卷积_06

  • 尾部修改:

MobileNet系列_卷积_07

  • 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)

MobileNet系列_.net_08


  • v2头部卷积为32x3x3,作者发现可以改为16,保证了精度且降低了延时时间。
  • 网络结构搜索,借鉴了MansNet和NetAdapt,这部分以后再详细补充。
  • 网络结构:

MobileNet系列_ide_09

MobileNet系列_激活函数_10