詳解使用CUDA+OpenCV加速yolo v4性能

YOLO是You-Only-Look-Once的縮寫,它無疑是根據COCO數據集訓練的最好的對象檢測器之一。YOLOv4是最新的迭代版本,它在準確性和性能之間進行瞭權衡,使其成為最先進的對象檢測器之一。在智能視頻分析管道中使用任何對象檢測器的典型機制包括使用像Tensorflow或PyTorch這樣能夠在NVIDIA GPU上操作的庫來加速模型推理。

OpenCV用於圖像/視頻流輸入,預處理和後處理的視覺效果。如果我告訴你OpenCV現在能夠利用NVIDIA CUDA的優點,使用DNN模塊本地運行YOLOv4,那會怎樣?本文將帶你通過使用CUDA和cuDNN構建OpenCV,以使用DNN模塊加速YOLOv4推理。

介紹

我認識的大多數愛好者都有支持GPU的設備。我的目標是讓GPU加速成為主流。誰不喜歡項目跑快點呢?我已經使用瞭OpenCV 4.5.1、CUDA 11.2和cuDNN 8.1.0來開始工作,使推理更容易!

首先,你需要設置CUDA,然後安裝cuDNN,最後以構建OpenCV結束。此外,這個博客被分成瞭幾個部分,這樣更容易理解!

CUDA 11.2和cuDNN 8.1.0安裝

最有可能使你的計算機無法啟動的部分。開個玩笑啦!把每件事都做好,這應該是輕而易舉的事。

安裝CUDA 11.2

首先根據你的平臺從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時應該會有以下輸出

最後,將以下內容粘貼到.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 ~/.bashrcsource ~/.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

有趣的是,這讓我很興奮!本節將幫助你用CUDA, GStreamer和FFMPEG從源代碼構建OpenCV !有一個很長的命令列表要執行,所以開始吧。

首先,安裝python開發人員包

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安裝它

pip3 install numpy

現在,你應該為構建做好瞭一切準備。運行以下命令下載並解壓源代碼

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根據你的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被檢測到並且構建路徑是準確的。如果一切正常,繼續並執行以下命令來啟動構建

make -j$(nproc)
sudo make install
 

要檢查是否成功構建瞭OpenCV,運行這個命令

pkg-config --libs --cflags opencv4
 

在成功安裝時,它應該會給你一個類似這樣的輸出

很高興看到你能走到這一步!現在你應該已經完成瞭運行示例應用程序的所有設置。

運行應用程序

繼續並克隆這個存儲庫並獲取權重。從安裝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 [email protected]: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

我會讓數字來說話的!

|     Device     |     FPS      |    Device      |     FPS      |
| :------------: | :----------: | :------------: | :----------: |
| Core i5 7300HQ |     2.1      |   GTX 1050 Ti  |     20.1     |
| Xeon E5-1650   |     3.5      |   Tesla T4     |     42.3     |
 

尾註

GPU加速正在滲透到多個庫和應用程序中,使用戶能夠以前所未有的速度運行更重的工作負載!計算機視覺曾經不是一項所有人都能接觸到的技術,但隨著神經網絡的改進和硬件計算能力的提高,這一差距已經顯著縮小。隨著人工智能發展的速度,我們的硬件也會發展的越來越靈活!

到此這篇關於詳解使用CUDA+OpenCV加速yolo v4性能的文章就介紹到這瞭,更多相關CUDA+OpenCV加速yolo v4內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!