詳解使用CUDA+OpenCV加速yolo v4性能
YOLO是You-Only-Look-Once的縮寫,它無疑是根據(jù)COCO數(shù)據(jù)集訓(xùn)練的最好的對(duì)象檢測(cè)器之一。YOLOv4是最新的迭代版本,它在準(zhǔn)確性和性能之間進(jìn)行了權(quán)衡,使其成為最先進(jìn)的對(duì)象檢測(cè)器之一。在智能視頻分析管道中使用任何對(duì)象檢測(cè)器的典型機(jī)制包括使用像Tensorflow或PyTorch這樣能夠在NVIDIA GPU上操作的庫來加速模型推理。
OpenCV用于圖像/視頻流輸入,預(yù)處理和后處理的視覺效果。如果我告訴你OpenCV現(xiàn)在能夠利用NVIDIA CUDA的優(yōu)點(diǎn),使用DNN模塊本地運(yùn)行YOLOv4,那會(huì)怎樣?本文將帶你通過使用CUDA和cuDNN構(gòu)建OpenCV,以使用DNN模塊加速YOLOv4推理。
介紹
我認(rèn)識(shí)的大多數(shù)愛好者都有支持GPU的設(shè)備。我的目標(biāo)是讓GPU加速成為主流。誰不喜歡項(xiàng)目跑快點(diǎn)呢?我已經(jīng)使用了OpenCV 4.5.1、CUDA 11.2和cuDNN 8.1.0來開始工作,使推理更容易!
首先,你需要設(shè)置CUDA,然后安裝cuDNN,最后以構(gòu)建OpenCV結(jié)束。此外,這個(gè)博客被分成了幾個(gè)部分,這樣更容易理解!
CUDA 11.2和cuDNN 8.1.0安裝
最有可能使你的計(jì)算機(jī)無法啟動(dòng)的部分。開個(gè)玩笑啦!把每件事都做好,這應(yīng)該是輕而易舉的事。
安裝CUDA 11.2
首先根據(jù)你的平臺(tái)從CUDA存儲(chǔ)庫下載deb文件。
CUDA存儲(chǔ)庫:https://developer.nvidia.com/cuda-downloads
正確選擇平臺(tái)后,將會(huì)向你提供安裝命令。如果你的平臺(tái)與我的平臺(tái)相似,則可以按以下方式安裝它:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pinsudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600wget https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda-repo-ubuntu2004-11-2-local_11.2.1-460.32.03-1_amd64.debsudo dpkg -i cuda-repo-ubuntu2004-11-2-local_11.2.1-460.32.03-1_amd64.debsudo apt-key add /var/cuda-repo-ubuntu2004-11-2-local/7fa2af80.pubsudo apt updatesudo apt -y install cudasudo reboot
如果操作正確,那么在運(yùn)行nvidia-smi時(shí)應(yīng)該會(huì)有以下輸出
最后,將以下內(nèi)容粘貼到.bashrc或.zshrc中
# CUDA export CUDA=11.2 export PATH=/usr/local/cuda-$CUDA/bin${PATH:+:${PATH}} export CUDA_PATH=/usr/local/cuda-$CUDA export CUDA_HOME=/usr/local/cuda-$CUDA export LIBRARY_PATH=$CUDA_HOME/lib64:$LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/cuda-$CUDA/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH export NVCC=/usr/local/cuda-$CUDA/bin/nvcc export CFLAGS="-I$CUDA_HOME/include $CFLAGS"CUDA
別忘了在后面加上source ~/.bashrc
或source ~/.zshrc
安裝cuDNN 8.1.0
為此,你需要有一個(gè)NVIDIA的賬戶,所以一定要先注冊(cè)。完成后,前往以下鏈接并下載標(biāo)記的文件。
https://developer.nvidia.com/rdp/cudnn-download
下載deb文件后,運(yùn)行以下命令-
sudo dpkg -i libcudnn8_8.1.0.77-1+cuda11.2_amd64.deb sudo dpkg -i libcudnn8-dev_8.1.0.77-1+cuda11.2_amd64.deb
這標(biāo)志著NVIDIA CUDA和cuDNN安裝的完成!
從源代碼構(gòu)建OpenCV 4.5.1
有趣的是,這讓我很興奮!本節(jié)將幫助你用CUDA, GStreamer和FFMPEG從源代碼構(gòu)建OpenCV !有一個(gè)很長(zhǎng)的命令列表要執(zhí)行,所以開始吧。
首先,安裝python開發(fā)人員包
sudo apt install python3-dev python3-pip python3-testresources
接下來,讓我們安裝構(gòu)建OpenCV所需的依賴項(xiàng)
sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall sudo apt install libjpeg-dev libpng-dev libtiff-dev sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get install libgtk-3-dev sudo apt-get install libtbb-dev sudo apt-get install libatlas-base-dev gfortran sudo apt-get install libprotobuf-dev protobuf-compiler sudo apt-get install libgoogle-glog-dev libgflags-dev sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
Numpy是此構(gòu)建的一個(gè)關(guān)鍵python包。使用pip安裝它
pip3 install numpy
現(xiàn)在,你應(yīng)該為構(gòu)建做好了一切準(zhǔn)備。運(yùn)行以下命令下載并解壓源代碼
mkdir opencvbuild && cd opencvbuild wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-4.5.1 opencv mv opencv_contrib-4.5.1 opencv_contrib
讓我們準(zhǔn)備構(gòu)建吧!
cd opencv mkdir build && cd build
確保CUDA_ARCH_BIN
根據(jù)你的GPU改變。
cmake \ -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-7 \ -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=ON -D WITH_TBB=ON -D WITH_CUDA=ON -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=7.5 -D BUILD_opencv_cudacodec=OFF \ -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 \ -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON \ -D WITH_FFMPEG=ON -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_PC_FILE_NAME=opencv4.pc -D OPENCV_ENABLE_NONFREE=ON \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D PYTHON_DEFAULT_EXECUTABLE=$(which python3) -D BUILD_EXAMPLES=ON ..
你應(yīng)該會(huì)看到類似這樣的成功構(gòu)建
確保CUDA被檢測(cè)到并且構(gòu)建路徑是準(zhǔn)確的。如果一切正常,繼續(xù)并執(zhí)行以下命令來啟動(dòng)構(gòu)建
make -j$(nproc) sudo make install
要檢查是否成功構(gòu)建了OpenCV,運(yùn)行這個(gè)命令
pkg-config --libs --cflags opencv4
在成功安裝時(shí),它應(yīng)該會(huì)給你一個(gè)類似這樣的輸出
很高興看到你能走到這一步!現(xiàn)在你應(yīng)該已經(jīng)完成了運(yùn)行示例應(yīng)用程序的所有設(shè)置。
運(yùn)行應(yīng)用程序
繼續(xù)并克隆這個(gè)存儲(chǔ)庫并獲取權(quán)重。從安裝git-lfs開始
sudo apt install git git-lfs
使用模型文件克隆存儲(chǔ)庫
# Using HTTPS git clone https://github.com/aj-ames/YOLOv4-OpenCV-CUDA-DNN.git # Using SSH git clone git@github.com:aj-ames/YOLOv4-OpenCV-CUDA-DNN.git cd YOLOv4-OpenCV-CUDA-DNN/ git lfs install git lfs pull
你可以在圖像,視頻攝像頭,或RTSP輸入運(yùn)行應(yīng)用程序。
# Image python3 dnn_infernece.py --image images/example.jpg --use_gpu # Video python3 dnn_inference.py --stream video.mp4 --use_gpu # RTSP python3 dnn_inference.py --stream rtsp://192.168.1.1:554/stream --use_gpu # Webcam python3 dnn_inference.py --stream webcam --use_gpu
PS:刪除--use-gpu
標(biāo)志來禁用GPU。適得其反,不是嗎?
極客們的一些基準(zhǔn)!
如果收益不是很大,我們就不會(huì)這么做。相信我,在GPU上運(yùn)行使我的FPS增加了10–15倍!
我測(cè)試了兩種配置
英特爾酷睿i5 7300HQ + NVIDIA GeForce GTX 1050Ti
英特爾至強(qiáng)E5–1650 v4 + NVIDIA Tesla T4
我會(huì)讓數(shù)字來說話的!
| Device | FPS | Device | FPS | | :------------: | :----------: | :------------: | :----------: | | Core i5 7300HQ | 2.1 | GTX 1050 Ti | 20.1 | | Xeon E5-1650 | 3.5 | Tesla T4 | 42.3 |
尾注
GPU加速正在滲透到多個(gè)庫和應(yīng)用程序中,使用戶能夠以前所未有的速度運(yùn)行更重的工作負(fù)載!計(jì)算機(jī)視覺曾經(jīng)不是一項(xiàng)所有人都能接觸到的技術(shù),但隨著神經(jīng)網(wǎng)絡(luò)的改進(jìn)和硬件計(jì)算能力的提高,這一差距已經(jīng)顯著縮小。隨著人工智能發(fā)展的速度,我們的硬件也會(huì)發(fā)展的越來越靈活!
到此這篇關(guān)于詳解使用CUDA+OpenCV加速yolo v4性能的文章就介紹到這了,更多相關(guān)CUDA+OpenCV加速yolo v4內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python IDLE 錯(cuò)誤:IDLE''''s subprocess didn''''t make connectio
這篇文章主要介紹了Python IDLE 錯(cuò)誤:IDLE's subprocess didn't make connection 的解決方案的相關(guān)資料,需要的朋友可以參考下2017-02-02如何利用Python實(shí)現(xiàn)自動(dòng)打卡簽到的實(shí)踐
簽到,都是規(guī)律性的操作,何嘗不寫一個(gè)程序加到Windows實(shí)現(xiàn)自動(dòng)簽到呢,本文就主要介紹了如何利用Python實(shí)現(xiàn)自動(dòng)打卡簽到的實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12Python實(shí)現(xiàn)在Word中創(chuàng)建表格并填入數(shù)據(jù)與圖片
在Word中,表格是一個(gè)強(qiáng)大的工具,本文主要為大家介紹了如何使用Python在Word中創(chuàng)建表格并填入數(shù)據(jù)、圖片,以及設(shè)置表格樣式等,感興趣的可以了解下2024-03-03Python import自己的模塊報(bào)錯(cuò)問題及解決
這篇文章主要介紹了Python import自己的模塊報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02對(duì)pandas數(shù)據(jù)判斷是否為NaN值的方法詳解
今天小編就為大家分享一篇對(duì)pandas數(shù)據(jù)判斷是否為NaN值的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11python 統(tǒng)計(jì)一個(gè)列表當(dāng)中的每一個(gè)元素出現(xiàn)了多少次的方法
今天小編就為大家分享一篇python 統(tǒng)計(jì)一個(gè)列表當(dāng)中的每一個(gè)元素出現(xiàn)了多少次的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11超詳細(xì)注釋之OpenCV Haar級(jí)聯(lián)檢測(cè)器進(jìn)行面部檢測(cè)
這篇文章主要介紹了OpenCV Haar級(jí)聯(lián)檢測(cè)器進(jìn)行面部檢測(cè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09