[RepVGG] RepVGG:Making VGG-style ConvNets Great Again(CVPR.2021)

paper:https://arxiv.org/abs/2101.0369
code:
文章目录
-
1. Motivation
-
2. Contribution
-
3. Building RepVGG via Structural Re-param
-
- 3.1 Simple is Fast, Memory-economical, Flexible
- 3.2 Traing-time Multi-branch Architecture
- 3.3 Architectural Specification
-
4.Experiments
-
- 4.1 RepVGG for ImageNet Classification
- 4.2 Structural Re-parameterization is the Key
- 4.3 Semantic Segmentation
-
Reference
1. Motivation
如今更复杂的卷积网络可以取得更大的精度,但是相对于简单的卷积网络来说,也有2种缺点,首先是多分支结构中复杂的设定,以及复杂卷积网络的计算资源的开销。
同时,其他simple ConvNets的性能并不能比得过complicated ConvNets。
2. Contribution
本文的贡献如下:
本文提出了RepVGG,一种简单,实现速度与精度平衡的SOTA 网络结构。
本文提出了structural re-parameterization 结构化重参数来解耦训练多分支拓扑以及测试单分支plain结构。
本文显示了VGG在图像分类以及语义分割上的实用性,高效并且利于实现。
RepVGG有以下优点:
- RepVGG模型是一种VGG-like 结构,没有许多分支,每一层的输入就是上一层的输出。
- RepVGG模型的body部分只包含了3x3卷积以及ReLU。
- RepVGG模型具体的结构没有automatic search,manual refinement人为加工,compound scaling 混合比例等设定。
3. Building RepVGG via Structural Re-param
3.1 Simple is Fast, Memory-economical, Flexible
使用simple ConvNets的原因在于快速,省内存以及灵活。
-
Fast

-
Memory-economical

Flexible
多分支的拓扑结构暴露了网络结构上的局限性,例如输出的shape,res-block的最后一个卷积必须保持相同的shape,否则就无法实现short-cut;以及限制了channel purning通道剪枝的应用。
3.2 Traing-time Multi-branch Architecture
作者收到ResNet启发,并且通过相关的研究发现,ResNet之所以性能比VGG好的原因,ResNet的分支结构shortcut,可以使得模型具有一种大量子模型的隐式ensemble。确切来说,假如模型有n个blocks,模型可以被表示为2^n的ensemble模型(根据作者的解释,每遇到一次分支,总的路径救护变成2倍),单路架构显然不具备这种特点。

由于多分支拓扑在inference过程存在缺点,但又利于训练,因此作者构建了一种只使用多分支结构用于training-time的模型。这样就可以同时利用多分支模型训练时的优势 (性能高)和单路模型推理时的好处 (速度快、省内存),如图2所示。这里的关键显然在于这种多分支模型的构造形式和转换的方式(3.3小节叙述)。ResNet中的Res-Block的计算公式为:
y= x +f(x)\\ if ( x.size() \not= f(x).size()):\\ y = g(x) + f(x)
受到ResNet的启发,RepVGG设计为三分支的结构,本文的实现方式为:在训练时,为每一个3x3卷积层添加平行的1x1卷积分支和恒等映射分支,构成一个RepVGG Block。这种设计是借鉴ResNet的做法,区别在于ResNet是每隔两层或三层加一分支,而RepVGG是每层都加。公式如下:
y= x+g(x)+f(x)
在训练过程中,f(x)表示的是和ResNet一样的1x1的shortcut分支,而g(x) = y ,g(x)为恒等映射,不经过卷积核,因此模型就成为了3^n的ensemble模型。
3.3 Architectural Specification
由公式1~公式5,可以得到由多分支结构转换为单分支卷积结构。
多分支结构中,通过3个卷积核以及各自的bn层,得到最终的feature map M,由公式1表示:

接着对于公式1中的每一项,由BN层的公式进行展开得到公式2:

将公示2进行展开,得到新的W_i'和b_i':

接着可以得到经过Conv以及BN层后的y =Wx+b的形式:

由于卷积的线性(可加性),假设三个3x3的卷积分别是W1,W2,W3,最终,有以下等式成立:
Conv(x, W_1) +Bias_1+Conv(x, W_2) +Bias_2 +Conv(x, W_3)+Bias_3=Conv(x, W_1+W_2+W_3+Bias_{sum}) \tag{5}
因此,可以对模型进行等价的转换,最后,三分支得到的卷积核和bias分别相加即可。这样,每个RepVGG Block转换前后的输出完全相同,因而训练好的模型可以等价转换为只有3x3卷积的单路模型, 将多分支模型等价转换 为单路模型,得到部署的模型并且使用。
作者给出了一个非常例子以及图示,如图4所示,假设C_1 =C_2=2,那么对于3 \times 3以及 1 \times 1的Kernel,它们的size分别为3\times3\times2\times2以及1\times1\times2\times2。也就是说,它们分别有4\times 3 \times 3和2 \times 2的卷积矩阵,对于identity本身来说,可以理解为是一种identity matrix的1 \times 1的单位矩阵。对于每一个分支,都有BN层的4个参数[\mu,\sigma,\gamma,\beta ]。
RepVGG Blcok转换为一个卷积的方式为:1 \times 1的矩阵可以看成是只有中心位置是有参数其他位置的值都是0的3\times3 卷积核;同样,恒等映射是一种以单位矩阵为卷积核的1x1卷积,同时进一步的转换为3\times 3 卷积。
An explanation for the success of ResNets is that such a multi-branch architecture makes the model an implicit ensemble of numerous shallower models

从这一转换过程中,我们看到了“结构重参数化”的实质:训练时的结构对应一组参数,推理时我们想要的结构对应另一组参数;只要能把前者的参数等价转换为后者,就可以将前者的结构等价转换为后者。
4.Experiments
4.1 RepVGG for ImageNet Classification

训练200个epochs的实验结果:

4.2 Structural Re-parameterization is the Key
表6消融实验证明了3分支结构的重要性,Identity branch 和 1 x 1 branch。

基于RepVGG-B0 baseline的实现比较,需要注意的是加入了ReLU 虽然可以提升性能,但是这样就无法在inference-time 转换为single branch的形式(由于加入了非线性的操作,卷积的可加性就无法使用了)。

4.3 Semantic Segmentation

