【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译

RepVGG: Making VGG-style ConvNets Great Again论文翻译-CVPR2021

论文地址:https://arxiv.org/abs/2101.03697
代码地址:https://github.com/DingXiaoH/RepVGG
【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第1张图片

摘要

我们提出了一个简单但功能强大的卷积神经网络体系结构,它有一个推理阶段的VGG-like型主体,只有一个由3*3卷积和ReLU组成的堆栈,而训练时间模型具有多分支拓扑。这种训练时间和推理时间体系结构的解耦是通过一种结构重参数化技术实现的,因此该模型被命名为RepVGG。在ImageNet上,据我们所知,RepVGG作为普通模型第一次达到了80%以上的top-1精度。在NVIDIA 1080Ti GPU上,RepVGG模型的运行速度比ResNet-50快83%,比ResNet-101快101%,且具有更高的精度,与最先进的模型如EfficientNet和RegNet相比,显示出良好的精度-速度平衡。代码和训练模型在https://github.com/megvii-model/RepVGG。

Introduction

卷积神经网络(ConvNets)已经成为许多任务的主流解决方案。VGG[30]通过由conv、ReLU、pooling组成的简单架构,在图像识别方面取得了巨大的成功。随着Inception [32,33,31,17], ResNet[10]和DenseNet[15]的出现,大量的研究兴趣转向了良好设计的架构,使得模型越来越复杂。最近一些强大的架构是通过自动[43,28,22]或手动[27]架构搜索,或在基本架构[34]上搜索复合缩放策略获得的。
尽管许多复杂的卷积神经网络比简单的卷积神经网络具有更高的精度,但缺点也很明显。1)复杂的多分支设计(如ResNet中的剩余添加和Inception中的分支连接)使模型难以实现和自定义,降低了推理速度,降低了内存利用率。2)一些组件(例如,Xception[2]和MobileNets[14, 29]中的深度卷积和ShuffleNets中的信道搅乱[23, 40])增加内存访问成本,缺乏各种设备的支持。由于影响推断速度的因素有很多,浮点操作(FLOPs)的数量并不能准确地反映实际速度。虽然一些新的模型比之前的诸如VGG和resnet -18/34/ 50[10]有更低的FLOPs,但它们运行起来可能不会更快(表4)。因此,VGG和ResNets的原始版本仍然在学术界和工业界的现实应用中大量使用。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第2张图片
图1:ImageNet上的最高精度与实际速度。左图:轻量级和中量级RepVGG和120个时代训练的基线。右图:重量级模型训练了200个时代。该速度在相同的1080Ti上进行测试,批量尺寸为128,全精度(fp32),单批,以示例/秒进行测量。effentnet - b3[34]的输入分辨率为300,其余[34]的输入分辨率为224。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第3张图片
图2:RepVGG基础框架。RepVGG有5个阶段,在阶段开始时通过stride-2卷积进行下行采样。这里我们只展示第一个特定阶段的4个层次。受ResNet[10]的启发,我们也使用identity和1*1分支,但只用于训练。

在本文中,我们提出了RepVGG,一个vgg风格的架构,它优于许多复杂的模型(图1).。RepVGG具有以下优势:

  • 该模型具有VGG-like的平面(也称为前馈)拓扑结构没有任何分支。也就是说,每一层都将其上一层的输出作为输入,并将输出输入到下一层。
  • 模型的主体只使用3*3 卷积和ReLU激励函数。
  • 具体的架构(包括特定的深度和层宽)实例化时不需要自动搜索[43]、手动细化[27]、复合缩放[34],或者其他繁重的设计。

