RepVGG: Making VGG-style ConvNets Great Again

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

GitHub地址:https://github.com/megvii-model/RepVGG

目录

0、摘要

1、引言

2、相关技术

3、利用结构重参数化构造RepVGG

3.1、 简单就是快速、内存高效、灵活

3.2、训练阶段的多分支结构

3.3、推理阶段的重参数化

3.4、网络规格

4、实验结果

5、总结


0、摘要

提出了一种简单而强大的卷积神经网络结构,其推理阶段是仅由3*3卷积和RELU组成VGG风格的结构,训练阶段则具有多分支结构。这种训练-推理的解耦是利用一种叫做“重参数化(re-parameterization)”的技术实现的,因此,该网络被称为RepVGG。在ImageNet上能够达到超过80%的top-1准确率,这是plain网络第一次达到如此高的性能。在 NVIDIA 1080Ti GPU上,RepVGG比ResNet-50快83%,比ResNet-101快101%,同时具有更高的精度。相比当前的SOTA模型,如EfficientNet、ResNet,RepVGG可以实现精度-速度之间的平衡。

1、引言

VGG是一种简单的plain网络,没有复杂结构,只需要堆叠CNN层、RELU层即可达到较高的性能。后来的网络,如Inception、ResNet、DenseNet等设计的越来越复杂,虽然网络性能提高了,但缺点也很明显:

  • (1)复杂的分支设计(如ResNet和Inception)使其难以应用和自定义,降低了推理的速度并且内存占用率较高;
  • (2)一些组件(如Xception和MobileNets中的depthwise卷积、ShuffleNets中的通道shuffle模块)增加了内存访问成本且缺乏适用的硬件;

此外,FLOPS并不能代表运行速度,尽管某些模型FLOPS很低,但其速度并不快(PS:特别是EfficientNets等使用了depthwise卷积的网络)。

复杂分支的设计有利于训练过程,而其缺点又是对推理过程不利的。

因此,作者提出了RepVGG,对训练-推理阶段的网络进行解耦,训练时多分支、推理时plain。其主要有以下优点:

  • 模型具有VGG风格的plain(又称前馈)网络结构,没有任何分支,也即:每一层只取其前一层的输出作为输入,而该层输出只作为下一层的输入;
  • 模型的主体只用3*3卷积和RELU;
  • 模型的具体架构(如深度、宽度等)并没有经过自动搜索、手动精调、复合缩放,也没有其他繁琐的设计。

RepVGG和其他模型的比较:

总体来说,本文主要贡献有:

  • 提出了RepVGG,与当前SOTA模型相比,具有更好的速度-精度平衡;
  • 使用结构重参数化解耦了训练和推理过程,训练时为多分支结构、推理时为plain结构;
  • 证明了RepVGG在图像分类和分割方面的有效性,实现起来简单有效。

RepVGG网络结构如图2所示:

2、相关技术

从单分支到多分支:

卷积网络的设计经历了由简单到复杂的过程,从VGG的但路径开始,后续的GoogleNets、ResNets、DenseNet等网络越来越复杂,虽然网络性能也在提升,但计算复杂度也随之大幅提升,且不好实现、推理不友好。

单分支模型的有效训练:

有很多工作致力于提升单分支模型的训练精度,但往往华而不实;本文的目的不是使一个非常深的网络收敛,而是建立一个简单的具有合理的深度模型,在达到较好的速度-精度平衡的基础上又可以简单地使用常见组件及线性代数来实现。

模型重参数化:

DiracNet是一个重参数化模型,它通过编码卷积层中的卷积核来构建非常深的plain网络:\hat{\mathrm{W}}=\operatorname{diag}(\mathbf{a}) \mathrm{I}+\operatorname{diag}(\mathbf{b}) \mathrm{W}_{\text {norm }}。不过RepVGG中的结构重参数化与其不同:

(1)结构重参数化是通过一个具体结构的实际数据流来实现的,这个具体结构可以在以后转换成另一个结构,而DiracNet仅仅使用另一个conv核的数学表达式来简化优化;

(2)DiracNet模型性能低于同复杂度的ResNet,而RepVGG高于ResNet。

 Asym Conv Block (ACB)使用非对称卷积来加强常规卷积,是另一种形式的重参数化。但是ACB是被当作一个组件来设计的,用于替换卷积层。

Winograd卷积:

RepVGG只用了3*3卷积,因为该卷积是被cuDNN、MKL在GPU和CPU上高度优化过的,如表1:

Winograd卷积是一种加速卷积计算效率的算法,可将3*3的乘法次数(MULs)减少为原来的4/9。

3、利用结构重参数化构造RepVGG

3.1、 简单就是快速、内存高效、灵活

