CVPR2022 | 在线Re-Param | OREPA让AI训练速度进一步加快,精度略胜RepVGG!

2022-05-25 15:51:33 浏览数 (1)

结构重参化在各种计算机视觉任务中引起了越来越多的关注。它的目的是提高深度模型的性能,而不引入任何推理时间成本。虽然这种模型在推理过程中很有效,但它严重依赖于复杂的training-time block来实现较高的准确性,从而导致了巨大的额外训练成本。 在本文中提出了在线卷积重参化(OREPA),一个两阶段的pipeline,旨在通过将复杂的training-time block压缩成单个卷积来减少巨大的训练开销。为了实现这一目标,本文引入了一个线性缩放层,以更好地优化在线块。在降低训练成本的帮助下,作者还探索了一些更有效的重参组件。与最先进的重参模型相比,OREPA能够节省约70%的training-time成本,并加速训练速度约2×。同时,配备OREPA,模型在ImageNet上的方法高出 0.6%。作者还进行了目标检测和语义分割的实验,并显示了对下游任务的一致改进。

1简介

卷积神经网络(CNNs)已经在许多计算机视觉任务的应用成功,包括图像分类、目标检测、语义分割等。精度和模型效率之间的权衡也已被广泛讨论。

一般来说,一个精度较高的模型通常需要一个更复杂的块,一个更宽或更深的结构。然而,这样的模型总是太重,无法部署,特别是在硬件性能有限、需要实时推理的场景下。考虑到效率,更小、更紧凑和更快的模型自然是首选。

为了获得一个部署友好且高精度的模型,有研究者提出了基于结构重参数化的方法来释放性能。在这些方法中,模型在训练阶段和推理阶段有不同的结构。具体来说,使用复杂的训练阶段拓扑,即重参数化的块,来提高性能。训练结束后,通过等效变换将一个复杂的块重参为成一个单一的线性层。重参后的模型通常具有一个整洁架构模型,例如,通常是一个类似VGG的或一个类似ResNet的结构。从这个角度来看,重参化策略可以在不引入额外的推理时间成本的情况下提高模型的性能。

BN层是重构模型的关键组成部分。在一个重新解析块(图1(b))中,在每个卷积层之后立即添加一个BN层。可以观察到,去除这些BN层会导致的性能退化。然而,当考虑到效率时,这种BN层的使用出乎意料地在训练阶段带来了巨大的计算开销。在推理阶段,复杂的块可以被压缩成一个卷积层。但是,在训练过程中,BN层是非线性的,也就是说,它们将特征映射除以它的标准差,这就阻止了合并整个块。因此,存在大量的中间计算操作(large FLOPS)和缓冲特征映射(high memory usage)。更糟糕的是,这么高的训练预算使得很难探索更复杂和可能更强的重参块。很自然地,下面的问题就出现了:

为什么标准化在重参中这么重要?

通过分析和实验,作者认为BN层中的尺度因子最重要,因为它们能够使不同分支的优化方向多样化。

基于观察结果,作者提出了在线重参化(OREPA)(图1(c)),这是一个两阶段的pipeline,使之能够简化复杂的training-time re-param block

在第一阶段,block linearization,去除所有的非线性BN层,并引入线性缩放层。这些层与BN层具有相似的性质,因此它们使不同分支的优化多样化。此外,这些层都是线性的,可以在训练过程中合并成卷积层。 第二阶段,block squeezing,将复杂的线性块简化为单一的卷积层。OREPA通过减少由中间计算层引起的计算和存储开销,显著降低了训练成本,对性能只有非常小的影响。

此外,高效化使得探索更复杂的重参化拓扑成为可能。为了验证这一点,作者进一步提出了几个重参化的组件,以获得更好的性能。

在ImageNet分类任务上评估了所提出的OREPA。与最先进的修复模型相比,OREPA将额外的训练时间GPU内存成本降低了65%到75%,并将训练过程加快了1.5-2.3倍。同时,OREPA-ResNet和OREPA-VGG的性能始终优于 0.2%∼ 0.6%之前的DBB和RepVGG方法。同时作者还评估了在下游任务上的OREPA,即目标检测和语义分割。作者发现OREPA可以在这些任务上也可以带来性能的提高。

本文主要贡献:
  1. 提出了在线卷积重参化(OREPA)策略,这极大地提高了重参化模型的训练效率,并使探索更强的重参化块成为可能;
  2. 通过对重参化模型工作机制的分析,用引入的线性尺度层代替BN层,这仍然提供了不同的优化方向,并保持了表示能力;
  3. 在各种视觉任务上的实验表明,OREPA在准确性和训练效率方面都优于以前的重参化模型(DBB/RepVGG)。

