MobileNet系列很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with linear bottleneck单元,虽然层数变多了,但是整体网络准确率和速度都有提升,MobileNetV3则结合AutoML技术以及人工微调进行更轻量级的网络构建



来源:晓飞的算法工程笔记 公众号

MobileNetV1


论文: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

Introduction

  MobileNet基于深度可分离卷积构建了非常轻量且延迟小的模型,并且可以通过两个超参数来进一步控制模型的大小,该模型能够应用到终端设备中,具有很重要的实践意义。

Depthwise Separable Convolution

  假设标准卷积的输入和输出分别为$D_F\times D_F \times M$的特征图$\mathbb{F}$和$D_F \times D_F\times N$的特征图$\mathbb{G}$(假设特征图大小不变),卷积核大小为$D_K\times D_K\times M\times N$,则输出特征图的计算为:

  计算量为:

  计算量与输入维度$M$、输出维度$N$、卷积核大小$D_K$以及特征图大小$D_F$相关。

  MobileNet通过深度可分离卷积优进行计算量优化,将标准卷积转化为深度卷积和$1\times 1$pointwise卷积,每层后面都会接BN和ReLU。 深度卷积的每个输入维度对应一个卷积核,对于相同的输入,深度卷积的输出特征图计算为:

  $\hat{\mathbb{K}}$是大小为$D_K\times D_K\times M$的深度卷积核,$\hat{\mathbb{K}}$的$m_{th}$卷积核对应输入$\mathbb{F}$的$m_{th}$特征图和输出$\hat{\mathbb{G}}$的$m_{th}$特征图,深度卷积的计算量为:

  尽管深度卷积更高效,但没有很好地融合多个输入维度,所以需要额外层来对其输出进行线性组合,这里使用$1\times 1$pointwise卷积来生成新特征图,即深度可分离卷积,计算量为:

  深度可分离卷积和标准卷积的计算量缩放比为:

  MobileNet使用$3\times 3$的深度可分离卷积,所以大概会有8-9倍的计算量减少,准确率仅会有些许降低。

Network Structure and Training

  MobileNet的结构如表1所示,除第一层外其它均是深度可分离卷积,除了最后一层全连接层外每层都接BN和ReLU,总共28层。

  论文提到不能直接通过计算量来代表网络的高效性,还需要看操作的具体实现方法。如表2所示,MobileNet的大部分计算量和参数都在pointwise卷积上,不管在CPU设备还是GPU设备,都已经有很高效的实现方法。至于训练的设置,论文也有较详细的提及,有兴趣的可以去看看原文。

Width Multiplier: Thinner Models

  尽管MobileNet已经很轻量了,但还可以使用宽度缩放因子$\alpha$来进一步轻量化,将每层的输入输出维度变为$\alpha M$和$\alpha N$,缩放后的计算量变为:

  $\alpha \in (0,1]$,宽度缩放因子的计算量缩放比大约为$\alpha^2$,能够让用户根据任务对准确率和速度进行trade off。

Resolution Multiplier: Reduced Representation

  MobileNet还可以通过分辨率缩放因子$\rho$来缩放模型的大小,结合宽度缩放因子$\alpha$,缩放后的计算量为:

  $\rho \in (0, 1]$,分辨率缩放因子的计算量缩放比大约为$\rho^2$。

  论文也对深度可分离卷积、宽度缩放因子以及深度缩放因子的效果进行了对比。

Experiments

  MobileNet的实验做得挺详细的,在多种任务上进行性能对比,这里只列举了部分结果,具体的可以看原文,但比较遗憾的是没有贴推理耗时的对比结果。

  对比MobileNet的全卷积版本和深度可分离卷积版本。

  对比宽度缩放和直接去除最后5层$14\times 14\times 512$深度分离卷积的效果。

  对比不同宽度缩放因子的效果。

  对比不同分辨率缩放的效果。

CONCLUSION

  MobileNet运用深度可分离卷积进行轻量级网络的构建,在准确率没有大幅下降的情况下,能把参数量和计算量降低大约8倍,具有很重要的实践意义。

MobileNetV2


论文: MobileNetV2: Inverted Residuals and Linear Bottlenecks

