由于最近需要在无人机上做一些目标识别的任务,经过一番调研,决定使用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-3 行
GPU=1
CUDNN=1
OPENCV=1
如果cuda没有加入环境变量
需要修改
- 第24行左右
修改为nvcc路径(根据自己的cuda路径修改)
NVCC=/usr/local/cuda-10.0/bin/nvcc
如果你在TX2或TX1 上编译darknet
CSDN-专业IT技术社区-登录blog.csdn.net/zong596568821xp/article/details/98591012
- 将前三个设置为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
问题
- 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/cudnndeveloper.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/