共计 3484 个字符,预计需要花费 9 分钟才能阅读完成。
论文提出了在线重参数办法 OREPA,在训练阶段就能将简单的构造重参数为单卷积层,从而升高大量训练的耗时。为了实现这一指标,论文用线性缩放层代替了训练时的 BN 层,放弃了优化方向的多样性和特色表达能力。从试验后果来看,OREPA 在各种工作上的准确率和效率都很不错
起源:晓飞的算法工程笔记 公众号
论文: Online Convolutional Re-parameterization
- 论文地址:https://arxiv.org/abs/2204.00826
- 论文代码:https: //github.com/JUGGHM/OREPA_CVPR2022
Introduction
除了准确率外,模型的推理速度也是很重要的。为了取得部署敌对且精度高的模型,近期很多钻研提出基于构造重参数化来进步模型性能。用于构造重参数化的模型在训练阶段和推理阶段具备不同的构造,训练时应用简单的构造来取得高精度,而训练后通过等效变换将一个简单的构造压缩成可能疾速推理的线性层。压缩后的模型通常具备简洁的架构,例如相似 VGG 的或相似 ResNet 的构造。从这个角度来看,重参数化策略能够在不引入额定推理工夫老本的状况下进步模型性能。公众号之前发了 RepVGG 的论文解读《RepVGG:VGG,永远的神!| 2021 新文》,有趣味能够去看看。
BN 层是重参数模型中的要害组成部分,在每个卷积层之后增加一个 BN 层,如果图 1b 所示,移除 BN 层会导致重大的精度降落。在推理阶段,简单的构造能够被压缩到单个卷积层中。而在训练阶段,因为 BN 层须要非线性地将特色图除以其标准差,只能独自计算每个分支。因而,存在大量两头计算操作(大 FLOPS)和缓冲特色图(高内存应用),带来微小的计算开销。更蹩脚的是,高额的训练耗费妨碍了摸索更简单和可能更弱小的从新参数构造。
为什么 BN 层对重参数化如此重要?依据试验和剖析,论文发现 BN 层中的缩放因子可能使不同分支的优化方向多样化。基于这个发现,论文提出了在线重参数化办法 OREPA,如图 1c 所示,蕴含两个步骤:
- block linearization:去掉所有非线性泛化层,转而引入线性缩放层。线性缩放层不仅能与 BN 层一样使不同分支的优化方向多样化,还能够在训练时合并计算。
- block squeezing:将简单的线性构造简化为单个卷积层。
OREPA 缩小了由中间层引起的计算和存储开销,可能显著升高训练耗费 (65%-75% 显存节俭、减速 1.5-2.3 倍) 且对性能的影响很小,使得摸索更简单的重参数化后果成为可能。为了验证这一点,论文进一步提出了几个从新参数化的组件以取得更好的性能。
论文的奉献蕴含以下三点:
- 提出在线重参数化办法 OREPA,可能大幅提高重参数化模型的训练效率,使得摸索更强的重参数构造成为可能。
- 依据对重参数模型原理的剖析,将 BN 层替换为线性缩放层,放弃优化方向多样化个性和特色表达能力。
- 通过各种视觉工作试验表明,OREPA 在准确率和训练效率方面都优于以前的重参数化模型。
Online Re-Parameterization
OREPA 可能将训练期间的简单构造简化为繁多卷积层,维持准确率不变。OREPA 的变换流程如图 2 所示,蕴含 block linearization 和 block squeezing 两个步骤。
Preliminaries: Normalization in Re-param
BN 层是重参数中多层和多分支构造的要害构造,是重参数模型性能的根底。以 DBB 和 RepVGG 为例,去掉 BN 层后(改为多分支后对立进行 BN 操作)性能会有显著的降落,如表 1 所示。
比拟意外的是,BN 层的应用会带来过高的训练耗费。在推理阶段,重参数构造中的所有两头操作都是线性的,能够进行合并计算。而在训练阶段,因为 BN 层是非线性的(须要除以特色图的标准差),无奈进行合并计算。无奈合并就会导致两头操作须要独自计算,产生微小的计算耗费和内存老本。而且,过高的老本也妨碍了更简单的构造的摸索。
Block Linearization
尽管 BN 层阻止了训练期间的合并计算,但因为准确率问题,依然不能间接将其删除。为了解决这个问题,论文引入了 channel-wise 的线性缩放作为 BN 层的线性替换,通过可学习的向量进行特色图的缩放。线性缩放层具备 BN 层的相似成果,疏导多分支向不同方向进行优化,这是重参数化性能的外围。
基于线性缩放层,对重参数化构造进行批改,如图 3 所示,以下三个步骤:
- 移除所有非线性层,即重参数化构造中的归一化层。
- 为了放弃优化的多样性,在每个分支的开端增加了一个缩放层,即 BN 层的线性代替。
- 为了稳固训练过程,在所有分支之后增加一个 BN 层。
通过 block linearization 操作后,重参数构造中就只存在线性层,这意味着能够在训练阶段合并构造中的所有组件。
Block Squeezing
Block squeezing 将计算和内存过多的两头特色图上的操作转换为更快捷的单个卷积核核操作,这意味着在计算和内存方面将重参数的额定训练老本从 $O(H\times W)$ 缩小到 $O(KH\times KW)$,其中 $(KH, KW)$ 是卷积核的形态。
一般来说,无论线性重参数构造多简单,以下两个属性都始终成立:
- 重参数构造中的所有线性层(例如深度卷积、均匀池化和倡议的线性缩放)都能够用具备相应参数的卷积层来示意,具体证实能够看原文的附录。
- 重参数构造可示意为一组并行分支,每个分支蕴含一串卷积层。
有了上述两个属性,就以将多层(即程序构造)和多分支(即并行构造)压缩为单个卷积,如图 4a 和图 4b 所示。原文有局部转换的公式证实,有趣味的能够去看看原文对应章节,这块不影响对 Block Squeezing 的思维的了解。
Gradient Analysis on Multi-branch Topology
论文从梯度回传的角度对多分支与 block linearization 的作用进行了剖析,外面蕴含了局部公式推导,有趣味的能够去看看原文对应章节。这里总结次要的两个论断:
- 如果应用分支共享的 block linearization,多分支的优化方向和幅度与单分支一样。
- 如果应用分支独立的 block linearization,多分支的优化方向和幅度与单分支不同。
下面的论断表明了 block linearization 步骤的重要性。当去掉 BN 层后,缩放层可能放弃优化方向的多样化,防止多分支进化为单分支。
Block Design
因为 OREPA 节俭了大量训练耗费,为摸索更简单的训练构造提供了可能性。论文基于 DBB 设计了全新的重参数模块 OREPA-ResNet,退出了以下组件:
- Frequency prior filter:Fcanet 指出池化层是频域滤波的一个特例,参考此工作退出 1 ×1 卷积 + 频域滤波分支。
- Linear depthwise separable convolution:对深度可拆散卷积进行大量批改,去掉两头的非线性激活以便在训练期间合并。
- Re-parameterization for 1×1 convolution:之前的钻研次要关注 3×3 卷积层的重参数而疏忽了 1×1 卷积,但 1 ×1 卷积在 bottleneck 构造中非常重要。其次,论文增加了一个额定的 1 ×1 卷积 +1×1 卷积分支,对 1 ×1 卷积也进行重参数。
- Linear deep stem:个别网络采纳 7 ×7 卷积 +3×3 卷积作为 stem,有的网络将其替换为重叠的 3 个 3 ×3 卷积获得了不错的准确率。但论文认为这样的重叠设计在结尾的高分辨率特色图上的计算耗费十分高,为此将 3 个 3 ×3 卷积与论文提出的线性层一起压缩为单个 7 ×7 卷积层,可能大幅升高计算耗费并保留准确率。
OREPA-ResNet 中的 block 设计如图 6 所示,这应该是一个下采样的 block,最终被合并成单个 3 ×3 卷积进行训练和推理。
Experiment
各组件比照试验。
缩放层对各层各分支的相似性的影响。
线性缩放策略比照,channel-wise 的缩放最好。
在线和离线重参数的训练耗时比照。
与其余重参数策略进行比照。
在检测和宰割工作上进行比照。
Conclusion
论文提出了在线重参数办法 OREPA,在训练阶段就能将简单的构造重参数为单卷积层,从而升高大量训练的耗时。为了实现这一指标,论文用线性缩放层代替了训练时的 BN 层,放弃了优化方向的多样性和特色表达能力。从试验后果来看,OREPA 在各种工作上的准确率和效率都很不错。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】