Introduction

  MobileNetV2提出新的层单元inverted residual with linear bottleneck,该结构类似与残差网络单元,都包含shorcut,区别在于该结构是输入输出维度少,中间通过线性卷积先扩展升维,然后通过深度卷积进行特征提取,最后再映射降维,可以很好地保持网络性能且网络更加轻量。

Linear Bottlenecks

  神经网络的高维特征中的关键信息(manifold of interest)是分散分布的,实际可以用紧凑的低维特征进行表示,因此理论上可以通过降低层输出的维度来降低操作空间的维度。而论文认为,当层中存在非线性激活时,则可能会打破上面的理论,于是去除了低维特征的非线性操作,基于下面两点发现:

  • 根据ReLU的属性,若输出为非零,则相当于对该输入进行了线性变化,可认为部分输入空间进行了线性变化,而网络仅对这些非零输出进行后续处理。由于特征的关键信息一般经过ReLU后输出全是非0,因此可以认为ReLU对关键信息(低维特征)都进行了线性操作。

  • 论文将2维输入通过矩阵$T$线性升维至$d$,再通过ReLU进行非线性激活,最后使用矩阵$T^{-1}$恢复至2维。从可视化结果来看,维度越低,ReLU对输入的信息丢失越多。这表明,假设非线性操作的输入特征能够压缩成较低维特征时,需要输入特征有足够大的复杂度,非线性操作才能保留较完整的信息。

  假设层输出的关键信息可以通过低维特征进行表示,则可以使用线性bootleneck进行提取,结构如图2c所示,在深度卷积后接pointwise卷积进行降维,但在降维后不再使用非线性激活,仅对高维特征进行非线性激活。而图2d是结构c的前一部分,两者合起来构成一个完整的MobileNetV2 bottleneck,先通过pointwise卷积升维,然后深度卷积提取特征,最后再使用pointwise卷积进行降维,其中升维的比例称为expansion ratio。

Inverted residuals

  MobileNetV2的residual block与Resnet的residual block类似,重点是为了更好地回传梯度以及特征重用,区别在于MobileNetV2连接的是bottleneck特征,即维度较小的特征。如前面描述的,论文认为较低维的特征包含了所有的必须信息,而expansion layer仅是为了实现非线性变化的一个手段。

  residual block的操作以及输入输出如表1所示,尽管相对于MobileNetV1多了一个pointwise卷积,但这样的结构允许更少的输入输出维度。从表3的对比可以看出,MobileNetV2的内存使用更少。而expansion ratio的设置可以允许结构有很多种变化,设为0时就是identity mapping,设为大于1则是Resnet的residual block。

Model Architecture

  MobileNetV2 unit包含stride=1和stride=2两种。

  MobileNetV2的整体结构如表2所示,通过堆叠图4d的结构进行构建,首层使用普通的卷积层,另外也可以通过宽度缩放因子和分辨率缩放因子来进行准确率和时延之间的trade off。

Experiments

  论文对比MobileNetV2与其它网络在图像分类上的性能。

  论文对比MobileNetV2与其它网络在目标检测上的性能。

  论文对比MobileNetV2与其它网络在语义分割上的性能。

  另外论文对inverted residual with linear bottleneck的改进进行验证。

Conclusions

  MobileNetV2基于inverted residual with linear bottleneck进行轻量级网络构建,整体的结构都挺创新的,包括Inverted residuals以及expansion layer,linear Bottlenecks的分析也很有启发意义,到现在很多终端算法仍是以MobileNetV2作为主干网络。

MobileNetV3


论文: Searching for MobileNetV3

Introduction

  MobileNetV3基于AutoML构建,再人工微调对搜索结果进行优化,搜索方法使用了platform-aware NAS以及NetAdapt,分别用于全局搜索以及局部搜索,而人工微调则调整了网络前后几层的结构、bottleneck加入SE模块以及提出计算高效的h-swish非线性激活。

