onnx转rknn模型出错ValidationError Field 'shape' of type is required but missing

在RK3588开发板上部署rknn模型参考的链接https://blog.csdn.net/shajiayu1/article/details/132011855?utm_source=miniapp_weixin

在转换 python rockchip/rknpu2_tools/export.py --config_path tools/rknpu2/config/ppocrv3_cls.yaml --target_platform rk3588 失败

具体错误如下:
E load_onnx: Catch exception when loading onnx model: /home/atw/rknn/FastDeploy-develop/examples/vision/ocr/PP-OCR/ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx!
E load_onnx: Traceback (most recent call last):
E load_onnx: File "rknn/api/rknn_base.py", line 1382, in rknn.api.rknn_base.RKNNBase.load_onnx
E load_onnx: File "rknn/api/rknn_base.py", line 658, in rknn.api.rknn_base.RKNNBase._create_ir_and_inputs_meta
E load_onnx: File "rknn/api/ir_graph.py", line 58, in rknn.api.ir_graph.IRGraph.init
E load_onnx: File "rknn/api/ir_graph.py", line 503, in rknn.api.ir_graph.IRGraph.rebuild
E load_onnx: File "/home/atw/rknn/venv/lib/python3.8/site-packages/onnx/checker.py", line 106, in check_model
E load_onnx: C.check_model(protobuf_string)
E load_onnx: onnx.onnx_cpp2py_export.checker.ValidationError: Field 'shape' of type is required but missing.

整体模型转换的步骤如下:
pdmodel转onnx命令:
paddle2onnx --model_dir ch_ppocr_mobile_v2.0_cls_infer --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx --opset_version 12 --enable_dev_version True

固定模型的输入shape命令
python -m paddle2onnx.optimize --input_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx --output_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx --input_shape_dict "{'x':[1,3,48,192]}"

onnx转换成RKNN模型
python rockchip/rknpu2_tools/export.py --config_path tools/rknpu2/config/ppocrv3_cls.yaml --target_platform rk3588

相同的步骤转换飞桨的ch_PP-OCRv3_det_infer和ch_PP-OCRv3_rec_infer这两个模型是没有问题的
请各位不吝赐教

【以下回答由 GPT 生成】

问题原因:错误信息中指出了缺少了必要的字段shape,这是导致转换过程中出错的原因。

解决方案: 在这种情况下,可以尝试一下几种解决方案:

  1. 检查模型的输入数据的形状是否正确。
  2. 确保提供的输入形状与模型预期的形状匹配。可以通过查看模型的文档或源代码来确定模型需要的输入形状。
  3. 检查之前步骤中指定的输入形状是否正确。例如在第2步中使用了--input_shape_dict参数来指定输入的形状。
  4. 确保输入数据的形状与模型所需的形状相匹配。

  5. 检查模型是否经过正确的转换。可能是转换步骤中出现了问题。

  6. 确保在将paddle模型转换为onnx模型时没有出错。可以尝试重新运行转换命令并检查是否有任何错误提示。
  7. 在进行onnx到RKNN的转换时,确保使用了正确的工具和正确的参数。检查命令中的文件路径、配置文件和目标平台等是否都正确设置。

  8. 更新相关库或工具。

  9. 检查使用的PaddlePaddle、ONNX、RKNN等库和工具是否是最新版本。较新的版本通常修复了一些已知的问题和错误。

如果上述解决方案都不能解决问题,可能需要进一步调查该错误的具体原因,可能需要查看代码、调试或检查模型文件的结构来找到问题所在。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^