NetAdapt的思想巧妙且有效,将优化目标分为多个小目标,并且将实际指标引入到优化过程中,能够自动化产生一系列平台相关的简化网络,不仅搜索速度快,而且得到简化网络在准确率和时延上都于较好的表现



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

论文: NetAdapt: Platform-Aware Neural Network Adaptation for Mobile Applications

Introduction


  轻量化网络主要有两种方法,分别为结构优化以及人工量化,但是以上两种方法都不能保证网络能够在不同的设备上都有较优的表现,而且目前的方法大都以非直接指标(计算量/参数量)作为指导,往往与实际结果有出入。

  为此,论文提出平台相关的自动化网络简化方法NetAdapt,逻辑如图1所示,以迭代优化的方式慢慢获取满足预期资源消耗的网络。NetAdapt将资源直接指标引入优化过程,可同时支持多种资源约束,能够快速搜索平台相关的简化网络。

Methodology: NetAdapt


Problem Formulation

  NetAdapt主要目标是解决以下非凸约束优化问题:

  \(Net\)是从初始预训练网络简化得到的网络,\(Acc(\cdot)\)是准确率计算,\(Res_j (\cdot)\)是对资源\(j\)的消耗计算,\(Bud_j\)是资源\(j\)的总量,也是优化的约束条件,可以为时延、能耗、内存或其它。

  NetAdapt将上述优化目标分成多个小目标进行迭代优化:

  \(Net_i\)是第\(i\)次迭代产生的准确率最高的网络,\(Net_0\)是初始预训练模型。随着迭代次数的增加,网络的资源消耗会变得更少,\(\Delta R_{i,j}\)代表\(i\)次迭代中资源\(j\)的缩减量,整体的想法类似于学习率调度。当\(Res_j(Net_{i-1})-\Delta R_{i,j}=Bud_j\)满足所有资源时,算法终止,输出每一轮迭代优化中最优的网络,从中选择合适的网络。

