NetAdapt:MobileNetV3用到的自动化网络简化方法 | ECCV 2018
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的更多相关文章
- 基于层级表达的高效网络搜索方法 | ICLR 2018
论文基于层级表达提出高效的进化算法来进行神经网络结构搜索,通过层层堆叠来构建强大的卷积结构.论文的搜索方法简单,从实验结果看来,达到很不错的准确率,值得学习 来源:[晓飞的算法工程笔记] 公众号 ...
- dp88dp6最靠谱的网络赚钱方法
(本文非原创,转载自http://mt.sohu.com/20160131/n436463696.shtml) 1.卖产品 最靠谱的当然是自己卖产品,可以先去淘宝.阿里巴巴.百度找到一款你认为有前景的 ...
- 在Wince模拟器接入网络的方法
我第一次使用wince调用WCF服务的时候总是报错,找了半原因发现程序部署在模拟器中,而模拟器没有连接到网络,所以无法连接到WCF服务器. 以下是wince接入网络的方法: 1.点击模拟 ...
- [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...
- ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解
全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...
- Windows win7下VMware Virtual Ethernet Adapter未识别网络解决方法
win7下VMware Virtual Ethernet Adapter未识别网络解决方法[摘] by:授客 QQ:1033553122 问题描述 win7系统下安装VMware,查看网卡适配器设置, ...
- ARM开发板搭建NFS网络文件共享方法
前边 已经提到过吧vmare的IP改成了静态IP,对于上网来说,这个是个麻烦的事.现在重新配置Vmware的IP VMware-Edit-Virtual network editor 选择PC机的无线 ...
- 图解Stm32使用jlink下载程序时jtag接口(SW和JTAG模式)的简化方法
转自: http://www.it165.net/embed/html/201308/2332.html 用过stm32的人都知道stm32有两种常用下载程序的方法,用串口和jlink.串口下载方法和 ...
- 【每日一题】【list转int数组】【Lambda的简化-方法引用】2022年1月15日-NC45 实现二叉树先序,中序和后序遍历
描述 给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点. 数据范围:0 \le n \le 10000≤n≤1000,树上每个节点的val值满足 0 \le val \le 1000≤ ...
- Keras网络可视化方法
Keras网络可视化方法 Keras模型可视化 Keras可视化依赖的两个包 参考链接 Keras模型可视化 代码: from keras.utils import plot_model plot_m ...
随机推荐
- VUE2的前端学习笔记
名词笔记 Node node.js 是一切的基础, 其他的名词都是基于这个运行的, 相当于一个JavaScript的容器或者虚机 NPM 安装node.js时赠送的包管理器, 类似于apt, yum, ...
- image could not be accessed on a registry to record its digest
问题说明: 在管理节点执行docker stack xxx 方式运行服务,报如题错误. 问题原因: docker swarm运行需要一个镜像仓库才行,所有节点都去这个仓库统一镜像. 来看下官方的解释: ...
- pta-神坛
[神坛]pta *相邻两条边围成的三角形面积会是最小的 极角排序+叉积计算三角形面积 #include<bits/stdc++.h> #define int long long using ...
- windbg 学习
常用的 windbg 命令 .ecxr 用来切换到异常发生时的上下文,主要用在分析静态 dump 文件的时候.当我们使用 .reload 命令去强制加载库的 pdb 文件后,需要执行 .ecxr 命令 ...
- 记录级别索引:Hudi 针对大型数据集的超快索引
介绍 索引是一个关键组件,有助于 Hudi 写入端快速更新和删除,并且它在提高查询执行方面也发挥着关键作用. Hudi提供了多种索引类型,包括全局变化的Bloom索引和Simple索引.利用HBase ...
- 搜索引擎RAG召回效果评测MTEB介绍与使用入门
RAG 评测数据集建设尚处于初期阶段,缺乏针对特定领域和场景的专业数据集.市面上常见的 MS-Marco 和 BEIR 数据集覆盖范围有限,且在实际使用场景中效果可能与评测表现不符.目前最权威的检索榜 ...
- timeit测试函数执行时间
def list_append(): l = [] for i in range(5000): l.append(i) def list_insert(): l = [] for i in range ...
- 【LeetCode动态规划#17】知道秘密的人,维护多个dp数组
知道秘密的人数 在第 1 天,有一个人发现了一个秘密. 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密.同时给你一个整数 forget ,表 ...
- 【LeetCode动态规划#01】动规入门:求斐波那契数 + 爬楼梯 + 最小代价爬楼梯(熟悉解题方法论)
斐波那契数 力扣题目链接(opens new window) 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就 ...
- C++ STL之 map 学习笔记
•何为 map? map 是 STL 的一个关联容器,它提供一对一的数据处理,map 中存放的是一个 key-value键值对,其类型可以自己定义: 第一个可以称为关键字,每个关键字在 map 中只能 ...