CVPR'23部署 | MobileNetv2也能超越ResNet家族!

作者 | 小书童  编辑 | 集智书童

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【模型部署】技术交流群

后台回复【模型部署工程】获取基于TensorRT的分类、检测任务的部署源码!

f52b7467d5d30397e605a1324637bde7.png

训练后量化(PTQ)由于其数据隐私性和低计算成本,被广泛认为是实际中最有效的压缩方法之一。作者认为PTQ方法中存在一个被忽视的振荡问题。

在本文中主动探索并提出了一个理论证明,来解释为什么这样的问题在PTQ中是必不可少的。然后,试图通过引入一个原则性的、广义的理论框架来解决这个问题。特别是,首先公式化了PTQ中的振荡,并证明了问题是由模块容量的差异引起的。为此,作者定义了数据依赖和无数据情况下的模块容量(ModCap),其中相邻模块之间的差异用于测量振荡程度。然后通过选择Top-k差分来解决该问题,其中相应的模块被联合优化和量化。

大量实验表明,本文的方法成功地降低了性能下降,并推广到不同的神经网络和PTQ方法。例如,对于2/4位ResNet-50量化,本文的方法比以前最先进的方法高出1.9%。它在小模型量化上变得更重要,例如在MobileNetV2×0.5上比BRECQ方法高出6.61%。

1、简介

深度神经网络(DNN)近年来迅速成为研究热点,在实践中被应用于各种场景。然而,随着DNN的发展,更好的模型性能通常与更深更宽网络的巨大资源消耗有关。与此同时,旨在在资源受限的场景中部署模型的神经网络压缩和加速研究领域正逐渐受到越来越多的关注,包括但不限于神经架构搜索、网络剪枝和量化。在这些方法中,量化提出了将浮点网络激活和权重转换为低bit整型,这能够加速推理或训练的速度,而性能几乎没有下降。

通常,网络量化方法分为量化感知训练(QAT)和训练后量化(PTQ)。前者通过量化微调来减少量化误差。尽管取得了显著的成果,但海量的数据需求和高昂的计算成本阻碍了DNN的普遍部署,尤其是在资源受限的设备上。因此,提出了PTQ来解决上述问题,该问题只需要少量或零校准数据来进行模型重建。由于没有量化训练的迭代过程,PTQ算法非常高效,通常在几分钟内获得和部署量化模型。然而,这种效率往往是以牺牲准确性为代价的。

PTQ通常在没有量化训练的情况下比全精度模型表现更差,尤其是在低位紧凑模型量化中。最近的一些算法试图解决这个问题。例如,Nagel等人通过量化前后损失函数的二阶泰勒展开构建新的优化函数,该函数引入了具有可学习参数的软量化,以实现自适应权重舍入。Li等人逐层改变逐块重建,并使用对角Fisher矩阵来近似Hessian矩阵,以保留更多信息。Wei等人发现,随机禁用激活量化的一些元素可以平滑量化权重的损失。

921836d8748899d445d61843d521e808.png

然而,作者观察到,在重建过程中,随着层或块的加深,上述所有方法都表现出不同程度的振荡,如图1的左侧子图1所示。作者认为,这个问题是至关重要的,并且在以前的PTQ方法中被忽视了。

在本文中,通过严格的数学定义和证明,回答了关于振荡问题的3个问题,如下所示:

  1. 为什么PTQ会出现振荡?为了回答这个问题,作者首先定义了模拓扑同构,它在一定程度上放宽了模等价的限制。然后,给出了在模块拓扑同构条件下模块容量的定义。在这种情况下,作者可以证明,当后期模块的容量足够大时,重建损失将突破量化误差累积的影响并降低。相反,如果后面模块的容量小于前面模块的容量,则由于放大的量化误差累积效应,重建损失急剧增加。总体而言,作者证明了PTQ重建过程中损失的振荡是由模块容量的差异引起的;

  2. 振荡将如何影响最终性能?通过随机采样大量混合重建粒度方案,观察到最终的重建误差与之前所有模块中最大的重建误差高度相关。换句话说,当振荡发生时,先前的模块显然具有较大的重建误差,从而导致PTQ的精度较差;

  3. 如何解决PTQ中的振荡问题?由于振荡是由前后模块的不同容量引起的,作者提出了混合重构粒度(MRECG)方法,该方法可以联合优化发生振荡的模块。此外,本文的方法适用于无数据和依赖数据的场景,也兼容不同的PTQ方法。

