本文将介绍 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.1Traceback (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.0ImportError: /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 中实用的小技巧、小知识!欢迎关注,共同成长!

python中darks_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口相关推荐

  1. python中ifelifelse用在什么结构_详解Python if-elif-else知识点

    有的时候,一个 if - else - 还不够用.比如,根据年龄的划分:条件1:18岁或以上:adult 条件2:6岁或以上:teenager 条件3:6岁以下:kid Python if-elif- ...

  2. python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)

    在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...

  3. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  4. python中的常量可以修改吗_深入理解Python变量与常量

    变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...

  5. python中for无限循环_关于循环:在Python中从1循环到无穷大

    在C语言中,我会这样做: 1 2 3 4int i; for (i = 0;; i++) if (thereIsAReasonToBreak(i)) break; 如何在Python中实现类似的功能? ...

  6. yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口

    本文将介绍 YOLOv4 官方 Darknet 实现,如何于 Ubuntu 18.04 编译,及使用 Python 接口. 主要内容有: 准备基础环境: Nvidia Driver, CUDA, cu ...

  7. python中的gui界面编程_python应用系列教程——python的GUI界面编程Tkinter全解

    全栈工程师开发手册 (作者:栾鹏) python的GUI界面编程,常用的几个python库包含如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包 ...

  8. python中的wheel有什么用_什么是Python Wheels?为什么要学Python Wheels

    前言 Python .whl文件(或wheels)是Python中很少讨论的一部分,但是它们对Python包的安装过程非常重要.如果您已经使用pip安装了Python包,那么很有可能是轮子(wheel ...

  9. python中控制代码块逻辑关系_一、Python基础知识

    1.1 Python简介 (1)解释型语言 解释型语言在运行程序的时候才逐行翻译.运行. ①优点: 有良好的平台兼容性,在任何环境中都可以运行(安装了解释器)灵活,修改代码的时候直接修改就可以,可以快 ...

  10. python中以下关于列表描述错误的_在Python中,以下关于函数的描述错误的是哪一项?...

    [判断题]Python内置函数len____可以返回列表.元组.字典.集合.字符串以及range对象中元素个数. [判断题]Python内置函数max____用来返回序列中的最大元素. [判断题]Py ...

最新文章

  1. c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)
  2. 首汽约车上线行程录音功能 产生司乘纠纷时可用于调查取证
  3. Java 字节数组的长度length
  4. poj2586 Y2K Accounting Bug(贪心)
  5. HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...
  6. 读写分离无效的大坑(新使用数据库读写分离的同学可以参考)
  7. 软件工程毕设(三)·进度考核表
  8. OCR身份证识别功能
  9. 关联本地项目和svn_SVN服务器项目如何与本地项目同步,关联?
  10. Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
  11. 即时通信和实时通信的区别
  12. 建模助手 | 学校项目为何多用BIM?广州实验中学给你答案
  13. 客户端邮件同步到webmail如何操作,电子邮件地址怎么注册?
  14. UE5 官方案例Lyra 全特性详解 12.背包系统Inventory System 1添加物品到背包
  15. 《经济学人》最新封面评下一个前沿技术:脑机接口正等待远见者的到来
  16. MySQL常见高可用方案
  17. Ribbon配置和实现原理
  18. 触摸查询系统服务器注册码,多媒体触摸查询系统旗舰版-用户手册(20161215.pdf
  19. KMP算法——俗称看毛片算法
  20. ISIS(中间系统到中间系统)

热门文章

  1. “深度学习”是人工智能的一场革命吗?
  2. .NET简谈特性(代码属性)
  3. GIS和开源见解(摘录)
  4. 1.支付平台架构:业务、规划、设计与实现 --- 收银台业务
  5. 3.业务架构·应用架构·数据架构实战 --- 战略驱动的业务架构设计
  6. 洞泾机器人园区地址_2020年4月上海市北新泾商圈写字楼市场租赁情况
  7. [2019杭电多校第七场][hdu6651]Final Exam
  8. springboot实现xml传参和返回值
  9. CentOS 通过yum来升级php到php5.6
  10. fiddler抓包工具1