• 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。换平台调用实在是太坑了!!!!!

  • 相关阅读:
    第5章:指令级并行--硬件方法
    python+django网吧会员管理系统
    Springboot(六):mysql配置及数据库查询 | 超级详细,建议收藏
    网络类型(通信分类)
    我是如何用扣子AI工作流筛选并分析自媒体情报信息的
    C# wpf 实现截屏框实时截屏功能
    Redux模式(reduck)
    Nmap列举远程机器开放的端口
    4k壁纸爬100页 python
    百度算法面试小总结
  • 原文地址:https://blog.csdn.net/qing2019/article/details/127302176