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)
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
我是在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結束後會跑出一段字,其中應該會有類似以下這段文字(我的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
留言
張貼留言