warning: setUpNet DNN module was not built with CUDA backend; switching to CPU错误解决

部署运行你感兴趣的模型镜像

问题描述

利用opencv-python的dnn模块调用yolo3模型进行目标检测的时候,根据网上的教程,加入GPU加速,也就是加入如下的两行代码:

 net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
 net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);

但是在运行之后,出现了这样的提示:

warning: setUpNet DNN module was not built with CUDA backend; switching to CPU

原因分析:

这说明GPU没被用上,原因是OPENCV在安装的时候,没有安装支持CUDA的版本,所以需要重新编译安装OPENCV。


解决方案:

安装OPENCV的教程可以参考这一个:https://blog.youkuaiyun.com/qq_37975595/article/details/109179388链接。注意,选择opencv4.4.0以上的版本!!我用的是4.4.0。本来我安装的是4.3.0,解决了一天的bug也没安装上!!!最后换了4.4.0,一下就装上了!

注意注意,cmake 这一步就是编译选项,我当时采用的是这个:

 cmake -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules .. \
    -DWITH_CUDA=1 \
    -DCUDA_ARCH_BIN=7.5 \
    -DENABLE_FAST_MATH=1 \
    -DCUDA_FAST_MATH=1 \
    -DWITH_CUBLAS=1 \
    -DOPENCV_GENERATE_PKGCONFIG=1 \
    ..

其中-DWITH_CUDA=1这句话就是选择了有CUDA版本的opencv。

-DCUDA_ARCH_BIN=7.5这个一定一定要选择跟你电脑显卡相匹配的数字,不然GPU还是不能用,还得重新编译安装。如果不匹配,会出现这样的报错:

 error: (-216:No CUDA support) OpenCV was not built to work with the selected device. Please check CUDA_ARCH_PTX or CUDA_ARCH_BIN in your build configuration. in function 'initCUDABackend'

