模型量化

模型量化的原理与实践 ——基于YOLOv5实践目标检测的PTQ与QAT量化

1、Tops是什么意思?

1TOPS代表处理器每秒可进行一万亿次(10^12)操作
在这里插入图片描述

3、什么是定点数
大家都知道,数字既包括整数,又包括小数,如果想在计算机中,既能表示整数,也能表示小数,关键就在于这个小数点如何表示?
于是计算机科学家们想出一种方法,即约定计算机中小数点的位置,且这个位置固定不变,小数点前、后的数字,分别用二进制表示,然后组合起来就可以把这个数字在计算机中存储起来,这种表示方式叫做定点表示法,用这种方法表示的数字叫做定点数。
也就是说「定」是指固定的意思,「点」是指小数点,所以小数点位置固定的数即为定点数。
定点数的表示方式如下:
在这里插入图片描述
其中S表示有符号(Signed),n和m分别代表定点数格式中的整数和小数位数,但是考虑到二进制的补码形式表示负数,总的位数为n+m+1,比如S2.13比对应n=2,m=13,二进制的长度为n+m+1=16,也就是说用的16位的定点化表示。
4、定点数转换

定点数转换涉及将实数值转换为定点数值或将定点数值转换为实数值。

实数转换为定点数
将实数转换为定点数需要确定小数点的位置和位数,以及表示范围和精度。

例如,将实数3.1415926转换为小数点位置在第三位上、精度为0.01的定点数,需要先将实数乘以100,得到314.15926,然后将其四舍五入为314,最后加上小数点,得到3.14,即表示3.1415926的定点数值。

定点数转换为实数
将定点数转换为实数需要根据小数点位置和位数进行反向计算。

例如,将小数点位置在第三位上、精度为0.01的定点数3.14转换为实数,需要先将定点数除以100,得到0.0314,然后将其加上小数点后面的数字乘以相应的精度,得到3.1414,即表示定点数3.14对应的实数值。

在实际应用中,定点数转换常用于数字信号处理、嵌入式系统、计算机图形学等领域。对于一些特殊的应用场景,也可以采用其他定点数表示方式,如Q格式、S格式等。

2、什么是量化?

模型量化是指将深度学习模型中的浮点数参数和计算操作转换为定点数参数和计算操作的过程。模型量化可以减小模型的存储空间和计算量,提高模型在移动设备和嵌入式系统上的部署效率。

在模型量化中,浮点数参数和计算操作被转换为定点数参数和计算操作。定点数通常采用8位整数或16位整数表示,可以使用卷积、矩阵乘法等计算操作进行模型推理。

模型量化的过程通常包括以下几个步骤:

选择量化方法,包括权重量化、激活量化、全精度量化、混合精度量化等。

### 模型量化概述 模型量化是指将浮点数权重转换成低精度整数表示的过程,这有助于减少计算资源消耗并提高推理速度。此过程对于部署到边缘设备尤其重要[^4]。 ### 模型量化的方法 #### 动态量化 动态量化仅对激活函数执行量化操作,在每次前向传播期间独立完成。这种方法适用于RNN类网络结构,因为这类架构通常具有较高的稀疏性和重复性特征。 ```python import torch.quantization as quantization quantized_model = quantization.dynamic_quantize(model) ``` #### 静态量化 静态量化不仅涉及权重量化还涉及到输入输出张量的量化处理。为了获得更好的效果一般会在训练结束后利用校准集来微调量化参数。 ```python model.qconfig = quantization.get_default_qat_qconfig('fbgemm') torch.quantization.prepare(model, inplace=True) # 使用校准数据集运行几个批次... torch.quantization.convert(model.eval(), inplace=True) ``` #### QAT (Quantization Aware Training) QAT是在原有基础上引入模拟量化误差作为额外损失项来进行再训练的方式。这种方式可以在不牺牲太多准确性的情况下进一步优化量化后的表现。 ```python from torchvision import models model = models.resnet18(pretrained=True).train() model.fuse_model() # 融合卷积批归一化层等操作提升效率 model.qconfig = quantization.get_default_qat_qconfig('fbgemm') quantization.prepare_qat(model, inplace=True) for epoch in range(num_epochs): train_one_epoch(model, criterion, optimizer, data_loader_train) torch.quantization.convert(model.to('cpu').eval()) ``` ### 应用场景 在实际应用中,模型量化被广泛应用于移动终端、物联网(IoT)装置以及其他计算能力有限但又需要实时响应的任务环境中。通过降低存储空间占用率和加速预测阶段的速度,使得复杂AI算法能够在这些平台上顺利运作成为可能。 ### 工具与框架支持 目前主流深度学习库均提供了不同程度上的量化功能支持: - **TensorFlow Lite**: 提供了完整的Post-training Quantization方案; - **ONNX Runtime**: 支持多种类型的量化策略,并且兼容多个前端框架导出的模型文件; - **PyTorch Mobile/Edge**: 内置丰富的API接口用于快速构建轻量化版本的应用程序;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值