Opencv DNN通过 GPU 加速推理过程
简介
最近在使用 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
大致流程如下。
安装必须要的库
$ 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
结束后 opencv
和 opencv_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