RepVGG算法详解

RepVGG: Making VGG-style ConvNets Great Again-论文链接-代码链接

1、需求解读

  通过总结,你可能会发现计算机视觉中的多种不同任务的网络架构大致都可以分为3个通用的模块,具体包括:通用Backbone网络、任务特定网络和任务头网络,其中通用Backbone网络用来提取一些低级的通用特征,具体包括颜色、形状和纹理等;任务特定网络用来对这些通用的特征进行进一步的加工,将这些特征变换成该任务需要的特征;任务头网路根据不同的任务来输出不同形式的结果,例如分类算法输出类别概率,检测任务输出类别和检测框等。总而言之,分类网络中的Backbone网络是很多高级任务的基准网络,它的性能在很大程度上决定了该网络的部分上限
  在常见的计算机视觉任务中,我们经常会看到ResNet和MobileNet两个网络的身影,大量的实验结果表明:ResNet网络能够提取到鲁邦的特征表示,用户可以根据自己的需要灵活的选择ResNet18、ResNet34和ResNet50等网路架构;MobileNet适合应用在一些低算力的嵌入式设备中,可以在速度和精度之中达到很好的均衡。但是我们很好看到过VGG网络的身影,这几年越来越少!!!主要的原因包含2点:(1)VGG网络的模型更大,不便于模型部署;(2)与ResNet网络相比,VGG网络的性能会有些逊色。
  RepVGG,这个网络就是在VGG的基础上面进行改进,主要的思路包括:(1)在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的精华应用 到VGG网络中;(2)模型推理阶段,通过Op融合策略将所有的网络层都转换为Conv3*3,便于网络的部署和加速。 如果你做过模型的部署,你可能会比较清楚,当前很多的模型推理框架中都对Conv3*3卷积做了一些特定的加速操作,如果我们可以将所有卷积层转换成Conv3*3,整个网络在推理阶段还是能获得较大的速度提升!!!

2、RepVGG算法简介

  RepVGG是一个分类网路,该网络是在VGG网络的基础上进行改进,主要的改进点包括:(1)在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的精华应用 到VGG网络中;(2)模型推理阶段,通过Op融合策略将所有的网络层都转换为Conv3*3,便于模型的部署与加速。 该论文中的包含的亮点包括:(1)网络训练和网络推理阶段使用不同的网络架构,训练阶段更关注精度,推理阶段更关注速度,这个思路很值得体会,是一种提升模型部署速度的方案!!!

3、RepVGG网络架构详解

在这里插入图片描述
  上图展示了部分RepVGG网络,图A表示的是原始的ResNet网络,该网络中包含着Conv1*1的残差结构和Identity的残差结构,正是这些残差结构的存在解决了深层网路中的梯度消失问题,使得网络更加易于收敛。图B表示的是训练阶段的RepVGG网络架构,整个网络的主体结构和ResNet网络类似,两个网络中都包含残差结构。两个网络中的主要差异如下所述:(1)RepVGG网络中的残差块并没有跨层,如图中的绿框所示;(2)整个网络包含2种残差结构,如图中的绿框和红框所示,绿框中的残差结构仅仅包含Conv1*1残差分支;红框中不仅包含Conv1*1的残差结构,而且包含Identity残差结构由于残差结构具有多个分支,就相当于给网络增加了多条梯度流动的路径,训练一个这样的网络,其实类似于训练了多个网络,并将多个网络融合在一个网络中,类似于模型集成的思路,不过这种思路更加简单和高效!!!(3)模型的初始阶段使用了简单的残差结构,随着模型的加深,使用了复杂的残差结构,这样不仅仅能够在网络的深层获得更鲁邦的特征表示,而且可以更好的处理网络深层的梯度消失问题。图C表示的是推理阶段的RepVGG网络,该网络的结构非常简单,整个网络均是由Conv3*3+Relu堆叠而成,易于模型的推理和加速。
  这种架构的主要优势包括:(1)当前大多数推理引擎都对Conv3*3做了特定的加速,假如整个网络中的每一个Conv3*3都能节省3ms,如果一个网络中包含30个卷积层,那么整个网络就可以节省3*30=90ms的时间,这还是初略的估算。(2)当推理阶段使用的网络层类别比较少时,我们愿意花费一些时间来完成这些模块的加速,因为这个工作的通用性很强,不失为一种较好的模型加速方案。(3)对于残差节点而言,需要当所有的残差分支都计算出对应的结果之后,才能获得最终的结果,这些残差分支的中间结果都会保存在设备的内存中,这样会对推理设备的内存具有较大的要求,来回的内存操作会降低整个网络的推理速度。而推理阶段首先在线下将模型转换为单分支结构,在设备推理阶段就能更好的提升设备的内存利用率,从而提升模型的推理速度,更直观的理解请看下图。总而言之,模型推理阶段的网络结构越简单越能起到模型加速的效果。
