今天使用C#调用YoloSharp.Gpu,加载onnx模型,然后检测,代码很简单。
// Load the YOLO predictor
predictor ??= new YoloPredictor(@"path to your.onnx");
// Run model
var result = predictor.Detect(@"path to your image");
一运行就爆错ONNXRuntimeError : 1 : FAIL : LoadLibrary failed with error 12。
Nuget改用不是CPU版本的YoloSharp就没问题,这就奇怪了。后来查资料发现有人说是ONNXRuntime、CUDA、CUDNN三者的版本不对应,但是我的版本是对应的,完全符合官方要求啊。
这样不能运行就没有天理了,网上的解决方案可以说是乱七八糟,微软爆出来的错误指导方向就是错的。
YoloSharp.Gpu:6.0.1
ONNXRuntime:1.20.0
CUDA:12.6.3
CUDNN:9.6.0
对应关系参考官方文档:https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html
Microsoft.ML.OnnxRuntime.OnnxRuntimeException:“[ErrorCode:RuntimeException] D:\a\_work\1\s\onnxruntime\core\session\provider_bridge_ort.cc:1539
onnxruntime::ProviderLibrary::Get [ONNXRuntimeError] : 1 : FAIL : LoadLibrary failed with error 126 "" when trying to load
"C:\Users\Vincent\source\repos\WpfApp1\WpfApp1\bin\x64\Debug\net8.0-windows\runtimes\win-x64\native\onnxruntime_providers_cuda.dll"
后来研究发现onnxruntime_providers_cuda.dll缺少依赖,使用Dependencies查找发现,缺少cudnn64_9.dll。这个文件就是CUDNN的安装目录里面的,所以果断把C:\Program Files\NVIDIA\CUDNN\v9.6\bin\12.6\里面所有的文件都复制到exe目录里面,完美解决!!!
话又说回来,微软不应该爆缺少依赖么,真是瞎杰宝爆
标签:调用,OnnxRuntime,C#,CUDNN,Gpu,YoloSharp,onnxruntime From: https://www.cnblogs.com/hupo376787/p/18660538