【深度学习】YOLO-Darknet安装与测试

由于最近需要在无人机上做一些目标识别的任务,经过一番调研,决定使用YOLO v3的darknet版本,以方便其在TX2这样的设备上部署

darknet非常容易安装,它只有2个可选择的依赖:
1. Opencv: 能支持更多格式的图像,并且得到实时的显示
2. GPU: 利用GPU计算,能大大提升YOLO的识别帧率,画面更加流畅

安装这两个依赖都必须要先安装基础版yolo

1. 安装基础版yolo

git clone https://github.com/pjreddie/darknet.git
cd darknet
sudo make
  • 测试
./darknet

说明安装完成

  • 下载权重文件
wget https://pjreddie.com/media/files/yolov3.weights
  • 测试检测结果
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

我们没有使用OpenCV编译Darknet,因此无法直接显示检测结果。相反,它将它们保存在/darknet/predictions.png中。您可以打开它来查看检测到的对象。

2. 测试opencv

前提是opencv已经成功安装

  • 修改darknet下的Makefile文件第三行值为1
    OPENCV=1

  • 重新make工程
make
  • 测试
./darknet imtest data/eagle.jpg

会显示很多图片,说明opencv已经配置好了

这样运行darknet后就会有图像输出啦

3. 使用CUDA和OPENCV 编译darknet

前提是cuda已经安装好

  • 修改darknet下的Makefile文件
  1. 第1-3 行
GPU=1
CUDNN=1
OPENCV=1

如果cuda没有加入环境变量
需要修改

  1. 第24行左右

修改为nvcc路径(根据自己的cuda路径修改)

NVCC=/usr/local/cuda-10.0/bin/nvcc

如果你在TX2或TX1 上编译darknet

CSDN-专业IT技术社区-登录​blog.csdn.net/zong596568821xp/article/details/98591012

  1. 将前三个设置为1,并将ARCH改为如下
GPU=1
CUDNN=1
OPENCV=1
......
# Note that CUDA architecture of TX2 is “62”, while TX1 “53”.
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53] \
      -gencode arch=compute_62,code=[sm_62,compute_62]

2. 重新make项目

make

3.测试

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

问题

  1. cudnn.h
include/darknet.h:16:23: fatal error: cudnn.h: No such file or directory

查看是否安装cudnn

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

如果输出

cat: /usr/local/cuda/include/cudnn.h: No such file or directory

表示没有安装cudnn

  • 安装cudnn

进入官网

https://developer.nvidia.com/cudnn​developer.nvidia.com/cudnn

下载对应cuda版本的cudnn tar文件

tar -xzvf cudnn-*.tar(刚刚下载的文件)

sudo cp cuda/include/cudnn.h /usr/local/cuda/include

sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

cuDNN的卸载和安装类似,只要把先前拷贝的文件删除即可.

2. CUDA Error: out of memory

darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
Aborted (core dumped)

更改cfg目录下的yolov3.cfg,把subdivisions=16

改为subdivisions=64即可

主要参考:

https://pjreddie.com/darknet/install/​pjreddie.com/darknet/install/

YOLO-Darknet安装​www.jianshu.com/p/813342202837​编辑

darknet是yolo算法的作者Joseph Redmon使用c语言编写的一个开源卷积神经网络训练框架

如果项目中用到了yolo卷积神经网络模型,darknet框架是你的不二之选

darknet项目开源地址:https://github.com/pjreddie/darknet

darknet作者(也是yolo的主要作者)维护官网:https://pjreddie.com/darknet/

darknet作者给出的安装教程:https://pjreddie.com/darknet/install/

Linux操作小提示:

1、linux下绝大部分命令都可以通过tab键补全,一次tab不行就两次,特别遇到打开比较长的文件名目录时,非常高效,输入开头几个字母,剩下的交给tab键

2、linux终端中复制操作为ctrl+insert(或者ctrl+shift+c),粘贴操作min为shift+insert(或者ctrl+shift+v)

安装前的说明:

想要使用GPU加速功能,显卡必须是NVIDIA的,同时必须在真实硬盘上的操作系统上才能使用,不能使用虚拟机

没有NVIDIA的GPU,也可以使用darknet,只是训练速度相对不快。

一、Linux下安装darknet 
ctrl+Alt+T打开一个linux终端,输入以下命令

git clone https://github.com/pjreddie/darknet.git
这条命令将会从github上克隆darknet最新的版本文件到当前目录下

你也可以先通过cd命令进入到指定的目录下,再使用git clone命令,将darknet下载到指定的目录

 出现错误,未安装git,按照提示进行修复

sudo apt-get update
sudo apt install git


 再次运行git clone命令,成功clone到本地,可以在当前目录下看到darknet文件夹


 

下载的darknet文件夹还无法直接使用,需要先编译一下,生成二进制文件,再由计算机执行二进制文件,才能运行框架