总的来说,贡献如下:

  1. 首次揭示了PTQ中的振荡问题,这在以前的算法中被忽略了。然而,作者发现,在PTQ的优化中,消除这种振荡是至关重要的。

  2. 从理论上表明,这种振荡是由相邻模块的能力差异引起的。小的模块能力会加剧量化误差的累积效应,使损失迅速增加,而大的模块能力则会减少累积量化误差,使损失减少。

  3. 为了解决振荡问题,作者提出了一种新的混合重构粒度(MRECG)方法,该方法利用损失度量和模块容量来优化数据依赖和无数据场景下的混合重构细粒度。前者以适度较高的开销找到全局最优,因此具有最佳性能。后者更有效,性能略有下降。

  4. 在ImageNet中的各种压缩任务上验证了所提出的方法的有效性。特别是,在具有2/4位的MobileNetV2中实现了58.49%的Top-1准确率,这大大超过了当前的SOTA方法。此外,还证实了本文的算法确实消除了重建损失在不同模型上的振荡,使重建过程更加稳定。

2、相关工作

2.1、量化

量化可以分为两类:量化感知训练(QAT)和训练后量化(PTQ)。QAT使用整个训练数据集进行量化训练,并通过网络的反向传播来更新梯度以消除量化误差。尽管QAT集成了各种训练方法以实现更高的准确性,但在某些数据隐私场景中,这一过程往往是资源密集型的,并且受到限制。本文的研究兴趣不在这个领域。

近年来,由于高效的模型部署和低数据依赖性的优势,PTQ越来越受到关注。由于不包括量化训练,PTQ算法通常使用小的校准数据集进行重建,通过优化任务损失的二阶泰勒展开项的近似值来获得更好的量化模型。

2.2、模块容量

一些常见参数会影响模块容量,例如滤波器的大小、权重参数的位宽和卷积组的数量。此外,一些研究表明,步长和剩余捷径也会影响模块容量。Kong等人表明,步长为2的卷积可以等效地被步长为1的卷积所取代。同时,替换卷积的滤波器大小大于原始卷积的滤波器尺寸,这意味着模块容量的增加。

提出的MobileNetV2包含深度卷积,它不包含通道之间的信息交换,因此它在某种程度上损害了模型性能。Liu等人认为,全精度残差结构的输入增加了量化模块的表示能力。

3、本文方法

在本节中,首先通过一个定理和推论证明了PTQ的振荡问题与模块容量高度相关。其次,构造了容量差异优化问题,并分别在依赖数据和无数据的情况下给出了两种解决方案。最后,分析了扩大校准数据的批量大小以减少期望近似误差,这表明边际效用有递减的趋势。

3.1、PTQ振荡问题

在不失一般性的情况下,我们使用模块作为分析的基本单元。特别是,与BRECQ不同,本文中的模块粒度更灵活,它表示Layer、Block甚至Stage的粒度。形式上,将设置为包含个卷积层的神经网络的第个模块。在模块粒度框架下提出了一种更普遍的重建损失,如下所示,

550098b2898802c542714c2e634c2010.png

其中分别是第个模块的权重和输入。是相应的量化版本。当只包含一个卷积层时,方程1退化为AdaRound中的优化函数。当包含第i个块内的所有卷积层时,方程1退化为BRECQ中的优化函数。

注意,忽略了AdaRound中的正则化项,这有助于收敛,因为它在每个模块优化后收敛到0。此外,为了简单起见,省略了BRECQ中的平方梯度尺度。如果2个模块具有相同数量的卷积层,并且所有相关联的卷积层具有相同的超参数,则它们被称为等效的。

量化中存在量化误差的累积效应,表现为网络中量化误差受前一层量化影响的增加趋势。由于PTQ不包含量化训练,这种累积效应在重建损失中更为明显。本文提出以下定理来证明PTQ中量化误差的累积效应会导致增量损失。

定理1

给定预先训练的模型和输入数据。如果2个相邻的模块是等效的,

1330493eeffb4f29df8068989070fd0b.png

补充材料中提供了详细的证明。定理1说明,在2个相邻模块相等的情况下,量化误差的累积会导致损耗的增加。

然而,由于一个或多个卷积超参数(额外的残差输入、kernel大小、通道、组、步长等)的差异,上述定理中的相邻模等价条件在实际场景中很难得到满足。

非等效模块将不可避免地导致模块容量的差异。众所周知,模块的参数数量和位宽会影响模块容量,其中这些超参数对模块容量的影响很容易量化。此外,在第2节中介绍了残差输入、卷积类型和卷积超参数都会影响模块容量,这些影响很难量化。因此,将模块拓扑同构的概念定义如下,这在一定程度上放宽了对模块等价的限制,同时使比较不同模块之间的容量成为可能。

定义1

(模块拓扑齐性)假设两个模块具有相同数量的卷积层。如果2个模块的相应卷积层的超参数除了kernel-size和通道之外是相同的,那么这两个模块在拓扑上是同构的。

