【网络结构设计】7、RepVGG

2023-11-04

在这里插入图片描述

论文:RepVGG: Making VGG-style ConvNets Great Again

代码:https://github.com/megvii-model/RepVGG

出处:CVPR2021 | 清华大学 旷世

RepVGG 的贡献:

  • 使用结构重参数化的方法将训练和推理结构进行解耦,训练使用多分支结构,推理使用单分支结构,实现了一个 speed-accuracy trade-off 的简单网络结构
  • 在分类和分割上展示了良好的效果,且易于部署

在这里插入图片描述

一、背景

随着 Inception、ResNet、DenseNet 等方法的提出,卷积神经网络越来越复杂,还有一些基于自动或手动框架选择,虽然这些复杂的网络能够带来好的效果,但仍然会有很多问题:

  • 复杂的多分支网络让模型更复杂,执行或定制起来更难,降低推理效率
  • 很多组件(如 depthwise、Xception、MobileNet等)会提高显存,在一些设备上难以支持,虽然这些方法都验证了自己的 FLOPs,但该指标并不能准确的反应其真实的速度,有些在指标上快于 VGG 和 ResNet,但实际跑起来也不一定快。

所以本文提出了 RepVGG,是一个 VGG-style 的结构,有如下优势:

  • RepVGG 和 VGG 结构类似,没有旁路分支
  • 只使用了 3x3 conv 和 ReLU
  • 整个具体的结构没有使用自动查找、微调等,也没有复杂的设计

RepVGG 面临的问题:

  • 只用单路的结构很难打得过 resnet 那种多路的结构,resnet 的多路结构能保证其梯度传递

RepVGG 如何解决上述问题:结构重参数化(训练和推理使用不同的结构)

  • 既然多路结构有利于训练,那么就使用多路结构来训练,如图 2B 所示,使用 1x1 conv 和恒等映射作为旁路
  • 但多路结构不利于推理,那么就使用单路结构来推理,如图 2C 所示,只有 3x3 conv + ReLU

在这里插入图片描述

二、方法

2.1 使用简单结构的卷积神经网络的三个原因

  • Fast:VGG-16 has 8.4× FLOPs as EfficientNet-B3 [35] but runs 1.8× faster on 1080Ti
  • Memory-economical:使用多分支(如分支相加),其显存占用就约为输入的 2x
  • Flexible:ResNet 强调需要将模型设置为残差结构,限制了网络的灵活性,比如在残差相加时,两个相加的 tensor 必须等大,且多分支结构难以使用通道剪枝等等

在这里插入图片描述

2.2 使用多分支结构的训练时长

  • ResNet 其实很严格的验证了使用恒等映射可以很好的实现模型能力的增加,每个 block 都有一个高速通路,假设有 n 个 blocks,那么就可以得到 2 n 2^n 2n 个模型,为什么呢,因为每个 block 有两个通道。

虽然多分支的结构在推理的时候效率严重不足,但其胜在训练的效果,所以 RepVGG 在训练的时候选择了多分支结构,而且选择的是 3 分支结构(比 ResNet 还多一个分支):

  • 一个主分支
  • 一个 1x1 conv 分支
  • 一个恒等映射分支

所以 RepVGG 训练的 block 可以表示为: y = x + g ( x ) + f ( x ) y = x + g(x) + f(x) y=x+g(x)+f(x)

当有 n 个 blocks 时,相当于有 3 n 3^n 3n 个模型

2.3 边端设备推理的重参数化

RepVGG 如何在推理阶段进行重参数化呢?

  • 将 3 分支网络等价转换,简化成单分支网络
  • 具体实现方法是依据卷积核的可加性,先对卷积 “吸BN”(即将 conv+bn 转换成一个带 bias 的 conv),然后将三个卷积以中心点为基准相加,将 3 个卷积合并为 1 个

具体做法如下:

