【发布时间】: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)。