极致缩小量化性能差距!美团提出量化友好方案QARepVGG

发布一下 0 0

作者丨Happy

来源丨AIWalker

编辑丨极市平台

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

论文链接:https://arxiv.org/abs/2212.01593

性能与推理速度间的均衡在实际应用中非常重要,而结构重参数机制是达成该均衡的一种非常有效的模块。但是,因结构重参数训练得到的模型在面临量化时却出现了严重的性能下降(比如RepVGG-A0经PTQ量化,指标从72.4%下降到了52.2%)。

本文旨在挖掘产生该现象的根本原因,提出了一种简单、鲁棒且有效的补救措施,在享有重参数的优势同时具有量化友好特性。所提方案大幅缩小了RepVGG在INT8与FP32之间性能差距。无需任何技巧,采用标准PTQ,RepVGG在ImageNet上的精度下降保持在2%以内。

本文方案

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

在标准量化流程中,有多个地方会引入误差。作者采用MSE进行量化误差度量:

极致缩小量化性能差距!美团提出量化友好方案QARepVGG


极致缩小量化性能差距!美团提出量化友好方案QARepVGG

量化误差由张量分布因子(包含最大值、最小值、标准差以及阶段阈值)决定。不幸的是,由于我们不能对网络内部张量做任何假设,导致我们无法得到一个具体的解决方案。实际上,我们认为一个量化友好的分布应当具有较小的数值范围、较小的标准差。对于重参数类架构而言,它有两个主要成分(权值、激活张量)需要进行量化且均可能导致性能退化,激活张量同时还将作为下一层的输入,因此误差会逐层累积 。因此,具有好的量化性能的网络需要满足两个基本条件:

  • C1:权值分布有利于量化;
  • C2:激活张量分布易于进行量化。

Diving into the Quantization Failure of Reparameterizaton Structure

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

首先,我们采用官方Code复现RepVGG-A0性能,见上表。这里,我们采用标准PTQ对RepVGG-A0进行量化并评估INT8精度。

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

上图给出了复现模型的权值分布,可以看到: 权值很好的分布在零附近,没有特别的异常值存在,即满足上述C1条件。这就是促使我们对C2进行验证是否激活张量导致的量化性能极具恶化。不幸的是,激活张量具有输入依赖性且与权值相耦合,无法通过对输入分布进行假设并得出具体结论。相反,我们对每个分支的标准差进行分析

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

3×3分支的BN操作可以描述如下:

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

在模型训练过程中,有一个针对weight decay设计的重要但容易被忽视的成分:custom L2(它有助于改善精度,促进量化)。该部分损失12_loss_eq_kernel表示如下

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

该损失将通过增大分母来减小损失,而这则会放大激活张量的方差,为量化带来难度。为此,作者通过提出分母提出了一个简单的替代方案:

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

下表给出了此时的结果,移除分母项后,FP32模型的精度下降了0.7%,但量化精度提升到了61.2%。尽管该精度在实际场景仍无法接受,但该实验表明:常规L2权值衰减策略通过重分配权值分布构建了一个更强的FP32模型,但同时增大的激活张量的方差,导致了量化崩塌

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

Quantization-friendly Reparameterization

接下来,作者提供了多个配置(S1-S4)逐步解决量化崩塌问题,核心结果见下表。

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

  • S1(Normal L2):即前述customL2到标准weight decay的替换,我们诚挚为S1。结果见上表,可以看到:尽管FP32精度下降0.5%,但INT8精度提升11.3%。此时,模型精度仍无法满足实际应用需求。那么是什么原因导致的呢?从下图可以看到:第5与6层权值具有较大的标准差(2.4, 5.1)和最大值(692.1107, 14477.3740),这就解释了为何量化性能不够好
极致缩小量化性能差距!美团提出量化友好方案QARepVGG

既然NormalL2已经对每个分支的卷积添加了约束,为何融合后的权值出现了如此大的异常值呢?基于公式2和3,作者重写公式如下:

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

  • S2(Identiy w/o BN) 一种解决S问题且满足C1条件的简单方案是:从Identity分支移除BN层,称之为S2。此时,FP32模型精度退化到70.7%,但INT8精度提升到了62.5%,这仍无法接受。这就促使我们进一步验证是否违背了C2。该部分建议查看原文,公式太多了......
  • S3( No BN for Identity and 1×1 ) 如果 1×1,3×3 分支有相同的均值, 那么相加会导致方差变大。为更好控制方差, **作者进一步移除了 1×1 分支的 BN, 该配置称之为 S3**。此时, FP32模型精 度为 70.1%, INT8精度达到了 69.5%, 极大的改善了量化性能。但是, FP32的精度仍然有些低。
  • S4(Post BN on S3) 由于三分支相加会引入协方差漂移问题,作者在三分支相加之后引入了一个额外的BN层以稳定训练,该配置称之为S4。此时,FP32模型精度提升到了72.2%,INT8精度提升到了70.4%。到此为止,我们成功解决了RepVGG的量化损失问题,并将所得模型称之为QARepVGG。

本文实验

本文主要聚焦ImageNet分类任务,同时采用YOLOv6验证所提方案的泛化性。关于PTQ,我们采用Nvidia开源的Pytorch量化工具,所有卷积与全连接层均被量化为8bit,量化机制为symmetric uniform

极致缩小量化性能差距!美团提出量化友好方案QARepVGG

上表给出了ImageNet分类任务上的性能对比,可以看到:

  • 在FP32方面,所提方案取得了与RepVGG相当的精度;
  • 在INT8方面,RepVGG存在严重的量化性能退化,如RepVGG-B0精度从75.1%下降到40.2%;所提方案量化精度损失在2%以内。
  • 当带有组卷积时,RepVGG性能退化进一步加速,如RepVGG-B2g4指标从78.5%下降到了13.7%;而QARepVGG-B2g4仅损失0.7%。
极致缩小量化性能差距!美团提出量化友好方案QARepVGG

上表给出了YOLOv6使用所提方案后的性能对比,从中可以看到:

  • YOLOv6s-RepVGG存在严重的性能退化问题,PTQ量化导致性能退化7.4%mAP;YOLOv6t-RepVGG稍好,但仍退化3%mAP。这个程度的性能退化在实际部署中是不可接受的。
  • 在FP32模型方面,YOLOv6s/t-QARepVGG具有与RepVGG版相当的精度,而INT8量化版精度损失在1.3%mAP以内,甚至优于YOLOv6-RepOpt-VGG。此外,RepOpt-VGG对于搜索超参非常敏感

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/192563.html