RepNAS: 基于NAS的结构重参数化技术

news2024/11/16 7:25:08

1. 介绍

在过去几年里,NAS技术取得了长足进展。然而,由于搜索约束与实际推理之间的差异导致高效网络搜索仍极具挑战性。为搜索一个具有高性能、低推理延迟的模型,已有方案往往在算法中添加计算复杂度约束。然而,推理速度会受多种因此影响,如FLOPs、MACs等,单一因素相关性可能并不强。

近来,重参数技术旨在将多分支结构转换成推理友好的单分支架构。尽管如此,训练阶段的多分支架构仍是人工设计的,较为低效。

本文提出提出一种适合于结构重参数技术的搜索空间,提出了一阶段NAS方法RepNAS对每一层在分支数量约束下进行ODBB(Optimal Diverse Branch Block)搜索。实验结果表明:搜索到的ODBB可以轻易超越人工设计的DBB,同时训练高效。

在这里插入图片描述
本文贡献主要包含以下几点:

  • 提出了一种Rep搜索空间,它使得所搜到的模型在训练阶段保持任意分支结构,而在推理阶段融合为单分支结果。
  • 为利用上述搜索空间,提出了一种一阶段NAS方案RepNAS;
  • 实验结果表明:搜索的ODDB具有比人工设计DBB和NAS模型更优性能。

2. 重参数化网络结构搜索

我们首先对所提RepNAS进行整体性介绍并讨论与其他NAS方案的区别,然后提出一种基于Rep技术的搜索空间,最后提出RepNAS方法以适配该搜索空间。

2.1 概述

Rep技术旨在通过插入多分支结构提升CNN的训练效率,所插入的多分支结构在完成训练后可以进行融合且不会造成任何性能损失、复杂度提升。然而,多分支结构训练会占据大量GPU显存,进而导致无法进行过多分支模型优化。所提方法的核心在于:以可微分方式对某些不重要分支进行剪枝,参见下图
在这里插入图片描述
该剪枝过程有两个重要步骤:

  • 给定CNN架构(比如MobileNet、VGG),我们在原始卷积操作基础上插入多个线性操作。对每个分支而言,它还存在一个可学习参数用于表征分支重要性。在训练阶段,我们同时对架构参数与与网络参数进行优化。在完成训练后,我们得到一个具有最优网络参数的剪枝架构。
  • 在推理阶段,残留分支可以直接融合到原始卷积操作中,即多分支转换成单分支结构且不会造成性能损失。

相比其他NAS架构,RepNAS中不再包含复杂的多分支结构与跳过连接。相比之前的结构重参数方案,RepNAS中每一层的模块通过NAS自适应决定,而无需人工介入。

2.2 搜索空间设计

NAS方案通常需要在DARTS空间或MobileNet-like空间进行最优子网络搜索,前者包含多分支结构,这使得所搜到的架构具有更大推理延迟;而后者则通过专家经验设计搜索空间,并未引入多分支架构。已有研究表明:多分支架构可以通过增强特征表达能力提升模型性能。

在这里插入图片描述
为组合多分支与单分支结构的优势,我们结合结构重参数技术设计了一种更灵活的搜索空间,见上图。可以看到:每个模块包含7个分支。不同于已有搜索空间,我们对分层约束进行了松弛以提供更高的灵活度,这意味着:每个模块可以具有不同的分支,所有模块都是独立的。需要注意的是:在推理阶段,多分支可以融合单分支,故不会造成推理耗时影响。

上述所得搜索空间包含2.29x 1 0 105 10^{105} 10105架构,远大于其他NAS的1.1x 1 0 18 10^{18} 1018,这为NAS算法带来了极大挑战。

2.3 权重共享

已有NAS方法在训练SuperNet过程中进行跨架构权值共享,而在相同模块中进行不同分支权值解耦。然而这种策略并不适用于Rep搜索空间(过多的子网络)。

受启发于BigNAS与Slimmable Networks,我们在相同模块中也进行了参数共享。我们将其表示为:
在这里插入图片描述
搭配上权值共享,SuperNet具有更快的收敛速度,同时分支排序可以进行更精确评估。

2.4 重参数化结构搜索

在这里插入图片描述

3. 实验