普通模型要达到与多分支架构相当的性能水平是很有挑战性的。一种解释是多分支拓扑结构,例如ResNet,使模型成为众多浅模型[35]的隐式集合,因此训练一个多分支模型可以避免梯度消失的问题。
由于多分支体系结构的优点都是用于训练,而缺点则不是用于推理,因此我们提出通过结构重参数化将训练时间的多分支体系结构和推理时间的普通体系结构解耦,这意味着通过转换其参数将体系结构从一个转换为另一个。具体来说,一个网络结构是与一组参数耦合的,例如,一个卷积层用一个四阶核张量来表示。如果将某一结构的参数转换成另一结构耦合的另一组参数,我们就可以将前者等效为后者,从而改变整个网络结构。
具体来说,我们使用identity和1*1的分支构建训练时的RepVGG,这是受到ResNet的启发,但以不同的方式,可以通过结构重参数化删除分支(图2、4)。训练后,我们用简单代数来执行转换,一个identity分支可以被视为一个退化的1*1 卷积,而后者可以进一步被视为退化的3*3卷积,这样我们可以构造一个简单的3*3内核与原有的训练参数3*3内核、identity、1*1分支和批处理规范化(BN)[17]层。因此,转换后的模型有一堆3*3的卷积层,这些层被保存起来用于测试和部署。
值得注意的是,推理时间的RepVGG只涉及一种类型的操作:33的卷积和ReLU,这使得RepVGG在gpu等通用计算设备上运行速度很快。更好的是,RepVGG允许专用硬件实现更高的速度,因为考虑到芯片大小和功耗,我们需要的操作类型越少,我们可以集成到芯片上的计算单元就越多。也就是说,专门用于RepVGG的推理芯片可以拥有大量的33-ReLU单元和更少的内存单元(因为简单拓扑是内存经济的,如图3所示)。我们的贡献总结如下。

  • 我们提出了RepVGG,一种简单的架构,与最先进的技术相比,具有良好的速度-精度平衡。
  • 我们提出使用结构重参数化来解耦训练时间多分支拓扑和推理时间简单结构。
  • 我们已经证明了RepVGG在图像分类和语义分割方面的有效性,以及实现的效率和易用性。

2. Related Work

2.1. From Single-path to Multi-branch(从单路径到多分支)

在VGG[30]将ImageNet分类的top-1准确率提高到70%以上之后,在使ConvNets变得复杂以达到高性能方面有很多创新,如当代的google[32]及以后的版本Inception模型[33,31,17]采用了精心设计的多分支架构,ResNet[10]提出了简化的双分支架构,DenseNet[15]通过将低层和大量的高层连接起来,使得拓扑结构更加复杂。神经结构搜索(Neural architecture search, NAS)[43,28,22,34]和人工设计空间设计[27]可以生成性能更高的卷积网络,但代价是大量的计算资源或人力。nas生成模型的一些大型版本甚至不能在普通gpu上训练,因此限制了应用程序。除了实现上的不便之外,复杂的模型可能会降低[23]的并行度,从而降低推理的速度。

2.2. Effective Training of Single-path Models(有效的单路径训练模型)

已经有人尝试训练没有分支的ConvNets。然而,前人的工作主要是寻求非常深入的模型以合理的精度收敛,并没有达到比复杂模型更好的性能。因此,所建立的方法和模型既不简单也不实用。例如,提出了一种初始化方法[36]来训练极深简单的ConvNets。使用基于平均场理论的方案,10000层网络在MNIST上训练的准确率超过99%,在CIFAR-10上训练的准确率达到82%。虽然模型不实用(甚至LeNet-5[19]在MNIST上的准确率达到99.3%,VGG-16在CIFAR- 10上的准确率达到93%以上),但理论贡献是很有见地的。最近的工作[24]结合了几种技术,包括Leaky ReLU、max-norm和仔细的初始化。在ImageNet上,参数量为147M的简单ConvNet准确率可以达到74.6%的top-1精度,比之前的基线(ResNet-101, 76.6%,45M参数)低2%。
值得注意的是,本文不仅仅是一个简单模型可以很好地收敛的演示,而且并不打算训练像ResNets这样极其深度的ConvNets。相反,我们的目标是建立一个简单的模型,具有合理的深度和良好的精度-速度平衡,可以简单地用最常见的分量(如正则conv和BN)和简单的代数来实现。

2.3. Model Re-parameterization(模型重参数化)

