YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
本文将介绍 YOLOv4 官方 Darknet 实现,如何于 Ubuntu 18.04 编译,及使用 Python 接口。
主要内容有:
- 准备基础环境: Nvidia Driver, CUDA, cuDNN, CMake, Python
- 编译应用环境: OpenCV, Darknet
- 用预训练模型进行推断:
darknet执行,或python
而 YOLOv4 的介绍或训练,可见前文《YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集》。
准备基础环境
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 Toolkit Archive: https://developer.nvidia.com/cuda-toolkit-archive
建议选择 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 <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
Nvida cuDNN
获取地址:
- cuDNN Download: https://developer.nvidia.com/rdp/cudnn-download
需选择 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
获取地址:
- Anaconda: https://www.anaconda.com/distribution/
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 - <<EOF
import cv2
print(cv2.__version__)
EOF
问题: libfontconfig.so.1
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
问题: 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
用预训练模型进行推断
准备模型与数据
预训练模型 yolov4.weights ,下载地址 https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights 。
可以准备 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 ~
YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口的更多相关文章
- YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集
YOLO 算法是非常著名的目标检测算法.从其全称 You Only Look Once: Unified, Real-Time Object Detection ,可以看出它的特性: Look Onc ...
- 机器学习caffe环境搭建——redhat7.1和caffe的python接口编译
相信看这篇文章的都知道caffe是干嘛的了,无非就是深度学习.神经网络.计算机视觉.人工智能这些,这个我就不多介绍了,下面说说我的安装过程即遇到的问题,当然还有解决方法. 说下我的环境:1>虚拟 ...
- Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误
. . . . . 今天把 Ubuntu 14.04 升级到了最新的 4.0.5 的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友. 先 ...
- linux 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题 http://www.lin ...
- ubuntu 编译运行 opencv C++ 项目
ubuntu 编译运行 opencv C++ 项目 环境 ubuntu 16.04 opencv3.4.0 一. 编译方法 1)命令行 g++ imageResize.cpp -o resize `p ...
- Ubuntu编译安装nginx,php,mysql
摘要: 整理的Ubuntu编译安装nginx,php,mysql的步骤,主要来自对驻云的sh-1.4.1中脚本的整理,随时代进步,内容中的软件或者命令请自行更新 目录准备 创建用户 userdel w ...
- Ubuntu 编译安装 nginx
有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...
- Ubuntu编译安装php7.4
Ubuntu编译安装php7.4 [root@ubuntu2004 php-7.4.30]#apt install gcc libssl-dev libxml2-dev libsqlite3-dev ...
- Ubuntu系统里的python
Ubuntu系统里,默认安装python2.7.x版本的python,直接执行python命令,打开的将是python 2.7.x版本:python3版本的需要自行安装,安装成功后,执行python3 ...
随机推荐
- @RequestBody和@RequestParam
@RequestBody的使用 https://blog.csdn.net/justry_deng/article/details/80972817 (@RequestBody Map map)接收多 ...
- smtplib文字邮件的发送
今天跟大家讲解一下接口测试框架的知识准备阶段,首先是发送纯文字的电子邮件,会的同学可以忽略,不会的就多敲几遍,直到自己能敲出来为止~~ # coding: utf-8import smtplibfro ...
- 贝塞尔曲线(B-spline)的原理与应用
什么是贝塞尔曲线? 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线. 来源 贝塞尔曲线于1962,由法国工程师皮埃尔·贝塞尔(Pierre Béz ...
- Python淘宝商品比价定向爬虫
1.项目基本信息 目标: 获取淘宝搜索页面的信息,提取其中的商品名称和价格理解: 淘宝的搜索接口.翻页的处理 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道 ...
- 点击穿透事件-----CSS新属性
面试被问,一脸懵,被提示,还蒙,好丢脸的感觉....赶紧百度了解 .noclick{ pointer-events: none; /* 上层加上这句样式可以实现点击穿透 */ } 就是说重叠在一起的两 ...
- Unity Prefab关联
Unity3D研究院之Prefab里面的Prefab关联问题http://www.xuanyusong.com/archives/3042
- JDK15就要来了,你却还不知道JDK8的新特性!
微信搜「烟雨星空」,白嫖更多好文. 现在 Oracle 官方每隔半年就会出一个 JDK 新版本.按时间来算的话,这个月就要出 JDK15 了.然而,大部分公司还是在使用 JDK7 和 8 . 之前去我 ...
- JS 进制转换的理解
该事情的由来是来自于一个面试题,题目是这样的,[1,2,3].map(parseInt)的结果是什么? 作为菜鸟的我们一定是觉得分别把1,2,3分别交给parseInt,无非就是1,2,3嘛.其实结果 ...
- C++ —— 输出100以内的质数
代码如下: #include<iostream> #include<math.h> using namespace std; int main() { int i; for(i ...
- 手把手教你 在Pytorch框架上部署和测试 关键点人脸检测项目DBFace,成功实现人脸检测效果
这期教向大家介绍仅仅 1.3M 的轻量级高精度的关键点人脸检测模型DBFace,并手把手教你如何在自己的电脑端进行部署和测试运行,运行时bug解决. 01. 前言 前段时间DBFace人脸检测库横空出 ...