此问题的解决参考了该博主的博客:https://blog.youkuaiyun.com/qq_34717531/article/details/108735629

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 首先,用户的问题是:“我想查找解决OpenCV DNN模块未使用CUDA后端构建,切换到CPU问题的方案”。用户引用了几个站内引用,这些引用描述了警告信息:“warning: setUpNet DNN module was not built with CUDA backend; switching to CPU”,并提到了错误信息和一些解决方案尝试。 关键点: - 警告表明OpenCV编译时没有启用CUDA后端,导致DNN模块回退到CPU。 - 引用[4]提供了重新编译OpenCV的CMake命令,启用了CUDA相关选项。 - 引用[5]提到即使设置了偏好后端和目标是CUDA,但性能仍然慢,暗示编译问题。 用户的核心需求是解决这个问题,让OpenCV DNN使用CUDA加速。 我的回答必须: - 遵循系统级指令:使用$...$和$$...$$格式、LaTeX语法正确、中文回答、生成相关问题。 - 结构清晰,逐步解决问题。 - 参考提供的引用,自然地添加引用标识。 回答结构: 1. **问题分析**:解释警告的原因,基于引用。 2. **解决方案**:提供步骤来解决,主要是重新编译OpenCV启用CUDA。 3. **验证步骤**:如何确认CUDA是否启用。 4. **注意事项**:可能的陷阱或额外建议。 5. **相关问题**:生成相关问题。 从引用中提取信息: - 原因:OpenCV编译时未启用CUDA后端。[^1][^2][^3] - 解决方案:重新编译OpenCV,启用CUDA相关CMake选项。[^4] - 常见问题:即使设置了偏好后端,但编译不支持CUDA会导致回退。[^5] 详细步骤: - 确保系统有CUDA工具包和cuDNN安装。 - 使用CMake重新编译OpenCV,启用选项如`WITH_CUDA=ON`, `OPENCV_DNN_CUDA=ON`等。 - 编译后安装并验证。 生成相关问题: - 基于主题,生成3-5个相关问题。 完整回答大纲: 1. **引言**:简述问题。 2. **原因分析**:为什么会出现警告。 3. **解决方法**:步骤重新编译OpenCV。 4. **验证方法**:如何检查CUDA是否启用。 5. **相关问题**:列出生成的问题。 使用中文回答。 </think> ### 解决OpenCV DNN模块未使用CUDA后端构建,切换到CPU问题的方案 当您遇到OpenCV DNN模块提示“warning: setUpNet DNN module was not built with CUDA backend; switching to CPU”时,这表示OpenCV在编译时未启用CUDA支持,导致DNN模块无法使用GPU加速,只能回退到CPU计算[^1][^2][^3]。这会严重影响性能,例如在处理图像分割或深度学习模型推断时,速度显著降低(如引用[5]所述,512x512图像的分割网络需1秒以上,即使设置了偏好后端)[^5]。以下是逐步解决方案,基于常见原因和修复方法。 #### 原因分析 - **核心问题**:OpenCV编译时未启用CUDA后端。这意味着DNN模块缺少必要的CUDA支持,无法使用GPU资源[^1][^2][^3]。 - **常见诱因**: - OpenCV预编译包(如pip安装的opencv-python)默认不包含CUDA支持。 - CMake编译配置中,未设置关键选项如`WITH_CUDA=ON`或`OPENCV_DNN_CUDA=ON`[^4]。 - 系统环境问题:CUDA工具包或cuDNN未正确安装,或版本不兼容。 #### 解决方法:重新编译OpenCV启用CUDA解决此问题,您需要重新编译OpenCV源码,并启用CUDA相关选项。以下是详细步骤(假设您已安装基础编译工具如CMake、gcc): 1. **准备环境**: - 确保CUDA和cuDNN已安装:CUDA版本应与GPU兼容(如NVIDIA RTX显卡需CUDA 11+),cuDNN版本匹配CUDA。 - 验证CUDA安装:运行`nvcc --version`。 - 下载cuDNN:从[NVIDIA官网](https://developer.nvidia.com/cudnn)获取。 - 安装依赖: ```bash sudo apt-get update sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev ``` 2. **克隆OpenCV源码**: ```bash git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git # 可选,用于额外模块 cd opencv mkdir build cd build ``` 3. **配置CMake选项**: - 使用引用[4]提供的CMake命令作为基准,但需根据您的系统调整(例如CUDA版本和路径)[^4]。 ```bash cmake \ -D WITH_CUDA=ON \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D CUDA_ARCH_BIN="7.5" \ # 替换为您的GPU算力版本,如2080Ti为7.5[^5] -D CUDA_FAST_MATH=ON \ -D ENABLE_FAST_MATH=ON \ -D CUDNN_INCLUDE_DIR=/usr/include \ # 确认路径匹配您的cuDNN安装 -D CUDNN_VERSION=8.0 \ # 修改为您的cuDNN版本 -D WITH_V4L=ON \ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \ # 如果使用额外模块 -D BUILD_EXAMPLES=OFF \ -D BUILD_TESTS=OFF \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ .. ``` - **关键选项说明**: - `WITH_CUDA=ON`:启用CUDA支持。 - `OPENCV_DNN_CUDA=ON`:确保DNN模块使用CUDA后端。 - `CUDA_ARCH_BIN`:指定GPU架构算力(查询方法:`nvidia-smi --query-gpu=compute_cap --format=csv`)。 4. **编译和安装**: ```bash make -j$(nproc) # 并行编译,使用所有CPU核心 sudo make install sudo ldconfig # 更新库链接 ``` 5. **验证CUDA是否启用**: - 创建一个简单的Python测试脚本: ```python import cv2 print(cv2.__version__) print("CUDA enabled:", cv2.cuda.getCudaEnabledDeviceCount() > 0) print("DNN backend:", cv2.dnn.DNN_BACKEND_CUDA) ``` 运行后,如果输出类似: ``` 4.9.0 CUDA enabled: True DNN backend: 5 # 表示DNN_BACKEND_CUDA ``` 则CUDA后端已启用[^4]。 #### 注意事项 - **性能优化**:编译后,在代码中明确设置偏好后端: ```cpp net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA) ``` 但需注意,如果编译未启用CUDA,这些设置无效(如引用[5]所示)[^5]。 - **常见错误**: - CMake失败:检查CUDA路径是否正确(`CUDA_TOOLKIT_ROOT_DIR`),或尝试降低CUDA版本。 - 编译后警告仍出现:确保Python环境使用的是新编译的OpenCV(运行`python -c "import cv2; print(cv2.getBuildInformation())"`查看编译选项)。 - **替代方案**:如果编译复杂,考虑使用预编译的OpenCV-CUDA版本(如Docker镜像`nvcr.io/nvidia/opencv`)。 通过以上步骤,您应该能成功启用CUDA后端,提升DNN模型的运行速度。如果问题持续,请提供更多系统细节(如GPU型号、OpenCV版本)[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值