Tencent / ncnn

ncnn is a high-performance neural network inference framework optimized for the mobile platform
Other
20.09k stars 4.13k forks source link

onnx结果和ncnn的输出不一致 #5163

Closed ghost069 closed 1 month ago

ghost069 commented 9 months ago

error log | 日志或报错信息 | ログ

无报错

context | 编译/运行环境 | バックグラウンド

Python 3.8.0 ncnn=1.0.20231027 onnxruntime=1.15.1

how to reproduce | 复现步骤 | 再現方法

1.运行python run_onnx_netvlad.py,输出结果如下 image 结果和原始模型结果基本一致

2.运行python run_ncnn_netvlad.py,输出结果如下 image 结果与步骤一完全不一致,而且结果均为0.32833463或者-0.32833463

more | 其他 | その他

1.生成NetVLAD-sim.onnx的方法为onnxsim NetVLAD.onnx NetVLAD-sim.onnx --overwrite-input-shape 1,3,480,640 2.生成NetVLAD-sim.param和NetVLAD-sim.bin的方法为./tools/onnx/onnx2ncnn NetVLAD-sim.onnx NetVLAD-sim.param NetVLAD-sim.bin 3.c++版本的ncnn运行此模型也会得到同样结果 bug_report.zip

ghost069 commented 9 months ago

模型: 链接:https://pan.baidu.com/s/1b_CuflX2ylmBIfXjJUYL9Q?pwd=ey1r 提取码:ey1r

sxj731533730 commented 9 months ago

1 可能问题 比对一下 onnx和ncnn输入图片之前的预处理图片数据是否一致 2 可能问题 onnx转ncnn 有算子不支持 错误或者用pnnx转模型试试 小老弟

ghost069 commented 9 months ago

1 可能问题 比对一下 onnx和ncnn输入图片之前的预处理图片数据是否一致 2 可能问题 onnx转ncnn 有算子不支持 错误或者用pnnx转模型试试 小老弟

这两个猜测不太可能哈。 首先,这两个Python文件在附录bug_report.zip里面是有的。里面的预处理方法是一致的。 其次,如果onnx转ncnn 有算子不支持,那么会在转的那一步就失败,目前的情况是在onnxsim之后转成功模型了,但是结果不一致。 不过pnnx是个方法,我会考虑尝试的。Thanks anyway!

hhxdestiny commented 9 months ago

1 可能问题 比对一下 onnx和ncnn输入图片之前的预处理图片数据是否一致 2 可能问题 onnx转ncnn 有算子不支持 错误或者用pnnx转模型试试 小老弟

这两个猜测不太可能哈。 首先,这两个Python文件在附录bug_report.zip里面是有的。里面的预处理方法是一致的。 其次,如果onnx转ncnn 有算子不支持,那么会在转的那一步就失败,目前的情况是在onnxsim之后转成功模型了,但是结果不一致。 不过pnnx是个方法,我会考虑尝试的。Thanks anyway!

onnxsim不要用--overwrite-input-shape试试

nihui commented 1 month ago

针对onnx模型转换的各种问题,推荐使用最新的pnnx工具转换到ncnn In view of various problems in onnx model conversion, it is recommended to use the latest pnnx tool to convert your model to ncnn

pip install pnnx
pnnx model.onnx inputshape=[1,3,224,224]

详细参考文档 Detailed reference documentation https://github.com/pnnx/pnnx https://github.com/Tencent/ncnn/wiki/use-ncnn-with-pytorch-or-onnx#how-to-use-pnnx