MobileNet v2

原创: [email protected]
时间: 2020/08/10

0x00 Paper

0x01 为了解决什么问题

​ 设计更小更快的网络结构。

​ 深度卷积(Depthwise Convolution) 本身不能改变特征的通道数,并且通道数越少,在进行非线性**函数的时候,会丢失更多的信息。

MobileNet v2

​ 上图是作者展示用RELU**时,当channel越小,丢失的信息越多,当channel越大,丢失的信息越少。当channel为2时,信息都集中在这两个channel中,如果有部分数值小于0就会被RELU**丢失掉。而如果channel为30,其实信息是分散的,而且具有了冗余,所以通过RELU**后归于0的值可能并不会影响太多信息的存储。

​ 所以作者建议对于channel数很少的那些层做线性**。当通道数由少变多的时候,用ReLU**函数,当通道数由多变少的时候,做线性**。

​ bottlenect就表示瓶颈层,通道数由多变少,linear bottleneck表示对channel缩减的层做线性**。虚线的tensor后进行线性**。

MobileNet v2

​ a是普通卷积,b是深度分离卷积,c是有bottlenect的分离卷积,d是对bottlenect进行扩张后的分离卷积。同样最后一层虚线的tensor后面是线性**。

0x02 提出了哪些创新点

2.1 两个闪闪发光的点

  1. Linear Bottlenecks

    对通道数较少的使用线性**,为了提取更多的特征信息

  2. Inverted residual structure

    MobileNet v2

    a是正常的残差块,通道数先降维再升维,b是倒置的残差块,通道数先升维后降维。前者在特征提取的时候可能会丢失信息(通道数越少特征提取能力越弱),所以作者采用了后者的方法。同样,虚线tensor后面进行的是线性**。

  3. FLOPs=hwdt(d+k2+d)FLOPs = h* w*d'*t*(d' + k^2+d'')

    h*w为输入的尺寸大小,t是扩展因子,k是卷积核大小,d’ 是输入通道,d’’ 是输出通道

2.2 MobileNet V2 与 V1 之间的相同和不同点

MobileNet v2

  • 相同点

    都使用了 DSCNN,降低了网络的计算参数,具体详细请看上一篇博客 ☞ MobileNet V1 复古的直筒子结构

  • 不同点

    MobileNet V1 使用的是DW + PW 的直筒子结构。为什么说是直筒子呢?因为在 DW 的过程中,网络自身无法改变输入和输出的通道数,可以查看第一张图的图b,很形象了。因此如果传入的通道数较少,网络的特征提取能力就相对来说较弱。

    • 第一个不同点:

    ​ MobileNet V2 使用的是PW + DW + PW 结构,先升维,拉高通道数,后降维。因此无论传入的通道数是多还是少,都强行按照系数高

    • 第二个不同点:

    ​ MobileNet V2 在最后PW 之后,去掉了ReLU **函数,也就是使用了线性的Bottleneck。作者认为**函数在高维空间能够有效的增加非线性,而在低维空间时会破坏特征,不如线性的效果好。

2.3 ResNet 与 MobileNet V2 比对

MobileNet v2

  • 相同点

    1. 使用了1*1 --> 3*3 --> 1*1 的模式;

    2. 用Shortcut 将输出和输入相加

  • 不同点

    1. ResNet 使用标准卷积提取特征,而 MobileNet 使用 DW 卷积提取特征
    2. ResNet 先降维、卷积、再升维,MobileNet 先升维、DW、再降维

0x03 网络结构

MobileNet v2

当步长等于2的时候:

MobileNet v2

此处还有一些问题:

​ 1. 上面的bottleneck 总共加起来只有17层,而paper 中论述有19层;

​ 2. 还有同学跑出来的MobileNet V2 版本的推理速度比 V1 还慢,有待商榷 (代码未详读)

最终的效果比对:

MobileNet v2

0x04 参考链接