[加速] Opencv DNN通过 GPU 加速推理过程

本文介绍了如何利用CUDA加速OpenCV的DNN模块进行图像处理,特别是在使用HED算法进行边缘检测时,通过从源码编译安装支持GPU的OpenCV,解决了在大图推理上的速度问题。环境为Ubuntu 16.04,GPU为GTX TitanX,注意到OpenCV4.2.0对CUDA的Compute Capability最低要求为5.3。经过编译配置,最终实现了从原来的6秒降至0.2秒的推理时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

最近在使用 Opencv HED 算法做边缘检测,在一张 1000X1000 大小的图片推理大概需要6秒,所以想通过GPU加速。之前一种通过 PYPI 安装 opencv-python ,这个版本是不支持GPU的,因此需要从源码编译安装。

参考了教程How to use OpenCV’s “dnn” module with NVIDIA GPUs, CUDA, and cuDNN
pyimagesearch 这个网站有很多篇文章介绍

环境是

Ubuntu 18.04
cuda 10.0 
cudnn 7.6.5 
GTX1080Ti
g++7
gcc7
cmake 3.14.1

同时注意Terminal能翻墙,cmake过程中会下载一些东西,网站被墙了。
另外尝试过使用cuda9.0 gcc5/g++5 和 TitanX显卡,都失败了。

安装 Opencv 4.2.0 大致流程如下。

安装必须要的库

Opencv 官方教程列的很详细

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential cmake unzip pkg-config
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install libv4l-dev libxvidcore-dev libx264-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python3-dev
$ sudo apt-get install python3.8-dev # 用于python3.8

查看cuda版本和显卡型号

$ nvcc -V # 可以查看cuda版本

还需要显卡的 Compute Capability, 在 Nvidia官网查看
比如 GTX TitanX对应的型号是 5.2,但Opencv4.2.0 dnn 最低要求是5.3 即使编译安装成功,最后推理的时候也会报错。
最好使用 10 系列显卡。

下载 Opencv 和 Opencv Contrib

直接复制开始给的连接的代码就好

$ cd ~
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip
$ mv opencv-4.2.0 opencv
$ mv opencv_contrib-4.2.0 opencv_contrib

结束后 opencvopencv_contrib 分别包含各自的源码

准备虚拟环境

$ conda create -n py38 python=3.8 numpy # py38 环境名,必须包含numpy
$ conda acitvate py38 # 切换到这个环境下面
$ sudo mv /usr/bin/python2.7 /usr/bin/pythonNO-temp
# 记得用完后改回来
$ sudo mv /usr/bin/pythonNO-temp /usr/bin/python2.7

编译和安装

之前解压了opencv和openc-contrib,先进入copencv文件夹里面

$ cd opencv
$ mkdir build
$ cd build

然后用cmake指令

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \ 
	-D CMAKE_INSTALL_PREFIX=/usr/local \ 
	-D INSTALL
### 配置Python OpenCV DNN模块以实现GPU加速 为了使Python中的OpenCV DNN模块能够利用GPU进行加速,需要确保安装了支持CUDAOpenCV版本并正确配置环境。以下是详细的说明: #### 安装依赖项 在Linux环境中,建议先安装必要的依赖包来支持科学计算以及图像处理功能[^2]: ```bash sudo apt-get update sudo apt-get install python-numpy ``` #### 获取预构建的支持CUDAOpenCV版本 对于Windows用户来说,在Win10上可以通过下载官方提供的预构建源码来进行配置,从而让OpenCV支持GPU加速而不必使用Visual Studio工具链[^1]。 另一种方法是在Ubuntu或其他Linux发行版下通过编译带有CUDA支持的OpenCV源代码完成相同的目标。这通常涉及到设置`cmake`参数指定额外路径指向贡献模块的位置[^3]: ```bash -D OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules \ ``` #### Python环境下启用GPU加速 一旦成功安装了一个具有CUDA支持的OpenCV版本之后,则可以在Python脚本里加载模型时显式指明希望采用GPU设备执行推理过程。下面是一个简单的例子展示如何读取一个神经网络模型文件,并尝试将其迁移到可用的GPU上去运行推断任务: ```python import cv2 as cv net = cv.dnn.readNetFromTensorflow('frozen_inference_graph.pb', 'graph.pbtxt') if cv.cuda.getCudaEnabledDeviceCount() > 0: net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA_FP16) # 或者使用cv.dnn.DNN_TARGET_CUDA else: print("No CUDA support detected.") ``` 这段代码首先检查是否有任何启用了CUDA的设备存在;如果有,则告诉DNN引擎优先考虑使用CUDA后端及目标硬件加速选项。如果没有检测到合适的GPU资源,则会打印一条消息通知开发者当前环境并不具备所需的条件。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值