1. 摘要

基于网络架构搜索和 NetAdapt 算法,作者提出了新一代的 MobileNets,并通过一些先进的结构对其进行了改进。

作者发布了两个模型 MobileNetV3-Large 和 MobileNetV3-Small 分别应用于资源较多和较少的场景,这些模型也可以被调整并应用到目标检测和语义分割等其它领域。

2. 高效的网络构建块

MobileNetV1 引入了深度可分离卷积作为传统卷积的有效替代,MobileNetV2 引入了线性瓶颈和反转残差结构来构建更加高效的网络层,MnasNet 在 MobileNetV2 的基础上基于 SENet 的思想在瓶颈结构中引入了轻量级的注意力机制。

MobileNetV3 结合了上面这些结构块来构建最高效的模型,除此之外,作者还对 swish 作了改进来作为网络中的激活函数。

作者将注意力模块放在了扩展层的深度卷积后面,此外每一层的非线性激活函数也不一定相同。

3. 网络搜索

网络搜索技术已经是一个用来发现和优化网络架构的强有力工具。针对 MobileNetV3,作者先利用 NAS 优化每个网络块来搜索全局的网络架构,然后再利用 NetAdapt 算法来按顺序微调每一个单独的层。

4. 网络改进

4.1. 重新设计代价比较大的层

通过网络搜索得到模型后,作者观察到网络中一些前面和后面的层比其余的层计算代价更高,因此,作者提出了一些改进来在减少时延的同时保持准确率。

当前基于 MobileNetV2 的变种网络都在最后用一个 1×1 的卷积来扩展到一个高维空间(比如通道数为 1280)用于预测最后的分类。这个操作一般是在池化之前,比如是应用到一个空间大小为 7×7 的特征图上,现在作者将这个 1×1 的卷积放到了池化层后面,这样特征图的空间大小就变成了 1×1,可以大大减少计算量和时延。

一旦这个层被迁移到池化层后面,那么其前面一个瓶颈结构的投影层也就没有必要再存在来降低计算量了,所以作者移除了前面的特征提取层和投影层,来进一步降低计算复杂性。

可以看到,原始最后阶段的 960-960 深度卷积特征提取层和 960-320 的投影层被移除了。

另一个计算代价比较高的层是一开始的卷积层,现在的移动端网络一般都采用 3×3 的卷积,卷积核个数为 32。作者发现这个层采用 hard swish 激活函数和其它激活函数效果一样好,并将卷积核个数减少到了 16 个。

4.2. 非线性激活函数

最近提出了一个称之为 swish 的激活函数用来作为 ReLU 的替代品,其可以显著提高网络的准确性。

\[swish \space x = x \cdot \sigma(x)\]

虽然这个激活函数可以提高准确率,但在移动设备上 sigmoid 函数计算代价是很高的,所以作者对它进行了两个方面的改进。

  • 用分段线性的函数来硬模拟 sigmoid;
    \[hard-swish[x]=x\frac{ReLU6(x+3)}{6}\]

这样做在实际中有三个好处:ReLU6在几乎所有的软件和硬件上都可以实现;在量化模式下,可以消除 sigmoid 带来的潜在数值精度损失;hard-swish 可以用分段线性函数来实现减少导致时延的内存访问次数。

  • 将 swish 应用在较深的网络层就可以带来大部分好处,因此作者只在网络的后半段应用它们;

4.3 大的 squeeze-and-excite 层

这里 SE 层的中间通道数作者设置为扩展层通道数的四分之一,这样做可以在适当增加参数量的情况下提升准确率,对时延没有明确影响。

4.4 网络结构

exp size 表示扩展层的通道数,#out 表示输出通道数,SE 表示是否有 squeeze-and-excite 层,NL 代表激活函数为 ReLU 或者 Hard-Swish,s 表示步长。上面是 MobileNetV3-Large 的结构,下面是 MobileNetV3-Small 的结构。

5. 实验结果

在 Pixel 系列手机上性能对比如下所示:

同样地,我们也可以用宽度乘子和分辨率乘子进一步调整网络大小:

采用不同的激活函数结果对比如下:

获取更多精彩,请关注「seniusen」!