DiracNet[38]是一种与我们相关的重参数化方法。它通过将卷积层的核编码为^W = diag(a)I + diag(b)Wnorm来构建深平面模型,其中^W是用于卷积的最终权值(一个被视为矩阵的四阶张量),a和b是学习向量,Wnorm是规范化的可学习核。与同等参数量的ResNets相比,CIFAR- 100上DiracNet的top-1准确率降低了2.29% (78.46% vs. 80.75%), ImageNet上降低了0.62% (DiracNet-34的72.21% vs. ResNet-34的72.83%)。Dirac- Net与我们的方法的不同之处是:1)我们的结构重参数化是通过一个具体的结构来实现的,这个具体的结构后来可以转换成另一个,而DiracNet仅仅使用了另一个conv核的数学表达式,以方便优化。即,一个结构上重新参数化的普通模型是一个真正的训练时间多分支模型,但DiracNet不是。2) DiracNet模型的性能高于一般参数化的简单模型,但低于可比的ResNet模型,而RepVGG模型的性能则大大优于ResNets模型。Asym Conv Block(ACB)[9]采用不对称卷积加强常规卷积的骨架,它可以被视为另一种形式的结构性重参数化,它训练块转换成卷积。我们的方法相比,不同之处在于,ACB是专为组件级的改进和用作卷积层替代在任何体系结构中,当我们的结构性重参数化训练简单ConvNets至关重要,如4.2部分所示。

2.4.Winograd Convolution(Winograd卷积)

RepVGG只使用了3*3卷积,因为它在GPU和CPU上被一些现代的计算库如NVIDIA cuDNN[1]和Intel MKL[16]高度优化。表1显示了在1080Ti GPU上用cuDNN 7.5.0测试的理论FLOPs、实际运行时间和计算密度(以每秒Tera浮点运算次数衡量,TFLOPS) 。结果表明,3*3卷积的理论计算密度和其他算法一样都在4左右,这表明在不同的体系结构中,理论总失败数并不能代表实际速度。加速3*3卷积的经典算法是winograd算法[18](仅当stride为1时),它已经被库如cuDNN和MKL很好的支持(并默认启用)。例如,用标准F(2*2,3*3)Winograd,一个3*3卷积的乘法(MULs)减少到原来的4/9。自比增加乘法更耗时,我们计算MULs测量计算成本与Winograd支持(用Wino MULs表。4、5)。注意,具体计算库和硬件确定为每个运算使用Winograd因为小规模的卷积可能不是加速由于内存开销。

3. Building RepVGG via Structural Re-param(通过结构重参数化构建RepVGG)

3.1. Simple is Fast, Memory-economical,Flexible(简单就是快速,节省内存,灵活的)

使用简单的convnet至少有三个原因:它们快速、节省内存和灵活。
快速  许多最近的多分支架构的理论故障比VGG要低,但运行起来可能不会更快。例如,VGG-16作为EfficientNet-B3[34]的FLOPs是8:4,但在1080Ti上运行速度要快1:8(表4),这意味着前者的计算密度是后者的15倍。除了Winograd卷积带来的加速外,内存访问开销(MAC)和并行度[23]是影响速度的两个重要因素,但内存访问开销并没有被计算在内。例如,虽然需要的分支加法或连接的计算是微不足道的,但mac是重要的。此外,MAC在分组卷积中占据了很大一部分时间。另一方面,在相同的失败情况下,具有高并行度的模型可能比另一个具有低并行度的模型要快得多。由于多分支拓扑在初始化和自动生成的体系结构中被广泛采用,因此使用了多个小的运算符而不是几个大的运算符。之前的工作[23]显示,片段式的运算符的数量(即个别的卷积或池操作的数量在一个构建块)在NASNET-A[42]是13,这是不友好的设备与强大的并行计算能力GPU和内核启动和同步等,引入了额外的开销。相比之下,这个数字在ResNets中是2或3,我们将其设为1:单个卷积。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第4张图片
Memory-economical  多分支拓扑是内存效率低下的,因为每个分支的结果都需要保留到添加或连接时,这大大提高了内存占用的峰值。如图3所示,剩余块的输入需要保持到加法为止。假设块保持特征图的大小,则内存占用的峰值为2作为输入。相比之下,普通拓扑允许特定层的输入所占用的内存在操作完成后立即释放。在设计专门的硬件时,普通的ConvNet允许深度内存优化并降低内存单元的成本,以便我们可以在芯片上集成更多的计算单元。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第5张图片
灵活性  多分支拓扑对体系结构规范施加了约束。例如,ResNet要求将卷积层组织为剩余块,这限制了灵活性,因为每个剩余块的最后一个卷积层必须产生相同形状的张量,否则快捷添加将没有意义。更糟糕的是,多分支拓扑限制了通道剪枝的应用[20,12]。通道剪枝是一种去除一些不重要通道的实用技术,有些方法可以通过自动发现每一层[7]的合适宽度来优化模型结构。然而,多分支模型使修剪变得棘手,并导致显著的性能退化或较低的加速比[6,20,8]。相比之下,普通架构允许我们根据需求自由配置每个卷积层,并进行修剪,以获得更好的性能-效率平衡。

