tensorflow2.4导出模型转化为onnx模型后,通过tensorrt转化engine模型报错处理

tensorflow2.4训练保存得到.pb文件夹含有两个文件及一个脚本,通过以下语句得到.onnx模型

python -m tf2onnx.convert –saved-model **** –output  ***.onnx  –opset ***     //opset对应所保存模型的版本,很重要,直接决定后面.onnx模型转化.engine

然后通过以下命令行,进行模型简化,否则可能报错:

Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32

Python  -m  onnxsim  ***.onnx    ***_sim.onnx

运行时如果报错:RuntimeError: The shape of input “input_1” has dynamic size “[0, 0, 0, 3]”,

说明你的模型需要指定可变维度输入

python -m onnxsim **.onnx    **_sim.onnx –dynamic-input-shape –input-shape 1,416,416,3

其中416,416是自己模型训练时所要求的图片大小,

然后,就是困扰我三四天的转化.engine报错问题

我模型训练环境为  tensorflow2.4.0 

                              cuda    11.0 

                            cudnn     8.0.5.39

                            python    3.9

首先注意的是TensorRT安装是在base环境下,不用切换到tensorflow。相继测试安装了TensorRT-7.2.1.6,测试正常,–opset10下的onnx模型转化时报错:

报错:Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32

明明自己对模型已经简化还是报该错误,造成加载失败。

之后将–opset=9简化的.onnx模型进行.engine转化时

没有再报Your ONNX model has been generated with INT64 weights,

而提示以下内容,导致模型加载失败

ERROR: builtin_op_importers.cpp:3569 In function importUpsample:

[8] Assertion failed: scales_input.is_weights()

[04/23/2023-17:20:34] [E] Failed to parse onnx file

该bug查询博客解决三天之久没有得到解决,之后开始了更换TensorRT版本尝试,包括TensorRT-7.2.2.3、TensorRT-7.2.3.4、TensorRT-8.0.1.6,均报同样为错误,导致模型加载失败。

之后在TensorRT-8.0.1.6版本时,改为–opset=10,报错不再是:

ERROR: builtin_op_importers.cpp:3569 In function importUpsample:

报错变成了

ModelImporter.cpp:726:ERROR: builtin_op_importers.cpp:3422 In function importResize:

[8] Assertion failed: scales.is_weights() && “Resize scales must be an initializer!”

再次更换TensorRT-8.2.1.8,测试正常,输入版本9模型转化时报错同上

参考网址

https://blog.csdn.net/baidu_33738335/article/details/111319349?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168247454816800222868666%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168247454816800222868666&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-111319349-null-null.142^v86^insert_down38v5,239^v2^insert_chatgpt&utm_term=Assertion%20failed%3A%20%28scales_input.is_weights%28%29%29%20%26%26%20The%20scales%20input%20must%20be%20an%20initializer.&spm=1018.2226.3001.4187

提示到出现该报错的原因是使用比例因子时,生成的图形动态计算输出形状,同时在该博客参考的网址内提到onnx模型版本为—opset==11转化的效果,更换保存版本为—opset==11,从头在开始转化opset==11的onnx_sim模型,

trtexec –onnx=**_sim.onnx –saveEngine=***_sim.engine –workspace=1024 –minShapes=input_1:1x***x***x3 –optShapes=input_1:2x***x***x3 –maxShapes=input_1:4x***x****x3 –fp16

注意input_1是我的训练模型名称,要更换为自己的,转化过程中虽然仍报错含有INT64 ,但转化成功

         从.pb模型转onnx模型,再到engine模型转化。含泪奋斗一个月了,多少次想放弃,但不甘心,总感觉自己太笨了。学这些以后还不知道能不能用上,自己也不是这个专业的,但想想多学点也算充实下自己吧,黎明前很痛苦,每次debug都是能力的提升,奋斗吧,哥们

版权声明:本文为博主作者:戈壁雄鹰1986原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/yyc1820252161/article/details/130384309

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年12月29日
下一篇 2023年12月29日

相关推荐