本文将介绍 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. 【Scala-spark.mlib】通过Maven工程导入Mlib库
  2. 纯 Git 实现前端 CI/CD
  3. 到底会改名吗?微软GVFS 改名之争
  4. 解决服务器上安装不了centos7.4的问题
  5. 向fedora虚拟机中复制文件_Unraid虚拟机中Dockers下搭建WebDAV共享文件服务器
  6. Tsinsen A1493 城市规划(DP + CDQ分治 + NTT)
  7. 计算机辅助设计工业产品cad竞赛试题,2017计算机辅助设计(工业产品CAD)赛项样题...
  8. java中矩阵怎么打印_在Java编程中打印二维数组或矩阵
  9. leetcode - 279. 完全平方数
  10. CentOS 6.5 安装mysql5.5
  11. NSURLConnect 的简单实用(iOS8淘汰)
  12. 压缩感知重构算法之OMP算法---python实现
  13. Qt浅谈之七:抽奖软件(可显示图片和姓名)
  14. PLSQL和ORACLE客户端安装
  15. PowerScript--功能强大的智能卡,USB Key, POS脚本命令工具
  16. 【物联网毕设基础】单片机:PCF8591 应用程序
  17. 电商平台对接第三方快递鸟物流轨迹查询api接口申请对接全流程
  18. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
  19. Vue: Runtime-Compiler和Runtime-only的区别
  20. python外国网站爬虫_python 网络爬虫-爬取网页外部网站

热门文章

  1. 64.Linux/Unix 系统编程手册(下) -- 伪终端
  2. 14. YAML(1)
  3. 39. 后台模块开发(4)
  4. 1.OAuth 简介
  5. 计算机桌面颜色突然变灰,Win10桌面颜色变为灰的两种解决方法
  6. js(JavaScript):事件,元素(增删改查)
  7. mysql、oracle在Linux和Windows下的简单自动备份
  8. js动态计算移动端rem
  9. c里面的fflush函数
  10. hadoop-1.2.1运行过程中遇到的问题