首先介绍一下使用的符号:

  • W ( 3 ) ∈ R C 2 × C 1 × 3 × 3 W^{(3)} \in R^{C_2 \times C_1 \times 3 \times 3} W(3)RC2×C1×3×3:表示 3x3 conv,输入通道为 C 1 C_1 C1,输出通道为 C 2 C_2 C2
  • W ( 1 ) ∈ R C 2 × C 1 W^{(1)} \in R^{C2 \times C1} W(1)RC2×C1:表示 1x1 卷积
  • μ ( 3 ) , σ ( 3 ) , γ ( 3 ) , β ( 3 ) \mu^{(3)},\sigma^{(3)} ,\gamma^{(3)} ,\beta^{(3)} μ(3)σ(3)γ(3)β(3) :表示跟在 3x3 conv 后面的 BN 的均值、标准差、尺度因子、偏置
  • μ ( 1 ) , σ ( 1 ) , γ ( 1 ) , β ( 1 ) \mu^{(1)},\sigma^{(1)} ,\gamma^{(1)} ,\beta^{(1)} μ(1)σ(1)γ(1)β(1) :表示跟在 1x1 conv 后面的 BN 的均值、标准差、尺度因子、偏置
  • μ ( 0 ) , σ ( 0 ) , γ ( 0 ) , β ( 0 ) \mu^{(0)},\sigma^{(0)} ,\gamma^{(0)} ,\beta^{(0)} μ(0)σ(0)γ(0)β(0) :表示跟恒等映射的 BN 的均值、标准差、尺度因子、偏置

假设:

  • 输入为 M ( 1 ) ∈ R N × C 1 × H 1 × W 1 M^{(1)} \in R^{N \times C_1 \times H_1 \times W_1} M(1)RN×C1×H1×W1

  • 输出为 M ( 2 ) ∈ R N × C 2 × H 2 × W 2 M^{(2)} \in R^{N \times C_2 \times H_2 \times W_2} M(2)RN×C2×H2×W2

  • 在 C/H/W 输入输出相同时,则有如下结论:
    在这里插入图片描述

  • 当不使用恒等映射分支时,则只有前两项,此时的 bn 是推理时的 BN,形式如下:
    在这里插入图片描述

  • 将每个 BN 和其前面的 conv 可以转换成一个【conv with bias vector】,假设 { W ′ , b ′ } \{W', b'\} {W,b} 分别为 从 W , μ , σ , γ , β W, \mu, \sigma, \gamma, \beta W,μ,σ,γ,β 转换而来的 kernel 和 bias,则有:
    在这里插入图片描述

这种变换同样可以被用于恒等映射分支,因为恒等映射分支可以被看做一个 【1x1 conv with an identity matrix as the kernel】

经过这种变换后,就能得到:

  • 1 个 3x3 kernel
  • 2 个 1x1 kernel
  • 3 个 bias vectors

然后:

  • 将 3 个 bias vectors 相加,就能得到最终的 bias
  • 将 2 个 1x1 kernels 和 1 个 3x3 kernels 相加(边缘补 0),就能得到最终的 3x3 kernel

在这里插入图片描述

2.4 结构细节

表 2 展示了 RepVGG 的设计细节,包括宽度和深度,其中主要使用了 3x3 conv,没有使用 max pooling。

深度:

  • 有 5 个 stages,每个 stage 的第一层的 3x3 conv 会下采样 2 倍
  • RepVGG-A:每个 stage 分别有 1,2,4,14,11 层(对比 ResNet-18/34/50)
  • RepVGG-B:每个 stage 分别有 1,4,6,16,11 层(对比更大的模型)
  • 第一个和最后一个 block 没有增加层数的原因在于,第一层图分辨率很大,容易带来耗时,最后一层通道很多,也同样带来耗时

宽度:

  • 每个 stage 的基础通道数设置为 [64, 128, 256, 512]
  • 使用 a a a 作为前 4 层的缩放比, b b b 作为最后一层的缩放比,且一般 b > a b>a b>a
  • 为了进一步降低参数和耗时,使用了分组卷积,给 RepVGG-A 的 3/5/7…/21 层设置了分组数 g g g,给 RepVGG-B 的 23/25/27 层也设置了分组数 g g g
    在这里插入图片描述

三、效果

不同版本的 RepVGG 结构如下:

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

从实验上证明重参数化的强大效果,所有模型都训练 120 个 epochs

1、移除 RepVGG-B0 的恒等映射分支/1x1 conv 分支,来看训练模型的效果,如表 6:

  • 两个分支都移除后,训练模型准确度跌到 72.39%
  • 使用 1x1 分支升到 73.15%
  • 使用恒等映射升到 74.79%
  • 使用 3 个分支升到 75.14%。

2、移除恒等映射分支/1x1 conv 分支后,看推理速度,如表 7:

