RepVGG 将训练推理网络结构进行独立设计,在训练时应用高精度的多分支网络学习权值,在推理时应用低提早的单分支网络,而后通过构造重参数化将多分支网络的权值转移到单分支网络。RepVGG 性能达到了 SOTA,思路简略新鲜,置信能够在下面做更多的工作来取得更好的性能。
起源:晓飞的算法工程笔记 公众号
论文: RepVGG: Making VGG-style ConvNets Great Again
- 论文地址:https://arxiv.org/abs/2101.03697
- 论文代码:https://github.com/megvii-model/RepVGG
Introduction
目前,卷积网络的钻研次要集中在构造的设计。简单的构造只管能带来更高的准确率,但也会带来推理速度的减慢。影响推理速度的因素有很多,计算量 FLOPs 往往不能精确地代表模型的理论速度,计算量较低的模型不肯定计算更快。因而,VGG 和 ResNet 仍然在很多利用中失去重用。
基于上述背景,论文提出了 VGG 格调的单分支网络结构 RepVGG,可能比结构复杂的多分支网络更优良,次要蕴含以下特点:
- 模型跟 VGG 相似,不蕴含任何分支,无需保留过多的两头后果,内存占用少。
- 模型仅蕴含 $3\times 3$ 卷积和 ReLU,计算速度快。
- 具体的网络结构 (包含深度和宽度) 不须要依附主动搜寻、人工调整以及复合缩放等简单伎俩进行设计,非常灵便。
当然,想要间接训练简略的单分支网络来达到与多分支网络一样的精度是很难的。因为多分支网络中的各个分支在训练时的权重变动不定,所以多分支网络可看作是大量简单网络的合集,而且其可能防止训练时的梯度弥散问题。尽管如此,但多分支网络会侵害速度,所以论文打算训练时采纳多分支网络,而推理时依然应用单分支网络,通过新鲜的结构性重参数化 (structural re-parameterization) 将多分支网络的权值转移到简单网络中。
Building RepVGG via Structural Re-param
Training-time Multi-branch Architecture
因为多分支的存在,使得多分支网络相当于一个蕴含大量小网络的汇合,但其推理速度会有较大影响,所以论文仅在训练时应用多分支进行训练,训练实现后将其权值转移到简单网络中。为了够蕴含大量更简略的模型,论文在 $3\times 3$ 卷积的根底上增加 ResNet-like 的 identity 分支和 $1\times 1$ 分支形成 building block,而后重叠成训练模型。假如多分支网络蕴含 $n$ 个 building block,则其能够表白 $3^n$ 种简略网络结构。
Re-param for Plain Inference-time Model
在开始形容最重要的权值转换之前,先进行以下定义:
- 定义 $3\times 3$ 卷积为 $W^{(3)}\in \mathbb{R}^{C_2\times C_1\times 3\times 3}$,$1\times 1$ 卷积为 $W^{(1)}\in \mathbb{R}^{C_2\times C_1}$。
- 定义 $\mu^{(3)}$、$\sigma^{(3)}$、$\gamma^{(3)}$ 和 $\beta^{(3)}$ 为跟在 $3\times 3$ 卷积前面的 BN 层的累计均值、标准差、学习到的缩放因子和偏置,跟在 $1\times 1$ 卷积前面的 BN 层的参数为 $\mu^{(1)}$、$\sigma^{(1)}$、$\gamma^{(1)}$ 和 $\beta^{(1)}$,跟在 identity 分支前面的 BN 层参数为 $\mu^{(0)}$、$\sigma^{(0)}$、$\gamma^{(0)}$ 和 $\beta^{(0)}$。
- 定义输出为 $M^{(1)}\in \mathbb{R}^{N\times C_1\times H_1\times W_1}$,输入为 $M^{(2)}\in \mathbb{R}^{N\times C_c\times H_2\times W_2}$。
- 定义 $*$ 为卷积操作。
假如 $C_1=C_2$、$H_1=H_2$ 以及 $W_1=W_2$,则有:
若输入输出维度不雷同,则去掉 identity 分支,即只蕴含后面两项。$bn$ 代表是推理时的 BN 函数,一般而言,对于 $\forall 1\leq i \leq C_2$,有:
权值转换的外围是将 BN 和其后面的卷积层转换成单个蕴含偏置向量的卷积层。假如 $\{W^{‘}, b^{‘}\}$ 为从 $\{W, \mu, \sigma, \gamma, \beta\}$ 转换失去的核权值和偏置,则有:
转换后的卷积操作与本来的卷积 +BN 操作是等价的,即:
上述的转换也可利用于 identity 分支,将 identity mapping 视作卷积核为单位矩阵的 $1\times 1$ 卷积。
以上图为例,在 $C_2=C_1=2$ 的状况下,将 3 个分支别离转换后失去 1 个 $3\times 3$ 卷积和两个 $1\times 1$ 卷积,最终的卷积偏置由 3 个卷积的偏置间接相加,而最终的卷积核则是将两个 $1\times 1$ 卷积核加到 $3\times 3$ 卷积核核心。须要留神的是,为了达到转换的目标,训练时的 $3\times 3$ 卷积分支和 $1\times 1$ 卷积分支须要有雷同的步长,而 $1\times 1$ 卷积的填充要比 $3\times 3$ 卷积的小一个像素。
Architectural Specification
RepVGG 是 VGG 格调的网络,次要依赖 $3\times 3$ 卷积,但没有应用最大池化,而是应用步长为 2 的 $3\times 3$ 卷积作为替换。RepVGG 共蕴含 5 个阶段,每个阶段的首个卷积的步长为 2。对于分类工作,应用最大池化和全连贯层作为 head,而其它工作则应用对应的 head。
每个阶段的层数的设计如上表所示,除首尾两个阶段应用单层外,每个阶段的层数逐步减少。而每个阶段的宽度则通过缩放因子 $a$ 和 $b$ 进行调整,通常 $b \gt a$,保障最初一个阶段可能提取更丰盛的特色。为了防止第一阶段采纳过大的卷积,进行了 $min(64, 64a)$ 的设置。
为了进一步压缩参数,论文间接在特定的层退出分组卷积,从而达到速度和准确率之间的 trade-off,比方 RepVGG- A 的 3rd, 5th, 7th, …, 21st 层以及 RepVGG- B 的 23rd, 25th 和 27th 层。须要留神,这里没有对间断的层应用分组卷积,次要为了保障通道间的信息交换。
Experiment
SOTA 分类在 120epoch 训练的性能比照。
200epoch 带数据加强的分类性能比照。
比照多分支成果。
其它操作与构造重参数化的比照试验。
作为宰割工作的骨干网络的体现。
Conclusion
RepVGG 将训练推理网络结构进行独立设计,在训练时应用高精度的多分支网络学习权值,在推理时应用低提早的单分支网络,而后通过构造重参数化将多分支网络的权值转移到单分支网络。RepVGG 性能达到了 SOTA,思路简略新鲜,置信能够在下面做更多的工作来取得更好的性能。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】