Advertisement

RepVGG(2021 CVPR)

阅读量:
论文标题 RepVGG: Making VGG-style ConvNets Great Again
论文作者 Xiaohan Ding, Xiangyu Zhang, Ningning Ma, Jungong Han, Guiguang Ding, Jian Sun
发表日期 2021年01月01日

| GB引用| > Ding Xiaohan, Zhang Xiangyu, Ma Ningning, et al. RepVGG: Making VGG-style ConvNets Great Again[J]. Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2021, abs/2101.03697: 13728-13737.

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

摘要

本文介绍了一种名为RepVGG的简单但强大的卷积神经网络架构,该架构在推理阶段由3×3卷积和ReLU组成,而在训练阶段则采用多分支结构通过结构重参数化技术,RepVGG能够在保持高精度的同时实现更快的运行速度 。实验结果显示,在ImageNet数据集上,RepVGG达到了超过80%的top-1准确率,并且在GPU上的运行速度比ResNet快83%,展示了优越的速度-准确率权衡。代码和训练模型已公开。

全文摘要

这篇论文主要介绍了一种新型的卷积神经网络(CNN)架构——RepVGG,旨在实现简单、高效的模型设计,同时保持高性能。以下是论文的主要内容总结:

  1. RepVGG架构 :提出了一种VGG风格的CNN架构,推理时仅由3x3卷积层和ReLU激活函数组成,而在训练时采用多分支拓扑结构。
  2. 结构重参数化技术 :通过这种技术,RepVGG能够在训练和推理时解耦多分支和单路径架构,通过代数变换将训练时的参数转换为推理时的单一3x3卷积核。
  3. 性能和效率 :RepVGG在保持模型简单性的同时,实现了与复杂模型相媲美甚至更好的性能。在NVIDIA 1080Ti GPU上,RepVGG模型的运行速度显著快于ResNet系列模型。
  4. 实验验证 :在ImageNet数据集上,RepVGG达到了超过80%的top-1准确率,并且在语义分割任务上展示了良好的泛化性能。
  5. 设计优势 :RepVGG具有高速度、高内存效率和灵活性,易于在通用计算设备和专用硬件上实现。
  6. 相关研究 :论文讨论了从单路径到多分支的网络架构发展,以及模型重参数化、Winograd卷积算法等相关技术。
  7. 实验细节 :详细描述了在ImageNet分类和Cityscapes语义分割任务上的实验设置、数据增强策略和训练细节。
  8. 参数和速度权衡 :论文展示了RepVGG在不同配置下的准确性和速度,以及与现有最先进模型的权衡。
  9. 局限性 :虽然RepVGG在GPU和专用硬件上表现出色,但可能不如MobileNets和ShuffleNets等模型在低功耗设备上受欢迎。
  10. 结论 :RepVGG是一个简单、高效且适合于GPU和专用硬件的CNN架构,通过结构重参数化方法实现了高准确率,并展示了优越的速度-准确率权衡。

研究问题

如何通过结构重参数化技术在保持训练时多分支架构的同时实现推理时的简单卷积神经网络架构,从而提高模型的速度和效率?

研究方法

实验研究: 通过构建不同的RepVGG模型,并在ImageNet数据集上进行训练和测试,验证了该架构在图像分类任务上的性能和速度优势。

混合方法研究: 结合结构重参数化技术,在训练阶段采用多分支结构(包含身份映射和1×1卷积分支),而在推理阶段转换为单一的3×3卷积层,从而实现训练和推理阶段的不同架构设计。

比较研究: 将RepVGG模型与多种经典及最新模型(如ResNet、EfficientNet等)进行对比,评估其在准确率和速度方面的表现。

纵向研究: 通过对不同深度和宽度的RepVGG模型进行训练和测试,分析模型复杂度与性能之间的关系,优化模型配置以达到最佳的速度-准确率平衡。

研究思路

  1. 设计VGG风格的简化架构 :RepVGG采用了一个类似于VGG的推理时架构,该架构仅由一系列3x3的卷积层(convolution)和ReLU激活函数堆叠而成。
  2. 结构重参数化技术 :RepVGG在训练时使用多分支拓扑结构,而在推理时通过结构重参数化技术将模型转换为单路径架构。这种转换通过简单的代数操作实现,将训练时的参数转换为推理时的单一3x3卷积核。
  3. 训练和推理时架构的解耦 :RepVGG在训练时使用包含恒等连接(identity connections)和1x1卷积分支的多分支模型,这些分支可以在训练完成后通过结构重参数化被移除,从而在推理时只保留3x3卷积和ReLU。
  4. 优化内存使用和计算效率 :由于RepVGG在推理时仅使用单一类型的操作(3x3卷积后跟ReLU),这使得模型在通用计算设备上运行速度快,并允许专用硬件实现更高的速度。
  5. 无需复杂的架构搜索或手动调整 :RepVGG的架构是直接构建的,没有使用自动架构搜索、手动调整或复合缩放策略等复杂设计方法。
  6. 提高模型性能 :尽管RepVGG是一个简单的架构,但它通过结构重参数化技术实现了与复杂模型相媲美甚至更好的性能。
  7. 实现高效率和高速度 :RepVGG在NVIDIA 1080Ti GPU上的运行速度比ResNet-50快83%,或比ResNet-101快101%,同时保持了更高的准确率。
  8. 在图像分类和语义分割任务上验证模型 :RepVGG在ImageNet图像分类任务上达到了超过80%的top-1准确率,并在语义分割任务上展示了良好的泛化性能。

