OpenCV DNN模塊可加載深度學習模型用於目標檢測等任務,OpenCV4.2.0以後支持模型推理使用CUDA加速,可是須要手動將CUDA模塊編譯進OpenCV. 本文記錄了編譯的所有過程,最終可用於c++/python下的opencv_dnn模塊加速。
python
step1 運行環境和前期準備
一、Windows 10 系統
二、Visual Studio 2017 專業版(先安裝)
三、CUDA 10.一、cuDNN 7.6.5(後安裝)
cuda下載地址:
https://developer.nvidia.com/cuda-10.1-download-archive-base
cudnn下載地址(須要註冊登陸):
https://developer.nvidia.com/cudnn
將解壓後的cuDNN壓縮包中的bin、include、lib文件夾複製到CUDA安裝路徑下:
c++
四、OpenCV 4.2.0、OpenCV Contrib 4.2.0
contrib下載地址:
https://github.com/opencv/opencv_contrib/releases
五、opencv-python 4.2系列,opencv-contrib-python 4.2系列
六、Anaconda 5.3.1 (python 3.7)
七、Cmake 3.13
https://cmake.org/download/
git
step2 編譯OpenCV DNN模塊(WITH CUDA)
一、打開cmake,設置OpenCV源碼目錄、編譯後輸出目錄、第一次點擊configure,設置編譯平臺:
二、開始第一次configure,中間會下載一些緩存文件,若是下載失敗,能夠至build目錄下CMakeDownloadLog.txt文件中的連接自行下載後放入OpenCV源碼目錄下的.cache文件夾中,也可至此直接下載後放入:https://download.csdn.net/download/stjuliet/12688717
github
三、勾選BUILD_opencv_world、WITH_CUDA、OPENCV_DNN_CUDA、設置OPENCV_EXTRA_MODULES_PATH,再次點擊configure:
緩存
四、configure以後會報錯,找到CUDA_ARCH_BIN,根據https://developer.nvidia.com/cuda-gpus此網站找到本身顯卡的算力填入(個人顯卡是1080ti,算力爲6.1),而且勾選CUDA_FAST_MATH,將OpenCV_GENERATE_SETUPVARS的勾去掉,再次點擊configure:
五、Configure done後,須要確認如下幾個信息:
(1)OpenCV中必須包含cuda、python3
(2)必需要檢測到正確版本的CUDA和cuDNN
六、步驟5的條件都知足後,能夠點擊Generate,generating done以後,點擊Open Project,設置編譯平臺(Release/Debug都可)、右鍵ALL_BUILD-生成,生成時間較長,須要1.5小時左右:
七、通過一段時間的等待,共生成成功122個:
八、生成成功後,右鍵INSTALL-僅用於項目-僅生成INSTALL,INSTALL生成成功後,會在build目錄下看到一個install文件夾,結構和OpenCV很相似,可在此直接下載:https://download.csdn.net/download/stjuliet/12688720
學習
至此,將CUDA編譯至OpenCV DNN模塊已所有成功,接下去分別以c++和python平臺下的opencv dnn進行測試。
測試
step 3 測試
程序均參考:https://blog.csdn.net/qq_27158179/article/details/81915740,須要將net類進行兩處修改:網站
c++: net.setPreferableBackend(DNN_BACKEND_CUDA); net.setPreferableTarget(DNN_TARGET_CUDA); python: net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)
(1)c++
使用cuda加速後平均幀率在35–40之間,使用以前平均幀率在3–5之間。
ui
(2)python
使用cuda加速後平均幀率在13–15之間,使用以前平均幀率在3–4之間。
spa
參考文章:
https://blog.csdn.net/hitpisces/article/details/104266030
https://blog.csdn.net/qq_43019451/article/details/105894552
https://blog.csdn.net/weixin_39928773/article/details/103709184
https://blog.csdn.net/wanggao_1990/article/details/103779760
https://zhuanlan.zhihu.com/p/100818557
Juliet 於 2020.8.5