自动网络搜索NAS之FBNetV1

news2025/1/23 6:04:33

1. 摘要

为移动设备设计卷积网络挑战巨大,因为设计空间巨大,现有NAS方法在计算上是昂贵的。另外,之前的工作关注降低FLOPs,但是FLOPs并不总是反应真实的延迟。因此基于differentiable neural architecture search(DNAS),采用梯度优化的方法优化卷积结构,避免像以前的方法那样分别枚举和训练各个体系结构。FBNets-B在ImageNet上top-1准确率为74.1%,295M FLOPs,在三星S8上23.1ms延迟,比MobileNetv2小2.4倍,快1.5倍。
在这里插入图片描述
DNAS搜索一个层次空间,ConvNet的每一层都可以选择不同的块,搜索空间由一个随机超网络表示,搜索过程使用SGD训练随机超网以优化架构分布,从训练的分布中采样最佳体系结构。 在目标设备上测量每个操作的延迟并用于计算超网的损失。

2. 介绍

设计准确高效的ConvNet有如下挑战:

  1. 未知的设计空间,ConvNet的设计空间是组合的,训练ConvNet是非常耗时的,因此之前的网络设计基本不怎么搜索整个设计空间。采用强化学习和遗传算法的NAS非常耗时。
  2. 不可广泛移植的最优解,最优的卷积结构受很多因素限制,比如输入分辨率和目标设备。一旦这些因素改变,最优解的结构就会变化。
  3. 不一致的效率度量,大多数效率度量不仅依赖于网络结构也依赖目标设备的硬件和软件配置。之前的许多工作都用了硬件无关的度量比如FLOPs(乘加操作的次数)去评估效率。然而,FLOP计数低的网络不一定快。硬件无关的度量和实际的效率之间的不一致性使卷积网络的设计更加困难。

DNAS用操作随机执行的超级网络代表搜索空间,将找到最佳架构的问题放松到找到产生最佳架构分布的问题,通过使用Gumbel Softmax技术,可以直接基于梯度优化(SGD)的方法训练结构分布。用于训练随机超级网络的损失不仅仅是交叉熵损失,还包括延时损失。为了评估网络结构的延时,本文将计算搜索空间每个操作的延时并且使用速查表模型去计算所有操作的延时(每个操作的时间加起来),使用这个模型可以快速的估量庞大的搜索空间中网络结构的延时。更重要的是,它使得延时关于层结构选择是可微的。
在这里插入图片描述

3. 最近的工作

DARTS着重在cell级别的架构搜索,并且同样的cell结构重复堆叠得到网络整体,cell级结构是硬件不友好的,并且实际效率也很低。MnasNet研究了一个stage级的分层搜索空间,允许不同的block用于网络的不同stage,不过同一个stage中的block仍然是相同的。不同于关注FLOPs,[20]目的在于优化目标设备的延时。

4. 本文方法

在这里插入图片描述

4.1 搜索空间

之前的工作关注cell级别的搜索(单元级别),一旦单元结构搜索得到,网络就由这些单元堆叠得到。但是,许多搜索得到的单元结构非常复杂和琐碎,因此在移动端前向速度很慢。而且,同一结构的单元在不同深度回会网络的精度和延时有不同影响,因此本文允许不同的层选择不同的blocks来获得更好的精度和延时。

本文建立一个层次级别的搜索空间,其宏观结构固定,每层可以选择不同的block,整体结构如下图,Block这一列代表着block的类型,“TBS”表示需要被搜索层类型,f列代表着一个Block中卷积核的个数,n列代表着Block的个数,s列代表着第一个Block的stride。1504(1984)代表卷积的个数。

在这里插入图片描述
网络整体结构确定了网络层数和每层的输入输出的维数。网络的前三层和最后三层有着固定的操作。对于剩下的层,他们的Block需要被寻找。每层的卷积核个数是人为预先确定好的,对于浅层,使用相对较小的通道数,因为浅层的特征图分辨率较大,FLOP与输入尺寸的二次幂成正比。

网络中的每个可搜索层可以从层次搜索空间中选择不同的块,Block的结构来源于MobileNetv2和ShiftNet,如下图:包含1x1的point-wise卷积,KxK的depthwise卷积,以及一个1x1的point-wise卷积,ReLU函数跟在第一个1x1卷积和第二个KxK卷积之后,最后一个1x1卷积之后不接激活函数,如果输入分维度与输出分维度相同,则使用短路连接将输入与输出相加。同样仿照MobileNet-v2和ShiftNet以一个扩展比例来控制Block。它决定了第一个1x1卷积将输入特征图的通道扩大多少,对于Depth-wise卷积,卷积核的大小可以是3x3和5x5,对于第一个和最后一个的1x1卷积,使用group卷积(point-wise)来降低计算量。当使用group卷积时,仿照ShuffleNet来进行通道信息融合。
在这里插入图片描述
在实验中,层级的搜索空间包含9个候选Blocks,它们的设置如表:
在这里插入图片描述
skip表示直接将输入特征图输出而不经过任何操作。候选Block可以帮助降低网络的深度。整体来看,搜索空间包含22层,每层可以选择9中候选的Blocks。

