轻量化网络—— MobileNet_v3【论文笔记】

     开始之前首先学习一个单词热热身:

     discernible [dɪˈsɜːnəbl]
     adj. 看得清的; 辨别得出的;

论文链接:https://arxiv.org/pdf/1905.02244.pdf


前言

     MobileNetV3,是谷歌在2019年3月21日提出的网络架构。作者提出MobileNetV3是基于互补搜索技术(complementary search technques)和新颖的网络结构设计的结合。摘要中说到用神经结构搜索(NAS)来完成V3,咱也不懂什么是NAS,暂且略过。。。

     先上实验结果,证明V3版本确实有所作为。可以看到,在同一大小的计算量下,V3在ImageNet上的结果都是最好的。


一、MobileNetV3的相关技术

0.网络的架构基于NAS实现的MnasNet(效果比MobileNetV2好)
1.引入MobileNetV1的深度可分离卷积
2.引入MobileNetV2的具有线性瓶颈的倒残差结构
3.引入基于squeeze and excitation结构的轻量级注意力模型(SE)
4.使用了一种新的激活函数h-swish(x)
5.网络结构搜索中,结合两种技术:资源受限的NAS(platform-aware NAS)与NetAdapt
6.修改了MobileNetV2网络端部最后阶段

     其中第0点,关于MnasNet也是基于NAS的,丝毫不懂,只要认为MnasNet是一个比MobileNet精度和实时性更高的模型就好了。

     其中第1点和第2点,已经在MobileNet前两个版本中学习过,不再赘述。

1.1 squeeze and excitation(SE)结构

     在Ghost 轻量化网络方法【论文笔记】中已经学习过SEblock结构,这里仅仅搬运一下。

     Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个结构快,可以嵌入到其他神经网络模型中。SEblock的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。

     SEblock的工作就是将上图中左边的X特征图经过一系列运算得到上图中右边彩色的,可将整个运算过程分为四步,接下来结合论文中的公式对这四个步骤做一个总结:

  1. Ftr:Ftr这一步是转换操作,实际上它并不属于SEblock,在原网络中这一步仅仅是一个标准的卷积操作而已;且后面可以看到在定义SqueezeExcite函数时没有这一步操作。
  2. Fsqx经过 Ftr得到UU为C个大小为H×W的特征层,而uc表示U中第c个二维矩阵特征层,下标c表示channel。接下来是Squeeze操作,也就是简单的一个global average pooling

所以 Fsq 操作将H×W×C的输入转换成1×1×C 的输出,这一步相当于获取C个特征层的数值分布情况,或者叫全局信息。

  1. Fex:这一步操作即是Excitation操作,计算过程将括号从里向外看。首先将第2步的结果Z乘以一个系数矩阵W1,这是一个简单的全连接层操作,W1的维度是C/r × C,这个r是一个缩放参数,目的是为了减少channel个数从而降低计算量

    z的维度是1×1×C,所以W1×z的结果就是1×1×C/r;然后再经过一个ReLU层,输出维度不变;然后再与W2相乘,这也是一个全连接层操作。W2的维度是 C×C/r,因此输出的维度是1×1×C;最后再经过sigmoid函数得到结果s。这两个全连接层的作用就是融合各通道的feature map信息。

  1. Fscale:第三步得到的结果s的维度是1×1×C。这个s其实是SEblock的核心,用它来刻画特征层U中的C个feature map的权重,而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。

    在得到s之后,就可以对原来的特征层U进行操作,即channel-wise multiplication。uc是一个二维矩阵,sc是一个数,也就是权重,因此相当于把uc矩阵中的每个值都乘以sc,故特征层U中的C个特征图都被一个权重系数相乘。

     经过以上四步后,将原始特征层X的每个通道分别乘以对应的权重系数,使得有效的特征图占比更大,无效或效果较小的特征图占比降低。整体来说仅仅是将特征图内的数值进行了调整,其大小及通道数均不发生改变。

1.2 激活函数 h-swish(x)

1.2.1 swish

     h-swish是基于swish的改进,首先学习下swish激活函数,该函数是在谷歌大脑2017的论文Searching for Activation functions所提出的。

     Swish论文的作者认为,Swish具备无上界有下界、平滑、非单调的特性。并且swish在深层模型上的效果优于ReLU。仅仅使用Swish单元替换ReLU就能把MobileNet、NASNetA在 ImageNet上的top-1分类准确率提高0.9%。