Network Search

  MobileNetV3首先使用MnasNet的platform-aware NAS进行每个block的层结构搜索,再将搜索结果按照预设的网络结构搭建起来,有兴趣的可以去看看公众号的讲解。platform-aware NAS主要是以准确率和实际时延的加权$ACC(m)\times [LAT(m)/TAR]^w$作为优化指标,逼近帕累托最优(准确率和时延分别不能再同时增加)。论文在实践时发现,对于小模型而言,时延的增加会导致精度急剧增大,因此需要增大$w=-0.07$为$w=-0.15$,加大对时延增加的惩罚。

  在完成初步的网络搜索后,论文使用NetAdapt进行逐层地调整 ,作为对MnasNet的搜索方法的补充,NetAdapt的具体步骤如下:

  1. 基于MnasNet搜房方法得到的种子网络作为开始。
  2. 生成新proposal集,每个proposal代表对种子网络的一种修改,必须能带来$\delta=0.01$倍的时延下降。
  3. 对于每个proposal,使用上一step的训练模型进行参数初始化,缺失的参数随机初始化,然后finetune $T=10000$轮得到大致的准确率。
  4. 根据指标选择最好的proposal。
  5. 迭代步骤234直到满足目标时延。

  原始的NetAdapt使用时延作为步骤4的指标,论文修改为准确率和时延的比值$\frac{\Delta Acc}{\mid \Delta latency \mid}$,这样能够达到很好的trade-off,$\Delta latency$依然需要满足步骤2,步骤2的proposal除了原来NetAdapt的修改卷积核操作外,还包含以下两种:

  • 减小任意expansion layer的大小
  • 减小所有相同大小的bottleneck的大小

Redesigning Expensive Layers

  在得到搜索结果后,论文发现通常网络的前后几层开销都相对较多,因此针对这几层进行了特定的修改。

  对最后几层的改造如图5,前置了avg pool,使得后续升至高维的操作能在$1\times 1$特征图上进行,而不是在$7\times 7$特征图上进行,节省了大量的时间。而由于avg pool前置这个操作已经节省了大量的计算量,也就不需要前一个bottleneck的DConv+pointwise conv操作(该操作为了从160维生成320维特征,避免直接从160维到1280维)来减轻计算量了,直接去除,进一步节省计算量,这样的改进大概能带来7毫秒(11%)的速度提升。

  对于前几层,一般的网络都使用32维$3\times 3$的卷积,论文认为这些卷积里面存在冗余,通过实验,将维度降维16维不影响准确率,带来2毫秒的速度提升,非线性激活使用了论文提出的hwish非线性激活,效果与其它函数差别不大。

Nonlinearities

  swish作为ReLU的替代品,能带来显著的准确率提升,swish的定义如下:

  由于swish包含了sigmoid函数,在移动设备上计算没有很好地优化。因此,论文将sigmoid替换成分段线性模拟$\frac{ReLU6(x+3)}{6}$,提出了改进版hwish:

  从图6的可视化结果来看,swish和h-swish的曲线十分接近。非线性操作在网络越深处的耗时会低(特征图大小减小一半),因此,仅在网络的后半段使用h-swish。

Large squeeze-and-excite

  MobileNetV3的bottleneck在V2的基础上加了SE模块,其中SE ratio固定为0.25。论文提到这里的实现与MansNet不太一样,固定为expansion layer的1/4,但我看来好像没什么区别,知道的朋友麻烦告知一下。

MobileNetV3 Definitions

  MobileNetV3分为MobileNetV3-Large和MobileNetV3-Small两个版本。

Experiments

  论文的实验很充分,这里只贴了部分任务的主要实验结果,其它可以查看原文。

  论文对比MobileNetV3与其它网络在图像分类上的性能。

  论文对比MobileNetV3与其它网络在目标检测上的性能。

Conclusion

  MobileNetV3首先使用AutoML方法获取到最优的网络结构,再通过人工的部分修改来达到最终的精度,虽然网络不是直接通过搜索得来的,但是实验的效果还是有的,里面的improvement也值得参考和借鉴。

Conclusion


  MobileNet系列是很重要的轻量级网络家族,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with linear bottleneck单元,虽然层数变多了,但是整体网络准确率和速度都有提升,MobileNetV3则结合AutoML技术以及人工微调进行更轻量级的网络构建





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