在这里插入图片描述
上表给出了不同重参数模型的性能对比,可以看到:

  • ODBB可以提升VGG16指标达0.85%,超过了DBB与ACB。
  • 随机搜索的重参数模块同样可以提升性能,但以0.77%弱于ODBB,这进一步说明了所提NAS的有效性。

在这里插入图片描述
上表给出了ImageNet数据集上所搜到到的ODBB与RepVGG的性能对比,可以看到:

  • 在RepVGG-A0-A2基础上,ODBB分别可以取得0.55%、0.38%、0.24%指标提升;
  • 在RepVGG-B3基础上,ODBB可以进一步提升0.45%指标,将plain模型的性能从80.52%提升到80.97%.

Comparison with
上表对比了所提RepNAS与其他NAS的性能对比,从中可以看到:

  • 从Rep搜索空间得到的ODBB系列模型均优于其他搜索空间模型,同时具有更低推理延迟;
  • RepNAS可以直接在ImageNet上进行搜索、训练,具有更高性能、更低GPU训练耗时。

在这里插入图片描述
上表对比了不同分支数量下的性能,可以看到:

  • ODBB的性能超越其他具有更少分支的重参数模块;
  • 带75分支的ODBB已足以取得与更多分支相当的性能。

在这里插入图片描述
上图对比了权值共享的作用,可以看到:当移除权值共享后,模型收敛慢,精度低 。这说明:SuperNet中的权值共享可以提供好的排序指示。

4. 最后

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

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

相关文章

【强化学习笔记】马尔可夫过程、马尔可夫奖励过程

文章目录1.马尔可夫过程1.1.随机过程1.2.马尔可夫性质1.3.马尔可夫过程2. 马尔可夫奖励过程2.1.回报2.2.价值函数3.马尔可夫决策过程1.马尔可夫过程 马尔可夫过程(Markov process) 指具有 马尔可夫性质 的 随机过程 ,也被称为马尔可夫链&…

C++GUI之wxWidgets(4)-编写应用涉及的类和方法(2)-wxDialog,wxCloseEvent

目录wxDialog包含类继承具体描述模态和无模态支持样式此类发出的事件wxWindow:&#xff1a;Close()wxCloseEvent具体描述使用此类的事件wxDialog 包含 #include <wx/dialog.h>类继承 描述主 具体描述 对话框是一个带有标题栏的窗口&#xff0c;有时还有一个系统菜单…

python-多线程、网络编程、正则表达式

目录 闭包 多线程 主线程 线程阻塞 同步锁 网络编程 正则表达式 re.match函数 re.search方法 re.match与re.search的区别 re.findall()方法 正则表达式的特殊规则 闭包 account0 def atm(num,flag):global accountif flag:accountnumaccountprint(account)else:acco…

免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)

免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)。 要从图像、照片中提取文本吗?是否刚刚拍了讲义的照片并想将其转换为文本?那么您将需要一个可以通过 OCR(光学字符识别)识别文本的应用程序。 图片文字识…

html圣诞树代码

一、前言 想做一个圣诞树&#xff0c;通过html实现了下 二、效果展示 三、代码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta name"viewport" cont…

245. 你能回答这些问题吗——线段树

给定长度为 N 的数列 A&#xff0c;以及 M 条指令&#xff0c;每条指令可能是以下两种之一&#xff1a; 1 x y&#xff0c;查询区间 [x,y] 中的最大连续子段和&#xff0c; 2 x y&#xff0c;把 A[x] 改成 y。 对于每个查询指令&#xff0c;输出一个整数表示答案。 输入格式…

RabbitMQ 第二天 高级 9 RabbitMQ 集群搭建 9.3 集群管理 9.5 负载均衡-HAProxy

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级9 RabbitMQ 集群搭建9.3 集群管理9.5 负载均衡-HAProxy9.5.1 安装HAProxy9.5.2 配置HAProxy第二天 高级 9 RabbitMQ 集群搭建 9.3 集群管理 rabbitmqctl join_cl…

MariaDB上市:MySQL之父奋斗13年终敲钟 要写代码写到100岁