3.2. Training-time Multi-branch Architecture(训练时间多分支结构)

简单的卷积网络有很多优点,但有一个致命的缺点:性能差。例如,使用BN[17]等现代组件,VGG-16可以在ImageNet上达到72%的top-1精度,这似乎过时了。我们的结构重新参数化方法受到了ResNet的启发,该方法明确地构建了一个快捷分支,将信息流建模为y = x + f(x),并使用一个剩余块学习f。当x和f(x)的维数不匹配时,就变成y = g(x) + f(x),其中g(x)是一个卷积捷径,通过一个1*1的卷积实现。Renets成功的一个解释是,这样的多分支架构使模型成为众多较浅模型[35]的隐含集成。具体来说,有n个块,模型可以解释为2n个模型的集合,因为每个块将流分成两条路径。
由于多分支拓扑在推理方面存在缺陷,但分支似乎有利于[35]的训练,因此我们使用多个分支对多个模型进行单独的训练时间集成。为了使大多数成员更浅或更简单,我们使用类似resnet的特性(仅当维度匹配时)和1*1分支,以便构建块的训练时间信息流为y = x + g(x) + f(x)。我们只是简单地堆叠几个这样的块来构建训练时间模型。从与[35]相同的角度来看,模型是由3n个成员和n个这样的块组成的集合。训练后,将其等价转换为y = h(x),其中h由一个单独的卷积层实现,其参数由训练后的参数通过一系列代数推导而来。

3.3. Re-param for Plain Inference-time Model(重新指定简单推理时间模型的参数)

在本小节中,我们将描述如何将一个经过训练的块转换为一个单独的3*3卷积层进行推理。注意,我们在加法之前的每个分支中都使用了BN(图4)。形式上,我们用1
表示具有C1输入通道和C2输出通道的3*3卷积层的核,用2
表示1*1分支的核。我们使用(3)
作为1个简单的3*3卷积后BN层的累积均值、标准差、学习缩放因子和偏差,(1)
为1*1卷积后BN层,(0)
为恒等分支。设M(1) 2
RNC1H1W1
, M(2) 2 RNC2H2W2
分别为输入和输出,*为卷积算子。如果C1 = C2;H1 = H2;W1 = W2
,我们有
【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第6张图片
否则,我们只是不使用单位分支,因此上述方程只有前两项。这里bn是推理时间bn函数,3
4
我们首先将每一个BN及其前面的卷积层转换成一个带有偏置向量的卷积。让fW0;b0g
是从;;;;g
转换而来的内核和偏误,我们有
5
验证起来很容易得在这里插入图片描述
6
上述变换也适用于单位分支,因为单位映射可以看作是一个带有单位矩阵的1*1卷积的核。经过这样的变换,我们将得到一个3*3核,两个1*1核,和三个偏置向量。
然后我们获得最终的偏差通过添加了三个偏差向量,最后3*3内核通过在3*3内核的中心点上添加1*1内核,可以很容易地实现先补零的两个1*1内核成为3*3和添加三个内核,如图4所示。需要注意的是,此类转换的等效性要求3*3层和1*1层具有相同的步幅,而1*1层的填充配置应比3*3层少一个像素。例如,对于一个3*3层填充一个像素的输入,这是最常见的情况,1*1层应该有填充(padding)= 0。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第7张图片

3.4. Architectural Specification

