RangiLyu / nanodet

NanoDet-Plus⚡Super fast and lightweight anchor-free object detection model. 🔥Only 980 KB(int8) / 1.8MB (fp16) and run 97FPS on cellphone🔥
Apache License 2.0
5.77k stars 1.04k forks source link

转换成 ONNX 模型后出现严重的掉点问题 #477

Open Cassieyy opened 2 years ago

Cassieyy commented 2 years ago

RT, 我在将 1.0x 模型用作者提供的 export_onnx.py 转换成 .onnx 模型后出现了严重掉点问题,输入已经确认过两模型是一致的,请问大家有无遇到过,以及怎么解决,非常感谢!

huq02 commented 2 years ago

我也是遇到相同的问题了

huq02 commented 2 years ago

pth推理的结果和tflite的推理结果基本一直,但是onnx的推理结果,置信度直接下降10个点;不知道什么情况

Cassieyy commented 2 years ago

pth推理的结果和tflite的推理结果基本一直,但是onnx的推理结果,置信度直接下降10个点;不知道什么情况

如果排除是输入的问题,那只能一层层地对齐了...推荐个教程:https://zhuanlan.zhihu.com/p/543973749

Cassieyy commented 2 years ago

此外还想请问下转 onnx 后处理大家有自己写过吗,我发现除了 nms 之外还有一些工作量

huq02 commented 1 year ago

后处理没有写,输入确定是一直的,其实tflite与onnx就是输入的通道顺序不同而已,但是同样的输入,输出的tensor就有差异

Cassieyy commented 1 year ago

后处理没有写,输入确定是一直的,其实tflite与onnx就是输入的通道顺序不同而已,但是同样的输入,输出的tensor就有差异

https://github.com/hpc203/nanodet-opncv-dnn-cpp-python/blob/main/main_nanodet.py 前后处理可以参考下这个,输出tensor有差异您知道是什么原因吗。

Genlk commented 1 year ago

RT, 我在将 1.0x 模型用作者提供的 export_onnx.py 转换成 .onnx 模型后出现了严重掉点问题,输入已经确认过两模型是一致的,请问大家有无遇到过,以及怎么解决,非常感谢!

@Cassieyy 你有没有尝试过测试onnx 的模型输出与pytorch 是否一致? 用下面的代码可以查看,我这边验证我的模型(backbone 换成了mobilenet)转成onnx输出不一致

478

Genlk commented 1 year ago

此外还想请问下转 onnx 后处理大家有自己写过吗,我发现除了 nms 之外还有一些工作量

@Cassieyy 作者的demo 里面有后处理代码,可以参考 https://github.com/RangiLyu/nanodet/blob/main/demo_openvino/nanodet_openvino.cpp

Cassieyy commented 1 year ago

RT, 我在将 1.0x 模型用作者提供的 export_onnx.py 转换成 .onnx 模型后出现了严重掉点问题,输入已经确认过两模型是一致的,请问大家有无遇到过,以及怎么解决,非常感谢!

@Cassieyy 你有没有尝试过测试onnx 的模型输出与pytorch 是否一致? 用下面的代码可以查看,我这边验证我的模型(backbone 换成了mobilenet)转成onnx输出不一致 #478

谢谢,我现在是能对齐了,之前还是预处理的时候有点问题导致的。

PaVaNTrIpAtHi commented 1 year ago

Same issue on my end. Did you find the solution to this issue?

Cassieyy commented 1 year ago

I solved this problem by aligning the inputs of the two models.

PaVaNTrIpAtHi commented 1 year ago

I solved this by commenting line 135,136 in main/nanodet/model/head/nanodet_plus_head.py.