现象描述
使用MindSpore Lite集成时对推理结果后处理后发现效果不理想,怀疑推理精度存在问题,可通过以下方式进行精度分析验证。
原因分析
模型推理效果不理想的原因一般包括:输入数据有误、数据预处理或后处理流程有误、fp16推理引入的精度损失、推理框架存在精度问题:
- 输入数据格式异常或预处理有误。
- 打开fp16推理引起的精度损失。
- 算子精度异常。
解决办法
步骤1:检查输入数据。
-
MindSpore Lite 1.3.0及之前版本ms模型的输入数据格式为NHWC,MindSpore Lite 1.5.0之后的版本支持inputDataFormat 参数设置输入数据格式为NHWC或NCHW,需要确保输入数据的格式确保和ms模型要求的输入格式一致。
-
检查输入数据是否需要预处理及预处理过程是否正确:例如未进行归一化处理,导致数值较大,在进行矩阵乘或幂指运算时出现数值溢出。
步骤2:检查是否打开fp16推理。
- 使用fp16推理时会存在数值精度损失,整网推理过程中会由于误差累积导致最终输出结果误差变大,甚至会导致数值溢出从而出现Nan或Inf值。
- 如果精度异常问题由于打开fp16推理引入,可以参考步骤3定位具体出现精度问题的算子。然后使用MindSpore Lite 1.5.0及之后版本提供混合精度推理能力,在整网推理优先使用fp16时支持设置某一层算子进行fp32推理,具体使用方法可参考官网文档混合精度运行 ,通过将溢出层设置为fp32避免在fp16推理时出现的整网推理精度问题。
步骤3:通过MindSpore Lite提供的基准测试工具benchmark进行精度验证。
- 通过benchmark工具的Dump功能 保存算子层输出,和原框架推理结果进行对比进一步定位出现精度异常的算子。
- 针对存在精度问题的算子,可以下载MindSpore源码 检查算子实现并构造相应单算子网络进行调试与问题定位;也可以在MindSpore社区提ISSUE 给MindSpore Lite的开发人员处理。
建议与总结
无
相关参考文档
其他推理问题请参考《问题定位指南》。