AttoNets,一种新型的更快、更高效边缘计算神经网络
作者 | Alexander Wong, Zhong Qiu Lin, and Brendan Chwyl
译者 | Rachel
出品 | AI科技大本营(ID:rgznai100)
尽管机器学习已经在很多复杂的任务中取得了进展,但现有模型仍然面临许多边缘计算实践的困难,这些边缘计算场景包括移动设备、消费设备、无人机和车辆。现有针对低功率边缘设备的深度神经网络设计主要包括两种方法:一是通过网络设计原则手工调整,二是自动进行的网络架构搜索。
在本研究中,作者进一步探索了人机结合的深度神经网络设计方法,该方法结合了基于规则的网络设计原型开发以及机器驱动的网络设计研究。本文提出了一种新的神经网络 AttoNets ,该网络类型能够基于设备进行高效的边缘深度学习。AttoNets 基于人为规定的设计要求搭建网络,其包含一个由定制模块构成的人工设计的网络级宏观架构,由机器设计的模块层级的宏观架构以及微观架构。
在物体检测中的实验结果表明, 在使用更少的参数以及更低的计算花销的情况下,AttoNets 的效率与现有最优模型相当,并在准确率指标上大幅超越现有模型(与 MobileNet-V1相比,最小的 AttoNet 的准确率提升约 1.8%,使用的乘-加操作数和参数量减小了10倍)。另外,本文也在实例分割和物体探测应用中检测了 AttoNets 的效果,并发现与基于 ResNet-50 的 Mask R-Cnn 相比,通过使用基于 AttoNet的 Mask R-Cnn 网络,参数量和计算花销得到了大幅度降低(乘-加操作减少5倍,参数量减少2倍)。
1 介绍
随着深度学习的不断发展,现有模型在许多复杂任务中都实现了非常好的效果,尤其是视觉感知领域,具有代表性的应用包括图片分类、物体检测和图片分割。尽管如此,随着网络复杂度的不断升高,网络在应用和实践领域也遇到了更多挑战,例如在基于设备的边缘计算场景中,包括算力、存储、贷款、能源在内的资源都非常稀缺。因此,很多研究都开始尝试设计小规模的深度神经网络,以适应低功率边缘设备的需求。
现有研究主要关注如何通过多种方法来搭建更加高效的深度神经网络。第一种方法是首先设计一个复杂但效果很好但深度神经网络,之后再对模型进行精确的缩减。这种方法的问题在于,研究人员需要在精确度和准确度之间进行非常多的权衡,并且需要特别设计缩减模型的方法,以提升模型在目标处理器上的运行效率。另一种类似的方法是,研究者在设计初始的复杂网络之后,通过使用传统的数据压缩方法对模型进行压缩,例如通过教师-学生网络设计策略产生规模较小的学生网络。
第二种主要的方法则通过引入架构设计规则来获得更加高效的神经网络架构。例如,有学者通过在特定卷积层前后各引入一个新的卷积层创建瓶颈结构,以降低该卷积层输入和输出的维度。
最近出现的第三种方法则通过全自动的网络架构搜索来寻找能够在边缘设备中运行的高效深度神经网络,这一方法的代表性成果包括 MONAS 和 ParetoNASH 。这一方法将神经网络搜索看多一个多目标优化问题,优化目标包括模型规模、准确率,并使用强化学习和演化学习算法进行优化。
可以发现,目前的现有方法主要包括两种思路:(1)基于设计原则手工设计网络;(2)使用全自动的网络架构搜索。在本研究中,作者对人机结合的深度神经网络设计方法进行了探索,将人工驱动的基于规则的神经网络设计原型开发以及机器驱动的设计探索相结合,充分利用了人类的经验、创造性以及机器的速度和严谨性。通过该方法,本文提出使用 AttoNets 这一新的高效的边缘深度学习网络。
本文的结构如下。第二部分详细介绍了人机结合的、基于边缘和移动场景的高效神经网络的设计方法。第三部分对基于此方法设计的 AttoNets 进行了介绍,重点介绍了模块层级的微结构及其设计。第四部分展示了 AttoNets 在物体识别、实例分割和物体探测任务中的实验结构并进行讨论,第五部分则列出了本文的结论。
2 方法
本文所提出的人机结合的深度神经网络设计策略主要包含两个阶段:i)基于规则的网络设计原型开发,ii)机器驱动的设计探索。首先,本文作者基于设计原则对网络级的宏观架构进行设计,并搭建一个人为设定的针对视觉领域的初始设计原型。之后,作者通过机器驱动的设计探索,基于人为设定的初始原型以及人为规定的设计要求对模块级别的宏观结构以及微观结构设计进行开发,并产生一系列备选的好笑深度神经网络模型。通过对两个阶段进行平衡,使用者能够在设计约束和要求的规定下获得针对神经网络架构的创造性解决方案。
2.1 基于规则的网络设计原型开发
由于已有研究已经针对模型的效率进行了大量的探索,本文作者在这一阶段将主要关注点集中在如何使用更广泛的网络层级宏观架构来提升模型效果。尽管这一目标似乎与提升模型效率相违背,但作者认为,机器更善于通过降低模型规模来提升效率,因此提升模型效率的工作将主要在第二阶段由机器驱动的方法完成。
在本文中,作者使用了两个已有文献中提到的在视觉领域的人工驱动的设计原则,这两个原则主要针对视觉领域中物体识别的任务提出,并主要关注如何设计高效的深度神经网络。在物体识别任务中,模型需要判断给定场景所包含的一系列对象所属的种类。针对该任务,作者使用的第一个网络设计模型原则为大幅增加网络的深度,该原则在许多已有研究中已经进行了详细阐述。这一原则是的模型能够对更深层次的特征嵌入进行学习。
这一原则的一大问题在于,当模型过深时,模型训练江边的非常困难。为了解决这一问题并提高模型的准确率,作者湿了了第二个设计原则,即在网络中增加捷径连接(shortcut connections)。通过在残差架构中增加捷径,即使在深层的网络中,包括随机梯度下降在内的迭代优化方法也将更加有效。
通过使用上述两个设计原则,人工驱动的初始设计原型能够通过模块设计提供一个深层卷积神经网络的架构,网络中间的表示层被放置在网络模块当中,且模块中包含捷径结构。基于已有研究,作者将初始设计原型的模块数量设定为16,使得后续机器驱动的网络设计能够具有较大的灵活性。在中间表示层之后,作者添加了一个平均池化层,之后是一个全连接层。
最后,作者添加了一个 softmax 层来得到输入图片所属的类别。图1展示了人工驱动的初始设计原型。正如在之前提到的,实际的宏观结构和微观结构设计都将由机器驱动的方法来完成。
图1 人工驱动的初始设计原型
2.2 机器驱动的设计探索
这一步中,作者基于人工设计的初始原型、数据和任务目标,通过机器驱动的方法,对模块级别的宏观架构和微观架构设计进行了探索。通过这一步骤,作者得到了一系列备选的高效的神经网络。另外,作者在此步骤中也考虑了人为设置的设计要求和约束,使得机器驱动的设计所得到的深度神经网络能够适用于边缘和移动场景下基于设备的物体识别任务。
在本研究中,作者通过细粒度的生成性综合体(generative synthesis)来完成了机器驱动的设计探索过程。生成性综合体的高度灵活性使得其非常适用于人机结合的高效深度神经网络设计。
生成性综合体的概念可以简单概括如下。其目标为学习一个生成器 G ,该生成器能够基于种子集合 S 生成深度神经网络,该过程通过最大化一个全局效果函数 U 实现,并能够满足指示函数 1r(·) 所定义的定量要求。公式如下:
通过对上述公式进行迭代优化,作者得到了一系列满足指示函数的生成器,并进一步利用这些生成器构造了一系列高效深度神经网络,这些神经网络均满足约束要求,仅在模型准确率和效率间的权衡上存在差异。
在本文中,作者依据已有研究的方法定义了效果函数 U ,使得该函数能够同时衡量模型效果、计算复杂性以及架构复杂性。另外,作者将指示函数设置为在 ImageNet50 上的最高验证准确率不低于 65% ,以使得本文所得到的网络的效果不低于包括 MobileNet-V1 和 ShuffleNet-V2在内的目前最优模型。
3 AttoNet 架构设计
在本部分钟,作者首先描述了机器驱动设计探索阶段所得到的模块级宏观架构的设计情况,之后详细介绍了基于本文方法得到的四种 AttoNets 网络的细节。
3.1 模块层级的微架构
图2展示了两个基于本文方法得到的模块级宏观架构设计。这两种类型的主要差别在于,B 类型在捷径中包含了一个额外的 1*1 的卷积层,并在卷积层中增加了 stride 。如表1所示,在模型所生成的网络中,每一个模块的宏观架构设计都不尽相同。下文展示了结构中所包含的一些有趣的现象。
图2 两个模块级的宏观架构设计示例
逐点压缩。 两个网络都在第一个构件中使用了一个包含 1*1 的卷积核的压缩层。这种结构能够有效降低输入到下一层的维度,使得网络架构和计算的复杂性都大幅减少。
使用包含 stride 的卷积组。 两个网络都在压缩层后使用了多组 3*3 的卷积核。通过使用卷积组而非单个卷积层,网络能够将压缩层的输出特征划分为更小的组并进行独立的处理,因此能够进一步降低计算和架构的复杂度。特别的,第二种网络在卷积组中包含了 stride ,而第一组网络没有使用,stride 的使用能够进一步降低复杂度。
背靠背的逐点卷积。 两个网络结构都使用多个了背靠背的 1*1 卷积层,其中第一个 1*1 的卷进层能够将卷积组中的信息相结合,第二个 1*1 卷积层则作为解压缩层,恢复模块所对应的输出维度。因此,这一方式能够使得网络在复杂度降低的情况下仍然保持甚至提升其效果。
3.2 创建 AttoNet网络架构
作者依据本文方法创建的4个 AttoNet 网络的情况如表1所示。与之前的边缘计算网络不同, AttoNets 包含了一个69层的深度卷积神经网络架构。通过观察 AttoNets 网络的结构,作者得到了如下有趣的发现。第一,不同网络间的微架构存在很大差异。第二,架构的整体复杂度从 AttoNet-A 到 AttoNet-D 逐渐降低,与本文中的机器驱动的设计探索阶段所采用的策略一致。第三,网络内部同样存在微观架构和宏观架构的差异。网络间和网络内部架构的多样性仅能通过细粒度的机器驱动的设计探索来实现。
(注:由于表1过长,请到原论文中查看。)
4 结果与讨论
本文在i)物体识别和ii)实体分割与物体探测这两个任务中对 AttoNets 的效果进行了评估,这两个任务是边缘和移动场景最常见的任务类型。下文展示了实验设置及结果。
4.1 物体识别
作者在 ImageNet50 数据集上对 AttoNets的最高准确率进行了评估,该数据集是最近构建的一个新数据集,其区别于 ImageNet 数据集,并专门针对基于设备的移动视觉应用评估。作者将 AttoNet 和目前效果最优的三种针对边缘和移动应用所设计的深度神经网络(MobileNet-V1, MobileNet-V2, ShuffleNet-V2)进行了比较。实验结果如表2所示。可以发现, AttoNet 在准确率和复杂性指标上均有所提升。
表2 ImageNet50 上的实验结果
4.2 实例分割和物体检测
这一任务要求模型在给定场景中对物体进行分割、检测其边界框并对每个分割进行分类。在本文中,作者在物体分割数据集 Pascal VOC 2012上训练了一个基于 AttoNet 的 Mask R-CNN 网络(下文称为Atto-MaskRCNN),并评估了掩膜的平均精度(APm)以及探测(边框)的平均精度(APd)。模型训练使用 SGD进行优化,并将动量设定为0.9。作者比较了该模型和基于 ResNet-50 的 Mask R-CNN 的效果,并发现 AttoMaskRCNN 的参数量降低了2倍,乘-加操作降低了5倍,并仍然达到了较高的精度(APd 约为65.5%, APm 约为60%)。图3展示了 Atto-MaskRCNN 的实体分割及检测边界框结果示例。
图3 Atto-MaskRCNN 的实体分割及检测边界框结果示例
5 结论
本文提出了一种人机结合的方法以设计在设备上使用的高效深度神经网络。通过结合人工驱动的基于原则的网络设计原型开发,以及机器驱动的设计探索,人们能够在满足人为设定的网络宏观架构的基础上,得到机器设计的模块级宏观架构和微观架构设计。实验结果表明,使用本文方法所得到的 AttoNets 网络能够在显著减少参数量和计算开销的情况下,达到与目前网络相当的准确率。
在未来的研究中,作者计划进一步探究在其他任务中这一人机结合的设计方法的有效性,例如视频动作识别,视频姿势检测,图片捕捉,超分辨率图片重建,以及图片生成。另外,作者认为,不同的人为设置的设计要求的组合对网络生成的影响也非常值得探讨。
论文链接:
https://arxiv.org/abs/1903.07209
(*本文为AI科技大本营编译文章,转载请微信联系 1092722531)
◆
精彩推荐
◆
2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。6.6 折票限时特惠(立减1400元),学生票仅 599 元!
推荐阅读
相关文章:

