【问题环境】
【问题现象】
构造全1 fp32输入,推理onnx结果和om推理结果差距大
ONNX:
ON:
【处理过程】
1. 使用msit工具分析算子支持情况,检查结果无不支持算子
2.使用msit debug compare工具dump数据进行对比,得到result_时间戳.csv文件
3.将2中的csv文件里找到精度不满足要求的,本案例是找余弦相似度低于0.99的,再配合netron工具找到首个出精度问题节点


4.发现第一层的Resize,使用netron打开原始onnx找到对应的节点,检查属性信息

5.发现Resize算子属性里coordinate_transformation_mode使用的half_pixel模式
6.找昇腾ResizeBilinearV2算子使用的模式是pytorch_half_pixel模式
7.两种模式处理时的差异导致了此次精度问题,因此有两种方式解决该问题
- 根据昇腾算子开发说明自行开发算子替代昇腾的ResizeBilinearV2算子和ONNX保持一致
- 修改onnx的ReSize算子的模式为pytorch_half_pixel模式后再转换om使用
8. 查询对应版本onnx的Reszie属性默认是half_pixel模式,同样也支持pytorch_half_pixel模式
https://onnx.ai/onnx/operators/onnx__Resize.html

9.采用简单的修改onnx模式的方式解决,对比onnx修改前和修改后使用CPU推理精度对齐后再转换成OM,精度也对齐了。
【问题根因】
ONNX使用的ReSize模式使用half_pixel 和转换后的昇腾替代算子ResizeBilinearV2支持实现的pytorch_half_pixel模式精度差异导致
【解决方案】
提供2种方案,本案例使用第二种处理,第一种未实践
- 根据昇腾算子开发说明自行开发算子替代昇腾的ResizeBilinearV2算子和ONNX保持一致
- 修改onnx的ReSize算子的模式为pytorch_half_pixel模式后再转换om使用
【相关知识】
不同模式的计算方式有差异,详细如下:

【问题环境】
【问题现象】
构造全1 fp32输入,推理onnx结果和om推理结果差距大
ONNX:
Input name: input Output 0 shape: (1, 3, 512, 512) 输出 0 前几个值: [[[[0.9582745 0.9593843 1.0079391... 0.99618465 1.0035256 0.95998454] [0.93535155 0.99297273 0.98873824 ... 0.9975622 1.0131495 0.9739327 ]ON:
Input name: input .....Output 0 shape: (1, 3, 512, 512) 输出 0 前几个值: [[[[0.8773149 1.9461144 1.402598... 1.442317 1.5492649 1.6140375 ] [1.06470951.9107456 1.430389 ... 1.3726659 1.5196142 1.2167636 ] [1.20316431.22862 1.1450994 ... 1.07255291.0221734 1.354701 ]【处理过程】
1. 使用msit工具分析算子支持情况,检查结果无不支持算子
2.使用msit debug compare工具dump数据进行对比,得到result_时间戳.csv文件
3.将2中的csv文件里找到精度不满足要求的,本案例是找余弦相似度低于0.99的,再配合netron工具找到首个出精度问题节点
4.发现第一层的Resize,使用netron打开原始onnx找到对应的节点,检查属性信息
5.发现Resize算子属性里coordinate_transformation_mode使用的half_pixel模式
6.找昇腾ResizeBilinearV2算子使用的模式是pytorch_half_pixel模式
7.两种模式处理时的差异导致了此次精度问题,因此有两种方式解决该问题
8. 查询对应版本onnx的Reszie属性默认是half_pixel模式,同样也支持pytorch_half_pixel模式
https://onnx.ai/onnx/operators/onnx__Resize.html
9.采用简单的修改onnx模式的方式解决,对比onnx修改前和修改后使用CPU推理精度对齐后再转换成OM,精度也对齐了。
【问题根因】
ONNX使用的ReSize模式使用half_pixel 和转换后的昇腾替代算子ResizeBilinearV2支持实现的pytorch_half_pixel模式精度差异导致
【解决方案】
提供2种方案,本案例使用第二种处理,第一种未实践
【相关知识】
不同模式的计算方式有差异,详细如下: