1、现象描述
dnn::Net mNet;
vector<string> names = mNet.getUnconnectedOutLayersNames();
vector<cv::Mat> outMatVec;
try
{
mNet.forward(outMatVec, names);
}
catch (cv::Exception &e)
{
std::cout << "throw exception: " << e.what() << std::endl;
return -1;
}
使用ai推断,结果出现异常:
OpenCV(4.8.0) Error: Gpu API call (cuDNN did not return a suitable algorithm for convolution.) in cv::dnn::cuda4dnn::csl::cudnn::ConvolutionAlgorithm<struct __half>::ConvolutionAlgorithm, file D:\opencv_cmake\opencv-4.8.0\modules\dnn\src\cuda4dnn\csl\cudnn/convolution.hpp, line 303
doDetect fail: OpenCV(4.8.0) D:\opencv_cmake\opencv-4.8.0\modules\dnn\src\cuda4dnn\csl\cudnn/convolution.hpp:303: error: (-217:Gpu API call) cuDNN did not return a suitable algorithm for convolution. in function 'cv::dnn::cuda4dnn::csl::cudnn::ConvolutionAlgorithm<struct __half>::ConvolutionAlgorithm'
2、原因分析
在windows任务管理器可以查看,发现是专用GPU内存占满了。即显卡的内存耗尽了。
3、解决办法
减少线程数目,减少ai并行调用函数forward的频次。