表2显示了RepVGG的规格,包括深度和宽度。RepVGG是VGG-style的,它采用简单的拓扑结构,大量使用3*3卷积,但它不像VGG那样使用最大池化,因为我们希望主体只有一种类型的操作。我们将3*3层排列为5个阶段,一个阶段的第一层以stride = 2的方式下采样。对于图像分类,我们使用全局平均池化,然后使用全连接层作为head。对于其他任务,特定于任务的head可以用于任何层产生的特性。
我们根据三个简单的原则来决定每个阶段的层数。1)第一阶段的操作分辨率较大,耗时较长,因此我们只使用一层以降低延迟。2)最后一个阶段应该有更多的通道,所以我们只使用一层来保存参数。3)我们将大部分图层放入最后的第二阶段(ImageNet输出分辨率为14*14),紧接着是ResNet及其最新版本[10,27,37](例如,ResNet-101在其14*14分辨率阶段使用了69层)。我们让这五个阶段分别有1、2、4、14、1层来构建一个名为RepVGG-A的实例。我们还构建了一个更深层的RepVGG-B,在阶段2、3和4中有更多的层。我们使用RepVGG-A与其他轻量级和中量级模型(包括ResNet-18/34/50)竞争,使用RepVGG-B与高性能模型竞争。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第8张图片
我们通过统一缩放[64,128,256,512]的经典宽度设置来确定层宽度(例如VGG和ResNets)。我们使用乘数a来衡量前四个阶段,最后一个阶段使用乘数b,通常设置b>a因为我们希望最后一层为分类或其他下游任务具有更丰富的特性。由于RepVGG在最后阶段只有一层,所以较大的b并不会显著增加延迟和参数的数量。具体来说,阶段2、3、4、5的宽度分别为[64a;128a;256a;512b]。为了避免在大的特征地图上进行大的卷积,我们对stage1进行了缩小,如果a<1,但不要扩大它,使阶段1的宽度是最小的(64;64a)。
为了进一步减少参数和计算,我们可以选择使用密集的3*3卷积层来交换精度和效率。具体来说,我们将第3、5、7、…,第21层RepVGG-A和另外23、25、27层RepVGG-B设为组g。为了简单起见,我们对这类层全局设置g为1、2或4,而不进行分层调优。我们不使用相邻的逐群卷积层,因为这将禁用通道间信息交换,并带来一个副作用[40]:特定通道的输出将仅来自一小部分输入通道。注意,1*1分支应具有与3*3 conv相同的g值。

4. Experiments

在本节中,我们比较了RepVGG与ImageNet上的基线的性能,通过一系列的消融研究和比较,论证了结构重参数化的意义,并验证了RepVGG在语义分割[41]上的泛化性能。

4.1. RepVGG for ImageNet Classification