通过这些方法,RepVGG成功地解决了如何构建一个既简单又高效的卷积神经网络架构的问题,使其在保持高准确率的同时,具有更快的推理速度和更好的硬件适应性。

通过结构重参数化构建RepVGG

使用简单卷积神经网络至少有三个原因:它们快速、内存经济且灵活

Fast 许多最近的多分支架构比VGG具有更低的理论浮点运算,但可能无法运行得更快。例如,VGG-16的FLOPs是EfficientNet-B3的8.4倍[35],但在1080Ti上运行速度是后者的1.8倍(表4 ),这意味着前者的计算密度是后者的15倍。除了Winograd卷积带来的加速外,FLOPs与速度之间的差异可以归因于两个对速度有相当大的影响的重要因素,但未被FLOPs考虑在内:内存访问成本(MAC)和并行度[24]。例如,尽管分支加法或串联所需的计算可以忽略不计,但MAC(乘法累加)是显著的。此外,MAC在分组卷积中占据了大量时间使用。另一方面,在相同的FLOPs下,一个具有高并行度的模型可能比另一个具有低并行度的模型快得多。随着多分支拓扑在Inception和自动生成架构中的广泛应用,使用多个小型操作符代替了少数几个大型操作符。先前的工作 [24] 报告称,在NASNET-A [43] 中,碎片化操作符的数量(即在一个构建块中的单独卷积或池化操作的数量)为13,这对于具有强大并行计算能力的设备(如GPU)来说并不友好,并引入了额外的开销,例如内核启动和同步。相比之下,这个数字在ResNets中是2或3,我们将其设为1:一个单独的卷积

Memory-economical 多分支拓扑结构是内存效率低下的,因为每个分支的结果都需要保留直到进行加法或拼接,显著提高了内存占用的峰值。图3显示残差块的输入需要保持直到加法操作 。假设模块保持特征图的大小,额外内存占用的峰值是输入的2倍。相比之下,一个普通的拓扑结构允许在特定层的操作完成后立即释放由输入占用的内存。在设计专用硬件时,一个简单的卷积神经网络(ConvNet)允许深度内存优化,并降低了内存单元的成本,这样我们就可以在芯片上集成更多的计算单元。

Flexible 多分支拓扑结构对架构规范施加了约束。 例如,ResNet要求卷积层被组织成残差块,这限制了灵活性,因为每个残差块的最后一个卷积层必须产生形状相同的张量,否则快捷连接加法就没有意义了。更糟糕的是,多分支拓扑限制了通道剪枝[22, 14]的应用,这是一种实用技术,用于移除一些不重要的通道,而某些方法可以通过自动发现每层的适当宽度[8]来优化模型结构。然而,多分支模型使得剪枝变得棘手,并导致显著的性能下降或低加速比[7, 22, 9]。相比之下,一个简单的架构允许我们根据需求自由配置每一个卷积层,并进行剪枝以获得更好的性能-效率权衡。

训练时的多分支架构

普通网络有很多优点,但有一个致命的弱点: 性能差 。例如,使用现代组件如 BN [19],VGG-16 在 ImageNet 上可以达到超过 72% 的 top-1 准确率,这似乎已经过时了。我们的结构重新参数化方法受到了ResNet的启发,ResNet明确构建了一个快捷分支来将信息流建模为y=x+f(x),并使用残差块来学习f。当xf(x)的尺寸不匹配时,它变成y = g(x)+ f(x),其中g(x)是一种由1 × 1卷积实现的卷积快捷方式。对于ResNets成功的解释是,这种多分支架构使得模型成为众多较浅模型的隐式集成[36]。特别是,具有n个块的模型可以被解释为2^n个模型的集成,因为每个块将流程分支成两条路径。

由于多分支拓扑存在干扰的缺点,但分支似乎对训练有益 [36],我们使用多个分支来制作众多模型的仅训练时间的集成。为了使大多数成员更浅或更简单,我们使用类似ResNet的身份 (仅当尺寸匹配时) 和1 × 1分支,使得构建块的训练时间信息流为y = x+g(x)+f(x)。我们简单地堆叠几个这样的模块来构建训练时的模型。从与[36]相同的视角来看,模型变成了一个包含n个成员的集成,每个成员包含n个这样的模块。

重新参数化普通推理时模型

