微小目标识别,onnx模型多batch量化失败,
收藏回复举报
微小目标识别,onnx模型多batch量化失败,
t('forum.solved') 已解决
发表于2025-03-06 09:02:40
0 查看
  1. 微小目标识别,onnx模型多batch量化失败,
  2. 模型基于8.3.41的 yolov8模型修改而来,训练后的map50为0.53
  3. ONNX模型导出
  4. model.export(batch=28,imgsz=(576,576),format="onnx",opset=12)

  5. amct5.20模型量化
  6. amct_onnx calibration --model ./yolov8s_op12.onnx --save_path ./quant/ --input_shape "input:28,3, 576,576" --data_dir "./images/" --data_types "float32"

    data_dir中的bin图像是4k图像裁切后组成的batch,数量为28

  7. atc5.20模型转化
  8. atc --model=./quant_deploy_model.onnx --framework=5 --output=./quant/om_deploy_model_amct5.20_atc5.20 --soc_version="OPTG" --output_type=FP32 --insert_op_conf=./op.cfg

  9. 静态AIPP

    aipp_op {

        aipp_mode : static

        related_input_rank : 0

        max_src_image_size : 27869184

        support_rotation : false

        input_format : RGB888_U8

        src_image_size_w : 576

        src_image_size_h: 576

        cpadding_value: 0.0

        crop : false

        load_start_pos_w : 0

        load_start_pos_h : 0

        crop_size_w : 0

        crop_size_h : 0

        resize : false

        resize_output_w : 576

        resize_output_h : 576

        padding : false

        left_padding_size : 0

        right_padding_size : 0

        top_padding_size : 0

        bottom_padding_size : 0

        padding_value : 0

        csc_switch : true

        rbuv_swap_switch : true

        ax_swap_switch : false

        matrix_r0c0 : 256

        matrix_r0c1 : 0

        matrix_r0c2 : 0

        matrix_r1c0 : 0

        matrix_r1c1 : 0

        matrix_r1c2 : 0

        matrix_r2c0 : 0

        matrix_r2c1 : 0

        matrix_r2c2 : 0

        output_bias_0 : 0

        output_bias_1 : 0

        output_bias_2 : 0

        input_bias_0 : 0

        input_bias_1 : 0

        input_bias_2 : 0

        mean_chn_0 : 0

        min_chn_0 : 0.0

        var_reci_chn_0 : 0.00392157

    }

  10. 使用batch size 1的onnx模型,用上述方法转换和量化的模型能够正常推理,能够得到正确结果。
  11. 使用batch size 28的onnx模型,用上述方法转换的模型能够正常推理,无法得到正确结果。
  12. 使用batch size 1的onnx模型,用create_quant_config获取config.json文件,并用该文件基于自动精度量化batch size 28的onnx模型,量化的fake_quant_model.onnx精度变化不大,但是deploy_model.onnx精度依然为0;
  13. 量化时给出了敏感层信息,排除几个最敏感的层后deploy_model.onnx精度依然为0。

    config.json文件内容如下:   

    "version":1,

        "batch_num":1,

        "activation_offset":true,

        "joint_quant":false,

        "do_fusion":true,

        "skip_fusion_layers":[],

        "Conv_0":{

            "quant_enable":false,

            "activation_quant_params":{

                "max_percentile":0.999999,

                "min_percentile":0.999999,

                "search_range":[

                    0.7,

                    1.3

                ],

                "search_step":0.01,

                "act_algo":"ifmr"

            },

            "weight_quant_params":{

                "wts_algo":"arq_quantize",

                "channel_wise":true

            }

        },

  14. 当把"batch_num":1,改为"batch_num":28以后报错如下:

    Traceback (most recent call last):

      File "/xxss928_207/scripts/yolov8_auto_calibration.py", line 652, in <module>

        main()

      File "/xxss928_207/scripts/yolov8_auto_calibration.py", line 637, in main

        amct.accuracy_based_auto_calibration(

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/utils/check_params.py", line 43, in wrapper

        return func(*args, **kwargs)

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/accuracy_based_auto_calibration.py", line 278, in accuracy_based_auto_calibration

        auto_calibration_controller.run()

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/auto_calibration/accuracy_based_auto_calibration_base.py", line 278, in run

        self.global_quant_accuracy = self.get_global_quant_accuracy()

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/accuracy_based_auto_calibration.py", line 112, in get_global_quant_accuracy

        global_quant_accuracy = self.global_calibration()

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/accuracy_based_auto_calibration.py", line 147, in global_calibration

        quantize_tool.save_model(

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/utils/check_params.py", line 43, in wrapper

        return func(*args, **kwargs)

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/quantize_tool.py", line 169, in save_model

        records, _ = record_parser.parse()

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/utils/parse_record_file.py", line 104, in parse

        self.parse_quant(enable_shift_n)

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/utils/parse_record_file.py", line 170, in parse_quant

        layer_params = recorder.parse_quant_value(enable_shift_n)

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/utils/parse_record_file.py", line 235, in parse_quant_value

        layer_params['data_scale'] = self.get_scale_d()

      File "/ssanaconda3/envs/amct5.20/lib/python3.9/site-packages/amct_onnx/common/utils/parse_record_file.py", line 311, in get_scale_d

        raise RuntimeError(

    RuntimeError: cannot find scale_d of layer Conv_0 in record_file

  15. 当使用create_quant_config创建batch size为28的config.json文件后,基于自动精度量化依然报4中描述的错误。微小目标检测ONNX模型中的Conv_0如下。

    %E5%9B%BE%E7%89%871.png

  16. batch size 1成功量化的输入如下:
  17. batch size 28使用命令行量化失败的输入如下:

  18. 用batch size1的config.json,基于自动精度量化batch size 28的模型,给出的sensitivity信息如下:

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: ******** sensitivity_records ********

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_0 : 0.9999670439888059

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_101 : 0.9999396280693671

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_103 : 0.999948821149602

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_105 : 0.9999764520049783

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_107 : 0.9999909005170811

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_108 : 0.9999596234965378

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_110 : 0.9999558021538939

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_112 : 0.9999990495203087

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_121 : 0.999935876053182

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_13 : 0.9999376239231836

    2025-03-05 09:07:20,698 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_15 : 0.9999609247288614

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_17 : 0.9999403839478624

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_2 : 0.9998501436534641

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_20 : 0.9999684259549175

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_22 : 0.9999345541527085

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_25 : 0.9999769020018119

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_27 : 0.9998752821475199

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_31 : 0.9999598136877963

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_33 : 0.9999653573511214

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_35 : 0.9999463998084013

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_38 : 0.999982087487467

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_4 : 0.9999159932750638

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_40 : 0.9999526812481581

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_43 : 0.9999876603892325

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_45 : 0.9999173085469513

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_49 : 0.9999738221183417

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_51 : 0.9999412708178295

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_53 : 0.999950387208521

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_56 : 0.9998612515897569

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_58 : 0.9999641172038505

    2025-03-05 09:07:20,699 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_62 : 0.9999676274018379

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_67 : 0.9998977844440532

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_7 : 0.9998731000846035

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_70 : 0.9999811946494144

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_72 : 0.9999853184540759

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_75 : 0.9999802815379566

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_80 : 0.9999496808488224

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_83 : 0.9999457754088382

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_85 : 0.9999768409067382

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_88 : 0.9999663003514874

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_9 : 0.9999573168721607

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_93 : 0.9999061920699115

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_96 : 0.9999282629465169

    2025-03-05 09:07:20,700 - INFO - [AMCT]:[AutoCalibrationHelper]: Conv_98 : 0.9999412618251637

    禁止量化Conv_0、Conv_2、Conv_7、Conv_67后,模型精度依然为0

  19. 使用amct8.0量化batch size 28的模型,报错如下:

    RuntimeError: cannot find scale_d of layer Conv_0 in record_file, please check data calibration process!

  20. 基于自动精度量化使用的是rgb数据,这与静态AIPP一致。

本帖最后由 匿名用户2025/03/07 17:22:08 编辑

我要发帖子