我们比较了RepVGG与经典和最先进的模型,包括VGG-16[30]、ResNet[10]、ResNeXt[37]、EfficientNet[34]和RegNet[27]在ImageNet- 1K[5]上,其中包含128万高分辨率图像用于训练和50K用于验证,来自1000个类。我们分别以EfficientNet-B0/B3和RegNet-3.2GF/12GF作为中量级模型和重量级模型的代表。我们改变乘数a和b,生成一系列RepVGG模型,以与基线进行比较。如表3所示。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第9张图片
我们首先比较RepVGG和ResNets[10],这是最常用的基准。与ResNet-18比较,对于RepVGG-A0,设a = 0.75, b = 2.5。对于ResNet-34,我们使用更宽的RepVGG-A1。为了使RepVGG的参数略少于ResNet-50,我们构建了a = 1.5,b = 2.75的RepVGG- a2。为了与更大的模型进行比较,我们构造了深度更大的RepVGGB0/B1/B2/B3,并增加了宽度。对于那些具有交叉分组层的RepVGG模型,我们在模型名后面加上g2/g4作为后缀。
为了训练轻量级和中量级模型,我们只使用简单的数据增强管道,包括随机裁剪和左右反转,遵循正式的PyTorch示例[26]。我们在8个gpu上使用256全局批处理大小,初始学习率为0.1,余弦退火120个时期,标准SGD动量系数为0.9,在卷积层和全连接层的核上重量衰减为10-4。对于RegNetX-12GF、EfficientNet-B3和RepVGG-B3重量级模型,我们采用了5轮预热、200轮余弦学习率退火、标签平滑[33]和混合算法[39](在[11]之后),以及自动增强[4]的数据增强pipline、随机剪切和反转。RepVGG-B2及其g2/g4变种都在这两种设置下进行了训练。我们在1080Ti GPU 4上测试了128批的每个模型的速度,首先输入50批对硬件进行预热,然后记录50批的时间使用情况。为了公平比较,我们在同一个GPU上测试所有模型,所有基线的conv-BN序列也转换为带有偏置的卷积 (Eq. 3)。
如表4和图1所示,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相比,RepVGGB2只有58%的参数,运行速度快10%,精度高6.57%。与我们所知的精度最高(74.5%)的基于修剪的良好设计的训练方法RePr[25]训练的VGG模型相比,RepVGG-B2的准确率也高出4.28%。
与最先进的基线相比,RepVGG也表现出良好的性能,从简单性上看,RepVGG-a2比EfficientNet-B0高出1.37%/59%,RepVGG-b1比RegNetX-3.2GF高出0.39%,运行速度略快。
值得注意的是,RepVGG模型在200个epochs时达到了80%以上的精度(表5),这是我们所知的普通模型第一次赶上最先进的水平。与RegNetX-12GF相比,RepVGGB3的运行速度快了31%,考虑到RepVGG不需要像RegNet[27]那样大量的人力来完善设计空间,而且架构超参数的设置也很随意,这一点令人印象深刻。
作为计算复杂度的两个指标,我们计算2.4节中描述的理论失败和Wino MULs。例如,我们发现,在EfficientNet-B0/B3中,Winograd算法没有加速任何conv。表4显示Wino MULs在GPU上是一个更好的代理,例如,ResNet-152运行速度比VGG-16慢,理论上的失败次数更低,但Wino MULs更高。当然,实际速度应该永远是黄金标准。
【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第10张图片

4.2. Structural Re-parameterization is the Key(结构重参数化是关键)

在本小节中,我们验证了我们的结构重参数化技术的重要性(表6)。所有的模型都是用上面描述的相同的简单训练设置从零开始训练120个epochs。首先,我们通过移除RepVGG-B0每个区块的身份和/或1*1分支进行消融研究。剔除两个分支后,训练时间模型退化为原始普通模型,准确率仅为72.39%。在1*1和74.79%的情况下,准确率分别提高到73.15%和74.79%。完整的RepVGG-B0模型的精度为75.14%,比原始普通模型的精度高2.75%。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第11张图片
然后我们构建了一系列的变量和基线用于比较RepVGG-B0(表7)。所有的模型都是在120个epochs从零开始训练的。

  • 统一w/o BN层  删除标识分支中的BN。
  • Post-addition BN  删除三个分支中的BN层,并在添加后附加BN层。即BN的位置由加前变为加后。
  • +ReLU in branches  将ReLU插入到每个分支中(BN之后,add之前)。由于这样的块不能转换成一个单独的卷积层,因此没有实际用途,我们只是想看看更多的非线性是否会带来更高的性能。
  • DiracNet  [38]采用了在2.2节中介绍的精心设计的卷积核的重参数化。我们使用它的官方PyTorch代码来构建层,以取代原来的3*3卷积。
  • Trivial Re-param  是对卷积核的一种更简单的重参数化,直接在3*3核中添加一个单位核,可以看作DiracNet的退化版本(^W = I +W[38])。
  • Asymmetric Conv Block (ACB)  [9]可以看作是结构重参数化的另一种形式。我们与ACB进行比较,看看我们的结构重新参数化的改进是否是由于组件级的过度参数化(即,额外的参数使每个3*3卷积变得更强)。
  • Residual Reorg  构建每个阶段,通过重新组织它在一个类似resnet的方式(2层每个块)。具体来说,合成模型在第一阶段和最后阶段有一个3*3层,在第二阶段、第三阶段、第四阶段有2、3、8个剩余块,并使用像ResNet-18/34这样的捷径。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第12张图片
