1.芯片型号:J52.天工开物开发包OpenExplorer版本:J5_OE_1.1.493.问题定位:板端部署4.问题具体描述:针对yolov5s采用PTQ量化得到对应的.bin模型,并采用hb_verifie工具与quanti.onnx模型(改模型可正常推理)进行验证,结果显示通过。但是目前部署到板端进行推理,采用的是ai_benchmark里面的PTQYolo5PostProcessMethod方法进行的后处理,并针对自己的任务做了相应的修改,结果出现了很多预测框,而且置信度都很大,请问应该从哪儿进行排查呢?
你好,请问PTQ生成的quantized_model.onnx模型在X86端使用Python推理的精度正常吗?因为quantized_model和bin模型推理输出结果是严格一致的,在将.bin模型部署到板端之前建议先在PC端使用Python验证quantized_model.onnx模型的精度,排查是否是由量化导致的模型精度掉点
后处理代码采用的PTQYolo5PostProcessMethod,修改了类别、anchor大小等内容,和X86端python推理修改的内容保持了一致,自己也看了一下代码,也没发现问题,请问一般还应该修改哪一块的代码?
请排查一下:板端的图像前处理代码,PTQYolo5PostProcessMethod中几个重要参数stride、score_threshold和nms_threshold。尝试调高score_threshold和nms_threshold,看看可视化效果的变化。此外想问一下,你提供的这个板端可视化图是怎么实现的,49版本OE我们还没有提供太多的ai_benchmark可视化示例,我看看是不是这部分出了问题
这里给出几个建议:1、量化和部署使用同一个版本的OE包,建议都基于62进行2、对比python后处理和C++后处理每一步的结果差异,可以在后处理代码中间加入保存结果到本地的代码,一段一段对比后处理每个步骤是否存在精度差异,定位到问题代码。
我把python推理和板端推理的结果对比了一下,两个输出不一样,但是板端推理的结果是和hb_verifier输出的结果一致的,python端推理的结果和hb_verifier输出arm_model和quanti_model结果不一样,但python推理的结果是OK的,这是怎么回事?
hb_verifier工具是用于对指定的定点模型和runtime模型进行结果验证的工具。hb_verifier验证的模型输出是一致的,说明C++和python的后处理没有对齐。可以每隔一段代码就保存下后处理的中间结果,看下哪里没对齐。
你好,还麻烦确认一下模型在转换编译的过程中是否删除了模型前后端的量化、反量化节点,方便的话请对bin模型使用工具hb_perf xxx.bin,提供一下hb_perf_result目录下的二进制模型文件结构图
像这种python端推理正确,hb_verifier也可以通过,但是板端推理有误,还有可能是模型量化/反量化节点的问题,如果删除了量化节点,需要你在板端喂数据的时候手动在前处理中添加量化操作,请参考 PTQ&QAT方案板端验证注意事项 (horizon.cc) ;如果删除了反量化节点,则需要在后处理中融合反量化操作,删除的反量化节点保存的scale数据都在hb_model_modifier.log中
你好,对于板端自己准备的输入数据,需要在前处理中把图像数据从bgr/rgb处理成yuv444格式再输入给模型,否则是会导致推理结果出错的,包括您之前提到了自己推理的python端和板端不一致但是hb_verifier结果通过也是因为这个原因。参考 PTQ&QAT方案板端验证注意事项 (horizon.cc) 1.2.2章节的解释和脚本,修改前处理和输入的数据