Algorithm Overview

  假设当前优化目标只有时延,可采用减少卷积层或全连接层的核数量进行资料消耗的优化,NetAdapt的算法逻辑如Algorithm 1所示。

  图2是每次迭代的细节,逐层(也可以网络unit为单位)选择保留的核数量(Choose # of Filters)以及保留的核(Choose Which Filters),核数量的选择基于经验估计(后面会讲到),注意这里选择去除整个核而不是其中的一些权值,比如\(512\times 3\times 3\)的卷积核缩减为\(256\times 3\times 3\)的卷积核,去除核后要去除对应的特征图。每层的优化都产生一个简化后的网络,简化后的网络随后进行短时间fine-tune(Short-Term Fine-Tune)来恢复准确率。

  在上述操作完成后,NetAdapt单次迭代产生\(K\)个简化网络,选择其中准确率最高的网络作为下一轮迭代的初始网络(Pick Highest Accuracy)。若当前迭代的网络已满足资源要求时,退出优化并将每次迭代产生的最优网络fine-tune直到收敛(Long-Term Fine-Tune)。

Algorithm Details

  • Choose Number of Filters

  当前层选择的核数量基于经验估计来决定,逐步减少核数量并计算每个简化网络的资源消耗,选择能满足当前资源消耗约束的最大核数量。当减少当前层的核数量时,后一层的相关维度要对应修改,这个也要考虑到资源消耗计算中。

  • Choose Which Filters

  有很多方法来决定选择保留的核,论文采用简单magnitude-based方法,即选择\(N\)个L2-norm最大的核,\(N\)由上面的步骤决定。

  • Short-/Long-Term Fine-Tune

  在NetAdapt的每次迭代中,都使用相对较小的次数(short-term)fine-tune搜索到的简化网络来恢复准确率,这一步对于小网络而言相当重要。由于大量减少资源量,如果不这样做,网络的准确率可能会降为零,导致算法选择了错误的网络。随着算法的进行,虽然网络会持续训练,但还没到收敛的地步,所以当得到最后的一系列自适应网络后,使用较多的次数(long-term)fine-tune直到收敛作为最后一步。

Fast Resource Consumption Estimation

  在自适应的过程中,需要离线计算简化网络的资源消耗,这个计算可能会很慢并且由于设备有限难以并行,会成为算法的计算瓶颈。

  论文通过建立多个layer-wise look-up表格来解决上面提到的资源消耗计算问题,即前面提到的经验估计。每个表格预先计算对应层的在不同的输入维度和核数量下的资源消耗,注意相同输入大小和配置的层可以共用表格内容。在估算时,先找到对应的层的表格,通过累计layer-wise的资源消耗来估算network-wise资源消耗,逻辑如图3所示。

  图4对比了对MobileNetV1进行优化过程中估算的时延与实际时延,可以看到两个值是高度相关的。

Experiment Results


  对比NetAdapt与其它网络简化方法在小型MobileNetV1(50%)上的简化效果。

  在不同的设备上对比NetAdapt与其它网络简化方法在小型MobileNetV1(100%)上的简化效果。

Conclustion


  NetAdapt的思想巧妙且有效,将优化目标分为多个小目标,并且将实际指标引入到优化过程中,能够自动化产生一系列平台相关的简化网络,不仅搜索速度快,而且得到简化网络在准确率和时延上都于较好的表现。





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

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

NetAdapt:MobileNetV3用到的自动化网络简化方法 | ECCV 2018的更多相关文章

  1. 基于层级表达的高效网络搜索方法 | ICLR 2018

    论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构.论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习   来源:[晓飞的算法工程笔记] 公众号 ...

  2. dp88dp6最靠谱的网络赚钱方法

    (本文非原创,转载自http://mt.sohu.com/20160131/n436463696.shtml) 1.卖产品 最靠谱的当然是自己卖产品,可以先去淘宝.阿里巴巴.百度找到一款你认为有前景的 ...

  3. 在Wince模拟器接入网络的方法

    我第一次使用wince调用WCF服务的时候总是报错,找了半原因发现程序部署在模拟器中,而模拟器没有连接到网络,所以无法连接到WCF服务器. 以下是wince接入网络的方法:        1.点击模拟 ...

  4. [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)

    [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...

  5. ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...

  6. Windows win7下VMware Virtual Ethernet Adapter未识别网络解决方法

    win7下VMware Virtual Ethernet Adapter未识别网络解决方法[摘] by:授客 QQ:1033553122 问题描述 win7系统下安装VMware,查看网卡适配器设置, ...

  7. ARM开发板搭建NFS网络文件共享方法

    前边 已经提到过吧vmare的IP改成了静态IP,对于上网来说,这个是个麻烦的事.现在重新配置Vmware的IP VMware-Edit-Virtual network editor 选择PC机的无线 ...

  8. 图解Stm32使用jlink下载程序时jtag接口(SW和JTAG模式)的简化方法

    转自: http://www.it165.net/embed/html/201308/2332.html 用过stm32的人都知道stm32有两种常用下载程序的方法,用串口和jlink.串口下载方法和 ...

  9. 【每日一题】【list转int数组】【Lambda的简化-方法引用】2022年1月15日-NC45 实现二叉树先序,中序和后序遍历

    描述 给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点.   数据范围:0 \le n \le 10000≤n≤1000,树上每个节点的val值满足 0 \le val \le 1000≤ ...

  10. Keras网络可视化方法

    Keras网络可视化方法 Keras模型可视化 Keras可视化依赖的两个包 参考链接 Keras模型可视化 代码: from keras.utils import plot_model plot_m ...

随机推荐

  1. Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列

    写在开头 队列是Java中的一个集合接口,之前的文章已经讲解了List和Set,那么今天就来唠一唠它吧.队列的特点:存储的元素是有序的.可重复的. 队列的两大接口Queue vs Deque Queu ...

  2. 配置主机访问virtualbox中redhat7.3虚拟机网络(其他系统配置也类似)

    为什么默认无法访问? virtualbox默认分配一个NAT网络,这个是给虚拟机操作系统访问互联网用的,默认主机通过这个ip段无法直接访问虚拟机.[网卡1] 需要添加一块网卡 在虚拟机关闭状态下,点[ ...

  3. Vue+SpringBoot+ElementUI实战学生管理系统-10.学生管理模块

    1.章节介绍 前一篇介绍了教师管理模块,这一篇编写学生管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 学生列表 修改学生 4.模块 ...

  4. virtualbox中给redhat安装增强功能

    关于虚拟机中安装redhat请参考其他教程: 1.点击虚拟机菜单:设备--安装增强功能.... 2.ssh连接到redhat,执行以下操作: [root@rhel-server ~]# mount / ...

  5. 《系列一》-- 4、xml配置文件解析之[默认]命名空间[标签]的解析

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  6. deque双端队列

    # 支持从任意一端增加和删除元素 d = collections.deque() d.extend('abcdefg') d.append('h') d.extendleft(range(6)) # ...

  7. 浅谈errgroup的使用以及源码分析

    本文讲解的是golang.org/x/sync这个包中的errgroup 1.errgroup 的基础介绍 学习过 Go 的朋友都知道 Go 实现并发编程是比较容易的事情,只需要使用go关键字就可以开 ...

  8. 【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题

    问题描述 在Java应用中,使用 Lettuce 作为客户端SDK与Azure Redis 服务连接,当遇见连接断开后,长达15分钟才会重连.导致应用在长达15分的时间,持续报错Timeout 问题解 ...

  9. 网络流与各种建模(I)

    网络流与各种建模(I) 网络流基础 这里默认读者学习过网络流和MCMF,这里仅作复习 网络流解决的问题是给一个源点和汇点,每个边有最大流量,最大化从源点放水到汇点的速率. 网络流的时间复杂度是 \(O ...

  10. SyntaxError: invalid property id(就是不支持ES6) (浏览器不支持对象...展开)

    SyntaxError: invalid property id(就是不支持ES6) (浏览器不支持对象...展开) 火狐55以后支持