从定义1中,放松了模块等价对模块拓扑同构中kernel-size和通道相等的限制,这只会导致模块参数数量的差异。换句话说,消除了诸如残差输入和组之类的超参数的影响使得模块容量难以量化的问题。具体而言,如果包含n个卷积层的模块权重为,是模块中第个卷积层权重,则模块容量(ModCap)定义为以下等式:

c3b1f2a987de9651605936895194515e.png

其中params(·)是一个计算参数数量的函数,是第个卷积层的位宽,α用于使具有不同步长的卷积层具有可比性。具体来说,不同步长的卷积层通过一些变换来等价,并伴随着参数数量的变化。因此,通过乘以缩放参数α,将网络中的步幅=2层转换为隐式步幅=1层。在这种转换下,网络的所有层都满足拓扑同构的定义,因此彼此是可比较的。理论上,根据[Take it in your stride]的分析,α可以设置为1.6,这在本文中被推广到不同的网络中。

然后,导出定理1的一个推论来解释为什么PTQ中会出现振荡。

推论1

假设两个相邻的模在拓扑上是同构的。如果后面模块的模块容量足够大,则损失将减小。相反,如果后一模块容量小于前一模块容量,则量化误差的累积效应会加剧。

a2c7c3cb43a0d76dd9d7f753f6b904fe.png

补充材料中提供了详细的证明。根据推论1可以得出结论,PTQ在各种模型上的振荡问题是由相邻模块的容量差异过大引起的。

论文的逻辑/相关链:振荡性∝最大误差∝最终误差∝准确度

  • 振荡∝最大误差:从图6和补充材料中的类似图来看,不同算法对应的损失分布振荡越严重,损失峰值就越大。也就是说,振荡的程度与最大误差呈正相关;

  • 最大误差∝最终误差:此外,在图3中的观察结果表明,对于不同的模型,在不同的算法上,最大误差与最终误差呈正相关;

  • 最终误差∝精度:理论上,通过根据BRECQ和Adaround对精度损失函数进行泰勒展开,可以得出与性能高度相关的最终重建误差;

从经验上讲,上述论文中进行的大量实验也证明了这一说法。总之,误差的振荡程度与精度呈正相关。论文中的图1也表明,降低振荡程度有利于精度。在下一节中将介绍如何通过优化模块容量差异来消除PTQ中的振荡。

3.2、混合重建粒度

第3.1节中分析的振荡问题表明,由于模块容量的差异导致的信息丢失最终会影响PTQ的性能。由于PTQ中没有量化训练过程,即使增加后续模块的模型容量,也无法恢复这种信息损失。因此,通过联合优化具有大容量差异的模块来平滑损失振荡,从而降低最终重建损失。

从定理1和推论1可以清楚地看出,后面模块的小容量将加剧量化误差的累积效应,从而急剧增加重建损失。相反,后面模块的大容量将减少损失,并增加后面模块中信息丢失的概率。因此,本文希望两个相邻模块的容量尽可能接近。基于容量度量(CM)为包含L个模块的模型构造容量差优化问题,如下所示,

00fa43ea298bf57fbd5d648888781d83.png

其中是一个二进制掩码向量。当=时,这意味着对第个和第个模块执行联合优化。是一个所有元素都为1的向量。k是控制联合优化模块数量的超参数。λ控制正则化项和容量差平方优化目标的重要性比。

计算所有种相邻模块的容量差的平方进行排名,并选择前个相邻模块进行联合优化。在无数据和依赖数据的情况下,分别使用ModCap和重建损失作为容量指标。

c9980351f2fc3a3f5f1a8c35e9427fd0.png

具体如图2所示。根据ModCap度量获得的混合重建粒度方案在计算上是有效的,因为它不涉及重建。然而,一旦组合了一对相邻的模块,这个组合的模块就无法比较ModCap进行进一步的组合,因为它与相邻的模块在拓扑上不同构。因此,该优化方案只能获得混合重建粒度的局部最优解。

另一方面,根据推论1,ModCap差异与重建损失的差异呈正相关,可以将重建损失本身视为容量度量。该方案可以得到全局最优解,但需要进行PTQ重建才能获得重建损失,效率相对较低。

校准数据的Batch size

PTQ需要数据集的一小部分来进行量化参数的校准和模型重建。作者注意到,方程1包含平方Frobenius范数的期望。期望值表示随机变量的平均值,取采样批次的平均值来近似重建过程中的期望值。大数定律证明了当样本大小N趋于无穷大时。

cdcca378cc7f93adde1bdde78b0c056d.png

实验表明,扩大校准数据的批量可以提高PTQ的准确性。这一趋势显示出边际效用的递减。具体而言,随着批量大小的增加,PTQ精度的提高速度减慢。详见第4.3节。

