小地瓜3号
2025 年2 月 28 日 08:39
1
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
你好,模型的转化是没有问题的,前处理方式为no process,说明板子上的程序的前处理需要与ONNX保持一致。
另外,gray输入目前Python接口不支持,需要使用C/C++编写Runtime程序。-
目前我这边的处理意见还是这样,如果社区有其他同学有其他发现,欢迎大家留言。
小地瓜3号
2025 年3 月 3 日 07:14
4
on process就是不做前处理这个是一致的,至于c/c++的runtime程序不知道在哪个交付包里,还有昨天我试了那几个中间onnx模型,其中的original_float_model和optional_float_model输出是正确的,quantized_model和calibrated_model输出是不正确的
小地瓜3号
2025 年3 月 4 日 06:14
5
昨天试了c接口,输出依旧一不正确,教程里没有提到灰度图怎么处理,只有在模型转换的时候提到把灰度图转成nv12格式只要Y通道即可,我按这个思路设计在c接口上的结果跟在python接口上的推理结果一致,我觉得应该是模型转换的问题,因为得到的xxx_calibrated_model.onnx和xxx_quantized_model.onnx的推理结果都是不正确的,而xxx_original_float_model.onnx和xxx_optimized_float_model.onnx的推理就是正确的结果