1、设计动机
设计RepVGG的初衷是为了解决许多流行的深度学习模型在追求更高性能的过程中不断增加结构复杂性的问题。例如,为了提高性能,许多模型采用了如残差连接、瓶颈设计、组卷积等复杂设计,但这些设计也让模型变得更难理解和优化。相反,RepVGG选择了一条不同的道路,它采用了简单的VGG-like结构,仅使用3×3卷积和ReLU激活函数,以及批量归一化,并成功地达到了良好的性能。
RepVGG的另一大创新在于其在训练和部署阶段使用不同的架构。在训练阶段,为了提高计算效率,RepVGG采用了多路径方式进行前向传播。然后,在部署阶段,为了优化计算效率和速度,它通过将训练阶段的所有卷积核重参数化,将多路径结构转化为传统的单路径VGG-like架构。
具体地说,RepVGG在训练过程中采用了一种叫做Structural Re-parameterization的方法,该方法能够在训练结束后,将分支中的多个卷积层融合为一个卷积层,极大地简化了模型,使得在部署阶段能够更高效地运行。
虽然RepVGG的架构相对简单,但在各种基准测试中,它都展现出了优秀的性能。例如,在ImageNet分类任务中,RepVGG的性能超过了ResNet-50,且速度更快。此外,RepVGG的简洁性使得它在移动设备和嵌入式系统上部署更加方便,模型效果如图1所示,左图为训练120轮的情况,右图为训练200轮的情况。
![图片[1]-RepVGG:新型卷积神经网络架构-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/01/20240130115036327.png)
然而,尽管RepVGG的性能卓越,但并不意味着它适用于所有任务。针对任务的特定需求和资源限制,可能还需要考虑使用其他类型的模型。
论文地址:[2101.03697] RepVGG: Making VGG-style ConvNets Great Again (arxiv.org)
2、模型架构
RepVGG模型的架构在训练阶段和部署阶段是不同的,其在训练阶段采用了一种复杂的、多路径的架构,然后在部署阶段转换为一个更简单的、单路径的架构。
在训练阶段,RepVGG模型的基本构造块是一个具有三种类型卷积的模块,即1×1卷积、3×3卷积,以及一个仅有恒等映射的路径。这三种类型的卷积都有各自的权重,并且都会经过批量归一化和ReLU激活函数。这三个路径的输出会被相加以得到最后的输出。这个训练阶段的设计使得模型可以在较大的空间内寻找最优解,因为这种多路径的设计相当于让模型在1×1卷积和3×3卷积之间做出权衡,并找出最优的解决方案,多分支的结构可以提高模型准确率。
在部署阶段,RepVGG模型会经过一次重参数化的过程。这个过程会将训练阶段的多路径结构转化为单路径结构。具体来说,模型会计算出每个基本构造块的等效卷积核,并且将三个路径的权重相加,从而得到一个等效的3×3卷积核。这个重参数化的过程使得模型在部署阶段的架构变得非常简单,即模型仅由一系列的3×3卷积、ReLU激活函数以及批量归一化操作组成,这种简单的VGG-like的结构可以更高效地在各种设备上运行。
模型的架构对比图如图2所示。RepVGG受ResNet启发,采用了1×1卷积和恒等映射层。ResNet结构如图(a)所示,训练阶段的RepVGG网络结构如图(b)所示,部署阶段的RepVGG网络结构如图(c)所示。
![图片[2]-RepVGG:新型卷积神经网络架构-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/01/20240130115538832.png)
总的来说,RepVGG模型的设计思想是在训练阶段尽可能地扩大模型的搜索空间,然后在部署阶段通过重参数化的方式将模型简化,使其在实际应用中可以更高效地运行。
3.结构重参数化
RepVGG模型在部署阶段的一个关键步骤是”结构重参数化”(Structural Re-parameterization)。这是一种技术,用于将训练阶段的多路径结构转换为部署阶段的简单单路径结构。如图3所示,在部署阶段,结构重参数化的步骤主要是将这三个并行的路径(即3×3卷积、1×1卷积,以及一个仅有恒等映射的路径)先转化成三个并行3×3的卷积后,最后融合成一个单一的3×3卷积层。
![图片[3]-RepVGG:新型卷积神经网络架构-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/01/20240130115834922.png)
先来看一下3×3卷积加BN操作如何等价转化成一个3×3卷积。假设使用3×3×2的卷积核对3×3×2的输入信息进行卷积操作,输出为3×3×2。在进行卷积计算时,输出的第一个位置计算过程如图4所示。
![图片[4]-RepVGG:新型卷积神经网络架构-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/01/20240130120249315-1024x522.png)
此结果经过BN层后可以计算得到:
\(\frac{\left(x_1^1\cdot k_5^1+x_2^1\cdot k_6^1+x_4^1\cdot k_8^1+x_5^1\cdot k_9^1+x_1^2\cdot k_5^2+x_2^2\cdot k_6^2+x_4^2\cdot k_8^2+x_5^2\cdot k_9^2\right)-\mu_1}{\sqrt{\sigma_1^2+\epsilon}}\cdot\gamma_1+\beta_1\)
经过变换后可以得到:
\(\left(x_1^1\cdot k_5^1+x_2^1\cdot k_6^1+x_4^1\cdot k_8^1+x_5^1\cdot k_9^1+x_1^2\cdot k_5^2+x_2^2\cdot k_6^2+x_4^2\cdot k_8^2+x_5^2\cdot k_9^2\right)\cdot\frac{\gamma_1}{\sqrt{\sigma_1^2+\epsilon}}+\left(\beta_1-\frac{\mu_1\cdot\gamma_1}{\sqrt{\sigma_1^2+\epsilon}}\right)\)
其中,\(\frac{\gamma_1}{\sqrt{\sigma_1^2+\epsilon}}\)可以看作卷积中对相乘求和的结果进行缩放,而\(\left(\beta_{1}-\frac{\mu_{1}\cdot\gamma_{1}}{\sqrt{\sigma_{1}^{2}+\epsilon}}\right)\)可以看作卷积操作中的偏置。这样就可以把一个3×3卷积加BN操作通过上述方法等价转化成一个3×3卷积,即将3×3卷积核的计算结果乘以\(\frac{\gamma_1}{\sqrt{\sigma_1^2+\epsilon}}\),然后加\(\left(\beta_{1}-\frac{\mu_{1}\cdot\gamma_{1}}{\sqrt{\sigma_{1}^{2}+\epsilon}}\right)\)。
接下来看一下1×1卷积加BN操作如何等价转化成一个3×3卷积,对1×1大小的卷积核进行0填充即可得到3×3的卷积核,如图5所示。然后再重复上述将3×3卷积加BN操作等价转化成一个3×3卷积的方法进行计算即可。
![图片[5]-RepVGG:新型卷积神经网络架构-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/01/20240130124222140.png)
最后解释恒等映射加BN操作如何等价转化成一个3×3卷积,如图6所示。保持输入不变,新增如下两个3×3卷积核对输入数据进行卷积操作即可实现恒等映射。
![图片[6]-RepVGG:新型卷积神经网络架构-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/01/20240130125325949-1024x465.png)
通过上述操作,就可以将三个并行的路径(3×3卷积、1×1卷积,以及一个仅有恒等映射的路径)等价转化成三个3×3的卷积。然后三个3×3的卷积又可以通过加法分配律和结合律融合成一个3×3的卷积。公式如下:
\(O=\begin{pmatrix}I\otimes K_1+B_1\end{pmatrix}+\begin{pmatrix}I\otimes K_2+B_2\end{pmatrix}+\begin{pmatrix}I\otimes K_3+B_3\end{pmatrix}=I\otimes\begin{pmatrix}K_1+K_2+K_3\end{pmatrix}+\begin{pmatrix}B_1+B_2+B_3\end{pmatrix}\)
其中,I表示输入信息,K表示卷积核权重,B表示参数偏置。
4.小结
RepVGG是一种新型的深度卷积神经网络架构,由中科院计算技术研究所的研究团队提出,其主要目标是设计出一种结构简洁但性能强大的神经网络,具有易于理解和部署的特点。
RepVGG运用简单的VGG架构,仅使用3×3卷积,ReLU激活函数和批量归一化,避免了复杂的设计,例如残差连接、瓶颈设计、组卷积等等,却仍能取得出色的性能。
在训练阶段,RepVGG的基本构造块包含三种类型的卷积,即3×3卷积,1×1卷积,以及一个恒等映射的路径。这种设计在计算上更加高效,使得模型能够在更大的空间中寻找最优解。
在部署阶段,RepVGG通过一种名为Structural Re-parameterization的方法,将训练阶段的多路径结构转化为一个传统的单路径VGG-like架构。这个过程会计算每个基本构造块的等效卷积核,并将多个卷积层融合成一个卷积层,大大简化了模型,使其在部署阶段更加高效。
RepVGG在各种基准测试中都表现出了优秀的性能,例如,在ImageNet分类任务中,其性能超过了ResNet-50,并且运行速度更快。由于其简洁的架构,RepVGG在移动设备和嵌入式系统上的部署也更为方便。
总体来说,RepVGG提供了一个新颖的角度来理解和设计深度神经网络。通过训练和部署阶段的不同设计,以及结构重参数化的方法,RepVGG在保持高性能的同时,具有易于理解和部署的优点。但需要注意的是,根据任务的具体需求和资源限制,可能需要根据具体情况选择最适合的模型。
暂无评论内容