2相关工作

2.1 结构重参化

结构重参化最近被重视并应用于许多计算机视觉任务,如紧凑模型设计、架构搜索和剪枝。重参化意味着不同的架构可以通过参数的等价转换来相互转换。例如,1×1卷积的一个分支和3×3卷积的一个分支,可以转移到3×3卷积的单个分支中。在训练阶段,设计了多分支和多层拓扑来取代普通的线性层(如conv或全连接层)来增强模型。Cao等讨论了如何在训练过程中合并深度可分离卷积核。然后在推理过程中,将训练时间的复杂模型转移到简单模型中,以便于更快的推理。

在受益于复杂的training-time拓扑,同时,当前的重参化方法训练使用不可忽略的额外计算成本。当块变得更复杂以变得更强的表示时,GPU内存利用率和训练时间将会越来越长,最终走向不可接受。与以往的重参化方法不同,本文更多地关注训练成本。提出了一种通用的在线卷积重参化策略,使training-time的结构重参化成为可能。

2.2 Normalization

BN被提出来缓解训练非常深度神经网络时的梯度消失问题。人们认为BN层是非常重要的,因为它们平滑了损失。最近关于无BN神经网络的研究声称,BN层并不是不可或缺的。通过良好的初始化和适当的正则化,可以优雅地去除BN层。

对于重参化模型,作者认为重参化块中的BN层是关键的。无BN的变体将会出现性能下降。然而,BN层是非线性的,也就是说,它们将特征图除以它的标准差,这阻止了在线合并块。为了使在线重参化可行,作者去掉了重参块中的所有BN层,并引入了BN层的线性替代方法,即线性缩放层

2.3 卷积分解

标准卷积层计算比较密集,导致大的FLOPs和参数量。因此,卷积分解方法被提出,并广泛应用于移动设备的轻量化模型中。重参化方法也可以看作是卷积分解的某种形式,但它更倾向于更复杂的拓扑结构。本文的方法的不同之处在于,在kernel-level上分解卷积,而不是在structure level。

3在线重参化

在本节中,首先,分析了关键组件,即重参化模型中的BN层,在此基础上提出了在线重参化(OREPA),旨在大大减少再参数化模型的训练时间预算。OREPA能够将复杂的训练时间块简化为一个卷积层,并保持了较高的精度。

OREPA的整体pipeline如图2所示,它包括一个Block Linearization阶段和一个Block Squeezing阶段

图2

作者通过分析多层和多分支结构的优化多样性,深入研究了重参化的有效性,并证明了所提出的线性缩放层和BN层具有相似的效果。

最后,随着训练预算的减少,进一步探索了更多的组件,以实现更强的重参化模型,成本略有增加。

3.1 重参化中的Normalization

作者认为中间BN层是重参化过程中多层和多分支结构的关键组成部分。以SoTA模型DBB和RepVGG为例,去除这些层会导致严重的性能下降,如表1所示。

这种观察结果也得到了Ding等人的实验支持。因此,作者认为中间的BN层对于重参化模型的性能是必不可少的。

然而,中间BN层的使用带来了更高的训练预算。作者注意到,在推理阶段,重参化块中的所有中间操作都是线性的,因此可以合并成一个卷积层,从而形成一个简单的结构。

但在训练过程中,BN层是非线性的,即它们将特征映射除以其标准差。因此,中间操作应该单独计算,这将导致更高的计算和内存成本。更糟糕的是,如此高的成本将阻止探索更强大的训练模块。

3.2 Block Linearization

如3.1中所述,中间的BN层阻止了在训练过程中合并单独的层。然而,由于性能问题,直接删除它们并不简单。为了解决这一困境,作者引入了channel级线性尺度操作作为BN的线性替代方法。

缩放层包含一个可学习的向量,它在通道维度中缩放特征映射。线性缩放层具有与BN层相似的效果,它们都促进多分支向不同的方向进行优化,这是重参化时性能提高的关键。除了对性能的影响外,线性缩放层还可以在训练过程中进行合并,使在线重参化成为可能。

基于线性缩放层,作者修改了重参化块,如图3所示。具体来说,块的线性化阶段由以下3个步骤组成:

  • 首先,删除了所有的非线性层,即重参化块中的BN层
  • 其次,为了保持优化的多样性,在每个分支的末尾添加了一个缩放层,这是BN的线性替代方法
  • 最后,为了稳定训练过程,在所有分支的添加后添加一个BN层。

一旦完成线性化阶段,在重参化块中只存在线性层,这意味着可以在训练阶段合并块中的所有组件。

3.3 Block Squeezing

