一、 介绍

主要贡献:

  1. 提出了一个快速且准确的RepVGG网络,只存在 3 × 3 3\times 3 3×3卷积层和relu层,推理速度快,在ImageNet上达到了80%的top-1精度。
  2. 提出了相应的解耦训练和参数转变方法。
  3. 实验证明其在分类和语义分割上的有效性,易部署。

现在许多精心设计的网络,例如resnet,inception,使得模型越来越复杂,更有甚者,通过一种自动搜索或者人工搜索技术来进行网络模型的构建。

相对复杂的网络缺点也是很明显的,例如ResNet中的残差块和Inception中的concat操作,都会使得模型难以实时和部署,降低推理速度,增加缓存。包括有些成分例如Xception中的depthwise卷积,ShuffleNet中的通道shuffle都会增加内存和算力消耗,对设备要求高。由于如此多的影响因素,作者认为FLOPs无法正确反应推理速度,许多低FLOPs的方法实际运行并不快。

RepVGG优点:

  1. 模型类似VGG的前馈模式,无分支,上层输出即下一层输入。
  2. 模型架构只使用3X3卷积核Relu
  3. 结构轻便,无自动搜索,人工微调和其他复杂设计。

但是这样的结构容易出现梯度消失,且精度很难提升很高。于是作者想到了多分支结构可以避免梯度消失的问题但是推理速度不理想的优缺点,提出了通过结构上在参数化解耦训练时多分支和推理时纯结构,即意味着通过转变参数来实现转变结构。具体说就是结构是和参数绑定的,例如一个卷积层可以由一个四阶核张量表示。只要将一个具体结构的参数转变另一种绑定其他结构的参数集合,就完成了结构上的变化。

具体实现时,受ResNet启发,训练时RepVGG使用可以进行结构再参数化去除的恒等变换和1X1卷积。训练完毕后,使用简单的代数转变,将恒等变换分支看为一个退化的1X1卷积,1X1卷积可以看为一个退化的3X3卷积,如此就可以使用训练好的原始3X3卷积,恒等变换,1X1卷积和BN层的参数来构建一个3X3卷积的模型,最终达到模型只有3X3卷积进行测试和部署。过程如下图:

模型再参数化
DiracNet中通过编码一个卷积层的核为 W ^ = diag ⁡ ( a ) I + diag ⁡ ( b ) W n o r m \hat{\mathrm{W}}=\operatorname{diag}(\mathbf{a}) \mathrm{I}+\operatorname{diag}(\mathbf{b}) \mathrm{W}_{\mathrm{norm}} W^=diag(a)I+diag(b)Wnorm来构建深度平原模型。

W ^ \hat{\mathrm{W}} W^为卷积的最终权重(4阶张量), a \mathbf a a b \mathbf b b是可学习向量, W n o r m \mathrm{W}_{\mathrm{norm}} Wnorm是标准化后的可学习内核。

不同于作者提出的方法在于,作者的结构再参数化是通过一个具体结构的实际数据流来实现的,这个具体结构可以在以后转换成另一个结构,而DiracNet仅仅使用conv核的另一个数学表达式以便于优化。例如一个结构性再参数化的平原模型是训练时多分支模型,而DiracNet不是。

二、 通过结构性再参数化构建RepVGG

RepVGG在经过Winograd conv加速的3X3卷积后,速度快,缓存低且更加灵活,不需要像多分***样存在输入维度的限制。

1. 训练时多分支结构

受resnet残差影响,再结合多分支技术的推理时的缺点和训练时的优点,作者在唯一训练时间集合使用多个分支来生成多个模型,在维度匹配的情况下,加入恒等变量,在加入1X1的分支,最终一个构建的块的训练时信息流为 y = x + g ( x ) + f ( x ) y = x + g(x) + f(x) y=x+g(x)+f(x)

简单的堆叠几个这样的块来构建训练时的模型。训练结束后,将他们等价的转入一个 y = h ( x ) y = h(x) y=h(x),其中 h h h是一个单独的卷积层,其参数通过代数变换从训练好的参数获得。

2. 推理时模型的再参数化

这里介绍如何将一个训练好的块转变为一个推理时的 3 × 3 3\times 3 3×3的卷积层。首先注意在将他们相加之前都会使用BN层进行处理。
这里使用 W ( 3 ) ∈ R C 2 × C 1 × 3 × 3 \mathrm{W}^{(3)} \in \mathbb{R}^{C_{2} \times C_{1} \times 3 \times 3} W(3)RC2×C1×3×3代表一个输入为 C 1 C_1 C1输出为 C 2 C_2 C2 3 × 3 3\times 3 3×3卷积层, W ( 1 ) ∈ R C 2 × C 1 \mathrm{W}^{(1)} \in \mathbb{R}^{C_{2} \times C_{1} } W(1)RC2×C1表示核为 1 × 1 1\times 1 1×1的分支。

