MobileNet_v2论文详读

原文地址:MobileNetV2

一. 前沿

论文介绍了一种新的轻量级网络——MobileNetV2,与其他的轻量级网络相比,它在多个任务上都达到了最先进的水平。我们介绍了一种将轻量级网络应用在目标检测中的模型SSDLite,另外我们展示了如何通过DeepLabv3的一种简化形式——Mobile DeepLabv3来构建移动语义分割模型。

MobileNetV2是基于倒置的残差结构,普通的残差结构是先经过 1x1 的卷积核把 feature map的通道数"压下来",然后经过 3x3 的卷积核,最后再用 1x1 的卷积核将通道数"扩张回去",即先压缩后扩张,而MobileNetV2的倒置残差结构是先扩张后压缩。另外,我们发现移除通道数很少的层做线性激活非常重要。

论文对模型在ImageNet分类、COCO目标检测和VOC图像分割的表现进行了度量,评估权衡了精度、乘加操作次数,实际延迟和参数的数量。

二. 相关工作

目前在算法结构探索进行的尝试包括:

  1. 超参数优化
  2. 网络压缩的各种方法,比如剪枝、量化等
  3. 连通性学习
  4. 将遗传算法和强化学习等方法应用到网络结构的设计中

三. 初步、讨论和直觉

3.1 深度级分离卷积

MobileNetV2是基于深度级可分离卷积构建的网络,它是将标准卷积拆分为了两个操作:深度卷积(depthwise convolution) 和 逐点卷积(pointwise convolution),Depthwise convolution和标准卷积不同,对于标准卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。而pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。

3.2 Liner Bottlenecks
在这里插入图片描述
乍一看,可通过减少层维度从而降低激活空间的维度。MobileNetv1就是通过宽度因子(width factor)在计算量和精度之间取折中,直到 manifold of interest 横跨整个空间。

当激活函数是ReLU时,神经网络的作用就相当于一个在输出域的非零部分的线性分类器;
在这里插入图片描述正如Figure1中所示,input是一条二维的螺旋线,我们先通过矩阵T将输入映射到n维,在这里 n = 2, 3, 5, 15, 30;然后再过ReLU函数,最后再通过矩阵T的转置矩阵映射回二维空间,我们可以看到当 n = 2或者3时中心点崩塌了,信息损失很严重,而 n = 15甚至更高时信息则保留的相对完整;原因在于当channel较小时,信息都集中在这几个channel中,如果有部分数值小于0就会被RELU激活丢失掉。而如果channel比较多时,其实信息是分散的,而且具有了冗余,所以通过RELU激活后归于0的值可能并不会影响太多信息的存储。这说明一个问题——在低维空间做非线性变换会损失掉很多信息,而当维度较高时可能就不会存在这种情况。
在这里插入图片描述
Figure2表示了卷积模块的演变史:
(a) 标准的卷积结构;
(b) MobileNetV1 中提出的深度级分离卷积,先做深度卷积,后做逐点卷积;
© 具有bottleneck的深度分离卷积,比b多了一个压缩步骤;
(d) 先对bottleneck进行扩张,然后再做深度分离卷积,虚线后面的激活函数都是线性激活,表示对通道数少的feature做卷积之后过的是线性函数。

3.3 Inverted residuals
在这里插入图片描述
(a) 是标准的残差模块,它有一个压缩的步骤,也称为 bottleneck 结构,目的是为了减少计算量;(b) 是倒置残差模块,先进行channel扩张,然后进行channel缩减,这是作者对残差block提出的一个改进;(b)和Figure2中的(d)结构就是有无shortcut连接的差别。

下图展示了MobileNet V1 和 V2的差别:
在这里插入图片描述

四. 模型结构

MobileNet v2的基本单元为Bottleneck residual block,其基本实现如 table 1 所示:
在这里插入图片描述整体结构如下 table 2 所示,MobileNetV2的第一层卷积是一个32个卷积核的标准卷积,接下来是19个残差瓶颈层。我们使用ReLU6作为非线性激活函数是由于其在低精度计算中更具有鲁棒性,同时使用 3 x 3 的卷积核作为标准卷积核的大小,在训练期间加入了dropout 和 BN。
在这里插入图片描述
权衡超参数

如同我们之前在MobileNetV1中一样,我们可以通过设置宽度因子和分辨率因子这两个超参来实际调整我们的模型,使得可以在模型的准确率与性能之间做一个折衷。当我们把宽度因子从0.35调整到1.4,输入分辨率由96调整到224,模型的计算量增加了7倍达到了 585M 次MAdds,模型的参数量由 1.7M 变化到了 6.9M。

五. 执行记录

5.1 内存高效推理

对于移动应用来说,倒置的残差瓶颈层允许特殊的内存高效执行是非常重要的,推断的高效执行的标准方法就是使用TensorFlow或者Caffe建立一个直接无环的计算图G,计算图的边表示具体操作,结点表示中间张量的计算;为了最小化需要存储的张量数量,计算是依次执行的。一般情况下,会搜索所有合理的计算顺序进而挑选出最小的那一个:
在这里插入图片描述
在这里插入图片描述

六. 实验

6.1 ImageNet分类

训练细节:我们使用的是TensorFlow框架,标准的RMSProp优化方法,并且将衰减率和动量都设置为0.9,在每一层后都是用批量归一化,标准的权重衰减率设置为0.00004,使用和V1中相同的初始学习率0.045,并将学习衰减率设置为0.98,16个GPU异步工作,一个batch size为96.
结果对比
我们比较MobileNetV1、ShuffleNet、NASNet-A与MobileNetV2模型的核心卷积单元:
在这里插入图片描述
性能、参数量和计算量对比如下:
在这里插入图片描述
MobileNetV2在不同宽度因子和分辨率因子下的对比如下:
在这里插入图片描述
在这里插入图片描述

七. 结论和未来的工作

我们描述了一种简单的网络架构,基于它可以建立非常高效的移动模型;我们的基本单元有几个属性使得非常适合用在移动应用上,一是它有非常高效的内存推理,二是它使用所用神经网络框架中的标准操作。
在理论方面我们提出了一种具有独特属性的卷积块,它可以从网络容量中分离除网络的表达,继续在这个方面探索是未来的一个重要研究。

源码解读

源码地址:https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet
源码解读:https://blog.csdn.net/stesha_chen/article/details/82744320

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值