我们认为结构重参数相对于DiractNet和普通重参数的优势在于前者依赖于通过具有非线性行为(BN)的具体结构的实际数据流,而后者仅使用另一种卷积核的数学表达式。例如,前者的re-param是指使用一个结构的参数来参数化另一个结构,而后者是指先用另一组参数计算参数,然后再使用它们进行其他计算。对于训练时间BN这样的非线性分量,前者不能用后者近似。作为证据,通过去除BN降低了精度,通过添加ReLU提高了精度。换句话说,虽然一个RepVGG块可以等效地转换成一个单独的卷积来进行推理,但推理时间等价并不意味着训练时间等价,因为我们不能构造一个卷积层来具有与RepVGG块相同的训练时间行为。
与ACB的比较表明,RepVGG的成功不应该简单地归因于每个组件的过度参数化的影响,因为ACB使用了更多的参数,但不能像RepVGG那样提高性能。为了进一步确认,我们将ResNet-50的每个3*3卷积的替换为RepVGG块,并从头开始训练120个epochs。精度为76.34%,仅比ResNet- 50基线高0.03%,表明RepVGG-style结构重参数化不是一种通用的过度参数化技术,而是一种训练强大的普通卷积神经网络的关键方法论。
【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第13张图片

与Residual Reorg(具有相同3*3卷积数量以及用于训练和推理的其他快捷方式的真实残差网络)相比,RepVGG的表现高出0.58%,这并不奇怪,因为RepVGG有更多的分支。例如,分支使得RepVGG的stage4是2*315 = 2.8*107模型[35]的集合,而剩余Reorg的数量是28 = 256。

4.3. Semantic Segmentation(语义分割)

我们验证了imagenet预训练的RepVGG在城市景观[3]上的泛化性能,该图像包含5K个精细标注的图像和19个类别。我们使用PSPNet[41]框架,一个基为0.01,幂为0.9,权重衰减为10-4,全局批处理规模为16的多聚学习速率策略,在8个gpu上运行40个epochs。为了公平比较,我们只将ResNet-50/101骨干更改为RepVGG-B1g2/B2,其他设置保持一致。

【论文阅读】RepVGG: Making VGG-style ConvNets Great Again翻译_第14张图片
在PSPNet-50/101[41]正式实施后,在ResNet-50/101的最后两个阶段使用了扩张的卷积,我们也对RepVGG-B1g2/B2的最后两个阶段的所有3*3卷积层进行了扩张。由于目前3*3扩张卷积的低效实现(尽管FLOPs与3*3常规卷积相同),这样的修改减缓了推理。为便于比较,我们建立两个PSPNets(在表8中用fast表示)膨胀只有在最后5层(例如,最后4层stage4和唯一的stage5层),所以PSPNets运行略高于ResNet-50/101骨干。结果表明,RepVGG骨干的平均IoU比ResNet-50和ResNet-101分别高出1.71%和1.01%。令人印象深刻的是,RepVGG-B1g2-fast在mIoU中的性能比ResNet- 101骨干高出0.37,运行速度快62%。有趣的是,与RepVGG-B1g2-fast模型相比,扩大的卷积层似乎对更大的模型更有效,但扩大后的RepVGG-B2的mIoU提高了1.05%,并有合理的放缓。

4.4. Limitations(局限性)

RepVGG模型是快速、简单和实用的卷积网络,为GPU和专用硬件上的最大速度而设计,较少考虑参数数量或理论故障。尽管RepVGG模型比ResNets更具参数效率,但在低功耗设备上,它们可能不如MobileNets[14,29,13]和ShuffleNets[40,23]等移动管理模型受欢迎。

5. Conclusion(总结)

我们提出了RepVGG,一个由3*3卷积和ReLU组成的简单架构,特别适合于GPU和专业推理芯片。通过我们的结构重参数化方法,这种简单的ConvNet在ImageNet上达到了80%以上的top-1精度,与最先进的复杂模型相比,在速度-精度方面表现出了良好的权衡。

你可能感兴趣的:(paper,机器学习,pytorch,深度学习,神经网络,计算机视觉)