在本小节中,我们描述了如何将一个训练好的块转换为一个单独的3×3卷积层以用于推理 。请注意,我们在每个分支的加法之前使用了批量归一化(BN)(见图4 )。正式地,我们使用\mathrm{W}^{(3)}\in\mathbb{R}^{C_2\times C_1\times3\times3}来表示一个具有C_1输入通道和C_2输出通道的 3 × 3 卷积层的核。并且\mathrm{W}^{(1)}\in\mathbb{R}^{C_2\times C_1}对于 1 × 1分支的核。我们使用\boldsymbol{\mu}^{(3)},\boldsymbol{\sigma}^{(3)},\boldsymbol{\gamma}^{(3)},\boldsymbol{\beta}^{(3)}作为 3 × 3 卷积后 BN 层的累积均值、标准差以及学习到的缩放因子和偏置\boldsymbol{\mu}^{(1)},\boldsymbol{\sigma}^{(1)},\boldsymbol{\gamma}^{(1)},\boldsymbol{\beta}^{(1)}用于 1 × 1 卷积后 BN 层,以及\boldsymbol{\mu}^{(0)},\boldsymbol{\sigma}^{(0)},\boldsymbol{\gamma}^{(0)},\boldsymbol{\beta}^{(0)}用于恒等分支。设\mathrm{M}^{(1)}\in\mathbb{R}^{N\times C_{1}\times H_{1}\times W_{1}},\mathrm{M}^{(2)}\in\mathbb{R}^{N\times C_{2}\times H_{2}\times W_{2}}分别为输入和输出,而表示卷积操作符。如果C_1=C_2,H_1=H_2,W_1=W_2,我们有

\begin{aligned}\mathrm{M}^{(2)}&\mathrm{=bn(M^{(1)}*W^{(3)},\boldsymbol{\mu}^{(3)},\boldsymbol{\sigma}^{(3)},\boldsymbol{\gamma}^{(3)},\boldsymbol{\beta}^{(3)})}\\ &+\mathrm{bn}(\mathrm{M}^{(1)}*\mathrm{W}^{(1)},\boldsymbol{\mu}^{(1)},\boldsymbol{\sigma}^{(1)},\boldsymbol{\gamma}^{(1)},\boldsymbol{\beta}^{(1)})\quad(1)&\\ &+\mathrm{bn}(\mathrm{M}^{(1)},\boldsymbol{\mu}^{(0)},\boldsymbol{\sigma}^{(0)},\boldsymbol{\gamma}^{(0)},\boldsymbol{\beta}^{(0)}).\end{aligned}

否则,我们简单地不使用恒等映射分支,因此上述方程只有前两项。这里的 bn 是推理时的 BN 函数,形式上,对\forall1\leq i\leq C_2

\mathrm{bn}(\mathrm{M},\boldsymbol{\mu},\boldsymbol{\sigma},\boldsymbol{\gamma},\boldsymbol{\beta})_{:,i,:,:}=(\mathrm{M}_{:,i,:,:}-\boldsymbol{\mu}_i)\frac{\boldsymbol{\gamma}_i}{\boldsymbol{\sigma}_i}+\boldsymbol{\beta}_i.\quad(2)

我们首先将每个 BN 及其前面的卷积层转换为带偏置向量的卷积层。设\{\mathrm{W}^{\prime},\mathbf{b}^{\prime}\}是从\{\mathrm{W},\boldsymbol{\mu},\boldsymbol{\sigma},\boldsymbol{\gamma},\boldsymbol{\beta}\}转换而来的核和偏置,我们有

\mathrm{W}_{i,:,:,:}^{\prime}=\frac{\gamma_i}{\sigma_i}\mathrm{W}_{i,:,:,:},\quad\mathrm{b}_i^{\prime}=-\frac{\mu_i\gamma_i}{\sigma_i}+\beta_i.\quad(3)

那么很容易验证,对\forall1\leq i\leq C_2

\mathrm{bn}(\mathrm{M}*\mathrm{W},\boldsymbol{\mu},\boldsymbol{\sigma},\gamma,\boldsymbol{\beta})_{:,i,:,:}=(\mathrm{M}*\mathrm{W}^{\prime})_{:,i,:,:}+\mathrm{b}_i^{\prime}.\quad(4)

这种转换也适用于恒等映射分支,因为恒等映射可以被视为一个1 × 1的卷积,其核为单位矩阵。经过这样的转换后,我们将得到一个3 × 3的卷积核,两个1 × 1的卷积核,以及三个偏置向量 。然后我们 通过将** 三个偏置向量相加得到最终的偏置** ,通过将1×1的核添加到3×3核的中心点来得到最终的3×3核,这可以通过首先将两个1×1核零填充到3×3,然后将三个核相加来轻松实现如图4所示

请注意,这种变换的等价性要求 3 × 3 和 1 × 1 层具有相同的 步长 ,并且后者的填充配置应比前者少一个像素。例如,对于一个3×3的层,该层通过一个像素对输入进行填充,这是最常见的案例,1×1的层应该有\mathrm{padding}=0

结构设计规范

