Ubuntu Python3 OpenCV使用CUDA加速

前言:

我是在ANACONDA下建立PYTHON3.6的環境的,所以會依據ANACONDA下的路徑去建立OPENCV的CUDA加速

環境如下
Ubuntu 18.04
GTX 2080TI
CUDA 10.0
anaconda with python 3.6.10

ANACONDA的環境建立方式可以參照我之前寫的方法去建立。

好,那以下就開始囉

1. 前置性更新

進入自己建立好的anaconda 環境
source activate tensorflow-gpu (我的環境名稱叫tensorflow-gpu)

先解安裝自己目前有的opencv-python 與 opencv-contrib-python (之前都用3.4.2.17)
pip uninstall opencv-python opencv-contrib-python
conda uninstall opencv-python opencv-contrib-python

以下是安裝libtiff跟ffmpeg,並且更新整個anaconda的環境
conda install -c anaconda libtiff

conda update --all (這行指令執行完後我的python3.6.9 update to 3.6.10)

conda install -c conda-forge ffmpeg

2. 下載安裝OpenCV並編譯

建立一個資料夾叫opencv_cuda
mkdir opencv_cuda
cd opencv_cuda
下載opencv檔案
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout -b 3.4.3 (這行我也不太懂在做啥)

cd ..
下載opencv_contrib檔案
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout -b 3.4.3

cd ../opencv
建立一個資料夾叫build
mkdir build
進入build這個資料夾
cd build

輸入以下指令:
(PS:如果你不是在anaconda中使用,CMAKE_INSTALL_PREFIX參數請設定成/usr/local)
cmake -D CMAKE_BUILD_TYPE=RELEASE -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D BUILD_EXAMPLES=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D WITH_FFMPEG=ON -D WITH_LIBV4L=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D WITH_ZLIB=ON -D BUILD_PNG=ON -D BUILD_JPEG=ON -D BUILD_TIFF=ON -D WITH_CUDA=ON -D WITH_OPENCL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") -DPYTHON3_EXECUTABLE=$(which python) -DPYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..

cmake結束後會跑出一段字,其中應該會有類似以下這段文字(我的CUDA是10.0版所以輸出是10.0,依版本的不同輸出的數字也會有所不同)

--   NVIDIA CUDA:                   YES (ver 10.0, CUFFT CUBLAS NVCUVID)

短暫等待完後輸入:
make -j8 (這裡用八個核心去跑,可依自己的電腦核心數輸入,這邊我等大概半小時至一小時才跑完)

安裝OPENCV
sudo make install

以上全部完成後,在自己的ANACONDA虛擬環境下不管是輸入pip list,還是輸入conda list清單裡都不會顯示有安裝opencv或opencv_contrib

但在python3.6裡導入import cv2是可以成功的喔

3. 驗證有無導入cuda加速
>>> import cv2
>>> print(cv2.getBuildInformation())
...
...
NVIDIA CUDA:                   YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
NVIDIA GPU arch:             30 35 37 50 52 60 61 70 75
...


4. 如何加速
在python程式碼裡使用YOLO V3時 記得在自己的net設置
cv2.dnn.DNN_BACKEND_CUDA

cv2.dnn.DNN_TARGET_CUDA
如下
# yolo v3的配置及weights文件
modelConfiguration = "yolov3-voc.cfg"
modelWeights = "voc.weights"

# opencv讀取外部模型
net = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

5. 如何移除opencv
輸入
sudo make uninstall
6. 參考 reference

主要參考
https://xugaoxiang.com/2019/12/17/opencv-cuda/

https://www.pyimagesearch.com/2020/02/03/how-to-use-opencvs-dnn-module-with-nvidia-gpus-cuda-and-cudnn/

http://leadtosilverlining.blogspot.com/2018/09/build-opencv-341-with-cuda-90-support.html


留言

熱門文章