yolov7模型部署——环境搭建(python 导出onnx模型,c# OnnxRunTime-GPU版调用) 踩坑记录

一,导出onnx模块

1.1 运行python .\export.py导出onnx模块

        yolov7提供了简单的点对点预测,不需要再重新写NMS,非常方便,于是当然采用--end2end方法啦,命令如下图:

 运行时发现没装onnx, 那就安装好了

1.2 安装onnx

conda install -c conda-forge onnx

但是!又出现了这个问题

原因是__int__()需要2到7个参数,但给了8个参数。查看代码export.py 159行,确实是8个参数:

修改为义下代码:

 

 问题解决。

2,.NET C# Microsoft.ML.OnnxRuntime.GPU版调用onnx模型

2.1 安装onnxruntime

Nuget c#版onnxruntime安装:VS->工具->NuGet包管理器->管理解决方案的NuGet程序包

公主用的GPU版本,安装好了(记住,这里有个坑,公主用了好几天时间才把这个坑填上T_T)

貌似岁月静好,根据ONNX RUNTIME官网的提示配置了CUDA GPU的选项,然而~~~写了个小demo运行时出现了找不到“OrtGetApiBase”入口点的问题:

 找不到入口点,最直接的就是dll的函数名变了呗,用dllimport解决!然而,用VS自带的dumpbin.exe查看函数的入口点函数名,名称并没有改变:

公主很抓狂,难道是依赖问题?DW查看依赖包,hin好,又是一堆飘红:

网上查了查,这里说明原来是DW不维护了的原因:

看了下,飘红的全是上述几个类型的包,也就是说依赖包也没有问题。继续查:终于有人遇到和我一样的问题了,他是这么解决的: 

 可是,人家估计是个大项目,我只是一个小demo,项目本身就是启动项目了。所以这个方案也pass掉。继续查看代码:引用块中妥妥的引用了

 

 ,程序运行的时候也加载了模块

model list中也都存在了.

 公主真的快把头发薅光了~~~想摔桌子~~~一直到偶然看到这里

真的想哭啊~~~~所以,查对文章很重要!!!为什么官网不介绍(至少我没找到)?为什么到处都说cpu版只能用在cpu上,gpu版本的既能用cpu也能用gpu? 坑爹啊~~~!!!火速装好,onnxruntime。果然入口点的问题解决了!

然而,又出现了新问题:

以为是版本问题,按照官网介绍重新卸载安装CUDA 11.4.4版本,一定要是11.4.4才能满足Notes提到的版本。ONNXRuntime也改成1.12版。

然并卵~~~ 

查看了下,visual studio模板中并没有CUDA的模板,难道因为cuda并没有装载到visual studio上?难道不是自动装载的吗?更新了下visual studio的配置:

模板出现了:

然鹅,问题并没有解决。公主实在没办法了,网上资料甚少。直接在github上发邮件给作者,member回复的非常及时,一下子就指出了痛点,说我还是用的CPU 包:

赶紧去bin/debug下查看dll包,确实是CPU版的。得!!!问题又回去了,安装上就用的是CPU包,不安装就有Entry point 问题~~~~~~

公主抱着试试看的态度,按照这个list重新升级安装了依赖包

 然后删除了CPU版的onnxruntime。果然通过了,喜极而泣!!!上一张缺陷检测demo效果图:

PS:公主训练照片的尺寸是512*512, 实际预测时用的照片尺寸是1024*1024,但准确率也还是8错哒!!!!!

T_T 难受,想哭~~~~~~这个破玩意整了四天,吃饭睡觉都在想着要怎么解决。公主都想说实在不行用python把项目重构一次直接用python算了~~~~还好还好,给自己点个赞顺便去吃顿火锅犒劳一下自己。还是想哭T_T

代码有时间整理一篇博客出来,公主根据yolov7官方python代码一点点整理翻译成c#的,也是耗费了巨大的精力T_T。换平台调用实在是太坑了!!!!!

猜你喜欢

转载自blog.csdn.net/qing2019/article/details/127302176