表2显示了RepVGG的规格 ,包括深度和宽度。从某种意义上说,RepVGG是VGG风格的,因为它采用了一个简单的拓扑结构,并大量使用3×3卷积,但它不像VGG那样使用最大池化,因为我们希望主体只有一种类型的运算符。我们将3×3层安排在5个阶段中,每个阶段的第一层通过步长为2进行下采样。对于图像分类,我们使用全局平均池化后,通过一个全连接层作为头。对于其他任务,可以在任何层产生的特征上使用特定于任务的头部。

我们按照三个简单的指导方针来决定每个阶段的层数

  • 第一阶段以大分辨率运行,这很耗时,因此我们只使用一层以降低延迟。
  • 最后一阶段将拥有更多的通道,因此我们仅使用一层来节省参数。
  • 我们将最多的层放入了倒数第二阶段(在ImageNet上具有14 × 14的输出分辨率),遵循ResNet及其最近的变体[12, 28, 38](例如,ResNet-101在其14 × 14分辨率阶段使用了69层)。

我们让五个阶段分别具有1、2、4、14、1层来构建一个名为RepVGG-A的实例。我们也构建了一个更深的RepVGG-B,它在Stage 2、3和4中还多有2层。我们使用RepVGG-A与其他轻量级和中量级模型进行竞争,包括ResNet-18/34/50,而RepVGG-B则与高性能模型竞争。

我们通过均匀缩放经典宽度设置[64, 128, 256, 512](例如,VGG和ResNets)来确定层宽。我们使用乘数a来缩放前四个阶段,并且使用b来缩放最后一个阶段,通常设置b > a,因为我们希望最后一层对于分类或其他下游任务具有更丰富的特征。由于RepVGG在最后阶段只有一个层,较大的b并不会显著增加延迟或参数的数量。具体来说,第二阶段、第三阶段、第四阶段和第五阶段的宽度分别是[64a, 128a, 256a, 512b]。为了避免在高分辨率特征图上进行大规模卷积操作,如果a < 1,我们会缩小第一阶段的规模,但不会放大它的规模,使得第一阶段的宽度是min(64, 64a)

为了进一步减少参数和计算量,我们可以选择交错使用组卷积3 × 3层和密集层,以效率换取准确度。具体来说,我们为RepVGG-A的第3、5、7、…、21层以及RepVGG-B的额外的第23、25和27层设置了群组数量 g。为了简化,我们全局设置g为 1、2 或 4,对于这些没有逐层调整的层。我们不使用相邻的组间卷积层,因为这会禁用通道间信息交换,并带来副作用 [41]:来自某个通道的输出将仅由一小部分输入通道派生。请注意,1×1分支应具有与3×3卷积相同的g

研究背景

研究背景主要集中在经典卷积神经网络(ConvNet)如VGG、ResNet、Inception等的发展历程及其优缺点上。这些模型通过引入复杂的多分支架构,提高了图像识别任务的性能,但同时也带来了实现复杂、推理速度慢以及内存利用率低等问题。例如,虽然一些新型模型如EfficientNet和RegNet具有较低的浮点运算次数(FLOPs),但在实际速度方面并未显著提升。因此,尽管多分支架构在训练时表现出色,但对于推理阶段而言,这种设计并不理想。此外,许多复杂的模型需要大量的计算资源或人力来优化,且某些大型模型甚至无法在普通GPU上进行训练,限制了其应用范围。相比之下,简单的单路径模型如VGG和原始版本的ResNet由于其简洁性,在实际应用中仍然被广泛使用。

研究现状

  • RepVGG是一种简单的卷积神经网络架构,通过结构重参数化技术实现了训练时的多分支拓扑和推理时的单一路径拓扑转换。
  • 相比于复杂的多分支设计(如ResNet和Inception),RepVGG模型在推理时更加高效,减少了内存占用,并且更容易实现和定制。
  • RepVGG在ImageNet上的表现超过了许多复杂模型,达到了超过80%的top-1准确率,这是首次由简单模型达到的水平。
  • 结构重参数化方法使得RepVGG在保持高精度的同时,显著提高了模型的速度,相比于ResNet-50和ResNet-101,速度分别提高了83%和101%。

研究目的及创新点

这篇论文提出了一种名为RepVGG的卷积神经网络(CNN)架构,旨在解决以下问题

  1. 简化模型架构 :许多现代CNN架构变得越来越复杂,这使得模型难以实现和定制,降低了推理速度,并减少了内存利用率。
  2. 提高推理速度 :尽管一些新型模型在浮点运算次数(FLOPs)上低于旧模型(如VGG和ResNet系列),但它们可能并没有运行得更快。这是因为FLOPs并不精确反映实际速度,实际速度受到多种因素的影响。
  3. 提高模型性能 :尽管简单模型易于实现,但它们在性能上往往无法与复杂模型相媲美。RepVGG旨在通过结构重参数化技术,使简单的VGG风格的模型在性能上超越许多复杂模型。
  4. 提高模型的通用性和灵活性 :多分支拓扑结构限制了模型架构的灵活性,例如ResNet要求卷积层组织为残差块,这限制了结构的灵活性。RepVGG通过简化的架构,允许更自由地配置每个卷积层。
  5. 提高模型的内存效率 :多分支拓扑结构由于需要保持每个分支的结果直到进行加法或连接,导致内存占用显著增加。RepVGG的简单拓扑允许在完成操作后立即释放内存,从而提高内存效率。
  6. 实现训练和推理时模型架构的解耦 :RepVGG通过结构重参数化技术,在训练时使用多分支拓扑结构以提高性能,在推理时转换为简单的堆叠3x3卷积和ReLU,以提高速度和效率。