下面开始编译darknet,编译之前需要先安装make(一个自动化的编译工具),如果已安装make,可省略这一步

sudo apt install make
sudo apt install make-guile
 又出现错误了,按照网上教程,删除这两个文件

sudo rm -r -f /var/lib/dpkg/lock-frontend
sudo rm -r -f /var/lib/dpkg/lock
sudo rm -r -f /var/cache/apt/archives/lock
sudo rm -r -f /var/cache/apt/archives
 

依次安装make和make-guile,也可以只安装make,安装make后可通过命令行操作,安装make-guile后可以在GUI界面操作

进入darknet目录,执行make命令,出现错误,gcc也没安装

原谅这是我是刚安装好的linux,只安装了一个搜狗输入法和wps

sudo apt install gcc


再执行make命令进行编译,结果发现g++也没安装,

但这对于我这样的新手来说,error是家常便饭

 继续安装g++

sudo apt install g++


再次执行make,终于成功了

make工具会根据darknet目录下已经存在的Makefile文件来编译源程序文件(darknet源程序用C语言编写),并生成二进制文件

Makefile文件制定了编译的一系列规则,当改变Makefile文件内容后,需要再次执行make命令才能生效

 make完成之后,darknet文件目录下多出了一些文件,其中,darknet为二进制文件,可以看成是darknet框架的运行文件,*.a为静态链接库,*.so为动态链接库

测试安装结果,运行darknet框架,.表示当前目录(..表示上一级目录),darknet就是上一步make生成的二进制文件

./darknet


当出现图中所示结果时,说明我们已经能够使用darknet框架,可以开始yolo训练之旅了

我们可以先使用imtest命令测试图像加载和显示,看一下效果

测试图片为data目录下的egle.jpg,你也可以尝试其它图片

./darknet imtest data/eagle.jpg


出现了一堆长相一样的老鹰的图像,测试成功

根据提示信息,发现我们没有安装OpenCV

我们最好安装一下OpneCv,因为这样可以方便的加载各种格式的图像和视频,还可以调用摄像头

如果不安装OpenCV,也是可以使用darknet的,此时请直接跳到第三步。

(OpencV的作用就是更方便的加载图像和视频,如果不用OpenCV,框架也可以正常运行)

二、OpenCV安装
OpenCV官方安装教程  https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

执行cd命令,跳转到指定目录下,(..表示回到上一级目录)

OpencV有稳定版和最新版两种,本文使用最新版本,详情请看OpenCv官网

1、从github上克隆最新的OpenCV核心库到本地

cd ..
git clone https://github.com/opencv/opencv.git


当发现下载速度比较慢的时候可以考虑直接从github上下载zip文件到本地

下载地址:https://github.com/opencv/opencv

2、克隆OpenCV的扩展库OpenCV_Contrib到本地,如果不安装扩展库,也是可以使用OpenCV的,但是建议安装

git clone https://github.com/opencv/opencv_contrib.git
同样,如果觉得下载过慢,可以直接到github下载zip文件到本地 

github 下载地址:https://github.com/opencv/opencv_contrib

移动扩展库文件到opencv目录下,并提取文件(解压)

终端解压命令:unzip 文件名,也可鼠标右键提取文件

注意文件名后缀,git clone时没有master后缀,使用zip下载时有master后缀

3、添加opencv所需要的依赖库

下面三条命令是官方给出的

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
第一条命令安装了一个build-essential库,可以方便的进行编译

编译程序有了这个软件,它才知道头文件和库函数在哪,最后才形成一个开发环境。

第二条命令安装了一个cmake、git等等软件,其中cmake是一个跨平台的编译工具,比make更加高级

第二条命令安装了一些库,包括python等等

执行第三条安装命令时出错,主要是libjasper-dev无法安装,需要添加镜像源,执行下面的命令解决

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
 

再执行第三条命令

4、开始编译OpenCV

在opencv目录下创建文件夹 build(可以根据自己习惯命名为其他名字)

cd opencv
mkdir build
cd build
 在编译前查看opencv_contrib文件夹名称,如果采用git下载,那就是这个名称

如果是zip下载后解压,文件名就是opencv_contrib_master,可以考虑重命名为opencv_contrib

使用cmake编译opencv及其扩展库源文件到当前目录下,OpenCV默认安装路径为/usr/local

注意命令中结尾的扩展库源文件名要与实际保持一致,请自行确认

如果没有下载扩展库,那么OPENCV_EXTRA...及之后的命令不再需要

在build目录下,执行下面命令

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
cmake能够生成一系列的cmake等文件和最终的MAkefile文件,再由make工具调用Makefile等文件进行最后的编译

 cmake成功 

 使用make编译opencv

cd opencv/build
make
 编译过程非常漫长,如果处理器有多个核的话,可以将make替换为以下命令加快编译速度

