首页 > 其他分享 >onnx 部署的bug(1)

onnx 部署的bug(1)

时间:2023-11-13 17:47:37浏览次数:34  
标签:03 26 16 部署 onnx Reshape reshape bug

onnx

tensorFlow 转onnx的文件做部署时,onnx读取遇到的问题:

image-20220926160335798

主要报错信息为:

[09/26/2022-16:03:16] [E] [TRT] ModelImporter.cpp:720: While parsing node number 10 [Reshape -> "reshape"]:
[09/26/2022-16:03:16] [E] [TRT] ModelImporter.cpp:721: --- Begin node ---
[09/26/2022-16:03:16] [E] [TRT] ModelImporter.cpp:722: input: "biased_tensor_name"
input: "shape_tensor"
output: "reshape"
name: "reshape"
op_type: "Reshape"
doc_string: ""
domain: ""

[09/26/2022-16:03:16] [E] [TRT] ModelImporter.cpp:723: --- End node ---
[09/26/2022-16:03:16] [E] [TRT] ModelImporter.cpp:726: ERROR: ModelImporter.cpp:162 In function parseGraph:
[6] Invalid Node - reshape
Attribute not found: allowzero
TensorRT load onnx model already!
[09/26/2022-16:03:16] [E] [TRT] 4: [network.cpp::nvinfer1::Network::validate::2411] Error Code 4: Internal Error (Network must have at least one output)
[09/26/2022-16:03:16] [E] [TRT] 2: [builder.cpp::nvinfer1::builder::Builder::buildSerializedNetwork::417] Error Code 2: Internal Error (Assertion enginePtr != nullptr failed.)
[09/26/2022-16:03:16] [I] [TRT] [MemUsageChange] Init CUDA: CPU +0, GPU +0, now: CPU 39230, GPU 4403 (MiB)

可以看出主要模型的[Reshape -> "reshape"]:这一部分出错,

通过网站https://netron.app/查看模型

best_modelSubmit.onnx

上网查询发现很多也都是Reshape出错,也有的建议尽量别使用reshape。

Pytorch转TensorRT中的坑_永恒_一瞬的博客-CSDN博客。[ONNXRuntimeError] :6 : RUNTIME_EXCEPTION : Non-zero status code returned while running Reshape node | 码农家园 (codenong.com)

此处先留一个坑(后续调查一下为啥reshape特别容易出错,但是reshape很常用,按理说不应该存在这种问题)


但是因为我在项目中是做最后部分的,时间比较紧,要求上游修改模型架构,重新训练,也不太来得及。人家也不愿意做。

我一番搜索,发现了onnx文件依然可以做模型修改。那是不是可以先修改onnx文件,将Reshape去掉在做模型的读取部署呢。

答案当然是可行的。要不然也不会有这篇记录。

具体思路为,将onnx的Reshape-->reshape替换或者删掉,因为这一部分只做了数组的尺寸的变化,对数据结果并不会产生任何影响。

工具就是onnx-modifier: A tool to modify onnx models in a visualization fashion, based on Netron and flask

onnx_modifier_logo image-20220926162406749

onnx-modifier功能还是很丰富的,刚好可以满足我的要求,在这里对作者表示敬意和感谢。

修改后的模型如下:(我删掉了Reshape,还给最后的输出层改了一个名字output,原来的reshape容易引起误解)

modified_best_modelSubmit.onnx

经测试完全成功,onnx的模型部署一切正常,输出与源文件一致。(打完收工,完结撒花!)

标签:03,26,16,部署,onnx,Reshape,reshape,bug
From: https://www.cnblogs.com/riverstar/p/17829707.html

相关文章

  • 解决Azure function部署问题
    最近在AzureChina遇到了一个问题,大概现象是这样,我们用的runtime是python的,创建好function之后,在尝试往function上部署代码时遇到一些奇怪的现象,试了各种方法将代码部署到function上,都会遇到一些问题1.vscodeextension-报错Encounteredanerror7:15:31AMaz-mim-xxxxxx:Synci......
  • 无涯教程-Dart - 调试(Debug)
    开发人员时不时地在编码时犯错误,程序中的错误称为错误,查找和修复错误的过程称为调试,并且是开发过程中的正常部分,本节介绍可帮助您完成调试任务的工具和技术。添加断点考虑以下代码片段。(TestString.dart)voidmain(){inta=10,b=20,c=5;c=c*c*c;p......
  • 人大金仓数据库的快速安装部署
    人大金仓数据库的快速安装部署说明人大金仓数据库是1999年以王珊教授为代表,中国人民大学一批最早在国内开展数据库教学、科研、开发的专家,创立了我国第一家数据库公司——人大金仓。王珊教授师从萨师煊教授.是中国人民大学的博士生导师人大金仓的创立时间实际上是比武汉......
  • Debug
    error:error:Couldn'tapplyexpressionsideeffects:Couldn'tdematerializearesultvariable:couldn'treaditsmemoryreason:variablegotoptimizedouthowtosolveituseoption-O0toavoidoptimizingReference......
  • 关于 Gdiplus api 调用的bug解决以及注意事项
    1.加入空间命,以识别这是Gdiplus的类与函数2.调用前需调用   Gdiplus::GdiplusStartupInputgsi;ULONG_PTRpToken;Gdiplus::Statuss=Gdiplus::GdiplusStartup(&pToken,&gsi,NULL);用完Gdiplus函数后调用Gdiplus::GdiplusShutdown(pToken);如果不调用,各个Gdiplus的类将......
  • 最新版本ELFK-8.10部署实战
    一背景在现代软件系统中,日志是非常重要的组成部分。它们记录了系统的运行状态、错误消息、用户活动等信息。然而,当系统规模变大并且涉及多个组件时,日志管理变得非常复杂。传统的日志管理方法可能会面临一些挑战,包括集中化存储、检索和分析日志数据的困难。ELK是一套流行的开源工具......
  • idea中的 debug 中小功能按钮都代表的意思
    1.stepover步过----->一行一行的往下走,如果这一行中有方法那么不会进入该方法,直接一行一行往下走,除非你在该方法中打入断点2.stepinto步入--->可以进入方法内部,但是只能进入自己写的方法内部,而不会进入方法的类库中3.Forcestepinto强制步入---->可以步入任何方法,包括......
  • 20231112 K8S部署MetalLB以及测试应用
    环境配置3节点的K8S1+2配置[root@rocky9-1dashboard]#kubectlgetnode-owideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIMErocky9-1R......
  • docker 部署 rabbitmq集群
    rabbitmq集群:pull:dockerpullrabbitmq普通模式(默认):what:集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消......
  • 若依分离版打包部署后找不到模块(Error: Cannot find module ‘@/views/index‘)
    将store/moudules/permission.js这一块改成下面这样,注释的可以删exportconstloadView=(view)=>{return(resolve)=>require([`@/views/${view}`],resolve)//if(process.env.NODE_ENV==='development'){////}else{////使用import实现生产环境的......