本文的研究目的 是提出一种名为RepVGG的简单但强大的卷积神经网络架构,该架构在训练时具有多分支拓扑结构,而在推理时则转化为单一路径结构 。这种设计通过结构重参数化技术实现,使得模型在训练和推理阶段之间能够灵活切换。研究的意义 在于展示了如何通过简化模型架构来提高计算效率和速度,同时保持或提升模型的准确性 。RepVGG不仅在ImageNet上达到了超过80%的top-1准确率,而且在GPU上的运行速度比其他复杂的模型如ResNet更快,显示出良好的准确度与速度之间的权衡。此外,RepVGG还适用于专门的硬件加速,进一步提高了其在实际应用中的竞争力。

创新点

  • 创新点1:提出了一种名为RepVGG的简单但强大的卷积神经网络架构,该架构在推理阶段仅由3×3卷积和ReLU组成,而在训练阶段具有多分支拓扑结构。
  • 创新点2:通过结构重参数化技术实现了训练时间和推理时间架构的解耦,使得训练阶段的多分支模型可以转换为推理阶段的单一3×3卷积模型。
  • 创新点3:验证了RepVGG在图像分类和语义分割任务上的有效性,展示了其高效的实现方式和良好的性能。

实验

实验概述

论文中进行了以下实验来验证RepVGG架构的性能和效率:

  1. ImageNet分类 : 作者在ImageNet-1K数据集上比较了RepVGG与其他经典和最新模型(包括VGG-16, ResNet, ResNeXt, EfficientNet, 和RegNet)的性能。他们使用不同的乘数(multipliers)a和b来生成一系列RepVGG模型,并与这些基线模型进行了比较。

  2. 结构重参数化的重要性 : 通过一系列消融研究和比较,作者证明了结构重参数化技术对于RepVGG性能的重要性。这些实验包括移除恒等分支和/或1x1分支,以及比较不同变体和基线模型。

  3. 语义分割 : 作者在Cityscapes数据集上验证了使用ImageNet预训练的RepVGG模型进行语义分割任务的泛化性能。他们使用了PSPNet框架,并与其他使用ResNet-50和ResNet-101作为主干的模型进行了比较。

  4. 速度测试 : 对于每个模型,作者在1080Ti GPU上测试了其推理速度,使用不同的批量大小,并记录了时间消耗。

  5. 参数效率 : 作者比较了RepVGG模型与其他模型的参数数量,以展示RepVGG的参数效率。

  6. 准确性和速度的权衡 : 作者展示了RepVGG模型在不同配置下的准确性和速度,以及与现有最先进模型的权衡。

  7. 不同训练设置 : 对于轻量级和中量级模型,作者使用了简单的数据增强和标准训练设置。对于重量级模型,他们使用了更复杂的数据增强和训练技术,如Autoaugment、label smoothing和mixup。

  8. 不同配置的RepVGG模型 : 作者构建了不同配置的RepVGG模型,包括具有不同深度和宽度的RepVGG-A和RepVGG-B系列,以及具有交错分组卷积层的变体。

  9. 不同硬件上的测试 : 作者在NVIDIA 1080Ti GPU上进行了速度测试,以评估RepVGG在实际应用场景中的性能。

  10. 不同输入分辨率的测试 : 在语义分割实验中,作者测试了不同输入分辨率下的模型性能和速度。

这些实验全面评估了RepVGG架构在图像分类和语义分割任务上的性能、速度、参数效率和泛化能力。

分类实验

我们将RepVGG与包括VGG-16 [31]、ResNet [12]、ResNeXt [38]、EfficientNet [35]和RegNet [28]在内的经典和最先进的模型在ImageNet-1K [6]上进行了比较,该数据集包含128万张训练图像和5万张验证图像。我们使用EfficientNet-B0/B3和RegNet-3.2GF/12GF作为中等重量和重型最先进模型的代表。我们改变乘数ab来生成一系列的RepVGG模型,以与基线进行比较(表3 )。

我们首先将RepVGG与ResNets [12]进行比较,后者是最常见的基准测试。我们使用RepVGG-A0/A1/A2分别与ResNet-18/34/50进行比较。为了与更大的模型进行比较,我们构建了更深的RepVGG-B0/B1/B2/B3,其宽度逐渐增加。对于那些具有交错分组层的RepVGG模型,我们在模型名称后缀以g2/g4。