Appro DM8127 IPNC 挂载NFS遇到的问题及解决
对于Appro DM8127 IPNC,默认的启动方式是NAND is used for booting kernel and NAND is used as root filesystem 为了调试应用程序方便,通常使用挂载NFS作为 root filesystem 但是如果直接采用ti文档中所给的方法修改文件系统挂载方式(将启动…

提高C++性能的编程技术笔记:设计优化/可扩展性/系统体系结构相关+测试代码
1. 设计优化 我们可以粗略地将性能优化分为两种类型:编码优化和设计优化。编码优化定义为不需要完整理解要解决的问题或者应用程序的执行流程就能实施的优化。通过定义看出,编码优化用于局部代码,同时该过程不牵涉周围的代码。除了这些容易实…

ICLR 2020被爆半数审稿人无相关领域经验,同行评审制度在垮塌?
作者 | 若名出品 | AI科技大本营(ID:rgznai100)根据维基百科,同行评议(peer review),是指由一个或多个具有与作品生产者具有相似能力的人员(同行)对作品进行的评估活动。同行评审方法用于维持质…

Swift 中使用 SQLite——批量更新(事务处理)
本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新。 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态开始数据操作如果数据操作成功,提交事务,让数据库更新到数据操…

网络管理常用命令之二 - Ipconfig 命令详解(图文)
2、Ipconfig 命令...不带参数.../all 参数.../release 和 /realease6 参数.../Renew 和 /Renew6 参数.../flushdns 参数.../displaydns 参数2、Ipconfig 命令 ipconfig命令也是使用率非常高的一个命令,可用于显示系统的TCP/IP网络配置值,并刷新动态主…

Swift 中使用 SQLite——查询数据
本文主要介绍如何查询 SQLite 结果集,以及封装 SQLite 的操作方法。 准备测试代码 /// 从数据库中加载 person 数组 class func persons() -> [Person]? {// 1. 准备 SQLlet sql "SELECT id, name, age, height FROM T_Person;"// 2. 访问数据库// …

提高C++性能的编程技术笔记:总结
《提高C性能的编程技术》这本书是2011年出版的,书中有些内容的介绍可能已经过时,已不再适用于现在的C编程中,但大部分内容还是很有参考意义的。 这里是基于之前所有笔记的简单总结,笔记列表如下: 跟踪实例࿱…

13岁小孩都跟我抢Python了,完了!
以下来自一位程序员母亲和工作人员的对话。程序员妈妈:您好,可以帮我推荐一本适合我家小孩看的编程书籍吗?兔子:可以的呀,《Scratch从入门到精通》,这本书适合小孩学习,您可以先看一下哦~程序员…

Windows Mobile 6.0 SDK和中文模拟器下载
【转】 Windows Mobile 6.0 SDK和中文模拟器下载 Windows Mobile 6.5 模拟器2010年12月06日 星期一 07:48转载自 zhangyanle86终于编辑 zhangyanle86Windows Mobile 6.0 SDK和中文模拟器下载 SDK 6.0下载页面:http://www.microsoft.com/downloads/details.aspx?fam…

wxPython:Python首选的GUI库 | CSDN博文精选
作者 | 天元浪子来源 | CSDN博客文章目录概述窗口程序的基本框架事件和事件驱动菜单栏/工具栏/状态栏动态布局AUI布局DC绘图定时器和线程后记概述跨平台的GUI工具库,较为有名的当属GTK、Qt 和 wxWidgets 了。GTK是C实现的,由于C语言本身不支持OOP&#x…

Swift 中使用 SQLite——修改和删除数据
本文主要介绍在SQLite中修改数据、删除数据: 更新记录 /// 将当前对象信息更新到数据库 /// /// - returns: 是否成功 func updatePerson() -> Bool {guard let name name else {print("姓名不能为空")return false}if id < 0 {print("id 不…

用python3实现指定目录下文件sha256及文件大小统计
有时会统计某个目录下有哪些文件,每个文件的sha256及文件大小等相关信息,这里用python3写了个脚本用来实现此功能,此脚本可跨平台,同时支持windows和linux,脚本(get_dir_file_info.py)内容如下: import os…

Swift 中使用 SQLite——新增数据
本文重点介绍两个方面,1、新增数据,2、获取自动增长 ID。 建立 Person.swift 数据模型 /// 个人模型 class Person: NSObject {// MARK: - 模型属性/// 代号var id: Int64 0/// 姓名var name: String?/// 年龄var age 0/// 身高var height: Double …

投稿2877篇,EMNLP 2019公布4篇最佳论文
整理 | AI科技大本营(ID:rgznai100)近日,自然语言处理领域的顶级会议之一EMNLP 2019公布了年度最佳论文。EMNLP是由国际语言学会(ACL)下属的SIGDAT小组主办的自然语言处理领域的顶级国际会议,是自然语言算法…

对象检测工具包mmdetection简介、安装及测试代码
mmdetection是商汤和港中文大学联合开源的基于PyTorch的对象检测工具包,属于香港中文大学多媒体实验室open-mmlab项目的一部分。该工具包提供了已公开发表的多种流行的检测组件,通过这些组件的组合可以迅速搭建出各种检测框架。 mmdetection主要特性&am…

(转)eclipse 代码自动补全
转自:http://blog.csdn.net/yushuwai2010/article/details/11856129 一般默认情况下,Eclipse的代码提示功能是比MicrosoftVisualStudio的差很多的,主要是Eclipse本身有很多选项是默认关闭的,要开发者自己去手动配置。如果开发者不…

swift 多线程GCD和延时调用
GCD 是一种非常方便的使用多线程的方式。通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程。在 “复杂必死” 的多线程编程中,保持简单就是避免错误的金科玉律。好消息是在 Swift 中是可以无缝使用 GCD 的 API 的,而且…

目标检测算法Faster R-CNN简介
在博文https://blog.csdn.net/fengbingchun/article/details/87091740 中对Fast R-CNN进行了简单介绍,这里在Fast R-CNN的基础上简单介绍下Faster R-CNN。 目标检测领域从R-CNN开始,通过引入卷积神经网络取得了很多突破性的进展,但是始终未能…

ICCV 2019 | 加一个任务路由让数百个任务同时跑起来,怎么做到?
作者 | Gjorgji Strezoski, Nanne van Noord, Marcel Worring 译者 | 中国海洋大学李杰 出品 | AI科技大本营(ID:rgznai100)摘要传统的多任务(MTL)学习方法依赖于架构调整和大型可训练参数集来联合优化多个任务。但是,…

DEV开发之控件NavBarControl
右键点击RunDesigner弹出如下界面鼠标先点击3或4,1,,然后点击1或2进行相应的新增或删除操作,3是分组,4是项目,4可以直接拖动到相应的分组3.属性caption:显示的名称4.NavBarControl 属性 PaintStyleName绘画风格&…

swift支持多线程操作数据库类库-CoreDataManager
类库方法 获取数据 executeFetchRequest(request:) 同步获取数据 var request: NSFetchRequest NSFetchRequest(entityName: "MonkeyEntity")var myMonkeys:NSArray? CoreDataManager.shared.executeFetchRequest(request)异步获取数据 executeFetchRequest(re…

目标检测(或分隔)算法Mask R-CNN简介
在博文https://blog.csdn.net/fengbingchun/article/details/87195597 中对Faster R-CNN进行了简单介绍,这里在Faster R-CNN的基础上简单介绍下Mask R-CNN。 Mask R-CNN是faster R-CNN的扩展形式,能够有效地检测图像中的目标,并且Mask R-CNN…

未来之城,管理者可能不是人......
大会官网 https://t.csdnimg.cn/KSTh2010 年,IBM 正式提出了“智慧地球”愿景。在 IBM 的设想中,智慧城市应该由六个核心系统组成:组织(人)、业务/政务、交通、通讯、水和能源。(图源 | IBM 官网࿰…

UVa 10701 - Pre, in and post
题目:已知树的前根序,中根序遍历转化成后根序遍历。 分析:递归,DS。依据定义递归求解就可以。 前根序:根,左子树,右子树; 中根序:左子树,根,右子树…

图像集存储成MNIST数据集格式实现
有时会用到将一组图像存放成MNIST中那样的数据格式,以便于用于网络的训练和测试,如MNSIT中的测试集标签t10k-labels.idx1-ubyte和测试集图像t10k-images.idx3-ubyte,各包含了10000个样本,这里以此两个测试集为例详细说明下实现过程…

ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
原来定位服务是10分钟收不到定位信息就挂起定位,现在变为最短3分钟,估计都是为了省电吧。只要你开启应用的后台定位,并且10分钟有一次定位,那么苹果就不会关闭你的线程,现在变成3分钟。若你的应用开启了后台定位&#…

程序员必知的20个Python技巧
作者 | Duomly 译者 | 弯月,编辑 | 郭芮 出品 | CSDN(ID:CSDNnews)Python是一门流行且应用广泛的通用编程语言,其应用包括数据科学、机器学习、科学计算等领域,以及后端Web开发、移动和桌面应用程序等方面。…

CSS float浮动的深入研究、详解及拓展(二)
为什么80%的码农都做不了架构师?>>> 接上回… 五、浮动的非本职工作 浮动的本职工作是让匿名inline boxes性质的文字环绕图片显示,而其他所有用浮动实现的效果都不是浮动应该做的事情,我称之为“非本职工作”。 或许我们并没有…

不需要显示地图 就获得用户当前经纬度 超简单的方法
1.遵循协议 CLLocationManagerDelegate,AMapSearchDelegate,AMapLocationManagerDelegate 2. API MAMapServices.sharedServices().apiKey APIKey AMapLocationServices.sharedServices().apiKey APIKey AMapSearchServices.sharedServices().apiKey APIKey AMapNaviService…

ELECTRA:超越BERT,2019年最佳NLP预训练模型
作者 | 李如来源 | NLPCAB(ID:rgznai100)【导读】BERT推出这一年来,除了XLNet,其他的改进都没带来太多惊喜,无非是越堆越大的模型和数据,以及动辄1024块TPU,让工程师们不知道如何落地。今天要介…