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

yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口相关推荐

  1. linux下运行yolo,deepin(linux)编译安装yolo v4测试效果

    # 背景 五一放假的最后一天我也凑了个热闹,试一下新鲜出炉的yolo v4, 由于没有装CUDA和CUDNN,只试了一下在CPU上的速度和效果,电脑环境及编译依赖如下: * deepin 15.11桌 ...

  2. coco训练集darknet_YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集

    YOLO 算法是非常著名的目标检测算法.从其全称 You Only Look Once: Unified, Real-Time Object Detection ,可以看出它的特性:Look Once ...

  3. Window环境下运行YOLO v4目标检测算法

    YOLO v4是一种最新提出的目标检测算法,由Alexey Bochkovskiy提出,性能较原有算法基础上有较大幅度提高. 论文地址:https://arxiv.org/abs/2004.10934 ...

  4. YOLO v4在jetson nano的安装及测试

    You only look once (YOLO)是一款非常著名的物体识别深度学习网络,可实现快速检测的同时还达到较高的准确率.官网 https://pjreddie.com/darknet/yolo ...

  5. Yolo v4, v3 and v2 性能极简图示

    Yolo v4, v3 and v2 性能图示 https://github.com/AlexeyAB/darknet 参考链接: https://github.com/AlexeyAB/darkne ...

  6. YOLO v1到YOLO v4(下)

    YOLO v1到YOLO v4(下) Faster YOLO使用的是GoogleLeNet,比VGG-16快,YOLO完成一次前向过程只用8.52 billion 运算,而VGG-16要30.69bi ...

  7. YOLO v1到YOLO v4(上)

    YOLO v1到YOLO v4(上) 一. YOLO v1 这是继RCNN,fast-RCNN和faster-RCNN之后,rbg(RossGirshick)针对DL目标检测速度问题提出的另外一种框架 ...

  8. 全面解析YOLO V4网络结构

    作者|周威,https://zhuanlan.zhihu.com/p/150127712 本文已获作者授权,不得二次转载. 1.前言 最近用YOLO V4做车辆检测,配合某一目标追踪算法实现车辆追踪+ ...

  9. YOLO v4它来了:接棒者出现,速度效果双提升

    来源:机器之心 本文约2188字,建议阅读7分钟. 本文介绍YOLO 的官方 Github 账号更新了 YOLO v4 的 arXiv 链接与开源代码链接,迅速引起了 CV 社区的关注. 两个月前,Y ...

最新文章

  1. python基础知识资料-学习Python列表的基础知识汇总
  2. leetcode算法题--数组中出现次数超过一半的数字
  3. 华兴数控g71外圆循环编程_华兴数控系统代码
  4. node ajax validator,使用validator.js对字符串数据进行验证
  5. Kali Linux Web 渗透测试秘籍 第六章 利用 -- 低悬的果实
  6. codeigniter中base_url和site_url
  7. mysql常用的备份命令有哪些_Mysql常用命令及sql代码整理 非常实用值得收藏 - 文中之舞...
  8. 嵌入式Linux系统驱动hp1020打印机
  9. 获取windows当前登录的用户名
  10. 微信营销十一(微信公众号吸粉技巧)
  11. plc是微型计算机,plc控制系统与微型计算机系统有什么区别
  12. 【20年9月】聊聊我的CISM备考过程,有经验有教训!
  13. powerbi 线性回归_精选 | 实用炫酷的Power BI自定义图表
  14. 微型计算机原理顺序程序设计,微机原理实验,顺序实验.docx
  15. 【LE AUDIO】LC3 - Low Complexity Communication Codec
  16. Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分
  17. 光敏电阻5506主要参数_常用光敏电阻的规格参数
  18. amd锐龙笔记本cpu怎么样_九代酷睿还是AMD锐龙?多款标压笔记本处理器性能实测对比...
  19. 静态路由Route不生效的解决方法
  20. 远程进服务器怎么全屏显示,远程服务器如何全屏显示

热门文章

  1. jcmd,大约JDK 11
  2. javafx 示例_示例介绍:JavaFX 8打印
  3. css hack技巧_5种减少Hack的编码技巧
  4. 首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串
  5. 使用Okta的单点登录保护您的Vert.x服务器
  6. 从Spring Data JPA访问EntityManager
  7. teamcity_TeamCity构建依赖项
  8. 使用Spring AOP和Guava速率限制器的节气门方法
  9. 简而言之,JUnit:测试隔离
  10. 使用Spring的Hibernate构建Java Web应用程序