对于训练轻量级和中量级模型,我们仅使用简单的数据增强流程,包括随机裁剪和左右翻转,遵循官方PyTorch示例[27]。我们使用8个GPU上的全局批量大小为256,初始学习率为0.1,并进行120个周期的余弦退火,标准的SGD动量系数为0.9,卷积层和全连接层的核上的权重衰减为10^{-4}。对于包括 RegNetX-12GF、EfficientNet-B3 和 RepVGG-B3 在内的重型模型,我们使用了 5 个周期的预热,200 个周期的余弦学习率退火,标签平滑 [34] 和混合增强 [40](遵循 [13]),以及一个由 Autoaugment [5]、随机裁剪和翻转组成的数据增强流程。RepVGG-B2及其g2/g4变体在两种设置中都进行了训练。我们使用1080Ti GPU 对每种模型的运行速度进行了测试,首先通过输入50个批次来预热硬件,然后记录时间使用情况,再输入50个批次。为了公平比较,我们在同一块GPU上测试了所有模型,并且也将基线中的所有卷积-BN序列转换成了带有偏置的卷积(方程 3:\mathrm{W}_{i,:,:,:}^{\prime}=\frac{\gamma_i}{\sigma_i}\mathrm{W}_{i,:,:,:},\quad\mathrm{b}_i^{\prime}=-\frac{\mu_i\gamma_i}{\sigma_i}+\beta_i.\quad(3))。

表4展示了RepVGG在准确度和速度之间的有利权衡 :RepVGG-A0在准确度上比ResNet-18高出1.25%,在速度上快33%;RepVGG-A1比ResNet-34高出0.29%/快64%;RepVGG-A2比ResNet-50高出0.17%/快83%。通过交错的分组式层(g2/g4),RepVGG模型在合理的准确度下降的情况下进一步加速:RepVGG-B1g4比ResNet-101快0.37%/准确度高101%,而RepVGG-B1g2在保持相同准确度的情况下,速度是ResNet-152的2.66倍。尽管参数数量不是我们的主要关注点,但上述所有的RepVGG模型在参数效率上都比ResNets更优。与经典的VGG-16相比,RepVGG-B2只有58%的参数,运行速度提高了10%,并且准确率高出了6.57%。与我们所知的使用RePr [26](一种基于剪枝的训练方法)训练的最高准确率(74.5%)的VGG相比,RepVGG-B2在准确率上高出4.28%。

与最先进的基线相比,RepVGG也显示出良好的性能,考虑到其简单性:RepVGG-A2比EfficientNet-B0好1.37%/59%,RepVGG-B1比RegNetX-3.2GF好0.39%,运行速度略快。值得注意的是,RepVGG 模型在 200 个周期内达到了超过 80% 的准确率(表 5 ),这是我们所知的,纯模型首次追赶上最先进的水平。与 RegNetX-12GF 相比,RepVGG-B3 运行速度快了31%,考虑到 RepVGG 并不需要大量的人力来精细化设计空间,如RegNet [28],并且架构超参数被随意设置,这是令人印象深刻的。

作为计算复杂性的两个代理,我们按照第2.4节描述的,计算理论上的FLOPs和Wino MULs。例如,我们发现EfficientNet-B0/B3中的所有卷积都没有使用Winograd算法进行加速。表4显示,Wino MULs是GPU上的更好代理 ,例如,ResNet-152 的运行速度比 VGG-16 慢,尽管其理论上的浮点运算次数(FLOPs)较低,但其Wino MULs较高。当然,实际速度永远应该是黄金标准

结构重参数化是关键

在本小节中,我们验证了我们结构重参数化技术的重要性表6 )。所有模型都是从头开始训练的,共训练了120个周期,使用了上述相同的简单训练设置。首先,我们通过从RepVGG-B0的每个区块中去除恒等映射和/或1个×1分支来进行消融研究。当两个分支都被移除后 ,训练时的模型退化为一个普通的平面模型,其准确率仅能达到72.39%。通过使用1×1卷积,准确率提升至73.15%,或者使用恒等映射时,准确率可以提升至74.79%。全功能RepVGG-B0的准确度为75.14%,比普通平面模型高出2.75%。从训练时(即尚未转换)模型的推理速度来看,通过结构化重参数化移除身份和1×1分支,带来了显著的加速。