在这里插入图片描述

3.1 推理阶段Op融合细节详解

在这里插入图片描述
  上图展示了模型推理阶段的重参数化过程,其实就是一个OP融合和OP替换的过程。图A从结构化的角度展示了整个重参数化流程, 图B从模型参数的角度展示了整个重参数化流程。整个重参数化步骤如下所示:

  • 步骤1-首先通过式3将残差块中的卷积层和BN层进行融合,该操作在很多深度学习框架的推理阶段都会执行。图中的灰色框中执行Conv3*3+BN层的融合,图中的黑色矩形框中执行Conv1*1+BN层的融合,图中的黄色矩形框中执行Conv3*3(卷积核设置为全1)+BN层的融合。其中Wi表示转换前的卷积层参数, μ i \mu_{i} μi表示BN层的均值, σ i \sigma_{i} σi表示BN层的方差, γ i \gamma_{i} γi β i \beta_{i} βi分别表示BN层的尺度因子和偏移因子,W’和b’分别表示融合之后的卷积的权重和偏置。
    在这里插入图片描述
  • 步骤2-将融合后的卷积层转换为Conv3*3,即将具体不同卷积核的卷积均转换为具有3*3大小的卷积核的卷积。由于整个残差块中可能包含Conv1*1分支和Identity两种分支,如图中的黑框和黄框所示。对于Conv1*1分支而言,整个转换过程就是利用3*3的卷积核替换1*1的卷积核,具体的细节如图中的紫框所示,即将1*1卷积核中的数值移动到3*3卷积核的中心点即可;对于Identity分支而言,该分支并没有改变输入的特征映射的数值,那么我们可以设置一个3*3的卷积核,将所有的9个位置处的权重值都设置为1,那么它与输入的特征映射相乘之后,保持了原来的数值,具体的细节如图中的褐色框所示。
  • 步骤3-合并残差分支中的Conv3*3。即将所有分支的权重W和偏置B叠加起来,从而获得一个融合之后的Conv3*3网络层。

3.2 不同配置版本的ResVGG网络

在这里插入图片描述
  对于基准分类网络而言,一般都会包含多个具有不同配置的网络架构,具有代表性的就是MobileNet和ShuffleNet网络,小模型可以进行轻量化部署,适合应用于一个算力较弱的嵌入式设备中,如rk3399、rk3288和Rapi3等;大模型用来进行服务端部署,适合应用到带有显卡的服务器上面,如GTX1080Ti、GTX2080Ti等,由于该设备的算力比较充足,即使是利用大模型也能获得实时的运行速度
  RepVGG也提供两大类型的网络配置,具体的细节如上表所示,RepVGG-A表示的是一种比较轻量型的网络,整个网络的层数会少一些,当前分类性能也会差一些;RepVGG-B表示的是一种高精度类型的网络,整个网路会更深一些,分类精度更高一些,适用于服务端部署。整个RepVGG网络包含5个Stage,Stage1仅仅包含一个残差块,输出的特征映射大小为112*112,残差块的通道个数取min(64,64a);Stage2包含2个残差块,输出的特征映射大小为56*56,残差块的通道个数为64a个;Stage3包含4个残差块,输出的特征映射大小为28*28,残差块的通道个数为128a个;Stage4包含14个残差块,输出的特征映射大小为14*14,残差块的通道个数为256a个;Stage5包含1个残差块,输出的特征映射大小为7*7,残差块的通道个数为512b个。整个网络通过参数a和参数b来形成不同版本的变种,具体的变种如下表所示,参数a和参数b用来控制残差块的通道个数,参数a用来控制stage1-stage4阶段的通道个数,参数b用来控制stage5阶段的通道个数,一般情况下a < b,主要的原因是Stage5中需要具有更多的通道个数,从而获得一些更鲁邦的特征表示,有利于后续的头网络输出更准确的预测结果。
