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 中实用的小技巧、小知识!欢迎关注,共同成长!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

junit测试spring_使用Spring JUnit规则进行参数化集成测试

junit测试springSpring 4.2附带了全新的JUnit规则&#xff1a; SpringClassRule和SpringMethodRule 。 使用JUnit规则的主要优点是让开发人员摆脱SpringJUnit4ClassRunner并在Spring集成测试中利用不同的JUnit运行器。 我认为Spring JUnit Rules的最大机会是易于创建参数化的集…

不属于python的数据类型_下列________不是Python的数据类型。

【判断题】已知 x, y 3, 5,那么执行x, y y, x 之后,x的值为15。【多选题】Python 中对变量描述正确的选项是( )【单选题】字符串是一个连续的字符序列,用________方式打印出可以换行的字符串。【多选题】以下选项中,不符合 Python 语言变量命名规则的有( )【多选题】Python的…

无处不在_Java无处不在:使用DukeScript在任何地方运行一次编写

无处不在在相当长一段时间内&#xff0c;Java都未能兑现“一次编写&#xff0c;随处运行”的承诺。 DukeScript希望通过在跨平台应用程序中实现视图和逻辑的清晰分离来改变这种状况。 在本文中&#xff0c;一个简单的场景用于介绍DukeScript的基础。 多年以来&#xff0c;Java…

C语言为何不会过时

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删评价任何一门编程语言&#xff0c;都是招人骂的。永远是这样。就像是春寒料峭的季节&#xff0c; 街上穿棉袄和穿单衣的擦肩而过&#xff0c;双方…

下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...

【简答题】字符串有哪几种表现形式?【简答题】简述Python程序的执行过程。【单选题】Python 语句x‘char’;y2,print(xy)输出的结果是哪一项?()【编程题】输入三角形的边长和高,计算并输出三角形的面积。【简答题】手机插上充电器却没有显示充电,可以用万用表检测吗?请上网搜…

mysql 死锁监视器_并发基础知识:死锁和对象监视器

mysql 死锁监视器本文是我们名为Java Concurrency Essentials的学院课程的一部分。 在本课程中&#xff0c;您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识&#xff0c;并学习诸如原子性&#xff0c;同步和线程安全性的概念。 在这里查看 &#xff01; 目录 …

python ks值计算_利用Python计算KS的实例详解

在金融领域中&#xff0c;我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布。好的信用风控模型一般从准确性、稳定性和可解释性来评估模型。sOf免费资源网一般来说。好人样本的分布同坏人样本的分布应该是有很大不同的&#xff0c;KS正好是有效性指标中的区分能力指…

教你如何用一句话激怒IT人

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删在IT行业摸爬滚打这么久&#xff0c;你是否听过下面这些话&#xff1a;“这个很简单&#xff0c;我也是做程序出身的。”“预算砍掉一半&#xf…

java的网络编程有用吗_十大有用但又偏执的Java编程技术

java的网络编程有用吗经过一段时间的编码&#xff08;以我为例&#xff0c;大约20年左右&#xff0c;当您玩得开心时光飞逝&#xff09;&#xff0c;人们开始接受这些习惯。 因为&#xff0c;你知道... 任何可能出错的事情都会发生。 这就是为什么人们会采用“防御性编程”的原…

python bootstrap 4_Python3.4+Django1.9+Bootstrap3

实现和原理Python集成Django开发框架后&#xff0c;可以通过在cmd命令提示符下建立工程&#xff0c;工程名为learn_modelsdjango-admin.py startproject learn_models再进入到learn_models里面&#xff0c;新建一个app项目cd learn_modelspython manage.py startapp learn此时目…

未来五年有颠覆性的IT技术都在这里

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删据福布斯杂志报道&#xff0c;在美国奥兰多举行的Gartner研讨会上&#xff0c;市场研究机构Gartner Research的副总裁兼资深研究员大卫卡利&…

java ee maven_真正释放Maven和Java EE的强大功能

java ee maven如果野心和愿景太复杂而无法使用&#xff0c;则它们可能会淘汰伟大的解决方案。 尽管Maven和Java EE是在整个Java行业中都已建立的良好技术&#xff0c;但是使用它们并使用其作者打算使用的所有技术和模式来设计项目可能非常棘手。 在开发过程中途&#xff0c;由…

python字符串解释_python基础之字符串详解

1、Python环境配置&#xff1a;下载好之后安装&#xff0c;注意勾选环境变量。2、写python一定要注意代码的缩进。2、字符串&#xff1a;(1)、字符串是从左到右是从0开始索引&#xff0c;从右到左是从-1开始。遵循包前不包后原则。举例说明&#xff1a;代码&#xff1a; …

程序员们,想在双十一脱单?赶快跟我捯饬起来吧

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删生活中有很多男人一边抱怨自己不够洋气&#xff0c;找不到女票&#xff0c;另一方面又懒到宁肯在床上撸啊撸&#xff0c;也不愿意好好打扮自己。…

jboss8日志级别设置_罐中研讨会:设置JBoss BRMS全日研讨会

jboss8日志级别设置是否在寻找一种简单的方法来宣传&#xff0c;展示或演示使用JBoss业务规则管理系统&#xff08;BRMS&#xff09;产品的入门难度&#xff1f; 别无所求&#xff0c;因为我们已经召集了这个研讨会&#xff0c;因此您可以围绕JBoss BRMS构建一个晚上&#xff…

python具有伪代码的本质吗_Python的优点之一是具有伪代码的本质。( )_学小易找答案...

【单选题】下面关于函数的说法,错误的是( )。【单选题】实际开发中,文件或者文件夹操作都要用到os模块。( )【单选题】函数能处理比声明时更多的参数,它们是( ) 参数。【单选题】函数的名称可以随意命名。( )【单选题】Python源代码被解释器转换后的格式为( )。【单选题】Pytho…

C语言编程时你常犯的18种错误

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删C语言的最大特点是&#xff1a;功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格&#xff0c;这就给编程人员留下“灵活…

python字典items返回什么_Python 字典items返回列表,iteritems返回迭代器

说明&#xff1a;items以列表方式返回字典中的键值对&#xff0c;iteritems以迭代器对象 返回键值对儿(Python3中不再支持)&#xff1b;字典items()方法和iteritems()方法&#xff0c;是python字典的内建函数&#xff0c;分别会返回列表和迭代器&#xff0c;下面一起来看下字典…

pl/postgresql_将PostgreSQL PL / Java安装为PostgreSQL扩展

pl/postgresql在2011年&#xff0c;我在PostgreSQL PL / Java上撰写了一系列文章。 基本信息仍然可靠&#xff0c;但是现在有了一种从源代码安装PL / Java的简便得多的方法。 这也消除了依赖第三方来创建软件包的需要。 由于我的读者已经熟悉git和maven&#xff0c;因此这些注释…

这些知识你都不知道,难怪说你学不懂C语言!

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删关于C语言的那些小知识&#xff0c;准备学习或者刚刚入门的你已经了解了吗&#xff1f;语言种类编译语言静态声明语言面向过程的编程语言环境工具…