torch导出的onnx模型和bin有相同的不正确的输出结果

1.使用的是RDK_X5的板子

2.是对自己训练的十分类resnet18模型转换并部署到开发板上

2.图像是保存成.png的单通道二值灰度图(只有0和255的灰度图)

问题:

当以灰度图的形式读取图片时,此时数据类型为uint8,将该数据类型的输入传入onnx在电脑上推理和bin模型在板子上推理时得到的结果很相似但结果错误,如下图所示,图像的标签是1,这里显然不正确:

当把图片除以255时就得到数据类型为float32,数值范围为0-1的输入,此时将输入喂入onnx模型得到正确的结果,如下图所示:

而板子上用的pyeasy_dnn推理api的输入只能是uint8数据类型,所以我将输入除以255后又将数据类型转换成了uint8喂入到bin模型中得到几乎为0的结果:

个人感觉主要问题出在模型转换时的数据类型的问题,但又不知道问题出在哪一步,验证中间onnx模型时的代码一直报错,希望大佬们帮我看一下问题出在哪里,下面的两个附件分别是转换时生成的onnx文件和用来验证的图像,图像的名字就是它的标签,共十张,希望能得到各位大佬的指点,感激不尽。

test_image.tar-
model_output.tar

可以参考OE包:-
RDK X5 算法工具链社区手册:https://developer.d-robotics.cc/api/v1/fileData/x5\_doc-v126cn/index.html-
RDK X5 OpenExplore 产品发布:地瓜算法工具链 发布 - 算法工具链 - 地瓜机器人论坛

RDK Model Zoo:https://github.com/D-Robotics/rdk\_model\_zoo-

在Runtime部署指南中查找GRAY的数据Tensor类型定义,然后编写相关程序。

你好,模型的转化是没有问题的,前处理方式为no process,说明板子上的程序的前处理需要与ONNX保持一致。

另外,gray输入目前Python接口不支持,需要使用C/C++编写Runtime程序。-

目前我这边的处理意见还是这样,如果社区有其他同学有其他发现,欢迎大家留言。

on process就是不做前处理这个是一致的,至于c/c++的runtime程序不知道在哪个交付包里,还有昨天我试了那几个中间onnx模型,其中的original_float_model和optional_float_model输出是正确的,quantized_model和calibrated_model输出是不正确的

昨天试了c接口,输出依旧一不正确,教程里没有提到灰度图怎么处理,只有在模型转换的时候提到把灰度图转成nv12格式只要Y通道即可,我按这个思路设计在c接口上的结果跟在python接口上的推理结果一致,我觉得应该是模型转换的问题,因为得到的xxx_calibrated_model.onnx和xxx_quantized_model.onnx的推理结果都是不正确的,而xxx_original_float_model.onnx和xxx_optimized_float_model.onnx的推理就是正确的结果