RepVGG论文详解(超级详细)

        RepVGG是2021年发表于CVPR,它和resnet一样是一种图像分类网络,在目标检测中被用作backbone,论文提出一种新型技术称之结构重参数化,简单来说就是对训练出的模型进行等价替换成一个简单的模型,然后用这个简单的模型进行推理(也就是testing),目的就是加快推理速度,提高模型实用性。   

论文地址:https://arxiv.org/abs/2101.03697

论文源码:https://github.com/megvii-model/RepVGG


目录

1、摘要和引言(RepVGG是什么)

 对于复杂的网络明明可以达到一个非常高的精度为什么不用呢?

1.1RepVGG模型结构

2、作者所作的相关研究

3、RepVGG的优点

4、怎么实现结构重参数化

5、模型部署

6、实验对比


1、摘要和引言(RepVGG是什么)

        这两部分提出了RepVGG网络出现的背景以及大致功能优点,由于当前的网络架构都非常的庞大推理速度慢如ResNet-101,论文提出一个简单又高效的网络,推理时结构像VGG一样只有3x3卷积和ReLU,训练时有多个残差边。并且在ImageNet上的有一个非常不错的成绩

   

 对于复杂的网络明明可以达到一个非常高的精度为什么不用呢?

        复杂的多分支模型虽然可以达到比较高的准确率,但是也有一些明显的缺点。1)会降低模型的推理速度并且减少内存利用率(后面会提到),2)有些节点会增加内存消耗并且对别的设备不友好。但是在工业中,VGG和ResNet还是非常的受欢迎。论文中提到,大部分学者提到FLOPs会影响推理速度,但是论文中作者做了实验发现FLOPs对模型的速度好像没太大关系,如RepVGG-B3的FLOPs比EfficientNet大但是Speed更快

        针对以上缺点,作者提出decouple the training-time multi branch and inference-time plain architecture via structural re-parameterization,通过结构重参数化将训练多分支模型解耦成推理平滑模型,又因为推理模型结构和VGG很像被称之RepVGG,这个技术简单来说,因为模型是由一组参数构建而成,那么是否能够找出另一组参数与其效果相同,而新的这组参数对应的模型用于推理,这就是结构重参数化。

1.1RepVGG模型结构

        RepVGG沿用ResNet的残差边,只不过RepVGG在每一层都使用了残差连接,3x3卷积接上一个identity和1x1的卷积,图中B代表在训练时所使用的模型结构,图中C代表推理时所用的模型结构,在训练模型当中,在每一分支输出前加一个BN层,如何将B->C就是重参数化的重要体现,下面会谈到实现细节,先了解大概流程

2、作者所作的相关研究

        1、网络从单一到多分支的发展)VGG是一种单路径网络结构也就是没有残差边,精度在当年也还不错,但是在ResNet和DenseNet提出后精度就被比下去了,但是想DenseNet超大型网络不一定能在普通GPU上训练,因此限制了它的实用性,此外还存在这推理速度慢的问题,并行度低。

        2、单一模型训练的有效性)作者做了一些对比实验,在单一模型和多分支模型上,显然是多分支模型在训练上的效果更好并且预测结果更精确,因此作者设计网络时并没有抛弃多分支结构,而是在推理时将其融合成单一路径。

       3、模型重参数化)作者提到在DiracNet当中使用的重参数化方式和RepVGG不同,DiracNet在训练时将网络进行调整,换句话说RepVGG训练时还是一个多分支结构,但是DiracNet不是。

        4、为什么使用3x3卷积)在GPU上3x3卷积被封装优化,计算密度对比其他卷积高,作者也做了相关实验

3、RepVGG的优点

        1)Fast,使用重参数化后,在推理上速度会有非常大的提升,并且有助于模型部署提高实用性。2)节省内存,采用多分支模型,在每次计算都需要多份内存分别保存每条分支的结果,所以导致内存消耗大