然后我们构建了一系列变体和基线用于在RepVGG-B0上进行比较(表7 )。同样,所有模型都是从头开始训练的,共训练了120个周期。

  • 恒等映射分支中移除批量归一化后 ,恒等映射功能将不再包含批量归一化。
  • 后添加的批量归一化 (Batch Normalization,BN)移除了三个分支中的BN层,并在加法之后附加了一个BN层。换句话说,BN的位置从加法前变为了加法后。
  • +ReLU 在分支中插入ReLU到每个分支(在批量归一化后和加法前)。由于这样的块不能转换成单一的卷积层,它没有实际用途,我们仅仅希望看到更多的非线性是否会带来更高的性能。
  • DiracNet [39] 采用了精心设计的卷积核重参数化方法,如第2.2节所述。我们使用其官方的PyTorch代码来构建层,以替代原始的3 × 3卷积。
  • Trivial Re-param 是通过直接将一个恒等核添加到3×3核中,对卷积核进行的一种更简单的重参数化方法,这可以看作是DiracNet的一个简化版本(\mathrm{\hat{W}=I+W}[39])。
  • 非对称卷积块 (ACB)[10] 可以被视为另一种形式的结构重参数化。我们与ACB进行比较,以查看我们的结构重参数化改进是否归因于组件级别的过度参数化(即,额外的参数使得每个3 × 3卷积更强)。
  • 残差重排 通过以类似ResNet的方式(每个块2层)重新组织每个阶段来构建每个阶段。具体来说,生成的模型在第一阶段和最后一阶段各有一个3×3层,而在第二、第三、第四阶段分别有2、3、8个残差块,并且像ResNet-18/34一样使用了快捷连接。

我们认为结构重参数化相较于DiractNet和平凡重参数化(Trivial Re-param )的优越性在于,前者依赖于通过具有非线性行为的具体结构(例如批量归一化BN)的实际数据流,而后者仅仅使用了卷积核的另一种数学表达形式。前者“re-param”意味着“使用一个结构的参数来参数化另一个结构”,但后者意味着“首先用另一组参数计算参数,然后用它们进行其他计算”。含有非线性组件,如训练时的批量归一化(BN),前者不能被后者近似。作为证据,去除BN可以降低精度,加入ReLU提高精度。换句话说,尽管RepVGG块可以等效地转换为单个卷积层用于推理,但推理时间的等效性并不意味着训练时间的等效性 ,因为我们无法构建一个卷积层来具有与RepVGG块相同的训练时间行为。

与ACB的比较表明,RepVGG的成功不应简单归因于每个组件过度参数化的效果,因为ACB使用了更多的参数,但性能却较差。作为双重检查 ,我们将ResNet-50中的每个3 × 3卷积替换为RepVGG块,并从头开始训练120个周期。准确度为76.34%,仅比ResNet-50基线高出0.03%,这表明RepVGG风格的结构重参数化不是一个通用的过度参数化技术,而是一种对于训练强大的普通卷积神经网络至关重要的方法论 。与Residual Reorg相比,RepVGG在拥有相同数量的3 × 3卷积和额外的训练及推理快捷连接的真正残差网络中表现更优,性能提升了0.58%,这并不令人惊讶,因为RepVGG拥有更多的分支。例如,分支结构使得RepVGG的第4阶段成为2 × 3^{15} = 2.8 × 10^7个模型的集成[36],而Residual Reorg的数量是2^8 = 256

语义分割

我们验证了在Cityscapes [4](表8 )上使用ImageNet预训练的RepVGG进行语义分割的泛化性能。我们使用了PSPNet [42]框架,这是一个多学习率策略,基础学习率为0.01,幂为0.9,权重衰减为10^-4和在8个GPU上使用16的全局批量大小进行40个周期。
为了公平比较,我们仅将ResNet-50/101的主干网络更改为RepVGG-B1g2/B2,并保持其他设置不变。在官方的PSPNet-50/101 [42]中使用了膨胀卷积(dilated conv)在ResNet-50/101的最后两个阶段,我们也对RepVGG-B1g2/B2的最后两个阶段的所有3 × 3卷积层进行了膨胀处理。
然而,当前3 × 3膨胀卷积的实现效率不高(尽管FLOPs与3 × 3常规卷积相同),这减慢了推理速度。为了便于比较,我们构建了另外两个PSPNet(标记为快速),仅在最后5层(即第4阶段的最后4层和第5阶段的唯一层)使用扩张,使得PSPNet的运行速度略快于ResNet-50/101-骨干网络的对应物。RepVGG主干网络在平均交并比(mean IoU)上分别以1.71%和1.01%的优势超越了ResNet-50和ResNet-101,同时速度更快;RepVGG-B1g2-fast在mIoU上超越ResNet-101主干网络0.37,并且运行速度提高了62%。
有趣的是,扩张似乎对于更大的模型更有效,因为使用更多的扩张卷积层并没有改善性能,与RepVGG-B1g2-fast相比,但将RepVGG-B2的mIoU提高了1.05%,尽管速度有所合理减慢。

结果与评价

  • 解决方案: 提出了一种名为RepVGG的新架构,该架构通过结构重参数化技术将训练时间的多分支模型转换为推理时间的单一路径模型。这种架构仅包含3×3卷积和ReLU激活函数,旨在实现高性能的同时提高速度和内存效率。
  • 实施结果: 在ImageNet数据集上,RepVGG达到了超过80%的top-1准确率,并且在NVIDIA 1080Ti GPU上的运行速度比ResNet-50快83%,比ResNet-101快101%。此外,RepVGG展示了与其他最先进的模型相比更有利的速度-准确率权衡。
  • 结果评价: RepVGG不仅在性能上与复杂的模型相当或更好,而且在实现上更为简单,具有更高的参数效率。它在语义分割任务中也表现出色,证明了其在多种视觉识别任务中的通用性和有效性。

