GhostNetv3的Re-parameterization
在GhostNetV3中,重参数化是一种在训练阶段引入的技术,用于提高模型性能,而在推理阶段则通过逆向重参数化过程去除多余的分支,以避免增加额外的计算成本。具体来说,在训练过程中,深度卷积和1×1卷积中引入了线性并行分支,这些分支在训练后可以重新参数化,在推理时不会带来额外的成本。这是因为卷积和BatchNorm运算在推理过程中都是线性的,可以折叠成单个卷积层,其权重矩阵和偏置可以重参数化为所有分支的权重和偏置的总和 。
在推理时,通过逆向重参数化过程,可以删除重复的分支。这一过程涉及将所有分支中的折叠权重和偏差重参数化,从而实现在推理时减少计算量的目的。具体地,权重和偏差的重参数化可以通过以下公式表示:。
此外,另一篇博客文章也提到了重参数化的概念,指出在推理时卷积和BatchNorm操作可以组合成一个卷积层,并且可以逆向重参数化以删除重复分支 。这表明在GhostNetV3中,重参数化是一种有效的训练策略,可以在不牺牲推理效率的情况下提高模型的训练性能。
在深度学习中,卷积层和批量归一化层(BatchNorm)都是线性操作,这意味着它们可以按顺序组合或“折叠”成一个单一的线性层,而不改变网络的学习能力。这种技术在推理时特别有用,因为它可以减少计算量。
理解并行分支合并
在训练过程中,BatchNorm层确实在寻找最佳的均值和方差,以便对每个特征通道的输入数据进行归一化处理。
重参数化过程的关键点:
-
分离 BN 参数:首先,使用
_fuse_bn_tensor
方法将每个分支的卷积层和其后的 BN 层的参数分离出来。这个方法返回卷积核和偏置,其中 BN 层的参数被融合进卷积核和偏置中。 -
合并卷积核和偏置:对于每个分支(主分支和廉价分支),其卷积核和偏置被分别累加,以形成一个单一的卷积核和偏置。如果有 skip 连接或 scale 连接,它们也会被合并进来。
-
创建新的卷积层:使用合并后的卷积核和偏置创建新的卷积层
self.primary_conv
和self.cheap_operation
,这些层将用于推理。 -
删除未使用的分支:推理模式下不再需要原始的多分支结构,因此它们被从模型中删除。
在 GhostModule
类中,_get_kernel_bias_primary
和 _get_kernel_bias_cheap
方法实现了上述过程,分别对应主分支和廉价分支的重参数化。_fuse_bn_tensor
方法用于将单个分支的卷积层和 BN 层融合。
ReVGG
RepVGG是一种卷积神经网络(CNN)架构,它通过结构重参数化技术实现了训练时的多分支拓扑结构和推理时的单分支(plain)拓扑结构的转换。这篇论文的核心贡献是提出了一种新的CNN架构,该架构在推理时具有VGG风格的前馈结构,而在训练时则具有多分支拓扑结构。
### RepVGG的关键特点:
1. **训练与推理时架构解耦**:
- 训练时,RepVGG使用多分支拓扑结构,这有助于梯度传播并避免梯度消失问题,类似于ResNet中的残差连接。
- 推理时,RepVGG转换为一个简单的前馈网络,由一系列3x3的卷积层和ReLU激活函数堆叠而成。
2. **结构重参数化**:
- 通过一种称为结构重参数化的技术,RepVGG能够在训练完成后,将训练时的多分支结构转换为单一的3x3卷积层结构。这种转换是通过参数变换实现的,而不是改变网络的拓扑结构。
3. **推理效率**:
- 由于推理时的RepVGG仅包含3x3的卷积层,这使得它在各种硬件上运行得非常快,特别是可以利用专门的硬件加速。
### 分支合并原理:
在RepVGG的训练阶段,每个卷积块包含3x3卷积、1x1卷积和恒等连接(Identity Connection)。这些分支在训练时并行执行,并在之后通过Batch Normalization(BN)层进行归一化。在推理前,RepVGG执行以下步骤合并分支:
1. **参数转换**:
- 对于每个分支,包括3x3卷积和1x1卷积,RepVGG首先将BN层的参数转换为偏置项,并将卷积核与这些偏置合并。
2. **合并卷积核**:
- 将1x1卷积核通过零填充扩展到3x3大小,然后与原始的3x3卷积核相加,得到最终的3x3卷积核。
3. **合并偏置**:
- 将所有分支的偏置相加,得到最终的偏置项。
4. **删除分支**:
- 在完成参数转换后,删除原始的多分支结构,只保留转换后的单一3x3卷积层。
### 论文中的示例:
论文中提供了一个示例来说明如何将一个包含3x3卷积、1x1卷积和恒等连接的复合块转换为单一的3x3卷积层。转换过程涉及到对每个分支的卷积核和BN层参数进行数学操作,最终实现一个等效的单一卷积层,该层在推理时可以替代原始的多分支结构。
RepVGG的这种设计使得它在保持高精度的同时,还能在推理时提供极高的效率,这在实际应用中是非常有价值的。通过结构重参数化,RepVGG能够在训练时利用多分支结构的优势,而在推理时则简化为高效的单分支结构。