本文将介绍 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 驱动:

  1. sudo add-apt-repository ppa:graphics-drivers/ppa
  2. sudo apt update

查看推荐的 Nvidia 显卡驱动:

  1. ubuntu-drivers devices

安装 Nvidia 驱动:

  1. apt-cache search nvidia | grep ^nvidia-driver
  2. sudo apt install nvidia-driver-450

之后, sudo reboot 重启。运行 nvidia-smi 查看 Nvidia 驱动信息。

Nvidia CUDA Toolkit

获取地址:

建议选择 CUDA 10.2 ,为目前 PyTorch 可支持的最新版本。

下载安装:

  1. wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
  2. sudo sh cuda_10.2.89_440.33.01_linux.run

注意:安装时,请手动取消驱动安装选项。

安装输出:

  1. ===========
  2. = Summary =
  3. ===========
  4. Driver: Not Selected
  5. Toolkit: Installed in /usr/local/cuda-10.2/
  6. Samples: Installed in /home/john/cuda-10.2/, but missing recommended libraries
  7. Please make sure that
  8. - PATH includes /usr/local/cuda-10.2/bin
  9. - 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
  10. To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin
  11. Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
  12. ***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.
  13. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
  14. sudo <CudaInstaller>.run --silent --driver
  15. Logfile is /var/log/cuda-installer.log

添加环境变量:

  1. $ vi ~/.bashrc
  2. export CUDA_HOME=/usr/local/cuda
  3. export PATH=$CUDA_HOME/bin:$PATH
  4. export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

重启终端后,检查:

  1. $ nvcc --version
  2. nvcc: NVIDIA (R) Cuda compiler driver
  3. Copyright (c) 2005-2019 NVIDIA Corporation
  4. Built on Wed_Oct_23_19:24:38_PDT_2019
  5. Cuda compilation tools, release 10.2, V10.2.89

Nvida cuDNN

获取地址:

需选择 CUDA 10.2 对应的版本。

安装 deb 包:

  1. sudo apt install ./libcudnn8_8.0.2.39-1+cuda10.2_amd64.deb
  2. sudo apt install ./libcudnn8-dev_8.0.2.39-1+cuda10.2_amd64.deb
  3. sudo apt install ./libcudnn8-doc_8.0.2.39-1+cuda10.2_amd64.deb

查看 deb 包:

  1. dpkg -c libcudnn8_8.0.2.39-1+cuda10.2_amd64.deb

CMake

下载安装:

  1. curl -O -L https://github.com/Kitware/CMake/releases/download/v3.18.2/cmake-3.18.2-Linux-x86_64.sh
  2. sh cmake-*.sh --prefix=$HOME/Applications/

添加环境变量:

  1. $ vi ~/.bashrc
  2. export PATH=$HOME/Applications/cmake-3.18.2-Linux-x86_64/bin:$PATH

说明: apt 源的 cmake 太旧, darknet 编译不过。

Python

获取地址:

Python 建议用 Anaconda 发行版。

安装命令:

  1. # bash Anaconda3-2020.07-Linux-x86_64.sh
  2. bash Anaconda3-2019.10-Linux-x86_64.sh

编译应用环境

OpenCV 4.4.0

安装依赖:

  1. apt install -y build-essential git libgtk-3-dev