局限与建议

局限:

  • RepVGG模型在低功耗设备上的表现可能不如移动设备优化模型(如MobileNets和ShuffleNets)。

建议:

  • 未来的工作可以考虑如何提高RepVGG在低功耗设备上的性能,以使其更加适合这些设备的应用场景。

结论

  • RepVGG通过结构重参数化技术实现了训练时间和推理时间架构的解耦,达到了超过80%的ImageNet顶级精度,并且在速度和准确性之间取得了有利的权衡。
  • 该模型仅使用3×3卷积和ReLU操作,在GPU等通用计算设备上表现出色,并且可以更好地适应专门硬件以实现更高的速度。
  • 通过简单的设计,RepVGG展示了如何构建一个高效且快速的卷积神经网络,其性能优于许多复杂的模型,同时保持了模型的简洁性。

课题探索

尽管RepVGG在简化架构和提高效率方面取得了显著成果,但仍有一些潜在的探索方向,可以进一步改进模型或扩展其应用范围:

  1. 参数优化 :尽管RepVGG在参数数量上已经较为高效,但可以进一步探索不同的网络深度、宽度和组数配置,以寻求更优的参数效率和性能平衡。
  2. 正则化技术 :研究不同的正则化方法,如Dropout、权重衰减等,对RepVGG模型的影响,以提高其泛化能力和鲁棒性。
  3. 训练策略 :探索新的训练策略,例如学习率调度、优化器选择、批量大小等,以进一步提高模型的训练效率和性能。
  4. 多任务学习 :将RepVGG应用于多任务学习场景,例如同时进行图像分类、目标检测和语义分割,以提高模型的通用性。
  5. 跨模态应用 :将RepVGG扩展到其他类型的数据,如文本、音频或时间序列数据,探索其在跨模态任务中的性能。
  6. 模型压缩和加速 :研究模型剪枝、量化和知识蒸馏等模型压缩技术,以进一步减少RepVGG模型的大小和提高推理速度。
  7. 硬件协同设计 :与硬件工程师合作,为特定的硬件平台(如FPGA、ASIC等)定制RepVGG模型,以实现更高的能效比。
  8. 模型鲁棒性 :研究对抗性攻击和防御策略,提高RepVGG在面对恶意输入时的鲁棒性。
  9. 模型解释性 :提高模型的可解释性,帮助用户理解模型的决策过程,这对于安全关键的应用尤为重要。
  10. 大规模训练 :在更大的数据集上训练RepVGG,例如JFT-300M,以评估其在处理大规模数据时的性能和效率。
  11. 分布式训练 :优化RepVGG模型的分布式训练策略,以利用更多的计算资源,加速模型训练过程。
  12. 模型微调 :研究模型微调技术,以适应特定的应用场景或数据集,提高模型的适应性和性能。
  13. 环境影响评估 :评估RepVGG模型在训练和推理过程中的能源消耗和碳足迹,推动环境友好型的AI模型设计。

相关研究

论文中提到了多个与RepVGG相关的研究领域和具体工作,主要包括以下几个方面:

  1. 从单路径到多分支的网络架构发展 :论文提到了从VGG到Inception、ResNet和DenseNet等网络架构的演进,这些架构通过引入多分支设计来提高性能。
  2. 单路径模型的有效训练 :讨论了一些尝试训练没有分支的卷积网络的工作,例如使用特定的初始化方法来训练非常深的普通卷积网络。
  3. 模型重参数化 :提到了DiracNet等相关工作,它们通过重参数化卷积核来构建深层普通模型。
  4. Winograd卷积算法 :论文讨论了Winograd算法在加速3x3卷积运算中的应用,并指出现代计算库(如NVIDIA cuDNN和Intel MKL)已经对3x3卷积进行了高度优化。
  5. 结构重参数化 :论文提出了RepVGG架构,它使用结构重参数化技术在训练和推理时解耦多分支和单路径架构。
  6. 神经架构搜索(NAS) :论文中提到了自动或手动的神经架构搜索方法,这些方法可以生成具有高性能的卷积网络,但可能需要大量的计算资源或人力。
  7. 特定应用领域的模型优化 :论文中提到了一些针对移动设备优化的模型,如MobileNets和ShuffleNets,这些模型针对低功耗设备进行了特别设计。
  8. 通道剪枝和模型压缩 :论文讨论了多分支拓扑结构对通道剪枝等模型优化技术的影响,指出单路径架构更容易进行这些优化。
  9. 特定硬件上的模型优化 :论文中提到了设计专用硬件时,RepVGG的简单架构可以更好地集成到硬件上,实现更高的计算效率。

全部评论 (0)

还没有任何评论哟~