乐鑫技术交流
直播中

靓仔峰

9年用户 1120经验值
擅长:可编程逻辑
私信 关注
[问答]

esp-dl int8量化模型数据集评估精度下降的疑问求解?

一    试着将模型进行了esp-dl上int16和int8的量化,并在测试数据集上进行精度评估,其中int16的模型精度基本没有下降,但是int8的模型评估精度下降了很多,目前正在尝试修改Calibrator.set_method中的参数,与此同时有几个问题:
1.1 calibrator生成的model_calib.pickle文件,通过打印看到它是一个字典,关于其中的键值有没有相关的文档
1.2 eval.evalute_quantized_model 能否输出每一层的量化输出,而不只是最后一层,否则只能通过一次次的删除onnx模型后面的部分达到目的,太过麻烦
1.3 是否有pc端的eval/calibrator以及与libdl.a对应的c++库可以提供
这几个问题是遇到int8量化精度下降的问题时想到的关于esp-dl这边的定位方向,如果方向有问题或者有其他方向,也麻烦帮忙指出,感谢!

二 修改Calibrator.set_method遇到的问题:
2.1 calib = Calibrator('int8', 'per-tensor', 'minmax'),得到的模型参数cpp和hpp中的bias是int16的类型(可以正常评估推理),是否正常?  比如:
namespace mb_v1_ssd_coefficient
{
    const dl::Filter *get_conv_0_filter();
    const dl::Bias *get_conv_0_bias();
    const dl::Activation *get_conv_0_activation();
    const dl::Filter *get_conv_2_filter();
    const dl::Bias *get_conv_2_bias();
    const dl::Activation *get_conv_2_activation();
2.2 calib = Calibrator('int8', 'per-channel', 'minmax')
...
Evaluator('int8', 'per-channel', 'esp32s3')
...
[outputs, _] = eva.evalute_quantized_model(image, True)
在推理时出错:
quantization_tool/linux/evaluator.so in evaluator.Evaluator.evalute_quantized_model()

KeyError: 'input.4/QACC_shift1:0'


                        

回帖(1)

訾存贵

2024-7-1 16:05:50
首先,我们来分析一下您的问题,并尝试为您提供解决方案。

问题1:关于model_calib.pickle文件中的键值
model_calib.pickle文件是一个包含量化模型校准信息的字典。这个字典中的键值可能包括量化参数、量化范围等信息。关于具体的键值,您可以参考ESP-DL的官方文档或者GitHub仓库,以获取更详细的信息。

问题2:eval.evalute_quantized_model输出每一层的量化输出
目前,ESP-DL的eval.evalute_quantized_model函数可能没有直接提供输出每一层量化输出的功能。但是,您可以尝试以下方法来实现这个需求:

1. 在量化模型的每一层后添加一个自定义的函数,用于输出该层的量化输出。
2. 在自定义函数中,您可以使用TensorFlow或ONNX的API来获取和打印每一层的输出。

问题3:是否有PC端的eval/calibrator以及与...
关于是否有PC端的eval/calibrator,您需要查看ESP-DL的官方文档或者GitHub仓库,以了解是否提供了相应的工具或库。如果没有,您可以考虑使用其他量化工具或库,如TensorFlow的Quantization Aware Training (QAT) 或 ONNX的量化工具。

现在,我们来解决您提到的int8量化模型精度下降的问题。以下是一些建议:

1. 检查您的量化策略:确保您使用了合适的量化策略,如对称量化或非对称量化。根据您的模型和数据集,选择最适合的量化策略。

2. 调整Calibrator.set_method中的参数:尝试使用不同的量化方法,如minmax、percentile等,以找到最佳的量化方法。

3. 优化模型结构:在量化过程中,某些层可能会对精度产生较大影响。尝试调整模型结构,如增加或减少某些层,以提高量化后的精度。

4. 使用更精细的量化粒度:尝试使用更精细的量化粒度,如int16或int8.2(8位整数,2位小数),以提高量化后的精度。

5. 考虑使用混合精度量化:在某些情况下,使用混合精度量化(即部分层使用int8,部分层使用int16)可能会提高量化后的精度。

希望这些建议能帮助您解决int8量化模型精度下降的问题。如果还有其他问题,请随时提问。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分