Block Squeezing步骤将计算和内存昂贵的中间特征映射上的操作转换为更经济的kernel上的操作。这意味着在计算和内存方面从O(H×W) 减少到O(K_H×K_W) ,其中(H,W)(K_H,K_W) 是特征图和卷积核的空间尺寸。

一般来说,无论线性重参化块是多么复杂,以下2个属性始终成立:

  • Block中的所有线性层,例如深度卷积、平均池化和所提出的线性缩放,都可以用带有相应参数的退化卷积层来表示;
  • Block可以由一系列并行分支表示,每个分支由一系列卷积层组成。

有了上述两个特性,如果可以将

  1. 多层(即顺序结构)
  2. 多分支(即并行结构)

图4

简化为单一卷积,就可以压缩一个块。在下面的部分中,将展示如何简化顺序结构(图4(a))和并行结构(图4(b))。

首先定义卷积的符号。设C_i,C_o 表示一个K_H×K_W 大小的二维卷积核的输入和输出通道数。X∈R^{C_i×H×W}Y∈R^{C_o×H'×W'} 表示输入和输出张量。在这里省略了偏差作为一种常见的做法,卷积过程被表示为:

1、简化顺序结构

考虑一堆卷积层,其表示为:

其中W_j∈R^{C_j×C_{j−1}×K_{Hj}×K_{Wj}} 满足C_0=C_iC_N=C_o 。根据结合律,通过首先卷积核,可以将这些层压缩成一个层:

其中,W_j 为第j 层的权重。W_e 表示端到端映射矩阵。

2、简化并行结构

并行结构根据卷积的线性性,可以根据等式将多个分支合并成一个分支:

其中,W_m 为第m 个分支的权重,和(sum^{M−1}_{m=0}W_m) 为统一的权重。值得注意的是,当合并不同大小的kernel时,需要对齐不同kernel的空间中心,例如,1×1 kernel应该与3×3 kernel的中心对齐(如RepVGG)。

3、训练开销:从特征到kernels。

无论这个Block有多复杂,它都必须仅仅由多分支和多层的子拓扑组成。因此,可以根据上述两个简化规则将其简化为一个单一的简化规则。最后,可以得到一体化的端到端映射权重,并且在训练期间只卷积一次。实际上将中间特征映射上的操作(卷积,加法)转换为卷积kernel上的操作。因此,在计算和内存方面将计算复杂度从O(H×W) 减少到了O(K_H×K_W)

3.4 多分支拓扑结构的梯度分析

为了理解为什么Block Linearization步骤是可行的?,即为什么缩放层是重要的?,作者对统一权重重参化的优化进行了分析。

结论是,对于去掉BN层的分支,利用缩放层可以使其优化方向多样化,并防止其退化为单一的优化方向

为了简化表示法,只取输出Y的单维。考虑一个缩放序列:

其中I=C_i×K_H×K_W,x∈R^I 是滑动窗口内的向量化像素,y∈R^O,O=1W是对应于特定输出通道的卷积核,gamma 是比例因子。假设所有参数都通过随机梯度下降更新,映射W_{cs}:=gamma W 更新为:

其中,L为整个模型的损失函数,η为学习率。gamma 是多分支拓扑共享的,即:

端到端权重W_{e_1,cs}:=gammasum^{M}_{j=1}W_j 与等式(6)的权重同等优化(顺序结构可以得到):

使用相同的前传t-moment端到端矩阵W^{(t)}_{cs}=W^{(t)}_{e_1,cs} 。因此,Φ^{Conv−Scale}_M 没有引入优化变化。这一结论也得到了实验支持。相反,具有分支级gamma 的多分支拓扑提供了这样的变化:

端到端权重W_{e_2,cs}:=sum^{M}_{j=1}gamma_jW_j 的更新与等式(6)不同:

满足相同的前提条件W^{(t)}_{cs}=W^{(t)}_{e_2,cs} 和条件1:

条件1:所有分支中至少有2个是活动的

条件2:每个活动分支的初始状态都是不同的

同时,当满足条件2时,多分支结构不会退化为单一结构,多个分支同时进行前向和反向传播。这也揭示了为什么比例因子是重要的。

注意,当每个分支的权值W_j^{(0)} 是随机初始化的,而缩放因子gamma _j^{(0)}被初始化为1时,条件1和条件2都始终满足。

命题1:一个单分支线性映射,当通过超两层多分支拓扑重参化部分或全部时,整个端到端权重矩阵将得到不同的优化。如果映射的一层被重参化到多达一层的多分支拓扑,则优化将保持不变。

到目前为止,已经扩展了关于重参化如何影响优化的讨论。实际上,所有当前有效的重参化拓扑都可以通过命题1进行验证。

详细分析见论文附录部分

3.5 Block涉设计

