论文解读RepVGG: Making VGG-style ConvNets Great Again

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

一、需求解读

常见的计算机视觉任务中,我们经常会看到ResNet和MobileNet两个网络的身影,大量的实验结果表明:ResNet网络能够很好的提取到特征解决网络退化的问题,用户可以根据自己的需要灵活的选择ResNet18、ResNet34和ResNet50等网络架构;MobileNet适合应用在一些低算力的嵌入式设备中,可以在速度和精度之中达到很好的均衡。但是我们很少看到过VGG网络的身影;主要的原因包含以下点:(1)VGG网络的模型更大,不便于模型部署;(2)与ResNet网络相比,VGG网络的性能会有些逊色。

RepVGG网络就是在VGG的基础上面进行改进,主要的改进思路包括:(1)在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的特性应用 到VGG网络中;(2)模型推理阶段,通过Op融合策略将所有的网络层都转换为Conv3*3,便于网络的部署和加速。 因为当前很多的模型推理框架中都对Conv3*3卷积做了一些特定的加速操作,所以将所有卷积层转换成Conv3*3,整个网络在推理阶段能获得较大的速度提升。

RepVGG.jpg

上图是RepVGG与目前业界较优的网络模型在精度和性能上的比较,左边的RepVGG为轻量级和中量级的网络模型结构的对比结果图,右边的RepVGG为重量级的网络模型结构的对比结果图。可以发现RepVGG在精度和速度上均取得非常有竞争力的结果。重量级的RepVGG网络模型在ImageNet数据集上的精度超过了80%,这是基础模型的首次能够达到这个精度。

二、RepVGG算法简介

RepVGG是一个分类网络,该网络是在VGG网络的基础上进行改进,主要的改进点包括:

(1)在VGG网络的Block块中加入了Identity和残差分支,相当于把ResNet网络中的精华应用 到VGG网络中;

(2)模型推理阶段,通过Op融合策略将所有的网络层都转换为Conv3*3,便于模型的部署与加速。

并且该论文中描述的网络训练和网络推理阶段使用不同的网络架构,训练阶段更关注精度,推理阶段更关注速度;

三、RepVGG网络架构

作者提出了一个简单但强大的卷积神经网络架构,该架构具有类似于VGG的推理时间主体,该主体仅由3x3卷积和ReLU的堆栈组成,而训练时间模型具有多分支拓扑。作者通过将训练过程和推理时间进行解耦来实现精度和速度的完美兼得,即在模型进行前向推理时采用参数融合的方案来实现对于模型速度的提升,采用的技术简称为结构重新参数化(re-parameterization),因为作者也将提出的新型网络称为RepVGG。

RepVGG.jpg

上图展示了部分RepVGG网络,图A表示的是原始的ResNet网络,该网络中包含着Conv1*1的残差结构和Identity的残差结构,正是这些残差结构的存在解决了深层网路中的梯度消失问题,使得网络更加易于收敛。图B表示的是训练阶段的RepVGG网络架构,整个网络的主体结构和ResNet网络类似,两个网络中都包含残差结构。两个网络中的主要差异如下所述:(1)RepVGG网络中的残差块并没有跨层;(2)整个网络包含2种残差结构,一种是仅包含Conv1*1残差分支;另一种不仅包含Conv1*1的残差结构,而且包含Identity残差结构。(3)模型的初始阶段使用了简单的残差结构,随着模型的加深,使用了复杂的残差结构,这样不仅仅能够在网络的深层获得更好的特征信息,而且可以更好的处理网络深层的梯度消失问题。图C表示的是推理阶段的RepVGG网络,该网络的结构非常简单,整个网络均是由Conv3*3+Relu堆叠而成,易于模型的推理和加速。

四、推理阶段Op融合

RepVGG.jpg

RepVGG.jpg

上图展示了模型推理阶段的重新参数化过程,其实就是一个OP融合和OP替换的过程。图A从结构化的角度展示了整个重新参数化流程, 图B从模型参数的角度展示了整个重新参数化流程。整个重新参数化步骤如下所示:

步骤1:首先通过公式3将残差块中的卷积层和BN层进行融合,该操作在很多深度学习框架的推理阶段都会执行。图中的灰色框中执行Conv3*3+BN层的融合,图中的黑色矩形框中执行Conv1*1+BN层的融合,图中的黄色矩形框中执行Conv3*3(卷积核设置为全1)+BN层的融合。其中Wi表示转换前的卷积层参数,μi表示BN层的均值,σi表示BN层的方差,γi和βi分别表示BN层的尺度因子和偏移因子,W’和b’分别表示融合之后的卷积的权重和偏置。

RepVGG.jpg

步骤2:将融合后的卷积层转换为Conv3*3,即将具体不同卷积核的卷积均转换为具有3*3大小的卷积核的卷积。由于整个残差块中可能包含Conv1*1分支和Identity两种分支,对于Conv1*1分支而言,整个转换过程就是利用3*3的卷积核替换1*1的卷积核,即将1*1卷积核中的数值移动到3*3卷积核的中心点即可;对于Identity分支而言,该分支并没有改变输入的特征映射的数值,那么我们可以设置一个3*3的卷积核,将所有的9个位置处的权重值都设置为1,那么它与输入的特征映射相乘之后,保持了原来的数值。

步骤3:合并残差分支中的Conv3*3。即将所有分支的权重W和偏置B叠加起来,从而获得一个融合之后的Conv3*3网络层。

五、RepVGG算法效果展示与分析

RepVGG.jpgRepVGG.jpg

上图展示了ResVGG网络与ResNet网络在相同测试数据集上面的性能指标。评估的性能指标包括Top-1准确率、模型推理速度、模型参数量、FLOPS和Wino卷积的MUL个数。

RepVGG.jpg

RepVGG.jpg

(完)