使用简单的ConvNet具有至少三点优势:

快速:VGG虽然参数多于一些复杂网络,但是推理速度却更快,如VGG16的参数量为EfficientNetB3的8.4倍,但在1080Ti上推理速度反而快1.8倍。这说明,VGG的计算密度是后者的14倍。这主要是由访存率(memory access cose,MAC)和并行度决定的。

内存高效:多分支结构的网络是内存低效的,因为每个分支在addition或者concatenation之前都需要保存在内存中,这就导致了较高的内存占用峰值;而plain网络是一层一层计算的,不会在内存保留太多临时变量。如图3所示:

灵活:在多分支网络中,模型结构受到一定的约束,如ResNet的残差块要求两个分支具有相同的shape,否则shortcut就没意义了。更糟糕的是,多分支对通道剪枝也不友好;但plain网络允许我们根据需求自由配置每个卷积层。

3.2、训练阶段的多分支结构

plain网络尽管有这么多优点,但是有个致命缺点:性能差。如VGG16在ImageNet上只能达到72%的top-1准确率。而多分支结构虽然对推理不友好,但是对训练友好。因此,作者受Resnet启发,设计了一个shortcut分支结构:y = x + g(x) + f(x),其中:g(x)代表1*1卷积,f(x)代表3*3卷积。在训练阶段,只需要简单堆叠上述结构;而在推理阶段,可以将y = x + g(x) + f(x)转换为y = h(x),从而在训练阶段利用了多分支的优势,而在推理阶段利用了plain网络的优势。

3.3、推理阶段的重参数化

这一节主要描述如何将一个训练时的多分支模块转换为单一的3*3卷积。转化过程示意如图4所示:

其过程简单解析一下:

  • 首先每个分支都有一个BN层,因此,需要将BN和卷积层融合(shortcut视为一个1*1卷积层),可以参照这篇博客
  • 卷积和BN融合后,得到了一个3*3卷积和两个1*1卷积,需要将1*1卷积通过zero-padding的方式变成3*3卷积;
  • 最后将3个3*3卷积加起来,即可得到一个单一的3*3卷积。

3.4、网络规格

RepVGG的网络规格如表2所示:

RepVGG是一种VGG风格的网络,使用plain结构,并大量使用了3*3卷积。但是没有向VGG那样使用max-pooling,因为作者希望RepVGG的主体中只有一种操作。为了实现下采样,在每个stage的第一个3*3卷积中将步长设为2。在分类任务中,网络的输出头是GAP+全连接;对于其他任务,指定的任务头也可以利用各个层的输出。

对于每个stage的层数设计,基于以下三个准则:

  • (1)第一个stage的输入是大分辨率,比较耗时,因此只用了一个卷积层来减少推理时间;
  • (2)最后一个层由于通道比较多,为了减少参数量,也只设计了一个卷积层;
  • (3)按照ResNet的设计,把更多层放在了倒数第二个stage;

因此,网络层数的设计就跟表2中描述的一样:5个stage中的层数分别为1、2、4、14、1,这种设计称为RepVGG-A。此外,还设计更深的网络,如RepVGG-B是在第2,3,4stage多了一个卷积层。RepVGG-A对标ResNet-18/34/50等轻量级网络,RepVGG-B对标更高性能的网络。

对于通道数,采用了VGG和ResNet所用的经典分配: [64,128,256,512]。并设置了两个乘数因子a,b分别控制前四个stage和最后一个stage的通道数,通常b>a,因为希望对于分类和其他下游任务来说,使最后一层具有更多的语义信息。而最后一个stage设置的因子大一些也无所谓,因为最后一个stage只有一个卷积层。最终,第2,3,4,5个stage的通道分配为 [64a,128a,256a,512b],而第1个stage的通道设置为min(64,64a),因为第1个stage中的feature map分辨率较高,这样设置可以防止进行大量卷积运算。

不同规模的RepVGG如表3所示:

此外,为了进一步降低参数量和计算量,可以选择使用3*3的分组卷积与原来的3*3卷积交替配置。具体的,在RepVGG-A的3-5-7-...-21卷积层采用了组卷积;此外,在RepVGG-B的23-25-27卷积层同样采用了组卷积。

4、实验结果

5、总结

主要是提出了RepVGG网络,简单堆叠3*3卷积和RELU,使其在GPU和专业推理芯片上非常适合使用。并且利用重参数化技术对训练和推理阶段进行了解耦,训练阶段多分支,推理阶段单分支,并且能够在ImageNet上达到80%的top-1准确率,与最先进的复杂模型相比,具有良好的速度精度平衡。

 

 

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AICVHub

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

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

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

打赏作者

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

抵扣说明:

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

余额充值