RepVGG

发布时间:2023-12-10 16:00

论文:https://arxiv.org/pdf/2101.03697v3.pdf
代码:https://github.com/DingXiaoH/RepVGG

VGG式的推理模型,由3 * 3卷积块和ReLU激活函数组成。
训练时用的是一个多分支的网络,然后通过结构re-parameter技术得到推理网络。因为用到了结构re-parameter,所以叫做RepVGG。

1 简介

复杂网络可以取得更高的识别精度,但是有如下缺点:

  1. 复杂的多分支结构(ResNet中的残差直连通道、Inception中的多分支相加)使得模型难以实现,降低了内存利用率和推理速度;
  2. 某些组件(Xception和MobileNets中的depthwise卷积、ShuffleNet中的channel shuffle)增加了内存访问代价,很多设备是不支持的;

内存利用率、内存访问速度等众多因素都可能影响模型的推理速度,所以单纯使用FLOPs是无法得到准确的模型推理速度的。所以虽然很多新的模型比VGG、ResNet-18/34/50的FLOPs要小,但实际的运行速度却不一定会更快。

多分支的网络可以看做是多个浅层网络的集成,所以训练过程中可以避免梯度弥散,取得比plain 网络更好的效果。但上面也说到了多分支网络在推理过程中的缺点,所以本文作者通过结构re-parameter的技术用多分支网络进行训练,但只用plain网络进行推理。re-parameter是指一个模块和对应的参数可以映射到另一个不同结构的模块,新模块的参数也跟着调整,确保两个模块可以取得相同的效果

本文的主要贡献:

  1. 提出了RepVGG,在图像分类和语义分割领域取得了SOTA的效果,且具有良好的处理效率;
  2. 提出了使用结构re-parameter解耦训练时的多分支网络和推理时的plain网络。

本文的RepVGG推理网络具有下述优点:

  1. plain结构,没有任何额外的分支;
  2. 只使用了3 * 3卷积和ReLU;
  3. 网络结构没有刻意进行设计;

2 核心思想

2.1 简洁网络的优点

2.1.1 速度快

很多多分支网络的FLOPs比VGG小,但实际的推理速度却比VGG慢,这说明两个网络的计算密度是不同的。例如VGG-16的FLOPs比EfficientNet-B3大8.4倍,但实际运行时的吞吐量却是后者的1.8倍,说明VGG的计算密度是后者的15倍。

FLOPs和实际吞吐量之间的差异主要在于前者没有考虑两个因素:

  1. 内存访问代价(Memory Access Cost,MAC)
    虽然分支addition或concatenation的计算量不大,但是MAC很大。尤其在使用分组卷积时,MAC占用了大量的时间。
  2. 模型的并行化程度
    两个具有相同FLOPs的模型,并行化程度却可以有很大的差距。NASNET-A中一个块的单独卷积和池化操作的分散计算量是13,ResNet中一个块的分散计算量是2或3。模型的分散程度越大,在具备强大的并行能力的GPU上是无法充分发挥GPU的能力进行高效并行计算的。

2.1.2 内存占用小

多分支结构需要在进行add/concatenate之前保存各个分支的计算结果,所以总体内存占用更大。但一个plain网络,总是对前一层的输出进行计算得到本层的输出,无需额外的存储空间,内存占用更小。如下图所示:
RepVGG_第1张图片

在设计专用硬件时,如果内存需求量小,那么就可以集成更多的计算单元以进一步加速网络的推理。

2.1.3 网络结构更容易设计

多分支网络需要进行定制化的设计。例如,ResNet需要对每一个残差块的最后一个卷积层进行定制化设计以使得其输出和残差块的输入具有相同的尺寸。

更不好的一点是多分支结构会限制模型剪枝的应用,会使得剪枝的过程需要很强的技巧,如果剪枝不得当,可能模型的准确性会大幅下降或者剪枝的提速效果有限。

而一个plain的网络没有上述限制,可以自由地进行网络结构设计和剪枝。

2.2 训练多分支网络

plain网络虽然有2.1节介绍的优点,但有一个核心缺点:准确率较低。所以本文在模型训练时还是使用了多分支网络。本文具体用的是ResNet,其核心思想是 y = f(x)+xy=f(x)+g(x)f(x)表示残差学习函数,x表示shortcut通路,g(x)表示使用了1 * 1 卷积的shortcut通路。ResNet之所以能取得较好的训练效果,是因为其可以看做是多个浅层网络的集成,对于包含n个残差块的ResNet,可以看作是 2 n 2^n 2n个浅层网络的集成,2表示每个残差块中的两个分支。

本文作者设计了一个新的残差块y = x + f(x) + g(x),按照上一段的思想,具有n个该残差块的网络可以看作是 3 n 3^n 3n个浅层网络的集成。

2.3 Re-parameter过程

RepVGG_第2张图片
本节讲述如何把y=x+f(x)+g(x)通过re-parameter变为一个3 * 3卷积的过程。

输入: 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 C 1 C_1 C1个channel,上图中定义为2;
输出: 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 2 C_2 C2个channel,上图中定义为2;
参数:

  • 3 * 3分支:
    • 卷积核 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
    • BN层的 μ ( 3 ) {\mu}^{(3)} μ(3) σ ( 3 ) {\sigma}^{(3)} σ(3) γ ( 3 ) {\gamma}^{(3)} γ(3) β ( 3 ) {\beta}^{(3)} β(3)

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号