CVPR2021
Paper : https://arxiv.org/abs/2101.03697Code : https://github.com/DingXiaoH/RepVGG
MegEngine : https://github.com/megvii-model/RepVGG
论文总览
本文通过结构重参数化,只使用 3x3 卷积和 ReLU 激活函数的单路极简架构在速度和性能上达到 SOTA 水平。
尽管许多复杂的卷积网络都比简单的卷积网络提供更高的准确性,但缺点很明显:
- 复杂的多分支设计(例如 ResNet 的残差连接和 Inception 的分支拼接)让模型更难实现和定制,并且降低了推理速度,减少了内存利用
- 一些组件(例如 Xception 和 MobileNets 的深度卷积,ShuffleNet 的通道洗牌)增加了内存访问成本,并且缺乏设备的支持。
由于影响推理速度的因素太多,浮点运算(FLOP)的数量不能准确反映实际速度。
而简单架构是快速、节省内存并且具有灵活性的。
-
快速: 3 × 3 3 \times 3 3×3 卷积非常快。单路架构非常快,因为并行度高。
-
节省内存。单路架构节省内存。
-
灵活性好,容易改变更层的宽度
所以本文提出通过结构重参数化将多分支训练和简单架构推理分离,也就是通过转换网络的参数将架构从一种架构转换为另一种架构,如下图所示,使用(B)网络训练,然后通过结构重参数化转换为(C)网络进行推理。具体来说,如果某个结构的参数可以转换为由另一种结构的另一组参数,就可以用后者等效地替换前者,从而改变整个网络体系结构。
这样就可以同时利用多分支模型训练时的优势(性能高)和单路模型推理时的好处(速度快、省内存)。
方法
多分支训练
在训练时,为每一个 3x3 卷积层添加平行的 1x1 卷积分支和 identity 分支,构成一个 RepVGG Block(如上图)。这种设计是借鉴 ResNet 的做法,区别在于 ResNet 是每隔两层或三层加一分支,而本文是每层都加。
结构重参数化
怎么样把多分支训练网络重参数化为简单网络进行推理,也就是怎样将 3 × 3 , 1 × 1 3\times 3, 1\times1 3×3,1×1 和 identity 转换为一个 3 × 3 3 \times 3 3×3 卷积?
方法描述
1 × 1 1 \times 1 1×1 卷积相当于一个特殊的 3 × 3 3 \times 3 3×3 卷积(卷积核中有很多 0),而 identity 是一个特殊的 1 × 1 1 \times 1 1×1 卷积(单位矩阵),因此也是一个特殊的 3 × 3 3 \times 3 3×3 卷积。所以,把 identity 转换为 1 × 1 1 \times 1 1×1 卷积,只要构造出一个以单位矩阵为卷积核的 1 × 1 1 \times 1 1×1 卷积即可,把 1 × 1 1 \times 1 1×1 卷积等价转换为 3 × 3 3 \times 3 3×3 卷积,只要用 0 填充即可。而对于 BN 层,因为其参数包括累积得到的均值,标准差,缩放因子和偏置,所以推理时的卷积层和其后的 BN 层可以等价转换为一个带偏置的卷积层。
原理详解
使用
W
(
3
)
∈
R
C
2
×
C
1
×
3
×
3
W^{(3)} \in \mathbb{R}^{C_2 \times C_1 \times 3 \times 3}
W(3)∈RC2×C1×3×3 表示
3
×
3
3 \times 3
3×3 的卷积核,输入通道为
C
1
C_1
C1,输出通道为
C
2
C_2
C2 。使用
W
(
1
)
∈
R
C
2
×
C
1
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
)
\mu^{(3)}, \sigma^{(3)},\gamma^{(3)},\beta^{(3)}
μ(3),σ(3),γ(3),β(3) 表示
3
×
3
3\times 3
3×3 卷积层后的 BN 层的均值,标准差,缩放因子和偏置。使用
μ
(
1
)
,
σ
(
1
)
,
γ
(
1
)
,
β
(
1
)
\mu^{(1)}, \sigma^{(1)},\gamma^{(1)},\beta^{(1)}
μ(1),σ(1),γ(1),β(1) 表示
1
×
1
1\times 1
1×1 卷积层后的 BN 层的均值,标准差,缩放因子和偏置。用
μ
(
0
)
,
σ
(
0
)
,
γ
(
0
)
,
β
(
0
)
\mu^{(0)}, \sigma^{(0)},\gamma^{(0)},\beta^{(0)}
μ(0),σ(0),γ(0),β(0) 表示
1
×
1
1\times 1
1×1 卷积层后的 BN 层的均值,标准差,缩放因子和偏置。使用
M
(
1
)
∈
R
N
×
C
1
×
H
1
×
W
1
,
M
(
2
)
∈
R
N
×
C
2
×
H
2
×
W
2
M^{(1)} \in \mathbb{R}^{N\times C_1 \times H_1 \times W_1},M^{(2)} \in \mathbb{R}^{N\times C_2 \times H_2 \times W_2}
M(1)∈RN×C1×H1×W1,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
)
)
\begin{aligned} M^{(2)} & = bn(M^{(1)} * W^{(3)}, \mu^{(3)}, \sigma^{(3)},\gamma^{(3)},\beta^{(3)}) \\ & + bn(M^{(1)} * W^{(1)}, \mu^{(1)}, \sigma^{(1)},\gamma^{(1)},\beta^{(1)}) \\ & + bn(M^{(1)}, \mu^{(0)}, \sigma^{(0)},\gamma^{(0)},\beta^{(0)}) \\ \end{aligned}
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))
不相等的话,不用恒等分支,因此上式只有前两项。对于 BN 的公式为:
b
n
(
M
,
μ
,
σ
,
γ
,
β
)
:
,
i
:
,
:
=
(
M
:
,
i
:
,
:
−
μ
i
)
γ
i
σ
i
+
β
i
bn(M, \mu, \sigma, \gamma, \beta)_{:,i:,:} = (M_{:,i:,:} - \mu_i) \frac{\gamma_i}{\sigma_i} + \beta_i
bn(M,μ,σ,γ,β):,i:,:=(M:,i:,:−μi)σiγi+βi
首先可以把每个 BN 和它前边的卷积层转换为一个带有偏置限量的卷积。使用
{
W
′
,
b
′
}
\{W', b'\}
{W′,b′} 表示转换后的卷积核和偏置,则:
W
i
,
:
,
:
,
:
′
=
γ
i
σ
i
W
i
,
:
,
:
,
:
,
b
i
′
=
−
μ
i
γ
i
σ
i
+
β
i
W_{i,:,:,:}' = \frac{\gamma_i}{\sigma_i} W_{i,:,:,:}, \;\;\; b_i' = -\frac{\mu_i \gamma_i}{\sigma_i} + \beta_i
Wi,:,:,:′=σiγiWi,:,:,:,bi′=−σiμiγi+βi
因此
b
n
(
M
∗
W
,
μ
,
σ
,
γ
,
β
)
:
,
i
,
:
,
:
=
(
M
∗
W
′
)
:
,
i
,
:
,
:
+
b
i
′
bn(M * W, \mu, \sigma, \gamma, \beta)_{:,i,:,:} = (M * W')_{:,i,:,:} + b_i'
bn(M∗W,μ,σ,γ,β):,i,:,:=(M∗W′):,i,:,:+bi′
举例说明
上图描述了这一转换过程,输入和输出通道都是2,则 3 × 3 3 \times 3 3×3 卷积的参数是 4 个 3 × 3 3 \times 3 3×3 矩阵, 1 × 1 1 \times 1 1×1 卷积的参数是一个 2 × 2 2 \times 2 2×2 矩阵。根据以上公式可以将它们及其 BN 层分别转换为 3 × 3 3 \times 3 3×3 卷积及其偏置,然后将它们分别相加即可。这样,每个 RepVGG Block 转换前后的输出完全相同,因而训练好的模型可以等价转换为只有 3 × 3 3 \times 3 3×3 卷积的单路模型。
网络架构
对于图像分类,使用全局平均池化和一个全连接网络分类。对于其他的任务,可以使用任意层的特征图。
遵循三个简单的准则来决定每个 stage 的层数。
- 第一个 stage 具有高分辨率,很耗时,因此仅使用了一层
- 最后一个 stage 具有更多通道,因此仅使用一层来保存参数
- 将最多的层放到倒数第二个 stage(ImageNet上的输出分辨率为14×14)
使用 RepVGG-A 与其他轻型和中等模型比较,包括 ResNet-18/34/50,而 RepVGG-B 与高性能模型比较。
实验
局限性
RepVGG 是为 GPU 和专用硬件设计的高效模型,追求高速度、省内存,较少关注参数量和理论计算量。在低算力设备上,可能不如 MobileNet 和 ShuffleNet 系列适用。
参考文章: