YOLO是You-Only-Look-Once的縮寫,它無疑是根據(jù)COCO數(shù)據(jù)集訓練的最好的對象檢測器之一。YOLOv4是最新的迭代版本,它在準確性和性能之間進行了權衡,使其成為最先進的對象檢測器之一。在智能視頻分析管道中使用任何對象檢測器的典型機制包括使用像Tensorflow或PyTorch這樣能夠在NVIDIA GPU上操作的庫來加速模型推理。
OpenCV用于圖像/視頻流輸入,預處理和后處理的視覺效果。如果我告訴你OpenCV現(xiàn)在能夠利用NVIDIA CUDA的優(yōu)點,使用DNN模塊本地運行YOLOv4,那會怎樣?本文將帶你通過使用CUDA和cuDNN構建OpenCV,以使用DNN模塊加速YOLOv4推理。
介紹
我認識的大多數(shù)愛好者都有支持GPU的設備。我的目標是讓GPU加速成為主流。誰不喜歡項目跑快點呢?我已經(jīng)使用了OpenCV 4.5.1、CUDA 11.2和cuDNN 8.1.0來開始工作,使推理更容易!
首先,你需要設置CUDA,然后安裝cuDNN,最后以構建OpenCV結(jié)束。此外,這個博客被分成了幾個部分,這樣更容易理解!
CUDA 11.2和cuDNN 8.1.0安裝
最有可能使你的計算機無法啟動的部分。開個玩笑啦!把每件事都做好,這應該是輕而易舉的事。
安裝CUDA 11.2
首先根據(jù)你的平臺從CUDA存儲庫下載deb文件。
CUDA存儲庫:https://developer.nvidia.com/cuda-downloads
正確選擇平臺后,將會向你提供安裝命令。如果你的平臺與我的平臺相似,則可以按以下方式安裝它:
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
如果操作正確,那么在運行nvidia-smi時應該會有以下輸出
最后,將以下內(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
為此,你需要有一個NVIDIA的賬戶,所以一定要先注冊。完成后,前往以下鏈接并下載標記的文件。
https://developer.nvidia.com/rdp/cudnn-download
下載deb文件后,運行以下命令-
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
這標志著NVIDIA CUDA和cuDNN安裝的完成!
從源代碼構建OpenCV 4.5.1
有趣的是,這讓我很興奮!本節(jié)將幫助你用CUDA, GStreamer和FFMPEG從源代碼構建OpenCV !有一個很長的命令列表要執(zhí)行,所以開始吧。
首先,安裝python開發(fā)人員包
sudo apt install python3-dev python3-pip python3-testresources
接下來,讓我們安裝構建OpenCV所需的依賴項
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是此構建的一個關鍵python包。使用pip安裝它
現(xià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
讓我們準備構建吧!
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 ..
你應該會看到類似這樣的成功構建
確保CUDA被檢測到并且構建路徑是準確的。如果一切正常,繼續(xù)并執(zhí)行以下命令來啟動構建
make -j$(nproc)
sudo make install
要檢查是否成功構建了OpenCV,運行這個命令
pkg-config --libs --cflags opencv4
在成功安裝時,它應該會給你一個類似這樣的輸出
很高興看到你能走到這一步!現(xiàn)在你應該已經(jīng)完成了運行示例應用程序的所有設置。
運行應用程序
繼續(xù)并克隆這個存儲庫并獲取權重。從安裝git-lfs開始
sudo apt install git git-lfs
使用模型文件克隆存儲庫
# 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輸入運行應用程序。
# 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
標志來禁用GPU。適得其反,不是嗎?
極客們的一些基準!
如果收益不是很大,我們就不會這么做。相信我,在GPU上運行使我的FPS增加了10–15倍!
我測試了兩種配置
英特爾酷睿i5 7300HQ + NVIDIA GeForce GTX 1050Ti
英特爾至強E5–1650 v4 + NVIDIA Tesla T4
我會讓數(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加速正在滲透到多個庫和應用程序中,使用戶能夠以前所未有的速度運行更重的工作負載!計算機視覺曾經(jīng)不是一項所有人都能接觸到的技術,但隨著神經(jīng)網(wǎng)絡的改進和硬件計算能力的提高,這一差距已經(jīng)顯著縮小。隨著人工智能發(fā)展的速度,我們的硬件也會發(fā)展的越來越靈活!
到此這篇關于詳解使用CUDA+OpenCV加速yolo v4性能的文章就介紹到這了,更多相關CUDA+OpenCV加速yolo v4內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python基于pyCUDA實現(xiàn)GPU加速并行計算功能入門教程