编译命令:

  1. conda deactivate
  2. # export CONDA_HOME="/home/john/anaconda3/envs/clenv"
  3. export CONDA_HOME=`conda info -s | grep -Po "sys.prefix:\s*\K[/\w]*"`
  4. cd ~/Codes/
  5. git clone -b 4.4.0 --depth 1 https://github.com/opencv/opencv.git
  6. git clone -b 4.4.0 --depth 1 https://github.com/opencv/opencv_contrib.git
  7. cd opencv/
  8. mkdir _build && cd _build/
  9. cmake -DCMAKE_BUILD_TYPE=Release \
  10. -DCMAKE_INSTALL_PREFIX=$HOME/opencv-cuda-4.4.0 \
  11. -DOPENCV_EXTRA_MODULES_PATH=$HOME/Codes/opencv_contrib/modules \
  12. \
  13. -DPYTHON_EXECUTABLE=$CONDA_HOME/bin/python3.7 \
  14. -DPYTHON3_EXECUTABLE=$CONDA_HOME/bin/python3.7 \
  15. -DPYTHON3_LIBRARY=$CONDA_HOME/lib/libpython3.7m.so \
  16. -DPYTHON3_INCLUDE_DIR=$CONDA_HOME/include/python3.7m \
  17. -DPYTHON3_NUMPY_INCLUDE_DIRS=$CONDA_HOME/lib/python3.7/site-packages/numpy/core/include \
  18. -DBUILD_opencv_python2=OFF \
  19. -DBUILD_opencv_python3=ON \
  20. \
  21. -DWITH_CUDA=ON \
  22. \
  23. -DBUILD_DOCS=OFF \
  24. -DBUILD_EXAMPLES=OFF \
  25. -DBUILD_TESTS=OFF \
  26. ..
  27. make -j$(nproc)
  28. make install

其中 Python 路径请对应自己安装的版本。

运行检查:

  1. conda activate
  2. export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
  3. export PYTHONPATH=$HOME/opencv-cuda-4.4.0/lib/python3.7/site-packages:$PYTHONPATH
  4. python - <<EOF
  5. import cv2
  6. print(cv2.__version__)
  7. EOF

问题: libfontconfig.so.1

  1. Traceback (most recent call last):
  2. File "<stdin>", line 1, in <module>
  3. File "/home/john/opencv-cuda-4.4.0/lib/python3.7/site-packages/cv2/__init__.py", line 96, in <module>
  4. bootstrap()
  5. File "/home/john/opencv-cuda-4.4.0/lib/python3.7/site-packages/cv2/__init__.py", line 86, in bootstrap
  6. import cv2
  7. ImportError: /home/john/anaconda3/bin/../lib/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var

解决办法:

  1. cd $HOME/anaconda3/lib/
  2. mv libfontconfig.so.1 libfontconfig.so.1.bak
  3. ln -s /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 libfontconfig.so.1

问题: libpangoft2-1.0.so.0

  1. ImportError: /home/john/anaconda3/bin/../lib/libpangoft2-1.0.so.0: undefined symbol: FcWeightToOpenTypeDouble

解决办法:

  1. cd $HOME/anaconda3/lib/
  2. mv libpangoft2-1.0.so.0 libpangoft2-1.0.so.0.bak
  3. ln -s /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 libpangoft2-1.0.so.0

Darknet

编译命令:

  1. export OpenCV_DIR=$HOME/opencv-cuda-4.4.0/lib/cmake
  2. cd ~/Codes/
  3. git clone https://github.com/AlexeyAB/darknet.git
  4. cd darknet/
  5. ./build.sh

运行检查:

  1. $ export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
  2. $ ./darknet v
  3. CUDA-version: 10020 (10020), cuDNN: 8.0.2, CUDNN_HALF=1, GPU count: 1
  4. CUDNN_HALF=1
  5. OpenCV version: 4.4.0
  6. 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 执行

  1. cd ~/Codes/darknet/
  2. export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
  3. export MY_MODEL_DIR=~/Codes/devel/models/yolov4
  4. export MY_COCO_DIR=~/Codes/devel/datasets/coco2017
  5. ./darknet detector test cfg/coco.data cfg/yolov4.cfg \
  6. $MY_MODEL_DIR/yolov4.weights \
  7. -thresh 0.25 -ext_output -show \
  8. $MY_COCO_DIR/test2017/000000000001.jpg

推断结果:

python 执行

Darknet 于其根目录,提供有 Python 接口。如下执行:

  1. cd ~/Codes/darknet/
  2. export LD_LIBRARY_PATH=$HOME/opencv-cuda-4.4.0/lib:$LD_LIBRARY_PATH
  3. export PYTHONPATH=$HOME/opencv-cuda-4.4.0/lib/python3.7/site-packages:$PYTHONPATH
  4. python darknet_images.py -h
  5. python darknet_images.py \
  6. --batch_size 1 \
  7. --thresh 0.1 \
  8. --ext_output \
  9. --config_file cfg/yolov4.cfg \
  10. --data_file cfg/coco.data \
  11. --weights $MY_MODEL_DIR/yolov4.weights \
  12. --input $MY_COCO_DIR/test2017/000000000001.jpg