4.2 损失函数

损失函数定义为
在这里插入图片描述
包含结构与参数的交叉熵损失,以网络在目标设备上的延时损失。我们不可能去对所有的网络结构进行延时测试,为了简化问题,使用一个延时速查表模型来评估整个网络的延时(基于每个操作的延时),因此:
在这里插入图片描述
其中, b l ( a ) b_l^{(a)} bl(a)代表结构a的第l层,每个操作的延时是独立于其他操作的。使用这样的方法,使得掩饰对于Block的选择是可微的,因此可以使用SGD来进行优化。

4.3 搜索算法

为了降低计算复杂度,有些算法将内层问题替换为在简单的数据集(CIFAR-10)上训练候选结构,尽管如此,训练依然是耗时的。

本文首先将搜索空间表示为一个随机的超级网络。这个超级网络有着上表所示的整体结构,每层包含9个上表所示并行的Blocks,在超级网络的前向过程中,只有一个候选的Block被采样进来,并以以下采样概率执行:
在这里插入图片描述
包含着决定第l层采样每种Block的概率的参数,第l层的输出为
在这里插入图片描述
m l , i = 1 m_{l,i}=1 ml,i=1表示Block b l , i b_{l,i} bl,i被采样,否则为0, b l , i ( x l ) b_{l,i}(x_l) bl,i(xl)表示第层的第个Block的输出(给定输入特征图 x l x_l xl),每层独立采样,因此结构可以定义为:
在这里插入图片描述
,是由组成的向量(第层的第个Block), b l , i a b^a_{l,i} bl,ia表示在采样的结构a中,第l层选择第i个Block。重写优化问题的表达形式:
在这里插入图片描述
其中的损失函数对于权重 w a w_a wa明显可微,可以采用SGD解决,但是该损失对于抽样参数 θ \theta θ并不是直接可微的,因为梯度不能由变量 m l , i m_{l,i} ml,i 传递至 θ l , i \theta_{l,i} θl,i,为了避开这个问题,将离散随机变量 m l , i m_{l,i} ml,i扩展为:
在这里插入图片描述
其中,
在这里插入图片描述
是一个服从Gumbel分布的随机噪音。
对于延时损失,使用速查表进行效率估计,因此:
在这里插入图片描述
写作 L A T ( a ) = ∑ l ∑ i m l , i L A T ( b l , i ) LAT(a)=\sum_{l}\sum_{i}m_{l,i}LAT(b_{l,i} ) LAT(a)=liml,iLAT(bl,i)

每个操作的延时是常数,因此整体延时对都是可微的,因此损失函数对于权重和结构分布参数都是可微的,因此可以使用SGD解决。

搜索过程等价于去训练随机super net。训练过程中,计算:损失对于权重的偏导数,去训练super net中每个操作f的权重,这部分与传统的卷积神经网络没有分别,操作搜索训练完城后,不同的操作使得整体网络的精度和速度不同,因此计算损失对于网络结构分布的偏导数,去更新每个操作的抽样概率。这一步会使得网络整体的精度和速度更高,因为抑制了低精度和低速度的选择,super net训练完成之后,可以从结构分布中抽样获得最优的结构。

5. 实验

在这里插入图片描述
在这里插入图片描述

6. 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sd卡怎么格式化?5个步骤轻松教会你

随着SD卡的广泛使用,总会有各种情况导致SD卡必须要格式化才行。但是格式化有没有办法执行,sd卡怎么格式化?还有人会因为误操作导致的数据丢失。现在,小编就给大家介绍一下怎么格式化SD卡?以及格式化后SD卡数据的恢复方…

VUE3-模板语法《二》

首先看到这张图,左边的结构就不分析了,上一章有说明顺序。 中间红色的部分,分为3块,第一块是模板,里面写html;第二块是脚本语言,里面写js或者ts语言,lang"ts"就是ts语法…

GreatSQL MGR 使用 IPv6 连接

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:王权富贵文章来源:社区原创 1.概述 本文基于 GreatSQL 8.0.25-16 ,以下测试均使用此版…

嵌入式:Load/Store之单寄存器的存取指令

文章目录Load/Store指令分类单寄存器的存取指令1、单字和无符号字节的数据传送指令指令说明指令汇编格式2、半字和有符号字节的数据传送指令指令汇编格式ARM处理器是Load/Store型的,即它对数据的操作是通过将数据从存储器加载到片内寄存器中进行处理,处理…

SuperMap iPortal 对接postgis业务数据库(二):大屏使用接口数据更新图表和地图

本文是SuperMap iPortal 对接postgis业务数据库的第二个步骤:大屏使用接口数据更新图表和地图。 这个步骤可以有两种方式去实现数据的展示和更新如下: 一、使用数据上图构建地图并在大屏中使用 1. 数据上图构建地图 打开iPortal 应用中心的数据上图&a…