在这里插入图片描述

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【网络结构设计】7、RepVGG 的相关文章

  • 图神经网络与智能教育:创新教育技术的未来

    导言 图神经网络 GNNs 和智能教育技术的结合为教育领域注入新活力 本文深入研究二者的结合可能性 涉及各自侧重 当前研究动态 技术运用 实际场景 未来展望 并提供相关链接 1 图神经网络与智能教育的结合方向 1 1 图神经网络在教育技术中
  • ‘DR-GAN: Automatic Radial Distortion RectificationUsing Conditional GAN in Real-Time‘条件GAN实时径向畸变自动矫正

    这篇文章在2020年发表在IEEE Transactions on Circuits and Systems for Video Technology上
  • 【计算机开题报告】 网上茶叶销售平台设计与开发

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 1 研究背景 随着社会经济的迅速发展和科学技术的全面进步 以计算机与网络技术为基础的信息系统正处于蓬勃发展的时期 随着经济文化水平的提高 近年来 随着科学
  • 如何防护零日攻击

    零日攻击是什么 零日攻击 也称为零时差攻击 通常是指利用还没有被补丁的安全漏洞进行的攻击 这些漏洞在被发现后 由于各种原因 软件供应商未能及时发布补丁 使得黑客有机会利用这些漏洞进行攻击 零日攻击通常由技术高超的黑客发起 他们在对目标系统或
  • 第八章 确认访问用户身份的认证

    第八章 确认访问用户身份的认证 8 1 何为认证 在计算机安全和网络通信的背景下 认证是 确认实体 如用户 计算机系统 服务 身份真实性的过程 认证是确保系统只对合法用户或实体开放访问权限的一种关键机制 在网络通信中 认证通常涉及验证用户或
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 浅谈能耗系统在马来西亚连锁餐饮业的应用

    1 背景信息 Background 针对连锁餐饮业能耗高且能源管理不合理的问题 利用计算机网络技术 通讯技术 计量控制技术等信息化技术 实现能源资源分类分项计量和能源资源运行监管功能 清晰描述各分店总的用能现状 实时监测各供电回路的电压 电
  • 动手学深度学习3 数据操作+数据预处理

    数据操作 数据预处理 1 基础数据结构 N维数组 2 数据操作实现 基础的张量运算 1 张量 创建与赋值 1 数据生成 创建 torch arange 2 张量的属性 shape numel 3 reshape 改变张量的shape但
  • 这些专利知识你知道吗?

    专利作为一种重要的知识产权保护形式 专利不仅成为了企业核心竞争力的重要组成部分 也成为了国家创新发展的重要支撑 专利是指国家专利主管机关授予发明创造申请人的一种专有权 这种专有权具有独占性 排他性和法律强制性 能够为持有者带来经济利益和竞争
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • Web 安全漏洞之 OS 命令注入

    什么是 OS 命令注入 上周我们分享了一篇 Web 安全漏洞之 SQL 注入 其原理简单来说就是因为 SQL 是一种结构化字符串语言 攻击者利用可以随意构造语句的漏洞构造了开发者意料之外的语句 而今天要讲的 OS 命令注入其实原理和 SQL
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中 为了应对反爬虫 匿名访问或绕过某些地域限制等需求 IP代理池成为了一种常用的解决方案 IP代理池是一个包含多个可用代理IP地址的集合 可以通过该代理池随机选择可用IP地址来进行网络请求 IP代理池是一组可用的代理IP地址
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • 毕业设计- 基于深度学习的小样本时间序列预测算法 - Attention

    目录 前言 课题背景与意义 课题实现 一 数据集 二 设计思路 三 相关代码示例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • 15天学会Python深度学习,我是如何办到的?

    陆陆续续有同学向我们咨询 Python编程如何上手 深度学习怎么学习 如果有人能手把手 一对一帮帮我就好了 我们非常理解初学者的茫然和困惑 大量视频 书籍 广告干扰了大家的判断 学习Python和人工智能 成为内行人不难 为此 我们推出了
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告

