yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
本文將介紹 YOLOv4 官方 Darknet 實現,如何于 Ubuntu 18.04 編譯,及使用 Python 接口。
主要內容有:
準備基礎環境: Nvidia Driver, CUDA, cuDNN, CMake, Python
編譯應用環境: OpenCV, Darknet
用預訓練模型進行推斷: darknet 執行,或 python
準備基礎環境
Nvidia Driver
推薦使用 graphics drivers PPA 安裝 Nvidia 驅動:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
查看推薦的 Nvidia 顯卡驅動:
ubuntu-drivers devices
安裝 Nvidia 驅動:
apt-cache search nvidia | grep ^nvidia-driver
sudo apt install nvidia-driver-450
之后, sudo reboot 重啟。運行 nvidia-smi 查看 Nvidia 驅動信息。
Nvidia CUDA Toolkit
獲取地址:
建議選擇 CUDA 10.2 ,為目前 PyTorch 可支持的最新版本。
下載安裝:
wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run
注意:安裝時,請手動取消驅動安裝選項。
安裝輸出:
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-10.2/
Samples: Installed in /home/john/cuda-10.2/, but missing recommended libraries
Please make sure that
- PATH includes /usr/local/cuda-10.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 440.00 is required for CUDA 10.2 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run --silent --driver
Logfile is /var/log/cuda-installer.log
添加環境變量:
$ vi ~/.bashrc
export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
重啟終端后,檢查:
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
Nvida cuDNN
獲取地址:
需選擇 CUDA 10.2 對應的版本。
安裝 deb 包:
sudo apt install ./libcudnn8_8.0.2.39-1+cuda10.2_amd64.deb
sudo apt install ./libcudnn8-dev_8.0.2.39-1+cuda10.2_amd64.deb
sudo apt install ./libcudnn8-doc_8.0.2.39-1+cuda10.2_amd64.deb
查看 deb 包:
dpkg -c libcudnn8_8.0.2.39-1+cuda10.2_amd64.deb
CMake
下載安裝:
curl -O -L https://github.com/Kitware/CMake/releases/download/v3.18.2/cmake-3.18.2-Linux-x86_64.sh
sh cmake-*.sh --prefix=$HOME/Applications/
添加環境變量:
$ vi ~/.bashrc
export PATH=$HOME/Applications/cmake-3.18.2-Linux-x86_64/bin:$PATH
說明: apt 源的 cmake 太舊, darknet 編譯不過。
Python
獲取地址:
Python 建議用 Anaconda 發行版。
安裝命令:
# bash Anaconda3-2020.07-Linux-x86_64.sh
bash Anaconda3-2019.10-Linux-x86_64.sh
編譯應用環境
OpenCV 4.4.0
安裝依賴:
apt install -y build-essential git libgtk-3-dev
編譯命令:
conda deactivate
# export CONDA_HOME="/home/john/anaconda3/envs/clenv"
export CONDA_HOME=`conda info -s | grep -Po "sys.prefix:\s*\K[/\w]*"`
cd ~/Codes/
git clone -b 4.4.0 --depth 1 https://github.com/opencv/opencv.git
git clone -b 4.4.0 --depth 1 https://github.com/opencv/opencv_contrib.git
cd opencv/
mkdir _build && cd _build/
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$HOME/opencv-cuda-4.4.0 \
-DOPENCV_EXTRA_MODULES_PATH=$HOME/Codes/opencv_contrib/modules \
\
-DPYTHON_EXECUTABLE=$CONDA_HOME/bin/python3.7 \
-DPYTHON3_EXECUTABLE=$CONDA_HOME/bin/python3.7 \
-DPYTHON3_LIBRARY=$CONDA_HOME/lib/libpython3.7m.so \
-DPYTHON3_INCLUDE_DIR=$CONDA_HOME/include/python3.7m \
-DPYTHON3_NUMPY_INCLUDE_DIRS=$CONDA_HOME/lib/python3.7/site-packages/numpy/core/include \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
\
-DWITH_CUDA=ON \
\
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
..
make -j$(nproc)
make install
其中 Python 路徑請對應自己安裝的版本。
運行檢查:
conda activate
export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$HOME/opencv-cuda-4.4.0/lib/python3.7/site-packages:$PYTHONPATH
python - <
import cv2
print(cv2.__version__)
EOF
問題: libfontconfig.so.1
Traceback (most recent call last):
File "", line 1, in
File "/home/john/opencv-cuda-4.4.0/lib/python3.7/site-packages/cv2/__init__.py", line 96, in
bootstrap()
File "/home/john/opencv-cuda-4.4.0/lib/python3.7/site-packages/cv2/__init__.py", line 86, in bootstrap
import cv2
ImportError: /home/john/anaconda3/bin/../lib/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var
解決辦法:
cd $HOME/anaconda3/lib/
mv libfontconfig.so.1 libfontconfig.so.1.bak
ln -s /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 libfontconfig.so.1
問題: libpangoft2-1.0.so.0
ImportError: /home/john/anaconda3/bin/../lib/libpangoft2-1.0.so.0: undefined symbol: FcWeightToOpenTypeDouble
解決辦法:
cd $HOME/anaconda3/lib/
mv libpangoft2-1.0.so.0 libpangoft2-1.0.so.0.bak
ln -s /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 libpangoft2-1.0.so.0
Darknet
編譯命令:
export OpenCV_DIR=$HOME/opencv-cuda-4.4.0/lib/cmake
cd ~/Codes/
git clone https://github.com/AlexeyAB/darknet.git
cd darknet/
./build.sh
運行檢查:
$ export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
$ ./darknet v
CUDA-version: 10020 (10020), cuDNN: 8.0.2, CUDNN_HALF=1, GPU count: 1
CUDNN_HALF=1
OpenCV version: 4.4.0
Not an option: v
用預訓練模型進行推斷
準備模型與數據
darknet 執行
cd ~/Codes/darknet/
export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
export MY_MODEL_DIR=~/Codes/devel/models/yolov4
export MY_COCO_DIR=~/Codes/devel/datasets/coco2017
./darknet detector test cfg/coco.data cfg/yolov4.cfg \
$MY_MODEL_DIR/yolov4.weights \
-thresh 0.25 -ext_output -show \
$MY_COCO_DIR/test2017/000000000001.jpg
推斷結果:
python 執行
Darknet 于其根目錄,提供有 Python 接口。如下執行:
cd ~/Codes/darknet/
export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$HOME/opencv-cuda-4.4.0/lib/python3.7/site-packages:$PYTHONPATH
python darknet_images.py -h
python darknet_images.py \
--batch_size 1 \
--thresh 0.1 \
--ext_output \
--config_file cfg/yolov4.cfg \
--data_file cfg/coco.data \
--weights $MY_MODEL_DIR/yolov4.weights \
--input $MY_COCO_DIR/test2017/000000000001.jpg
推斷結果,如前一小節。
結語
Let's go coding ~
分享 Coding 中實用的小技巧、小知識!歡迎關注,共同成長!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tts安卓版(tts安卓)
- 下一篇: 不属于python的数据类型_下列___