专栏算法工具链yolov5模型量化前后精度差异大

yolov5模型量化前后精度差异大

已解决
默认383362025-03-28
135
21
我用ptq量化方法对我在自定义数据集上训练的yolov5模型进行量化,并参考oe包中ai_toolchain/horizon_model_convert_sample里的示例查看量化前后推理单张图片结果和计算量化前后精度。发现在用04_inference.sh进行单张图片推理时,指定模型为original_float_model时结果正常,但是指定为quantized_model时检测结果较差。我尝试修改yaml文件中的配置,发现会同时影响 original_float_model 和 quantized_model ,所以应该不是yaml文件配置错误导致的?请问我应该排查哪方面的问题?附件中是原始模型和量化模型的推理结果。
附件:
算法工具链
征程5
评论5
0/1000
  • 默认38336
    Lv.1
    量化过程的log中,发现cos相似度还可以,但是后三个指标很大是什么原因?
    2025-03-28
    0
    1
    • DR_KAN回复默认38336:

      0.939已经很低了,一般来说至少也得0.98

      2025-03-28
      0
  • DR_KAN
    Lv.4

    可以检查一下有没有给校准数据做归一化计算,J6这代芯片校准数据需要归一化,和浮点模型训练时的输入完全对齐

    2025-03-28
    0
    2
    • 默认38336回复DR_KAN:

      您好,我用的J5的工具链。

      2025-03-28
      0
    • 默认38336回复DR_KAN:

      我在yaml文件里norm_type设为data_scale,scale_value也设置了,做了归一化处理

      2025-03-28
      0
  • DR_KAN
    Lv.4

    如果 original_float_model没问题,说明yaml配置文件是没问题的

    2025-03-28
    0
    1
    • 默认38336回复DR_KAN:

      对, original_float_model 推理和最终mAP都正确。校准数据格式处理是在preprocess的calibration_transformers函数里配置的,校准数据归一化用的yaml文件里的 data_scale 处设置吧?这我都是按照yolov5x示例设置的

      2025-03-28
      0
  • DR_KAN
    Lv.4

    我还是怀疑你的校准数据没搞对,OE包中有个yolov5x的转换示例,仔细核对一下流程看看呢?另外为了避免量化误差的影响,可以在optimization里配置set_all_node_int16精度,尽可能提高算子的量化精度再测试

    2025-03-28
    0
    7
    • DR_KAN回复DR_KAN:

      optimization: set_all_nodes_int16

      2025-03-28
      0
    • 默认38336回复DR_KAN:

      yaml文件没问题的话,校准数据出问题就是 preprocess的calibration_transformers函数 有误?您说的 在optimization里配置set_all_node_int16精度 是在哪设置,我在yaml文件里没看到optimization选项,只有optimize_level,设为03

      2025-03-28
      0
    • Huanghui回复默认38336:

      我觉得DR_KAN说得对,可能是校准集选择的不合适,里面可能有一些异常数据,你再检查下是否包含一些例如纯黑或者纯白的图片。

      2025-03-28
      0
    • 默认38336回复Huanghui:

      好的我检查一下,这个情况能说明yaml文件是对的吧?

      2025-03-28
      0
    • 默认38336回复Huanghui:

      您好,我校准数据是从数据集里随机选取的100张,都是正常图片

      2025-03-28
      0
    • 默认38336回复Huanghui:

      在量化过程中有warning:WARNING find illegal threshold in /model.24/Mul_2/model.24/Constant_4_output_0_expand_dims_HzCalibration, it will be set default.h和Node /model.24/Pow_2_output_0_calibrated_HzDequantize is not adjacent to input or output. It can not be removed! Skipped!

      2025-03-28
      0
    • 默认38336回复Huanghui:

      您好请问还需要排查哪部分的问题,可以给些建议么

      2025-03-28
      0
  • DR_KAN
    Lv.4

    再推理下optimized.onnx和calibrated.onnx,看看哪个模型的精度有问题

    2025-03-28
    0
    5
    • 默认38336回复DR_KAN:

      optimized精度没问题,calibrated有问题

      2025-03-28
      0
    • DR_KAN回复默认38336:

      那基本上就能判断是校准数据不正常了

      2025-03-28
      0
    • DR_KAN回复默认38336:

      建议用OE包自带的示例代码处理校准数据,善用02 preprocess sh脚本以及preprocess py文件

      2025-03-28
      0
    • 默认38336回复DR_KAN:

      那我就是检查preprocess里的calibration_transformers函数和准备的校准数据自身问题了吧?yaml配置可以确定是正确的。但我现在就用的OE包中的yolov5x的calibration_transformers函数,我的模型是yolov5s,但应该不存在区别

      2025-03-28
      0
    • Huanghui回复默认38336:

      再确认下 calibration_transformers函数 ,要跟你训练yolov5s时候的数据集处理方式一样。

      2025-04-03
      0