随机推荐

  • 1个星期,教你快速上手Unity ASE-【预览】

    最近在学习Amplify Shader Editor插件 准备做几期笔记 希望能给csdn友们一些帮助 共同进步 以下是用到的参数截图 更多详情请去B站搜索 Cz wang 感谢博主的讲解 目录预览 1 效果传送 1 属性面板 2 操作面板
  • 恶意软件与APT

    1 什么是恶意软件 把未经授权便干扰或破坏计算机系统 网络功能的程序或代码 一组指令 称之为恶意程序 2 恶意软件有哪些特征 1 强制安装 2 难卸载 3 浏览器劫持 4 广告弹窗 5 恶意收集用户信息 6 恶意卸载其他软件 7 恶意捆绑
  • pytorch torch.nn.Identity() 是干啥的,解释。

    class Identity Module r A placeholder identity operator that is argument insensitive Args args any argument unused kwarg
  • 惊呆了!Spring Boot 还能远程调试?

    目录 前言 什么是远程调试 为什么要远程调试 什么是JPDA 如何开启远程调试 transport server suspend address onthrow onuncaught launch timeout 常用的命令 IDEA如何开
  • 基于门限算法的SM2协同签名算法分析-openssl源码验证

    基于门限算法的SM2协同签名算法分析 openssl源码验证 介绍 1 协同公钥生成流程 2 协同签名流程 3 正确性分析 4 使用openssl接口进行代码测试 5 测试源码 介绍 门限密码体制 是安全多方计算中对抗合谋攻击的一个重要工具
  • Python实现识别图片内容的方法分析

    Python实现识别图片内容的方法分析 本文实例讲述了Python实现识别图片内容的方法 分享给大家供大家参考 具体如下 python识别图片内容 这里我的环境为windows64位 python2 7 14 需要用到PIL模块和tesse
  • springboot事务管理 注解@Transactional 无效原因,及解决办法

    1 不需要在启动类加上 EnableTransactionManagement EnableTransactionManagement是 spring tx 的注解 不是 spring boot 的 spring boot 会自动配置事务
  • 篇八:冒泡排序

    交换排序的一种 author xiaocui date 2022年08月02日 13 49 public class BubbleSort public static void main String args int arr new in
  • React 列表 & Keys

    React 列表 Keys const numbers 1 2 3 4 5 const listItems numbers map number gt li number li ReactDOM render ul listItems ul
  • leecode 题目5 最长回文子串(python)

    给你一个字符串 s 找到 s 中最长的回文子串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s cbbd 输出 bb 代码是根据B站上的一位up主写的 使用动态规划算法 从小字符串衍生相
  • css3新弹性盒子-flex-grow

    目录 flex grow 1 flex grow定义和用法 2 flex grow属性值 flex grow说明 flex grow实例 flex grow flex grow属性在CSS新弹性盒模型中是比较常用 想要用好它就先了解它的 语
  • 花卉识别卷积神经网络

    卷积神经网络做的花卉识别 keras 五分类 向日葵 雏菊 郁金香 玫瑰 蒲公英 之后更怎么做的
  • 【专题5: 硬件设计】 之 【68.开关电源 之 buck电路中的电感电流波形】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有 无所谓无的 这正如脚下的路 其实地上本没有路 走的人多了 也便成了路 原创不易 文章会持续更新 欢迎微信扫码关注公众号 承接 小程序 嵌入式 PC端项目开发 联系作者
  • Arduino基础入门篇31—LCD1602液晶显示

    LCD1602也叫1602字符型液晶 是一种专门用来显示字母 数字 符号的点阵型液晶模块 能同时显示16X2即32个字符 本篇我们来认识LCD1602 驱动它显示 Hello World 1 LCD1602介绍 对于单片机爱好者和电子爱好者
  • php-cgi.exe - FastCGI 进程超过了配置的请求超时时限

    解决方案一 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 内容转载 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 php技巧 脚本之家 详细错误 HTTP 错误 5
  • 【华为OD机试真题 JAVA】出错的或电路

    JS版 华为OD机试真题 JS 出错的或电路 标题 出错的或电路 时间限制 1秒 内存限制 262144K 语言限制 不限 某生产门电路的厂商发现某一批次的或门电路不稳定 具体现象为计算两个二进制数的或操作时 第一个二进制数中某两个比特位会
  • 利用Java对后端数据进行分页处理(Java假分页)

    代码如下 import java util Collections import java util List java分页 辅助器 public class PageHelper
  • HttpClient远程调用工具类

    文章目录 前言 一 HttpClient工具类 二 使用步骤 1 引入库 前言 提示 当前工具类get方式无法传分页数据 可自行篡改 不行就用post方式哈哈 提示 以下是本篇文章正文内容 下面案例可供参考 一 HttpClient工具类
  • Qt中显示摄像头数据(V4L2三)

    目录 一 通过V4l2来采集用qt显示 1 将V4L2获取摄像头数据封装成一个类 2 设置开始按钮开始采集数据 3 设置停止按钮停止采集数据 4 设置定时器不断采集数据 二 直接用qt多媒体模块来实现采集并且显示 1 在qt工程文件中添加
  • 【网络结构设计】7、RepVGG

    文章目录 一 背景 二 方法 2 1 使用简单结构的卷积神经网络的三个原因 2 2 使用多分支结构的训练时长 2 3 边端设备推理的重参数化 2 4 结构细节 三 效果 论文 RepVGG Making VGG style ConvNets