深度学习论文: Bag of Tricks with Quantized Convolutional Neural Networks for image classification

深度学习论文: Bag of Tricks with Quantized Convolutional Neural Networks for image classification
Bag of Tricks with Quantized Convolutional Neural Networks for image classification
PDF: https://arxiv.org/pdf/2303.07080.pdf
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks

1 概述

本文对首先对PTQ量化的有效方法进行了系统地改进和优化,并在实践中建立了一个黄金准则。遵循这个准则,8位量化的模型可以达到与全精度模型相当的准确性,而无需额外的训练。

此外提出了一种简单高效的量化感知训练策略,在较低精度的设置中进一步提高了准确性。最后,作者证明了量化可以与剪枝策略结合使用,并提出了一个多阶段微调的流程将它们连接在一起。

2 Post-training Quantization

2-1 Determining the optimal quantization scale 确定激活量化尺度

在进行高效的量化时,确定最优的量化尺度是主要挑战之一。选择给定位宽的大尺度允许更宽的表示范围,可以避免数据溢出,但也会导致更多的分布误差。相反,选择较小的尺度在大多数情况下可以减小量化误差,但由于数据范围较窄,可能导致数据溢出,从而导致数值计算错误。

NVIDIA的TensorRT采用了一种PTQ量化方法,通过最小化量化前后特征图分布之间的Kullback-Leibler(KL)散度来扫描量化尺度。这种方法在量化流行的CNN模型,如ResNet和MobileNet,时表现出色,并且不需要额外的微调。

然而,通过实验作者发现,直接使用与最小KL散度相对应的尺度通常会导致性能下降。相反,作者发现优越结果的最优尺度通常大于最小KL散度的尺度。
在这里插入图片描述

因此,作者引入了一个容差系数T来改进CNN中的量化性能。作者不再选择具有最小KL散度的尺度,而是在一系列尺度候选值中扫描,并选择其对应的KL散度小于最小KL散度的T倍的最大值。
在这里插入图片描述
改进后的KL散度量化算法:
在这里插入图片描述

2-2 Granularity of quantization 量化的粒度

卷积层中的权重量化分为两种类型:Per-Tensor和Per-Channel。激活通常进行Per-Tensor量化,卷积权重进行Per-Channel量化。在所有情况下,Per-Channel量化始终优于Per-Tensor量化。
在这里插入图片描述

2-3 Unsigned quantization 无符号量化

ReLU激活在现代架构中常被使用,用于解决梯度消失问题。在ReLU中,负的激活值被截断为零。当在ReLU之后对特征图进行量化时,可以应用无符号量化来改进正值的表示,通过丢弃负值来实现。本质上,这种方法相当于在正值的量化中添加一个额外的比特,从而有效地将表示的范围加倍。
在这里插入图片描述

2-4 Quantization Placement 量化位置

对于类似residual-like的结构保持浮点算术(例如半精度)来进行元素级求和,可以缓解量化带来的性能下降;针对ResNet的 bottleneck量化如下:
在这里插入图片描述

2-5 Accumulation in INT16 INT16中的累积

为了避免在卷积的累积过程中出现数据溢出,通常的做法是使用INT32数据类型来存储中间累积结果,即使权重和激活值被量化为8位或更少的位宽。
然而,为了进一步降低延迟和内存占用,作者建议在权重和激活值的位宽之和小于等于14时使用INT16数据类型进行累积。在作者的设置中,作者将卷积的权重量化为6位,激活值量化为8位,这满足了这个要求。
在这里插入图片描述
在INT16中的积累过程如下:
在这里插入图片描述

2-6 Guideline for Post-training quantization PTQ量化指南

总结起来,为了提高后训练量化的准确性,我们提出以下指南:

  • 使用改进的KL散度算法和容差系数来确定激活的比例,并应用MinMax量化来确定权重的比例。
  • 对权重进行通道级量化,这比层级量化更优,尤其适用于高效卷积。
  • 对正激活(如ReLU的输出)进行无符号量化。
  • 在网络中尽可能消除加法操作的输入量化,这样可以在计算量略微增加的情况下获得显著的性能提升。

如下表所示,在ResNet50和MobileNetV2上实现了8位量化的全精度准确性水平。实际上,提出的方法在一定程度上优于TensorRT。
在这里插入图片描述

3 Quantization-Aware Training

3-1 Batch Normalization folding 折叠BN层

为了实现量化感知训练,需要实现BN折叠来确定前向传递过程中的最优尺度。然后梯度以展开的方式进行反向传播,允许作者单独更新前一个卷积层的权重以及BN的尺度和偏移。参数折叠策略的公式如下:
在这里插入图片描述

3-2 Quantization-Aware Training 量化感知训练

首先根据PTQ准则对经过训练的全精度模型进行量化。然后,作者采用修改后的训练过程对其进行微调,使模型适应量化。作者禁用了激进的随机大小裁剪,并采用了较弱的随机裁剪增强。模型进行微调,使用固定的权重量化尺度进行20个epochs的训练,改善训练收敛性。
在这里插入图片描述

3-3 Integration with pruning

探索将量化与网络剪枝策略结合,旨在加速推理并减少内存占用。提出的「稀疏化 →全精度微调 →PTQ量化 →QAT训练」策略,实验表明量化方案可以很好地与网络剪枝策略结合使用。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shanglianlm/article/details/132204980