2,861
社区成员




qat训练好的int8的tflite,如何将其转换为qnn model并编译到8850平台上?查阅了文档,找到一些关联方案:
qnn-tflite-converter似乎要求输入的是浮点模型,提供inputlist后进行量化。但如果我的模型本身就是int8的,怎么操作呢?
quantization_overrides 似乎是根据层的名字对浮点模型进行量化参数覆盖,但是qat方式,并没有浮点的tflite输出,是否我的理解有误?
当你已有QAT(Quantization - Aware Training)训练好的int8 TFLite模型,要将其转换为QNN(Qualcomm Neural Network)模型并编译到8850平台上,下面为你详细分析你遇到的问题及解决思路:
qnn - tflite - converter
要求输入浮点模型的问题qnn - tflite - converter
通常设计为接收浮点模型作为输入并执行量化操作,但你拥有的是已经量化好的int8 TFLite模型。此时,你可以采用以下操作:
尽管工具可能倾向于浮点模型输入,但你可以尝试直接用 qnn - tflite - converter
处理int8 TFLite模型。有些转换器能够自动识别已量化模型,进而跳过不必要的量化步骤。示例命令如下:
qnn-tflite-converter --input_model=your_int8_model.tflite --output_model=your_qnn_model.qnn
查阅 qnn - tflite - converter
的官方文档或者联系其开发者,确认工具是否支持直接处理int8 TFLite模型。要是工具不支持,可考虑联系高通技术支持团队,询问是否有针对已量化模型的特殊转换流程。
quantization_overrides
针对浮点模型的问题你理解 quantization_overrides
通常是用于覆盖浮点模型的量化参数。由于QAT训练已经得到了int8 TFLite模型,没有浮点TFLite输出,不过你仍然可以使用类似的思路:
尽管没有浮点模型,但你可以手动修改int8 TFLite模型的量化参数。TFLite模型中的量化参数一般包含尺度(scale)和零点(zero - point)。你可以借助TFLite的Python API来读取和修改这些参数。
在手动修改量化参数之前,要确保你清楚QAT训练时采用的量化策略和参数。手动修改参数时,要保证新的参数和模型的量化方式一致,防止引入额外的误差。
当你成功将int8 TFLite模型转换为QNN模型后,就可以将其编译到8850平台上。通常要借助高通的QNN SDK,按照以下步骤操作:
qnn_compiler --input_model=your_qnn_model.qnn --output_dir=compiled_model --target=8850
通过以上步骤,你就可以将QAT训练好的int8 TFLite模型转换为QNN模型并编译到8850平台上。