雷递网 雷建平 12月24日云数据库公司MariaDB日前与特殊目的公司Angel Pond Holdings完成合并&#xff0c;并在纽交所上市&#xff0c;新公司更名为MariaDB。MariaDB是2022年初与Angel Pond Holdings达成合并协议&#xff0c;对新公司的作价为6.72亿美元。MariaDB是MySQL之父Mic…

【技术应用】java基于UNIX域套接字(unix domain socket)连接redis

【技术应用】java基于UNIX域套接字unix domain socket连接redis一、前言二、实现思路三、代码实现1、java socket基于redis.sock连接redis2、Lettuce框架基于redis.sock连接redis一、前言 在公司工作中经常涉及到一些中小型项目&#xff0c;这些项目都会涉及使用redis数据库&a…

Redis5.0+——持久化——RDBAOF

Redis持久化-RDB 1.实现目标&#xff1a; 在redis持久化时&#xff0c;持久化dump.rdb文件放入到redis解压目录下的data目录下的6379目录下 2.前期准备 1.在redis-5.0.3解压目录下新建data数据目录 2.编辑前面配置的/etc/redis.conf配置文件 修改持久化文件位置 (1) 进入安…

MySQL热备之PXB备份与恢复

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

【语音处理】使用块反射器的基于DFT的系统中用于旁瓣抑制的正交预编码(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Java中的多线程(下)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 多线程案例 单例模式 饿汉模式 懒汉模式 阻塞式队列 为什么要引入阻塞队列 Java中的阻塞队列 模拟实现阻塞队列 定时器 标准库中的定时器 …

docker的虚悬镜像是什么?

虚悬镜像是什么? 答:仓库名、标签都是<none>的镜像,俗称:dangling image 我们使用Dockerfile写一个: 1:编写 from ubuntu CMD echo action is success2:构建 docker build . 注意没有 -t 产生原因: 1:构建时候因为编写错误导致 2:删除的时候 对于这样…

数据溢出的二进制原理

char 类型的数据占一个字节&#xff0c;一个字节有 8 位&#xff0c;最高位为符号位&#xff0c;1表示负数&#xff0c;0表示正数。在计算机中&#xff0c;数据用补码表示&#xff0c;正数的补码是它本身&#xff0c;负数的补码为 “符号位不变&#xff0c;其他位取反后再加1”…

Spring Cloud 系列之OpenFeign:(4)集成OpenFeign

目录 传送门 服务间调用 集成OpenFeign 说明文档 添加pom依赖 启用OpenFeign 声明OpenFeign接口 改造远程调用 定义OpenFeign接口 测试OpenFeign调用 传送门 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安装 Spring Cloud Alibaba系列之nacos&#xff1a;(2)单…

离散数学数理逻辑部分【2】

文章目录命题逻辑等值演算公式的使用【重点】析取范式和合取范式【重点】范式存在定义【了解】求公式A的范式的步骤&#xff1a;【重点】极大项和极小项【重点】主合取范式和主析取范式【重点】等式演算求主析取范式【重点】真值表求主析取范式【了解】主范式的应用【重点】推理…

Python : 使用python实现教务管理系统(GUI界面+数据库)

一、设计目的 1.熟悉Python和相关软件的操作。 2.基于本学期所学Python知识&#xff0c;熟练应用掌握&#xff0c;制作符合要求的教务管理系统。 3.会对程序运行中的错误代码进行分析&#xff0c;找出合理的解决方案。 4.掌握tkinter开发流程&#xff0c;布局方法和主要组件&a…

C语言位域

如果程序的结构中包含多个开关量&#xff0c;只有 TRUE/FALSE 变量&#xff0c;如下&#xff1a; struct {unsigned int widthValidated;unsigned int heightValidated; } status; 这种结构需要 8 字节的内存空间&#xff0c;但在实际上&#xff0c;在每个变量中&#xff0c;…

JavaScript游戏开发(4)(笔记)

文章目录八、角色动作状态的管理8.1 准备部分8.2 角色状态改变的基本方式8.3 完善整个代码8.4 存在的问题九、简单的横板动作卷轴游戏9.1 准备部分9.2 输入管理器9.3 状态管理器9.4 背景管理器9.5 敌人管理器9.6 碰撞检测、UI绘制9.7 更多的角色状态与特效9.8 完善游戏附录素材…