使用 μ ( 3 ) , σ ( 3 ) , γ ( 3 ) , β ( 3 ) \boldsymbol{\mu}^{(3)}, \boldsymbol{\sigma}^{(3)}, \boldsymbol{\gamma}^{(3)}, \boldsymbol{\beta}^{(3)} μ(3),σ(3),γ(3),β(3)表示 3 × 3 3\times 3 3×3卷积层后的BN层的累积均值、标准差和学习的缩放因子和偏差。 μ ( 1 ) , σ ( 1 ) , γ ( 1 ) , β ( 1 ) \boldsymbol{\mu}^{(1)}, \boldsymbol{\sigma}^{(1)}, \boldsymbol{\gamma}^{(1)}, \boldsymbol{\beta}^{(1)} μ(1),σ(1),γ(1),β(1)表示 1 × 1 1\times 1 1×1后的BN层, μ ( 0 ) , σ ( 0 ) , γ ( 0 ) , β ( 0 ) \boldsymbol{\mu}^{(0)}, \boldsymbol{\sigma}^{(0)}, \boldsymbol{\gamma}^{(0)}, \boldsymbol{\beta}^{(0)} μ(0),σ(0),γ(0),β(0)表示恒等变换后的BN层。

M ( 1 ) ∈ R N × C 1 × H 1 × W 1 \mathrm{M}^{(1)} \in \mathbb{R}^{N\times C_{1} \times H_1 \times W_1} M(1)RN×C1×H1×W1 M ( 2 ) ∈ R N × C 2 × H 2 × W 2 \mathrm{M}^{(2)} \in \mathbb{R}^{N\times C_{2} \times H_2 \times W_2} M(2)RN×C2×H2×W2分别表示输入和输出, ∗ * 表示卷积操作。

C 1 = C 2 , H 1 = H 2 , W 1 = W 2 C_1 = C_2,H_1=H_2,W_1=W_2 C1=C2,H1=H2,W1=W2,则得到:
M ( 2 ) = b n ( M ( 1 ) ∗   W ( 3 ) , μ ( 3 ) , σ ( 3 ) , γ ( 3 ) , β ( 3 ) ) + b n ( M ( 1 ) ∗   W ( 1 ) , μ ( 1 ) , σ ( 1 ) , γ ( 1 ) , β ( 1 ) ) + b n ( M ( 1 ) , μ ( 0 ) , σ ( 0 ) , γ ( 0 ) , β ( 0 ) ) (1) \begin{aligned} \mathrm{M}^{(2)} &=\mathrm{bn}\left(\mathrm{M}^{(1)} * \mathrm{~W}^{(3)}, \boldsymbol{\mu}^{(3)}, \boldsymbol{\sigma}^{(3)}, \boldsymbol{\gamma}^{(3)}, \boldsymbol{\beta}^{(3)}\right) \\ &+\mathrm{bn}\left(\mathrm{M}^{(1)} * \mathrm{~W}^{(1)}, \boldsymbol{\mu}^{(1)}, \boldsymbol{\sigma}^{(1)}, \boldsymbol{\gamma}^{(1)}, \boldsymbol{\beta}^{(1)}\right) \\ &+\mathrm{bn}\left(\mathrm{M}^{(1)}, \boldsymbol{\mu}^{(0)}, \boldsymbol{\sigma}^{(0)}, \boldsymbol{\gamma}^{(0)}, \boldsymbol{\beta}^{(0)}\right) \end{aligned} \tag{1} M(2)=bn(M(1) W(3),μ(3),σ(3),γ(3),β(3))+bn(M(1) W(1),μ(1),σ(1),γ(1),β(1))+bn(M(1),μ(0),σ(0),γ(0),β(0))(1)

否则不使用等量分支就只有前两个之和。这里的bn操作时推理时的BN函数, ∀ 1 ≤ i ≤ C 2 \forall 1 \leq i \leq C_{2} 1iC2