表3.2.2

4、RepVGG算法实现步骤

步骤1-获取并划分训练数据集,并对训练集执行数据增强操作;
步骤2-搭建RepVGG训练网络,训练分类网络,直到网络收敛为止;
步骤3-加载训练好的网络,对该网络执行重参数化操作,具体的细节如上节所述;
步骤4-加载重参数化后的模型,执行模型推理

5、RepVGG算法效果展示与分析

表5.1-ResVGG与ResNet网络性能比较
  上图展示了ResVGG网络与ResNet网络在相同测试数据集上面的性能指标。评估的性能指标包括Top-1准确率、模型推理速度、模型参数量、FLOPS和Wino卷积的MUL个数。通过观察我们可以得出以下的初步结论:(1)相同测试条件下,最小的模型RepVGG-A0与ResNet-18相比,各项指标都有显著的提升,RepVGG-A0网络不仅具有更少的参数量,更快的推理速度,而且获得了更高的分类精度;(2)与EfficientNet-B0相比,RepVGG-B1g4不仅具有更快的执行速度,而且获得了更高的分类精度,当然该模型也更大一些。(3)与VGG-16网络相比,RepVGG-B2在各个指标上面都有一定的性能提升。

在这里插入图片描述
  为了进一步验证RepVGG网络的通用性,作者验证了该Backbone在语义分割任务上面的性能,并和基准Backbon ResNet50和ResNet101进行了性能比较,具体的评估指标包括Mean IoU、Mean pixel acc和Speed。通过观察我们可以得出以下初步的结论:(1)与ResNet-50网络相比,RepVGG-B1g2-fast网络不仅获得较高的精度,而且在速度上也有一些优势;(2)与ResNet-101网络相比,RepVGG-B2-fast网络不均获得了较高的速度,各项指标上也都有所提升。

6、总结与分析

  RepVGG是一个分类网路,该网络是在VGG网络的基础上进行改进,结合了VGG网络和ResNet网络的思路,主要的创新点包括:(1)在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的精华应用 到VGG网络中;(2)模型推理阶段,通过Op融合策略将所有的网络层都转换为Conv3*3,便于模型的部署与加速。(3)这是一个通用的提升性能的Tricks,可以利用该Backbone来替换不同任务中的基准Backbone,算法性能会得到一定程度的提升。
  尽管RepVGG网络具有以上的优势,但是该网络中也存在一些问题,具体的问题包括:(1)从训练阶段转推理阶段之前,需要执行模型重参数化操作;(2)在模型重参数化过程中会增加一些额外的计算量;(3)由于每个残差块中引入了多个残差分支,网络的参数量也增加了一些。

参考资料

[1] 原始论文

注意事项

[1] 如果您对AI、自动驾驶、AR、ChatGPT等技术感兴趣,欢迎关注我的微信公众号“AI产品汇”,有问题可以在公众号中私聊我!
[2] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注。
[3] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[4] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[5] 本人业余时间承接各种本科毕设设计和各种项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊,备注“项目”!!!

  • 48
    点赞
  • 262
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值