MobileNetV1/V2/V3简述 | 轻量级网络的更多相关文章

  1. ShuffleNetV1/V2简述 | 轻量级网络

    ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...

  2. SqueezeNet/SqueezeNext简述 | 轻量级网络

    SqueezeNet系列是比较早期且经典的轻量级网络,SqueezeNet使用Fire模块进行参数压缩,而SqueezeNext则在此基础上加入分离卷积进行改进.虽然SqueezeNet系列不如Mob ...

  3. 图像分类丨浅析轻量级网络「SqueezeNet、MobileNet、ShuffleNet」

    前言 深度卷积网络除了准确度,计算复杂度也是考虑的重要指标.本文列出了近年主流的轻量级网络,简单地阐述了它们的思想.由于本人水平有限,对这部分的理解还不够深入,还需要继续学习和完善. 最后我参考部分列 ...

  4. 轻量级网络 - PVANet & SuffleNet

    一. PVANet 论文:PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection    [点击下载] C ...

  5. ESPNet/ESPNetV2:空洞卷积金字塔 | 轻量级网络

    ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高.另外,HFF的 ...

  6. 『高性能模型』轻量级网络ShuffleNet_v1及v2

    项目实现:GitHub 参考博客:CNN模型之ShuffleNet v1论文:ShuffleNet: An Extremely Efficient Convolutional Neural Netwo ...

  7. 目标检测之YOLO V2 V3

    YOLO V2 YOLO V2是在YOLO的基础上,融合了其他一些网络结构的特性(比如:Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷积核等),进行的升级.其目的 ...

  8. 『高性能模型』轻量级网络MobileNet_v2

    论文地址:MobileNetV2: Inverted Residuals and Linear Bottlenecks 前文链接:『高性能模型』深度可分离卷积和MobileNet_v1 一.Mobil ...

  9. Feature Extractor[inception v2 v3]

    0 - 背景 在经过了inception v1的基础上,google的人员还是觉得有维度约间的空间,在<Rethinking the Inception Architecture for Com ...

随机推荐

  1. 2020/06/06 JavaScript高级程序设计 面向对象的程序设计

    ECMAScript虽然是一种面向对象的语言,但是他没有类的概念.所以他的对象也与其他语言中的对象有所不同. ECMA-262定义对象:一组没有特定顺序的值. 6.1 理解对象 创建对象的方法: 1. ...

  2. [转] Linux下用文件IO的方式操作GPIO(/sys/class/gpio)

    点击阅读原文 一.概述 通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户 ...

  3. 《大话数据库》-SQL语句执行时,底层究竟做了什么小动作?

    <大话数据库>-SQL语句执行时,底层究竟做了什么小动作? 前言 大家好,我是Taoye,试图用玩世不恭过的态度对待生活的Coder. 现如今我们已然进入了大数据时代,无论是业内还是业外的 ...

  4. 01.DRF-Web应用模式

    Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...

  5. CAS(乐观锁)与ABA问题

    cas是什么 CAS 全称 compare and swap 或者compare and exchange  比较并且交换.用于在没有锁的情况下,多个线程对同一个值的更新. cas原理 例如,我们对一 ...

  6. 这一次搞懂Spring事务注解的解析

    前言 事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑.但是Spring事务原理是怎样?事务在方法间是如何传播的?为 ...

  7. Oracle调优之看懂Oracle执行计划

    @ 目录 1.文章写作前言简介 2.什么是执行计划? 3.怎么查看执行计划? 4.查看真实执行计划 5.看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访 ...

  8. 测试人员遇到Android APP崩溃和无响应手足无措?

    这2天,在测APP兼容性时,遇到APP奔溃闪退的情况.将问题反馈给开发后,开发自己调试后,没有复现.由于又是远程,base地不在一块,我总不能把手机寄过去吧,那也太费事了. 所以就想到,提供明确的报错 ...

  9. 探索ADC的原理(自制3位并行比较型ADC)

    摘要 本文通过列举历史中出现的产品,梳理了模数转换器在20世纪30年代~~20世纪80年代末的发展历史.接下来,简要介绍模数转换器的原理.技术指标.分类和未来发展方向.最后,提供了一种自制3位FLAS ...

  10. 下订单更新订单表然后减少库存表中的数据,出现库存超卖,使用数据库和redis坚决库存超卖的问题

    上面的代码更新库存的数据,存在多线程的问题,第一种方法使用synchronized关键字修饰的语句块代码,但是性能较低,并且还是存在问题的 在分布式的场景下,当前库存系统部署在多个tomcat上,即使 ...