1.2.2 h-swish

     尽管swish可以提升模型精度,但是在MobileNetV3中并没有直接将ReLU替代为swish,作者解释Sigmoid激活函数在移动设备上计算时开销很大,毕竟此网络的设计宗旨还是要运行在移动设备或嵌入式设备中的,故作者通过两种方法来避免此问题。

  1. 可以用一个近似函数来逼急这个swish,从而避免Sigmoid的计算,使得swish变得硬(hard)。作者选择的是基于ReLU6,作者认为几乎所有的软件和硬件框架上都可以使用ReLU6的优化来逼近swish函数。

     下图是Sigmoid和swish的hard、soft形式,可以看到swish和h-swish几乎无缝拟合。

  1. 网络从输入到输出随着网络越来越深,特征图的分辨率也变得越来越小,所以随着网络的深入,应用非线性激活函数的成本会降低,能够更好的减少参数量。作者发现swish的大多数好处都是通过在更深的层中使用它们实现的。因此,在MobileNetV3的架构中,只在模型的后半部分使用h-swish(HS),前半部分仍然使用ReLU,具体可由之后的网络模型结构看到。

1.3 网络结构搜索NAS

     这个点完全Ctrl + C参考博客中的内容,图个新鲜看一看,这部分感觉也没什么会留下记忆的点。

     主要结合两种技术:资源受限的NAS(platform-aware NAS)与 NetAdapt。

     资源受限的NAS:用于在计算和参数量受限的前提下搜索网络来优化各个块(block),所以称之为模块级搜索(Block-wise Search);

     NetAdapt:用于对各个模块确定之后网络层的微调每一层的卷积核数量,所以称之为层级搜索(Layer-wise Search)。

     一旦通过体系结构搜索找到模型,我们就会发现最后一些层以及一些早期层计算代价比较高昂。于是作者决定对这些架构进行一些修改,以减少这些慢层(slow layers)的延迟,同时保持准确性。这些修改显然超出了当前搜索的范围。

1.4 对MobileNetV2最后阶段的修改

     作者认为,当前模型是基于V2模型中的倒残差结构和相应的变体。在MobileNetv2中,在avg pooling之前,存在一个1x1的卷积层,目的是提高特征图的维度,更有利于结构的预测,但是这其实带来了一定的计算量,所以这里作者对网络结构进行稍微的修改。

     将下图绿框中的1×1Conv / H-Swich放在avg pooling的后面,首先利用avg pooling将特征图大小由7x7降到了1x1,之后再利用1x1提高维度,并且为了进一步降低计算量,作者直接去掉了前面的深度可分离卷积的3x3以及1x1卷积,进一步减少了计算量,修改后的结构如下图第二行所示。

二、MobileNetV3结构

     有人总结讲:MobileNet V3 = MobileNet v2 + SE + hard-swish activation + half initial layers channel & last block do global average pooling first

2.1 MobileNet V3 block

2.2 MobileNetV3网络结构

     MobileNetV3定义了两个模型: MobileNetV3-Large和MobileNetV3-Small。V3-Large是针对高资源情况下的使用,相应的,V3-small是针对低资源情况下的使用。两者都是基于之前的简单讨论的NAS。

2.2.1 MobileNetV3-Large

2.2.1 MobileNetV3-Small

三、总结

     MobileNet三个版本的详细总结呈上,最后再列出三个版本的创新点以梳理清思路:

3.1 MobileNetV1

  1. 标准卷积改为深度可分离卷积;
  2. ReLU改为ReLU6
  3. 引入Width Multiplier(α)和Resolution Multiplier(ρ);

3.2 MobileNetV2

  1. 将深度可分离卷积中的1×1卷积后的ReLU替换成线性激活函数;
  2. 引入了Expansion layer,在进行深度分离卷积之前首先使用1×1卷积进行升维;
  3. 引入Shortcut结构,在升维的1×1卷积之前与深度可分离卷积中的1×1卷积之后进行shortcut连接;

3.3 MobileNetV3

  1. 引入基于squeeze and excitation结构的轻量级注意力模型(SE);
  2. 使用了一种新的激活函数h-swish(x);
  3. 网络结构搜索中,结合两种技术:资源受限的NAS(platform-aware NAS)与NetAdapt;
  4. 修改了MobileNetV2网络端部最后阶段;

参考博客

欢迎关注【OAOA

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值