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

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

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阶段

image.png

图2

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

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

3.1 重参化中的Normalization

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

image.png

这种观察结果也得到了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上的操作。这意味着在计算和内存方面从减少到,其中、是特征图和卷积核的空间尺寸。

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

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

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

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

图4

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

首先定义卷积的符号。设表示一个大小的二维卷积核的输入和输出通道数。,表示输入和输出张量。在这里省略了偏差作为一种常见的做法,卷积过程被表示为:

image.png

1、简化顺序结构

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

image.png

其中满足,。根据结合律,通过首先卷积核,可以将这些层压缩成一个层:

image.png

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

2、简化并行结构

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

image.png

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

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

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

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

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

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

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

image.png

其中是滑动窗口内的向量化像素,,W是对应于特定输出通道的卷积核,是比例因子。假设所有参数都通过随机梯度下降更新,映射更新为:

image.png

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

image.png

端到端权重与等式(6)的权重同等优化(顺序结构可以得到):

image.png

使用相同的前传t-moment端到端矩阵。因此,没有引入优化变化。这一结论也得到了实验支持。相反,具有分支级的多分支拓扑提供了这样的变化:

image.png

端到端权重的更新与等式(6)不同:

image.png

满足相同的前提条件和条件1:

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

image.png

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

image.png

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

注意,当每个分支的权值是随机初始化的,而缩放因子被初始化为1时,条件1和条件2都始终满足。

image.png

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

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

image.png

详细分析见论文附录部分

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层,这可以大大降低训练成本,同时保持高精度。

image.png

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

  1. 添加了一个频率先验滤波器和一个线性的深度可分离卷积
  2. 将所有的Stem(即最初的7×7卷积)替换为所提出的线性deep stem层
  3. 在bottleneck中,除了1和2之外,进一步将所提出的rep 1×1块替换原来的1×1卷积分支
相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法
AI 基础知识从 0.6 到 0.7—— 彻底拆解深度神经网络训练的五大核心步骤
本文以一个经典的PyTorch手写数字识别代码示例为引子,深入剖析了简洁代码背后隐藏的深度神经网络(DNN)训练全过程。
793 56
|
5月前
|
机器学习/深度学习 数据采集 人工智能
基于生成式物理引擎的AI模型训练方法论
本文探讨了基于生成式物理引擎的AI模型训练方法论,旨在解决传统数据采集高成本、低效率的问题。生成式物理引擎结合物理建模与生成模型(如GAN、Diffusion),可模拟现实世界的力学规律,生成高质量、多样化的虚拟数据。文章介绍了其关键技术,包括神经网络物理建模、扩散模型场景生成及强化学习应用,并分析了其在机器人学习、数据增强和通用智能体训练中的实践价值。未来,随着可微物理引擎、跨模态生成等技术发展,生成式物理引擎将助力AI从静态监督学习迈向动态交互式世界建模,推动通用人工智能的实现。
335 57
基于生成式物理引擎的AI模型训练方法论
|
1月前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
193 6
|
6月前
|
数据采集 存储 人工智能
智创 AI 新视界 -- 优化 AI 模型训练效率的策略与技巧(16 - 1)
本文深度聚焦 AI 模型训练效率优化,全面涵盖数据预处理(清洗、归一化、增强)、模型架构(轻量级应用、剪枝与量化)、训练算法与超参数调优(自适应学习率、优化算法)等核心维度。结合自动驾驶、动物图像识别、语音识别等多领域实际案例,佐以丰富且详细的代码示例,深度剖析技术原理与应用技巧,为 AI 从业者呈上极具专业性、可操作性与参考价值的技术宝典,助力高效优化模型训练效率与性能提升。
智创 AI 新视界 -- 优化 AI 模型训练效率的策略与技巧(16 - 1)
|
4月前
|
机器学习/深度学习 人工智能 数据可视化
基于YOLOv8的AI虫子种类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8与PyQt5开发,实现虫子种类识别,支持图片、视频、摄像头等多种输入方式,具备完整训练与部署流程,开箱即用,附带数据集与源码,适合快速搭建高精度昆虫识别系统。
基于YOLOv8的AI虫子种类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
4月前
|
机器学习/深度学习 人工智能 API
AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架,涵盖全参数/PEFT训练与分布式优化
AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架,涵盖全参数/PEFT训练与分布式优化
|
4月前
|
机器学习/深度学习 人工智能 程序员
MiniMind:3小时训练26MB微型语言模型,开源项目助力AI初学者快速入门
在大型语言模型(LLaMA、GPT等)日益流行的今天,一个名为MiniMind的开源项目正在AI学习圈内引起广泛关注。项目让初学者能够在3小时内从零开始训练出一个仅26.88MB大小的微型语言模型。
318 1
|
4月前
|
机器学习/深度学习 人工智能 资源调度
AI大模型训练管理工具:千亿参数时代的指挥中枢
本内容揭示了大模型训练中三大核心挑战:实验复现难、资源利用率低、合规风险高,并提出“三维控制塔”解决方案,涵盖实验管理、资源调度与合规追踪。推荐Immuta + 板栗看板等工具组合助力不同规模团队实现高效、合规、低成本的AI训练。