推断结果,如前一小节。

结语

Let's go coding ~

YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口的更多相关文章

  1. YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集

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

  2. 机器学习caffe环境搭建——redhat7.1和caffe的python接口编译

    相信看这篇文章的都知道caffe是干嘛的了,无非就是深度学习.神经网络.计算机视觉.人工智能这些,这个我就不多介绍了,下面说说我的安装过程即遇到的问题,当然还有解决方法. 说下我的环境:1>虚拟 ...

  3. Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误

    . . . . . 今天把 Ubuntu 14.04 升级到了最新的 4.0.5 的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友. 先 ...

  4. 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 ...

  5. ubuntu 编译运行 opencv C++ 项目

    ubuntu 编译运行 opencv C++ 项目 环境 ubuntu 16.04 opencv3.4.0 一. 编译方法 1)命令行 g++ imageResize.cpp -o resize `p ...

  6. Ubuntu编译安装nginx,php,mysql

    摘要: 整理的Ubuntu编译安装nginx,php,mysql的步骤,主要来自对驻云的sh-1.4.1中脚本的整理,随时代进步,内容中的软件或者命令请自行更新 目录准备 创建用户 userdel w ...

  7. Ubuntu 编译安装 nginx

    有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...

  8. Ubuntu编译安装php7.4

    Ubuntu编译安装php7.4  [root@ubuntu2004 php-7.4.30]#apt install gcc libssl-dev libxml2-dev libsqlite3-dev ...

  9. Ubuntu系统里的python

    Ubuntu系统里,默认安装python2.7.x版本的python,直接执行python命令,打开的将是python 2.7.x版本:python3版本的需要自行安装,安装成功后,执行python3 ...

随机推荐

  1. 6. 二十不惑,ObjectMapper使用也不再迷惑

    一滴水,用显微镜看,也是一个大世界.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  2. 2、Entity Framework Core 3.1入门教程-创建数据库和迁移

    本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解. 视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR ...

  3. 神舟zx6-ct5da装黑苹果Macos 10.15.6记录

    可能是一时脑子抽风,突然就想体验一把mac系统.以前就了解过,给非苹果电脑装macos叫黑苹果,emmmmm.好吧,给我的神船也整一个. 看了很多个视频,整理一下装黑苹果过程.本人电脑系统是win10 ...

  4. 好看的css渐变颜色大全网址

    60个渐变颜色 https://webkul.github.io/coolhue/ 60个非常有用的CSS代码片段 https://baijiahao.baidu.com/s?id=160278735 ...

  5. Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。

    大家好,今天给大家推荐一个我利用图灵api制作的android项目,智能机器人,类似智能小冰,等一些会机器人. 下面看效果.女头像是系统自动给你回复的,男头像是你输入的内容.项目源代码是eclipse ...

  6. Android开发之使一打开activity等界面Edittext获取焦点,弹出软键盘java代码实现

    // 获取编辑框焦点 editText.setFocusable(true); //打开软键盘 IInputMethodManager imm = (InputMethodManager)getSys ...

  7. IE9 报错 script1004缺少“;”

    在IE9中不支持 let关键字,修改为var就可以了 作者:彼岸舞 时间:2020\07\31 内容关于:工作中用到的小技术 本文来源于网络,只做技术分享,一概不负任何责任

  8. C#知识点:I/O

    一.什么是I/0流? 英文翻译:Input/Output,在程序里简单的理解为读写数据操作数据的意思.流操作是为了解决体积大数据占用太多的内存,就是分段进行操作.就跟我们吃饭一样,一口一口的吃,还没见 ...

  9. IFile、File与实体转换

    /** * 根据物理实体文件在开发工程中创建实体文件 */ @Override public void getEntityFilesByErFile(IFile erfile, IFolder ent ...

  10. Python 字符串去除相邻重复的元素

    1 def quchong(S): 2 str1=[""] 3 for i in S: 4 if i == str1[-1]: 5 str1.pop() 6 else: 7 str ...