make -j4
参数4代表使用4核,根据自己的硬件情况选择 ,make命令默认使用1核

 make编译成功

 注意:可能会发生internal compiler error: Killed (program cc1plus)错误

这是因为虚拟机内存不足,可以考虑暂时给虚拟机分配大一点的内存,编译完成后再恢复原来的设置

在bulid目录执行以下命令,安装使用opencv所需要的库

sudo make install


5、测试安装结果

输入下面命令可查看当前OpencV安装版本

opencv_version


6、在Python中使用opencv

python
import cv2
 当没有出现任何错误提示时,表示我们可以在python程序中使用OpenCV

7、在darknet中使用opencv

如果安装了OpenCV,并且要启用opencv的话,打开darknet目录下的Makefile文件,将第三行改为OPENCV=1

修改Makefile文件后需要再次make,才能生效

make
 make之后出现以下错误信息,没有发现opencv

 解决办法,安装一个OpencV依赖包libopencv-dev

sudo apt install libopencv-dev


再次make后成功

 如果上述还不能解决,尝试以下解决办法

安装搜索工具mlocate

sudo apt-get install mlocate
 定位文件opencv.pc

locate *opencv.pc*


选择一个添加到环境变量中

sudo gedit /etc/profile
 在文件的最后一行加上类似这样的一句

export PKG_CONFIG_PATH=/home/lishan/miniconda3/lib/pkgconfig/:$PKG_CONFIG_PATH
 注意:请根据自己搜索到的路径设置,上面是我的路径,仅供参考

加载环境变量,再次编译(以后每次编译前都要先加载环境变量文件)

source /etc/profile
make
 

三、CUDA安装
只有NVIDIA的显卡(一般以GTX、RTX开头)才支持CUDA,如果没有NVIDIA的显卡,请直接到第四步

CUDA是英伟达推出的通用并行计算架构(这个通用意思是支持英伟达自家的所有显卡),利用这个架构,可以把一部分计算工作交给GPU,特别是图像处理中的大规模矩阵运算,这样可以加快模型的训练和处理速度。

使用命令下面查询当前主机上的显卡设备

lspci | grep VGA


 遗憾的是,虚拟机上的显卡是模拟的,所以即使主机安装了NVIDIA的显卡,在虚拟机中还是无法安装CUDA

所以,要想安装cuda,并使用gpu加速,必须将linux系统安装在真实硬盘上,同时显卡得是NVIDIA的才行

四、yolo下载
在darknet-->cfg目录下(config的缩写),可以看到yolo模型各种版本的配置文件

只有配置文件还不行,需要下载yolo网络训练权重文件

我们下载yolov3的权重文件(已经训练好的文件),执行以下命令

cd darknet
wget https://pjreddie.com/media/files/yolov3.weights
权重文件237MB左右,同样,如果觉得下载过慢,可以使用一些下载工具,比如xdown,复制链接,下载即可

再从windows下复制粘贴文件到darknet目录下

当然你可以放在任意位置,但是要记住它的路径,因为后面需要用到这个文件

回过头来,在darknet->data文件夹下有几张示例图片,比如这张经典的小狗

我们将尝试使用刚才下载的yolov3权重文件和yolov3的配置文件对这张小狗进行检测

运行一下检测效果

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
刚才的命令是一个简写版,它与下面的完整版的命令功能一致

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
 上面的命令表示:运行darknet框架进行测试,其中

数据指向文件为./darknet/cfg/coco.data(默认)

网络配置文件为./darknet/cfg/yolo3.cfg

网络权重文件为./darknet/yolov3.weights

待检测图片为./darknet/data/dog.jpg

输出检测图片默认保存在darknet目录下

下面是见证奇迹的时刻

识别到三个物体,分别是dog、truck、bicycle,花费时间33秒左右,如果使用GPU,这个时间要短一些

保存的图片在darknet目录下,名字为predictions.jpg

你可以尝试使用data目录下的其他图片进行检测

未完待续,下一节我们将讨论yolo模型的一些理论知识

附1 xdown下载链接(只支持windows):https://xdown.org/

附2 XDM下载链接(支持windows、linux、mac)https://subhra74.github.io/xdm/ 

 安装命令:

#进入文件所在目录,根据自己情况修改
cd 下载/xdm-setup-7.2.10
 
#运行安装脚本
sudo sh install.sh
 

双击启动XDM

新建一个下载任务,粘贴下载链接

附3:Chrome浏览器的中文翻译

进行深度学习时,我们不可避免的会浏览英文网页,对于英语基础不是很好的朋友来说,这似乎是一种痛苦。

所以我推荐使用Chrome浏览器,因为在浏览英文网页时,鼠标右键可以看到翻译中文模式,如下

但是我还是建议大家克服英语的恐惧,从一些常见的单词慢慢熟悉,通过单词翻译软件,有意识的记忆,

日积月累,英语网页的阅读速度会慢慢提高
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/lishan132/article/details/106347679/

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值