一、PTQ量化流程
(1) 核查onnx模型
(2)準備和生成模型校準數據集
(3)PTQ量化
(4)量化模型推理
二、具體流程
(1)使用01_check_onnx.sh腳本,對onnx模型進行核查。
(2)準備模型校準數據集,數據集需要幾十張到幾百張左右。
(3)編寫02_prepare_calibration_data.py,對校準數據集中的數據進行預處理,運行02_prepare_calibration_data.py,就會生成可用于模型PTQ量化的校準集calibration_data。
(4)進行PTQ量化,模型轉換及二進制模型編譯工作。首先,需要參考地平線官方提供的yaml文件示例,需要根據自己的實際模型和量化需求,寫一個量化Yaml文件,包含模型參數(model_parameters)、輸入參數(input_parameters)、校準參數(calibration_parameters)、編譯參數(compiler_parameters)。寫好量化yaml配置文件后,運行下面指令進行PTQ量化,模型轉換和編譯。
sudo sh ./03_build_onnx.sh
運行成功后,會在model_output文件夾下,生成量化后的quantized_model.onnx模型、model.bin二進制模型、及可以用于查看模型推理速度,每層神經結構耗時等關鍵信息文件。
(5)基于Netron軟件對原始模型和轉換模型做結構對比,判斷轉換后的網絡結構是否與原始模型一致。
(6)編寫J3環境下,使用quantized_model.onnx模型進行推理的代碼,當前推理結果會和使用model.bin模型在J3板端跑的效果一致。運行下面指令進行PTQ量化后的onnx模型推理,可用來對比量化前后的誤差:
python3 04_inference.py