本文將介紹 YOLOv4 官方 Darknet 實現,如何於 Ubuntu 18.04 編譯,及使用 Python 接口。python
主要內容有:linux
darknet
執行,或 python
而 YOLOv4 的介紹或訓練,可見前文《YOLOv4: Darknet 如何於 Docker 編譯,及訓練 COCO 子集》。git
推薦使用 graphics drivers PPA 安裝 Nvidia 驅動:github
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update
查看推薦的 Nvidia 顯卡驅動:bootstrap
ubuntu-drivers devices
安裝 Nvidia 驅動:ubuntu
apt-cache search nvidia | grep ^nvidia-driver sudo apt install nvidia-driver-450
以後, sudo reboot
重啓。運行 nvidia-smi
查看 Nvidia 驅動信息。bash
獲取地址:curl
建議選擇 CUDA 10.2 ,爲目前 PyTorch 可支持的最新版本。ide
下載安裝:ui
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 <CudaInstaller> with the name of this run file: sudo <CudaInstaller>.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
獲取地址:
需選擇 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
下載安裝:
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 建議用 Anaconda 發行版。
安裝命令:
# bash Anaconda3-2020.07-Linux-x86_64.sh bash Anaconda3-2019.10-Linux-x86_64.sh
安裝依賴:
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 - <<EOF import cv2 print(cv2.__version__) EOF
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/john/opencv-cuda-4.4.0/lib/python3.7/site-packages/cv2/__init__.py", line 96, in <module> 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
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
編譯命令:
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
預訓練模型 yolov4.weights ,下載地址 https://github.com/AlexeyAB/d... 。
能夠準備 MS COCO 數據集,下載地址 http://cocodataset.org/#download 。或者本身找個圖片。
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 中實用的小技巧、小知識!歡迎關注,共同成長!