求助,自己生成的模型移植到esp32后输出都是错的

danyanpi
Posts: 13
Joined: Thu Mar 23, 2023 3:02 am

求助,自己生成的模型移植到esp32后输出都是错的

Postby danyanpi » Tue Apr 11, 2023 9:39 am

这里自己随便跑路个模型,按照知乎的https://zhuanlan.zhihu.com/p/590495368,一步步操作,生成的Onnx,测了一下输出。在和ESP32S3跑的输出对比了一下,差别非常大。请问能怎么调饿。
制作的过程中也有几点疑问,这里问问:
1. 模型的训练时候的输入必须[h,w,c]吗?我的是[c,h,w]。会有问题吗?
调用calib.export_coefficient_to_cpp要求我的calib_dataset是[c,h,w],不然报错
但板子上model.forward(input);图像我按[c,h,w]传进去又会死机。
2. 量化的时候,calib_dataset这些图片不知道传什么适合饿。我看只转换只需要图片,标签也不用。我试了不同图片转换的指数还都不一样。那我按什么图片合适饿
3. batch_size是必须1吗?我看文档写着“层的输入张量和输出张量均是三维。张量的维度顺序固定,按照[高度,宽度,通道]的顺序排序。“,model.forward(input)的时候每次只能输入一张图片吗?

ESP_Aurora
Posts: 7
Joined: Tue Nov 02, 2021 7:55 am

Re: 求助,自己生成的模型移植到esp32后输出都是错的

Postby ESP_Aurora » Tue Apr 11, 2023 10:21 am

Hi,

差别大的话,可以先检查一下部署的代码,然后可以通过比较板子上的输出结果和python端的结果看具体是哪一层导致的误差变大

1. 模型的训练时候的输入必须[h,w,c]吗?我的是[c,h,w]。会有问题吗? -> 不会,训练的输入顺序不影响部署
调用calib.export_coefficient_to_cpp要求我的calib_dataset是[c,h,w],不然报错
但板子上model.forward(input);图像我按[c,h,w]传进去又会死机。 -> python端的 input 顺序跟你的训练模型保持一致,因为onnx模型是由你的训练模型转过来的,板子端因为库里实现方式要求必须是 hwc 的输入顺序
2. 量化的时候,calib_dataset这些图片不知道传什么适合饿。我看只转换只需要图片,标签也不用。我试了不同图片转换的指数还都不一样。那我按什么图片合适饿 -> 这个就根据量化后的效果来选择,选择比较有代表性的
3. batch_size是必须1吗?我看文档写着“层的输入张量和输出张量均是三维。张量的维度顺序固定,按照[高度,宽度,通道]的顺序排序。“,model.forward(input)的时候每次只能输入一张图片吗? -> 是的,只能输入一张图片

danyanpi
Posts: 13
Joined: Thu Mar 23, 2023 3:02 am

Re: 求助,自己生成的模型移植到esp32后输出都是错的

Postby danyanpi » Wed Apr 12, 2023 1:49 am

3. batch_size是必须1吗?我看文档写着“层的输入张量和输出张量均是三维。张量的维度顺序固定,按照[高度,宽度,通道]的顺序排序。“,model.forward(input)的时候每次只能输入一张图片吗? -> 是的,只能输入一张图片

这里我转Onnx的时候,torch.onnx.export(model, dummy_input, onnx_file_path,opset_version = 9, verbose = True, input_names=['input'], output_names=['output','output1'],
dynamic_axes= {'input': {0: 'batch_size'},
'output' : {0 : 'batch_size'}}
这里的batch_size选择dynamic_axes没问题吧?还是必须固定1

Who is online

Users browsing this forum: Google [Bot] and 9 guests