bn ⁡ ( M , μ , σ , γ , β ) : , i , : , : = ( M : , i , : , : − μ i ) γ i σ i + β i (2) \operatorname{bn}(\mathrm{M}, \boldsymbol{\mu}, \boldsymbol{\sigma}, \boldsymbol{\gamma}, \boldsymbol{\beta})_{:, i,:,:}=\left(\mathrm{M}_{:, i,:,:}-\boldsymbol{\mu}_{i}\right) \frac{\boldsymbol{\gamma}_{i}}{\boldsymbol{\sigma}_{i}}+\boldsymbol{\beta}_{i} \tag{2} bn(M,μ,σ,γ,β):,i,:,:=(M:,i,:,:μi)σiγi+βi(2)

首先转变每个BN及其处理的卷积层为一个带有bias的卷积,使用 { W ′ , b ′ } \{\mathrm W',\mathrm b'\} { W,b}作为从 { M , μ , σ , γ , β } \{\mathrm{M}, \boldsymbol{\mu}, \boldsymbol{\sigma}, \boldsymbol{\gamma}, \boldsymbol{\beta}\} { M,μ,σ,γ,β}转变获得的卷积核和bias。则有:
W i , : , : , : ′ = γ i σ i   W i , : , : , : , b i ′ = − μ i γ i σ i + β i (3) \mathrm{W}_{i,:,:,:}^{\prime}=\frac{\gamma_{i}}{\boldsymbol{\sigma}_{i}} \mathrm{~W}_{i,:,:,:}, \quad \mathbf{b}_{i}^{\prime}=-\frac{\boldsymbol{\mu}_{i} \boldsymbol{\gamma}_{i}}{\boldsymbol{\sigma}_{i}}+\boldsymbol{\beta}_{i} \tag{3} Wi,:,:,:=σiγi Wi,:,:,:,bi=σiμiγi+βi(3)

容易证明 ∀ 1 ≤ i ≤ C 2 \forall 1 \leq i \leq C_{2} 1iC2 bn ⁡ ( M ∗   W , μ , σ , γ , β ) : , i , : , : = ( M ∗   W ′ ) : , i , : , : + b i ′ (4) \operatorname{bn}(\mathrm{M} * \mathrm{~W}, \boldsymbol{\mu}, \boldsymbol{\sigma}, \boldsymbol{\gamma}, \boldsymbol{\beta})_{:, i,:,:}=\left(\mathrm{M} * \mathrm{~W}^{\prime}\right)_{:, i,:,:}+\mathbf{b}_{i}^{\prime} \tag{4} bn(M W,μ,σ,γ,β):,i,:,:=(M W):,i,:,:+bi(4)

以上的变化同样适用于恒等变化,恒等变换可以看做为一个是恒等矩阵为核的 1 × 1 1\times 1 1×1的卷积。如此变换后会获得一个 3 × 3 3\times 3 3×3和两个 1 × 1 1\times 1 1×1的卷积核以及3个偏置向量bias。然后将 1 × 1 1\times 1 1×1卷积作为中心点和 3 × 3 3\times 3 3×3卷积相加。只需要对 1 × 1 1\times 1 1×1卷积进行0值padding就可以了,操作图如下:

如此操作要求 3 × 3 3\times 3 3×3 1 × 1 1\times 1 1×1卷积层需要是相同的stride,前者的padding需要比后者 1 × 1 1\times 1 1×1卷积的padding大一个像素,例如: 3 × 3 3\times 3 3×3卷积的padding为1时, 1 × 1 1\times 1 1×1卷积的padding要为0。

3. 结构规范

下图展示了一个包括深度和宽度的RepVGG的规范。这里设计每个stage的层数量满足下面三个指导规则:

  1. 第一个stage操作大的分辨率是费时的,所以只使用一层来降低延迟
  2. 最后一层应当有更多的通道,因此只用1层来存储参数
  3. 将大多数层放在倒数第二层( 14 × 14 14\times 14 14×14输出分辨率)

作者这里构建了两个实例:用以对抗轻量和中量模型例如ResNet-18/34/50的RepVGG-A和挑战高表现的RepVGG-B

层的宽度使用经典的设置[64,128,256,512]。具体设置2,3,4,5的宽度为[64a,128a,256a,512b],b>a。同时为避免在大特征图上进行大卷积操作,如果a<1,则将stage1的进行减少,不会增多,因此stage宽度为 m i n ( 64 , 64 a ) min(64,64a) min(64,64a)

三、 实验

通过设置不同 a a a b b b,得到不同的网络模型:

ImageNet分类任务实验对比:

再参数化转变消融实验:

Identity w/o BN:去除等量变换后的BN层
Post-addition BN:去除所有BN层,在最后求和后加入一层BN层,即将加之前的操作变为加之后。
+ReLU in branches:每个分支BN层后加操作前加入Relu层。