3)修改模型会更加方便,使用多分支存在一个问题,就是每条分支的输入通道和输出通道要保持一致,那么对模型的修改产生不便,如果是单路径就不存在这个问题 

4、怎么实现结构重参数化

        在上述提到,RepVGG在训练时每一层都有三个分支,分别是identify,1x1,3x3,模型训练时,输出y = x +g(x)+f(x),每一层就需要3个参数块,对于n层网络,就需要3^{n}个参数块。所以我们需要重参数化,会使得推理时模型参数量小。

        

         第一个问题,在每个卷积后都接上一个BN,怎么将卷积和BN融合。第二个问题,存在不同大小的卷积,怎么将几个不同大小的卷积融合在一起。

        对于第一个问题,假如输入为M(1),卷积核为W,BN后的输出为:

         BN是怎么计算的:

       提出其中的M特征图和偏移量:

 所以卷积加上BN等于三个卷积核的融合对M进行卷积再加上偏置

第二个问题,对于1x1的卷积,对1x1扩充为3x3,多余部分补0,而identify也可转化成1x1,所以将三个3x3累加就形成新的3x3卷积,至此完成整个重参数化操作

5、模型部署

        作者针对小模型和大模型对RepVGG进行设计,层数分别为[1, 2, 4, 14, 1]和[1, 4, 6, 16, 1],小模型称之RepVGG-A,大模型RepVGG-B,对于每层的通道数[64a, 128a, 256a, 512b],

 为什么这样设计,作者提到因为第一层输入的图片分辨率高,所以通道数不能太大,可能导致计算量过大。最后stage设计了512b是因为最后只有一层,所以大一点有助于存储参数。其中在4stage中有14层block,这是借鉴ResNet的架构布局

6、实验对比

        作者提出7个模型和主流模型在Imagenet上进行对比:    

 

 从实验可以看出,RepVGG的推理速度是比较快的,虽然参数比ResNet大,但是使用重参数化替换成推理模型,说明这个工作是非常有效果的。下图RepVGG-B0不做重参数化的速度,比起上图的速度有一个很大的降低,提升将近50%

 总之,RepVGG当中的结构重参数化这个方法值得我们去学习,对模型的部署非常友好,在未来的发展中,重参数化会越来越受欢迎(YOLOv6使用了这个方式)。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ECU是汽车电子控制单元的缩写,它是汽车中负责控制和管理各种电子系统的核心部件。ECU的详细资料可以从以下几个方面进行详解。 首先,ECU常见的数据总线有CAN和LIN。通常,汽车ECU的bootloader通过CAN或LIN下载数据。此外,还可以基于其他总线,如SPI总线、I2C总线和以太网。不同的总线适用于不同类型的ECU,比如带有安全监测功能的安全ECU、中控或全液晶仪表的ECU以及下一代高速网关和ADAS ECU。\[1\] 其次,ECU的bootloader是用于软件远程升级和修复bug的重要组件。随着汽车电子技术的发展,消费者对汽车的节能性、舒适性、互联性和安全性的要求越来越高。新能源电动车、车联网和自动驾驶技术的兴起加速了汽车电子技术的发展,使得ECU集成的功能日益复杂。因此,bootloader的需求也越来越多。\[3\] 最后,ECU的开发要点包括MCU的选择和软件开发工具的使用。不同的MCU具有不同的软件开发工具和CPU内核对中断处理机制的处理方式。因此,在ECU bootloader的开发过程中,需要根据具体的MCU型号选择相应的开发工具和开发方法。\[2\] 综上所述,ECU是汽车中负责控制和管理各种电子系统的核心部件。它的bootloader通过不同的数据总线进行数据下载,满足软件远程升级和bug修复的需求。ECU的开发要点包括MCU的选择和软件开发工具的使用。 #### 引用[.reference_title] - *1* *2* *3* [汽车电子ECU bootloader开发要点详解](https://blog.csdn.net/king110108/article/details/103225254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crlearning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值