由于所提出的OREPA节省了很大幅度的训练成本,它促使能够探索更复杂的训练块。为此,设计了一种新的重新参数化模型,即OREPA-ResNet,通过线性化最新的模型DBB,并插入以下组件(图5)。

1、频率先验滤波器

在DBB中,在块中使用了池化层。Qin等人认为,池化层是频率滤波器的一种特殊情况。为此,作者添加了一个Conv1×1-频率滤波器分支。

2、线性深度可分离卷积

通过去除中间的非线性激活层,对深度可分离的卷积进行了轻微的修改,使其在训练过程中可以进行合并。

3、重参化1×1卷积

以往的工作主要集中在3×3卷积层的重参上,而忽略了1×1卷积层的重参。作者建议重参化1×1层,因为它们在bottleneck结构中发挥着重要作用。具体来说,在Block添加了一个额外的Conv1×1-Conv1×1分支。

4、线性Stem

大的卷积核通常被放置在最开始的层,例如,7×7的Stem,目的是实现一个更大的感受野。Guo等人将堆叠的3×3卷积层替换7×7卷积,以获得更高的精度。然而,由于高分辨率,在最初始层堆叠需要更大的计算开销。需要注意的是,这里可以用提出的线性缩放层将stacked deep stem缩放到7×7conv层,这可以大大降低训练成本,同时保持高精度。

对于OREPA-ResNet中的每个块(图6):

  1. 添加了一个频率先验滤波器和一个线性的深度可分离卷积
  2. 将所有的Stem(即最初的7×7卷积)替换为所提出的线性deep stem层
  3. 在bottleneck中,除了1和2之外,进一步将所提出的rep 1×1块替换原来的1×1卷积分支

4实验

4.1 消融实验

1、线性缩放层和优化多样性

图7

首先进行实验来验证核心思想,即所提出的线性缩放层与BN层起着相似的作用。根据3.4中的分析。文章展示了缩放层和BN层都能够多样化优化方向。为了验证这一点,作者可视化了图7中所有分支的分支级相似性。作者发现,缩放层的使用可以显著增加不同分支的多样性。

在表2中验证了这种多样性的有效性。以ResNet-18结构为例,这两种层(BN和线性缩放)带来了相似的性能增益(即0.42vs.0.40)。这有力地支持了本文的观点,即在重参化中,最重要的是缩放部分,而不是统计标准化部分。

2、各种线性化策略

本文作者尝试了各种尺度层的线性化策略。具体来说4种变体:

  • Vector:利用一个通道级向量,并沿着通道轴执行缩放操作。
  • Scalar:用一个标量来缩放整个特征图。
  • W/o scaling:删除分支级缩放层。
  • W/o post-addition BN:删除后BN层。

从表3中发现,无论是部署标量缩放层还是不部署缩放层,都会导致较差的结果。因此,选择向量缩放作为默认策略。

作者还研究了加法后BN层的有效性。如3.2中所述。添加了后BN层来稳定训练过程。为了证明这一点,作者删除了这些层,如表3中的最后一行所示,梯度变成无穷大,模型无法收敛。

3、每个组件都很重要

对ResNet-18和ResNet-50的结构都进行了实验。如表2所示,每个组件都有助于提高性能。

4、Online vs. offline

作者比较了OREPA-ResNet-18与DBB-18的训练成本进行了对比。举例说明了消耗的内存(图8(a))和训练时间(图8(b))。

随着组件数量的增加,离线重参化模型面临着内存利用率快速增加和训练时间长的问题。由于高内存成本,甚至不能在ResNet-18模型中引入Deep Stem。相比之下,在线重参化策略将训练速度提高了4×,并节省了高达96 %的额外GPU内存。总体的训练开销大致与基本模型(普通ResNet)的水平相同。

4.2 与其他重参化对比

从表4中观察到在ResNet系列上,OREPA可以在各种模型上的性能持续提高 0.36%。同时,它将训练速度加速了1.5×至2.3×,并节省了约70 %的额外训练时间内存。

作者还对VGG结构进行了实验,比较了OREPA-VGG和RepVGG。对于OREPA-VGG模型,简单地用在OREPA-中使用的OREPA-res-3×3分支。这种修改只引入了边际的额外训练成本,同时也带来了明显的性能增益( 0.25%∼ 0.6%)。

4.3 目标检测与语义分割

4.4 局限性

当简单地将所提出的OREPA从ResNet转移到RepVGG时,作者发现基于残差和无残差(VGG-like)结构之间的性能不一致。因此,在RepVGG块中保留了所有的三个分支,以保持具有竞争性的精度,这就略微增加了计算成本。这是一个有趣的现象。

5参考

[1].OREPA: Online Convolutional Re-parameterization

0 人点赞