4、实验

4.1、ImageNet Classification

在各种模型上验证了本文的算法,包括不同规模的ResNet-18、ResNet-50和MobileNetV2。

2baac3d46410fe28f42d4cdafdf2ae6a.png

如表1所示,本文算法在与不同比特配置相对应的广泛模型上以很大的优势优于其他方法。具体而言,在ResNet-18和2/4位的MobileNetV2上实现了66.18%和57.85%的Top-1准确率,分别比SOTA高1.52%和4.93%。

其次,本文的方法在低位显示出强大的优越性。例如,在MobileNetV2×0.75上,2/4位PTQ量化的精度增益显著高于4/4位(5.36%对1.61%)。振荡问题可能更为严重,因为低位会导致PTQ重建误差的大小增加。因此,在低位量化时平滑这种振荡对于PTQ优化过程至关重要。

此外,本文的方法在不同规模上对MobileNetV2进行了相当大的改进,这意味着模型大小不会限制算法的性能。作者还注意到本文的算法对MobileNetV2更有效。通过观察,MobileNetV2中的振荡问题比ResNet网络家族的振荡问题更严重。深度可分离卷积增加了模块容量的差异,从而使损失振荡的幅度更大。因此,本文的算法通过解决MobileNetV2中的振荡问题,实现了相当大的性能改进。

4.2、消融实验

1、帕累托最优
396191c45480b4cd6b0bdb5039e62a82.png

在不同规模的MobileNetV2上随机采样了大量混合重建粒度方案,并使用BRECQ算法使用4/4位PTQ对这些方案进行优化,以获得采样精度。在图4中绘制了这些方案的精度分布。

此外,还分别在MobileNetV2上标记了MRECG和BRECQ算法在不同尺度下的准确性。从图4中可以观察到MRECG在所有尺度上都比MobileNetV2有稳定的准确性提高。总体而言,MRECG在模型大小的限制下实现了Pareto最优状态。

2、Component Contribution
1c5921fdfb10027e5cb15b0da72a02a9.png

在这里分别研究了混合重建粒度和扩展批处理大小对准确性的贡献。将通过BRECQ量化为4/4位的0.5缩放的MobileNetV2作为基线。如表2所示,混合重建粒度和扩展批量大小的准确度分别提高了1.08%和0.74%。同时,这两种方法的结合进一步提高了模型的性能。

3、缩小扩大批量规模的边际效用
be98272487812719c6b35748497dfb12.png

根据大数定律,当样本数量增加时,样本的平均值收敛于方程1中的期望值,从而产生较小的近似误差。然而,当样本大小足够大时,由于近似误差的减小而获得的精度增益可以忽略不计。换句话说,Batch size的扩大呈现出边际效用递减的趋势。

在图5中,对一些Batch size进行了随机采样,并通过BRECQ在0.5标度的MobileNetV2上获得了4/4比特的PTQ精度。证明了采样精度的中位数,以防止异常值的影响。作者注意到,当Batch size较小时,采样精度波动更大,这意味着较小Batch size的近似误差会产生较大的噪声。随着Batch size的扩大,这种情况有所缓和。此外,可以观察到中值精度的增加,然后趋于稳定,这意味着扩大Batch size可以为PTQ带来精度增益。同时,这种收益受到边际效用递减的制约。

4、损失分布
328dd60fea6a37e85c49136e66dc8d1e.png

如图6所示,给出了不同算法的损失分布。从Adaround的分布可以看出,它具有最大的振荡幅度。因此,在模型的更深层次,Adaround的重建损失迅速增加。此外,BRECQ使用块重建进行PTQ优化,这在某种程度上缓解了损耗振荡问题,从而提高了性能。

混合重建粒度通过联合优化容量差异较大的相邻模块来平滑损耗振荡。可以看出,与Adaround和BRECQ相比,MRECG的损失变化更稳定。此外,当比较不同场景下的MRECG损失时,发现基于无数据场景获得的MRECG仍然具有较小的振幅损失振荡。作者认为,这种适度的振荡与ModCap MRECG只能联合优化两个相邻模块的事实有关,这只能实现局部最优。相比之下,MRECG具有最平滑的损耗曲线。然而,这种全局最优是以延长获得量化模型的时间为代价的。

5、参考

[1].Solving Oscillation Problem in Post-Training Quantization Through a Theoretical Perspective.

视频课程来了!

自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

045aed3843a396b2cf1c5226e42a609f.png

(扫码学习最新视频)

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

5c8a8f7388f08c61323211d427631e62.jpeg

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

9b71c48dd62bcddf0880e7c0f19b3319.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值