29_RepVGG网络讲解

VGG:https://blog.csdn.net/qq_51605551/article/details/140248732?spm=1001.2014.3001.5501

1.1 简介

RepVGG网络是一种深度学习领域的卷积神经网络(Convolutional Neural Network, CNN)架构,由清华大学、旷视科技以及香港科技大学等机构的研究人员于2021年提出。它的核心设计理念在于通过创新的结构参数重构技术(Structural Re-parameterization),使得网络在训练和推理阶段采用不同的结构,从而在保持高精度的同时显著提升推理速度。

核心特点

  1. 结构参数重构: RepVGG的核心创新点在于其提出的结构参数重构技术。在训练阶段,网络采用了较为复杂的多分支结构,其中包括不同大小卷积核的分支(如3x3卷积、1x1卷积以及恒等映射Identity Mapping),这样的设计有助于网络学习更丰富的特征表达。而在推理阶段,这些多分支结构被简化合并为单一的卷积结构,仅包含3x3卷积和ReLU激活函数,这样做是为了提高计算效率。这种从复杂到简单的转换是通过数学变换完成的,确保了训练阶段学到的权重可以直接应用于简化后的推理结构中,而不会损失性能。

  2. 训练与推理解耦: 训练和推理阶段的结构分离是RepVGG的另一大特点。这种设计允许网络在训练时利用复杂的结构提升学习能力,同时在部署时享受简单结构带来的计算效率,解决了传统网络结构在高效推理上的局限性。

  3. 性能表现: RepVGG在多个方面展现出了优越的性能。首先,它在ImageNet数据集上取得了超过80%的Top-1精度,这是首次有基础模型达到这一水平,显示了极高的识别准确率。其次,其推理速度显著优于同类网络,例如,在NVIDIA 1080Ti GPU上,RepVGG模型的运行速度比ResNet-50快83%,比ResNet-101快101%,同时保持了更高的精度。这表明它在精度与速度之间取得了很好的平衡,尤其适合对实时性要求高的应用场景。

  4. 模型变体: RepVGG提供了不同配置版本,覆盖轻量级、中量级到重量级,以适应不同场景的需求。这种灵活性使得开发者可以根据实际应用对模型大小和计算资源的限制来选择合适的模型版本。

  5. 应用范围: 虽然RepVGG设计初衷是为了追求极致的推理速度和准确性,但因其简洁的结构和高效的性能,它在图像分类、目标检测、语义分割等多个计算机视觉任务中都展现出了潜力。尤其是在资源有限的嵌入式系统或移动端设备上,RepVGG的高效推理能力使其成为一个有吸引力的选择。

实现细节

  • 推理阶段Op融合:在推理时,RepVGG通过操作融合(如将Batch Normalization融合进卷积层)进一步减少计算开销,提升效率。
  • 代码实现:RepVGG的实现提供了PyTorch版本,便于研究人员和开发者进行实验和应用。

从图中可以看出,RepVGG的推理速度很快,右图训练了200个epoch后推理速度几乎是efficientNet的三倍。

图右半部分就说明了RepVGG的重参数化,中间RepVGG训练时采用的是多分支的结构,而在模型推理时采用的是单分支的结构。

1.2 RepVGG Block详解

训练模式下,图(a)是步距为2的情况,也就是下采样,两个分支。

(b)步距为1,三个分支。

为什么训练时要采用多分支结构

  1. 增强学习能力:像GoogleNet、ResNet、DenseNet等网络通过引入多分支结构证明了这种方法能有效增强模型的表征能力。多分支允许网络从不同尺度或不同特征维度提取信息,这有助于模型学习更丰富的特征表示。

  2. 优化训练过程:多分支结构可以通过并行处理不同的信息流,潜在地加速某些计算过程,并可能通过提供额外的学习路径来促进梯度流动,减少训练过程中的梯度消失或爆炸问题。

  3. 提高训练效率和效果:RepVGG的作者通过实验发现,多分支模型相比单一模型在训练时能够达到更好的效果和更高的预测准确性。这意味着多分支设计能够帮助模型在训练过程中更好地拟合数据分布,学习到更多的特征模式。

然而,虽然多分支结构有利于训练,但在推理阶段(实际应用部署时),过多的分支可能导致计算和存储资源的额外消耗。因此,RepVGG采用了结构重参数化技术,使得训练时的多分支结构能够在推理时转换为类似于VGG的单分支结构,这样既保留了训练时的优势,又保证了推理时的高效性和低资源占用。这一转换通过数学方法实现,确保了训练和推理阶段性能的最优化。

下图是一个消融实验。第一行是单路模型,没有分支。

第二行增加了恒等映射,准确率上升。

第三行增加了branch

第四行全部添加。

为什么推理时要将多分支模型转换成单路模型

1.更快 2.更省内存 3.更加灵活 

  1. 提高推理速度:多分支结构虽然在训练时能提升模型性能,但推理时每个分支都需要独立计算,然后合并结果,这增加了计算复杂性和内存使用。相比之下,单路模型没有分支间的计算和合并开销,可以直接通过一个连续的计算流程得出结果,因此推理速度更快。

  2. 降低资源消耗:推理阶段,尤其是对于移动设备或边缘计算场景,资源(如计算能力、内存和能源)非常有限。单路模型由于其简洁的结构,能够显著降低对这些资源的需求,使得模型更加实用和高效。

  3. 简化部署:单路模型的结构更简单,便于硬件加速器(如GPU、TPU或特定的AI芯片)的优化和部署,有助于实现高性能的实时推理。

  4. 重参数化技术:RepVGG利用重参数化技术,在不牺牲训练性能的前提下,能够确保训练时的多分支优