Searching for MobileNetV3的更多相关文章

  1. 深度学习论文翻译解析(十九):Searching for MobileNetV3

    论文标题:Searching for MobileNetV3 论文作者:Andrew Howard, Mark Sandler, Grace Chu, Liang-Chieh Chen, Bo Che ...

  2. (转载) AutoML 与轻量模型大列表

    作者:guan-yuan 项目地址:awesome-AutoML-and-Lightweight-Models 博客地址:http://www.lib4dev.in/info/guan-yuan/aw ...

  3. (转)AutoML 与轻量模型大列表: awesome-AutoML-and-Lightweight-Models

    Awesome-AutoML-and-Lightweight-Models 原文:http://bbs.cvmart.net/articles/414/zi-yuan-automl-yu-qing-l ...

  4. 神经网络模型(Backbone)

    自己搭建神经网络时,一般都采用已有的网络模型,在其基础上进行修改.从2012年的AlexNet出现,如今已经出现许多优秀的网络模型,如下图所示. 主要有三个发展方向: Deeper:网络层数更深,代表 ...

  5. 自动网络搜索(NAS)在语义分割上的应用(二)

    前言: 本文将介绍如何基于ProxylessNAS搜索semantic segmentation模型,最终搜索得到的模型结构可在CPU上达到36 fps的测试结果,展示自动网络搜索(NAS)在语义分割 ...

  6. MobileNetV1/V2/V3简述 | 轻量级网络

    MobileNet系列很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积来构建轻量级网络,MobileNetV2提出创新的inverted residual with line ...

  7. CNN结构演变总结(二)轻量化模型

    CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...

  8. 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)

    完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...

  9. Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)

    题目大意 我们说一个无向图是 p-interesting 当且仅当这个无向图满足如下条件: 1. 该图恰有 2 * n + p 条边 2. 该图没有自环和重边 3. 该图的任意一个包含 k 个节点的子 ...

随机推荐

  1. 为SourceInsight添加多行注释功能菜单

    由于项目看代码主要使用的是Source Insight,习惯了其他编辑器的多行注释功能,对此感到很不习惯,查询网上程序,可以自行添加. 1.打开project,选择base项目中的utils.em,添 ...

  2. vscode常用插件列表

    vscode插件 备注 Markdown PDF 把markdown文件转换成别的文件 Markdown TOC markdown文件目录生成 PHP Debug PHP调试 PHP Intenlli ...

  3. monkey基础使用教程,如何安装和monkey分析日志

    1.概念 什么是monkey,monkey的作用是什么? Monkey是Android自身提供的,可以通过adb shell模拟用户行为,发送一些伪随机用户事件到目标设备上. Monkey和它的直接意 ...

  4. javaweb中的标签的核心标签库的常用标签

    //标签的使用使得页面的代码更加简洁,jsp脚本的尽可能少的使用,所以熟练掌握标签对于开发是很有必要的 <%--set设置数据,默认在page域 --%> <c:set var=&q ...

  5. git配置ssh秘钥(公钥以及私钥)linux

    本文默认已经安装git,并有github或者gitlab账号 git在linux下安装参考:https://www.cnblogs.com/lz0925/p/10791147.html 在Linux中 ...

  6. shell脚本中的日期处理

    Ps:这篇文章只是为了做个分类,以后有看到比较好的时间处理命令都会列在这里,您如果有什么好的时间处理命令,可以评论中添加,我会定期查看更新,谢谢! 1.定义一个参数DATE_TODAY,用于记录当天时 ...

  7. C++ GB2312 和 utf8 在win32下 互转

    string ANSItoUTF8(const char* strAnsi) { //获取转换为宽字节后需要的缓冲区大小,创建宽字节缓冲区,936为简体中文GB2312代码页 , NULL, NULL ...

  8. windows电脑上安装虚拟机

    1.搭建虚拟机环境 1)先安装VMware10,在本机上双击VMware10.exe,安装过程要用密钥,双击VM10KeyGen.exe会生成密钥,输入就可以了 2)在VMware中新建虚拟机,加载系 ...

  9. anaconda安装失败

    2019.10版本怎么安装都不行换了2018.10安装ok

  10. HDU - 6589 Sequence (生成函数+NTT)

    题目链接 设序列a的生成函数$\large f(x)=\sum\limits_{i=0}^{n-1}a_ix^i$,则操作1,2,3分别对应将$f(x)$乘上$\Large\frac{1}{1-x}, ...