【问题标题】:SEHException in CUDA with EmguCV带有 EmguCV 的 CUDA 中的 SEHException
【发布时间】:2020-10-29 01:55:33
【问题描述】:

我尝试在 EmguCV(OpenCV 的包装器)中使用 CUDA 构建项目。我安装了 CUDA 版本 10.0,NuGet 包 Emgu.CV.runtime.windows 版本 4.3.0.3890,Emgu.CV.runtime.windows.cuda 版本 4.3.0.3890。当我使用命令CudaInvoke.HasCuda 进行测试时,这是真的。当我这样做时,一切正常:

Net net = DnnInvoke.ReadNetFromTensorflow(_modelFile, _configFile);
net.SetInput(DnnInvoke.BlobFromImage(image.Mat, 1, new System.Drawing.Size(300, 300), default(MCvScalar), false, false));
Mat mat = net.Forward();

但是当我添加 CUDA 背景和目标时:

Net net = DnnInvoke.ReadNetFromTensorflow(_modelFile, _configFile);
net.SetPreferableBackend(Emgu.CV.Dnn.Backend.Cuda);
net.SetPreferableTarget(Emgu.CV.Dnn.Target.Cuda);                
net.SetInput(DnnInvoke.BlobFromImage(image.Mat, 1, new System.Drawing.Size(300, 300), default(MCvScalar), false, false));                
Mat mat = net.Forward();

它不起作用。它因“System.Runtime.InteropServices.SEHException”而失败。

字符串Mat mat = net.Forward();中出现异常

我的 GPU 是 NVIDIA GeForce 940MX (Maxwell 1.0)。

有人可以帮忙解决这个问题吗?

【问题讨论】:

  • 由于您同时安装了 Emgu.CV.runtime.windows 和 Emgu.CV.runtime.windows.cuda,因此可能存在 Visual Studio 在两个不同的地方寻找运行 Emgucv 的问题。你试过卸载windows包并保留cuda包吗?
  • 是的,我做到了,但没有任何效果,现在我打开了 Issue github.com/emgucv/emgucv/issues/343 并了解到问题是我使用了 OpenCV 人脸检测器,但它是量化模型。这就是为什么我尝试了其他模型(res10_300x300_ssd_iter_140000_fp16.caffemodel)但它也不起作用:(也许你知道我可以将哪些模型与 Cuda 一起用于人脸检测,其精度不低于单次检测器(openCV 人脸检测器)模型?
  • 我知道 dlib 的 MMOD 非常适合在 GPU 上处理,但 MMOD 对我来说精度不太高(比如 Single-Shot Detector)。

标签: c# .net opencv emgucv


【解决方案1】:

现在我找到了解决方案。 首先,您不能将量化模型 (UINT8) 与 CUDA 一起使用。您需要为此检测器使用Caffe Model。您必须为您的 GPU 选择必要的 CUDA 和 cuDNN。之后,您可以再次遇到此问题。但它来自你的硬件。很长一段时间我都无法理解我到底怎么了。但是我的代码可以在其他机器上成功运行。所以我认为问题出在我的硬件上。如果您遇到同样的问题,请随时与我联系。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2011-11-16
    • 2017-06-04
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2019-04-25
    相关资源
    最近更新 更多