1.3 结构重参数化

RepVGG中的“结构重参数化”(Structural Re-parameterization)是一种创新技术,旨在解决深度学习模型中训练效率与推理效率之间的矛盾。这项技术的核心思想是在模型训练阶段利用复杂的多分支结构以增强学习能力,而在推理阶段则转换为更为简洁高效的单路结构以加速计算并减少资源消耗。以下是对其工作原理的全面且准确描述:

训练阶段:多分支结构

  1. 增强表达能力:在训练时,RepVGG模型采用一种包含多个并行分支的结构。每个分支可以是不同卷积核大小的卷积层,或者不同操作的组合,比如不同大小的卷积、恒等映射(Identity Mapping)等。这样的设计允许模型从不同角度和尺度捕获特征,从而增强模型的表达能力和学习能力。

  2. 融合特征:各分支产生的特征随后被融合,通常是通过简单的加法操作或concatenation(拼接)操作,以整合不同尺度和类型的特征信息,进一步提升模型性能。

结构重参数化过程

  1. 转换机制:在训练完成后,RepVGG利用一个重参数化过程,即将多分支结构转换为单一路径结构。这个过程本质上是通过一系列可学习的参数(称为重参数化权重)来等效替换多分支结构,确保转换前后模型的输出保持一致。

  2. 权重融合:对于每个多分支节点,重参数化会生成一组新的权重,这些权重能够直接作用于输入数据,模拟原多分支结构的输出效果。这意味着在推理时,无需执行多个独立的卷积运算,而是使用一组融合后的权重进行一次卷积操作即可。

推理阶段:单路模型

  1. 效率提升:通过上述转换,原本的多分支结构在推理阶段被简化为一个等效的单路模型,消除了多分支计算和特征融合的开销,极大提升了推理速度和降低了资源需求。

  2. 无损转换:重要的是,这种转换是无损的,即在保持模型性能不变的同时,实现了从复杂到简洁的结构转变。这意味着在不牺牲任何精度的前提下,获得了高效推理的能力。

整体流程

下图左侧:我们先将3x3卷积层与BN融合,再将1x1卷积层与BN融合,变成 3x3卷积层,再将恒等映射变成3x3卷积层,然后再将这三个3x3卷积的分支进一步融合变成一个3x3卷积。这就是结构重参数化的大致流程。

下图右侧:卷积参数中,(卷积和BN一起使用的话一般不用bias)3x3和1x1各有两个卷积核(从左往右看),通道数都是2。

BN参数中,我们都知道,BN是按通道进行归一化的,所以每个通道对应四个参数,分别是均值标准差和两个超参数,这里有两个通道所以每个BN层有8各参数。

然后,将卷积与BN融合,得到右侧中间的参数量。3x3与BN参数怎么融合待会再说。

对于 1x1卷积,我们会把1x1想办法变成3x3卷积层,然后再和BN进行融合。

对于identity,我们会构建一个恒等映射的3x3的卷积层,然后再和BN融合。

最后,我们再将这三个进行融合,就是最终3x3卷积层的参数。

很明显,在结构重参数化之后,参数的数量是明显减少了。重参数化之后只剩一个3x3的卷积层了,所以我们推理的速度也变快了。(注意,重参数化之后的3x3卷积是有偏置的)

3x3融合具体细节

 下图给出了BN的计算流程。这个第i个通道的值M是如何得到的呢?其实是由卷积层得到的结果,那么卷积层怎么得到的M呢?其实就是一个加权求和的结果。所以,我们可以把BN里面的系数拆出来提前与卷积层的权重矩阵相乘,然后把常数项作为卷积的偏置项。这样就把BN和卷积层融合起来了。

这里为了方便理解,假设一个特征图有两个通道,卷积核个数为1

为了保证特征图高宽不变,采用了padding。

接下来将卷积层的输出作为BN层的输入。BN的计算是按照通道顺序来的。

我们提取出系数和常数项,加载原来卷积层的权重矩阵上,效果是一样的。

1x1融合具体细节

怎么进行之前所说的把1x1变成3x3呢?很简单,只需要对卷积核进行填充即可。

但是,为了保证输入输出的特征图高宽保持不变,我们扩充卷积核尺寸后还要对原来的输入进行padding。

identity融合具体细节

如何将这个恒等映射转为3x3卷积呢?首先我们需要自己构建一个3x3卷积层,因为我们希望实现一个恒等映射的结果(输入和输出完全一致),所以构建的卷积核如下图:

这里我们需要对输入做padding。

分支融合

通过刚才的流程我们已经讲之前的分支全部整合为了3x3卷积。接下来就将三个分支整合为一个。

K代表卷积核的权重,B代表偏置项。

我们将多分支的计算流程,提取公因数整合一下。偏置项求和,卷积核权重求和。

这样就将多分支重构为了单通路。

1.4 模型配置

RepVGG可以分为三种模型,分别是-A,-B,-Bg

-A和-B的差异见下图右上角的表。A的每个stage重复次数较少分别是1,2,4,14,1.

而-B是1,4,6,16,1.

a和b是倍率因子,用来控制网络的宽度(通道数)

-Bg意思是采用了组卷积(group convolution)比如g4代表group的数量。

需要注意的是采用组卷积并不是全部将卷积替换成组卷积,替换的卷积的层数如右下角所示:

[2,4,6,8,10,12,14,16,18,20,22,24,26](从stage2开始,索引从1开始)

比如-B的stage2,堆叠了4次,只有2和4是采用了组卷积的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值