教你如何轻松搞定云上打印管理

摘要:加快自主创新,满足数字化用户多场景文印需求。本文分享自华为云社区《有了司印云打印,云上打印管理轻松搞定!》,作者:云商店 。 作为与职场和个人办公息息相关的工作场景,打印长期以来都是…

uniapp-uView在离线状态下无法显示icon图标的问题

1、修改uview-ui下的u-icon.vue配置文件,一般目录在 uni_modules\uview-ui\components\u-icon\u-icon.vue 2、源文件引入的是阿里巴巴的icon https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf font-face {font-family: uicon-iconfont;src: url(https://at.…

restful风格快速入门

restful风格入门 概述 简介:REST(Representational State Transfer),表现形式状态转换。 传统风格 http://localhost/users/getById?id1 http://localhost/users/saveUser REST风格 http://localhost/users/1 http://localhost/users 对比: 对比可…

spring-boot sentry 不触发事件

按照官网的提示https://docs.sentry.io/platforms/java/guides/spring-boot/performance/ 一步一步的确认,但是最终就是不触发事件 解决过程: 1.开启debug 在properties文件增加一行 sentry.debugtrue2.运行,查看日志输出。 dsn什么的配…

Android代码保护与反调试方案

1、代码保护方案 1.1、Proguard代码混淆 ProGuard是一个开源的Java代码收缩器,优化器,混淆器和预校验器,ProGuard的作用如下: (1)压缩(Shrink):检查并移除代码中无用的类、字段、方法; &#…

一键回复聊天软件

不论是何种行业,高效工作都是企业一直在追求的,如果在为客户提供服务的过程中,有一个趁手的好工具是可以带来事半功倍的效果的。 前言 随着互联网的发展,越来越多的工作开始转向线上化,通过网络可以满足客户的多种需求…

手写Srping10(实现容器事件监听)

文章目录目标设计项目结构一、实现1、定义事件接口--ApplicationEvent1、定义通用应用上下文事件--ApplicationContextEvent2、定义刷新和关闭事件--ContextClosedEvent、ContextRefreshedEvent2、定义事件监听--ApplicationListener3、定义事件广播器--ApplicationEventMultic…

audio_open函数分析

audio_open() 的作用,就如同它的名字那样,就是打开音频设备。流程图如下: SDL 库播放音频数据有两种方式。 1,调用层定时往 SDL 接口塞数据。 2,设置SDL回调函数,让 SDL 来主动执行回调函数来取数据。 第…

ABAP 字符处理

场景1:是否只包含数字 str1 CO 0123456789 涉及关键字:CO,使用公式 str1 CO str2 。表示 str1 中 的每个字符 在 str2 中都能找到 类比:无 场景2:字符串1 是否 包含 字符串2 DATA str1 TYPE STRING VALUE hello world. DATA …

Pytest测试框架搭建需求及实现方案

目录 框架需求及实现方案 框架需求 实现方案 支持接口自动化、Web UI自动化及App自动化 可以批量运行用例并生成测试报告 测试完成发送邮件 提供灵活的运行方式,如按功能模块运行、按脚本运行、按用例等级运行等等 提供运行日志方便定位问题 支持切换环境 …

李沐精读论文:MAE 《Masked Autoencoders Are Scalable Vision Learners》

论文:Masked Autoencoders Are Scalable Vision Learners 别再无聊地吹捧了,一起来动手实现 MAE(Masked Autoencoders Are Scalable Vision Learners) 玩玩吧! - 知乎 参考博文:MAE 论文逐段精读【论文精读】 - 哔哩哔哩 神洛华…

QT 学习笔记(十)

文章目录一、绘图1. 理论知识储备2. 画背景图3. 简单绘图4. 手动刷新窗口二、绘图实现代码1. 主窗口头文件 widget.h2. 主窗口头文件 widget.cpp由于每次代码都是在原有程序上修改,因此除了新建项目,不然一般会在学完后统一展示代码。 提示:具…

【Python机器学习】卷积神经网络卷积层、池化层、Flatten层、批标准化层的讲解(图文解释)

卷积神经网络 卷积神经网络(convolutional neural network, CNN)在提出之初被成功应用于手写字符图像识别,2012年的AlexNet网络在图像分类任务中取得成功,此后,卷积神经网络发展迅速,现在已经被广泛应用于…

怎样在Odoo 16中启用完整的财务功能

Odoo是目前市场上最好的ERP软件之一。Odoo提供两种类型的版本,社区版和企业版。Odoo社区版是由开源软件支持的免费基本版。Odoo社区版本中没有一些模块和功能。但企业版付费版,升级版更适合更高的价值。Odoo企业版具有无限的功能支持和完整的功能。性能和…

「集合底层」深入浅出HashMap底层源码

「集合底层」深入浅出HashMap底层源码 一、HashMap介绍 HashMap底层采用了哈希表,而哈希表是由数组和链表实现的。数组和链表各有自己的特点: 数组:占用空间连续。 寻址容易,查询速度快。但是,增加和删除效率非常低…