论文:RepVGG: Making VGG-style ConvNets Great Again
代码:https://github.com/megvii-model/RepVGG
出处:CVPR2021 | 清华大学 旷世
RepVGG 的贡献:
随着 Inception、ResNet、DenseNet 等方法的提出,卷积神经网络越来越复杂,还有一些基于自动或手动框架选择,虽然这些复杂的网络能够带来好的效果,但仍然会有很多问题:
所以本文提出了 RepVGG,是一个 VGG-style 的结构,有如下优势:
RepVGG 面临的问题:
RepVGG 如何解决上述问题:结构重参数化(训练和推理使用不同的结构)
虽然多分支的结构在推理的时候效率严重不足,但其胜在训练的效果,所以 RepVGG 在训练的时候选择了多分支结构,而且选择的是 3 分支结构(比 ResNet 还多一个分支):
所以 RepVGG 训练的 block 可以表示为: y = x + g ( x ) + f ( x ) y = x + g(x) + f(x) y=x+g(x)+f(x)
当有 n 个 blocks 时,相当于有 3 n 3^n 3n 个模型
RepVGG 如何在推理阶段进行重参数化呢?
具体做法如下:
首先介绍一下使用的符号:
假设:
输入为 M ( 1 ) ∈ R N × C 1 × H 1 × W 1 M^{(1)} \in 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 M^{(2)} \in R^{N \times C_2 \times H_2 \times W_2} M(2)∈RN×C2×H2×W2
在 C/H/W 输入输出相同时,则有如下结论:
当不使用恒等映射分支时,则只有前两项,此时的 bn 是推理时的 BN,形式如下:
将每个 BN 和其前面的 conv 可以转换成一个【conv with bias vector】,假设
{
W
′
,
b
′
}
\{W', b'\}
{W′,b′} 分别为 从
W
,
μ
,
σ
,
γ
,
β
W, \mu, \sigma, \gamma, \beta
W,μ,σ,γ,β 转换而来的 kernel 和 bias,则有:
这种变换同样可以被用于恒等映射分支,因为恒等映射分支可以被看做一个 【1x1 conv with an identity matrix as the kernel】
经过这种变换后,就能得到:
然后:
表 2 展示了 RepVGG 的设计细节,包括宽度和深度,其中主要使用了 3x3 conv,没有使用 max pooling。
深度:
宽度:
不同版本的 RepVGG 结构如下:
从实验上证明重参数化的强大效果,所有模型都训练 120 个 epochs
1、移除 RepVGG-B0 的恒等映射分支/1x1 conv 分支,来看训练模型的效果,如表 6:
2、移除恒等映射分支/1x1 conv 分支后,看推理速度,如表 7: