转载自:https://www.jianshu.com/p/813342202837
系统版本:Ubuntu16.04
显卡:GTX 1070
翻译 + 整理地址: https://pjreddie.com/darknet/install/
YOLO: 是实现实时物体检测的系统,Darknet是基于YOLO的框架
darknet非常容易安装,它只有2个可选择的依赖:
Opencv: 能支持更多格式的图像,并且得到实时的显示
GPU: 利用GPU计算,能大大提升YOLO的识别帧率,画面更加流畅
安装这两个依赖都必须要先安装基础版yolo
---安装基础版yolo---
首先将darknet从github上clone下来:
$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet
$ make
如果正确执行的话,会看到以下内容:
运行以下命令:
$ ./darknet
看到以下效果,即为安装成功:
---基础版yolo测试---
完成上面的操作后,我们可以看到 cfg/目录下已经有了YOLO的配置文件了.
现在为了测试我们的yolo,需要下载官方训练完毕的权重(237MB),或者运行以下命令:
$ wget https://pjreddie.com/media/files/yolov3.weights
下载完毕后,运行以下命令:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
你会看到以下效果:
我们没有使用OpenCV编译Darknet,因此无法直接显示检测结果。相反,它将它们保存在/darknet/predictions.png中。您可以打开它来查看检测到的对象。由于我们在CPU上使用Darknet,每个图像需要大约6-12秒。如果我们使用GPU版本,速度会更快.
在data/目录下还有其他的测试图片,可以尝试一下.
在我尝试利用摄像头进行实时检测的时候,发现识别的速度特别慢,因为此时的程序还是使用的CPU,一帧图像都得要处理6-7秒.所以我们需要给用CUDA+Opencv编译yolo,使之能通过GPU显卡运算,这样速度会提高很多很多.
首先需要注意的是:
Ubuntu GPU驱动 / CUDA版本 / cudnn 版本 都要相互关联,版本不对应的话,就会出错.
版本确认顺序:CUDA版本-->cudnn版本-->Ubuntu GPU版本
安装顺序:Ubuntu GPU版本-->CUDA版本-->cudnn版本
版本确认:
1. 进入https://developer.nvidia.com/cuda-toolkit-archive,确认要安装的cuda版本
这里我选择了CUDA Toolkit 9.0 的版本
2.进入https://developer.nvidia.com/cudnn
点击"download cuDNN",他会要求你进行注册以及一系列的问卷调查,完成以后,用邮箱登录.
在cuDNN的" Installation Guide "中,我们可以看到:
因为先前选择了CUDA 9.0,所以GPU驱动需要R384及以上版本
安装顺序:Ubuntu GPU版本-->CUDA版本-->cudnn版本
---安装Ubuntu GPU驱动---
$ sudo apt update
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ ubuntu-drivers devices
输入以下命令,安装nvidia-384
$ sudo apt install nvidia-384
安装完以后
$ reboot
如果reboot之后再也进入不了桌面系统,恭喜你,可能这样的方法对你不合适 = =
先不要慌 。。。我要遇到了同样的问题,无限坏死中。。。
接着往看下看。。。
---按照步骤reboot后,无法login的解决方法---
1.在你的用户登录界面按ctrl+alt+F1进入tty模式 (ctrl+alt+F7可以返回桌面系统)
2.输入你的账户名和密码
依次运行如下语句:
$ sudo apt-get purge nvidia-*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ reboot
卸载掉刚才安装的所有驱动就可以重新登录桌面系统了,可以在测试几个版本,如果出现同样的问题,那就不是驱动版本的问题了,也有教程说Block内部集显驱动就可以,我试过还是不行,差点把Ubuntu格了重装 = =
但是后来再YouTube上找到了合适的方法,要禁用BIOS系统UEFI的Secure boot,ASUS的台式机非常不正常。。。
禁用Secure boot之后,安装非常顺利,测试v384没有问题
$ nvidia-smi
可用上述命令检查是否安装成功
卸载驱动,以我安装的nvidia-384为例
$ sudo apt-get remove --purge nvidia-384
---安装CUDA---
在先前的版本确认中, 我选择了CUDA Toolkit 9.0的版本,依次选择我们需要的选项.
在Base Installer中,点击download下载.
下载完以后,命令行进入下载路径,运行以下命令进行安装:
$ sudo sh cuda_9.0.176_384.81_linux.run
配置环境变量
https://devtalk.nvidia.com/default/topic/995815/cuda-setup-and-installation/path-amp-ld_library_path/
$ sudo nano ~/.bashrc
用户目录下 .bashrc 文件后面加入下面语句,然后ctrl+o保存。ctrl+x退出
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
然后用下面语句使环境变量生效
$ source ~/.bashrc
再用下面语句检查配置情况
$ nvidia-smi
卸载CUDA
---安装cuDNN---
进入https://developer.nvidia.com/cudnn
点击"download cuDNN",他会要求你进行注册以及一系列的问卷调查,完成以后,用邮箱登录.
因为我们先前安装了CUDA 9.0 ,所以这里我们选择第二项中的" cuDNN v7.1.3 Library for Linux " 进行下载.
下载完成的文件名:cudnn-9.0-linux-x64-v7.1.tgz
配置cuDNN
$ tar -xzvf cudnn-8.0-linux-x64-v6.0.solitairetheme8
$ 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的卸载和安装类似,只要把先前拷贝的文件删除即可.
截止到这里CUDA安装完毕.
安装opencv3.2.0
---使用CUDA 和OpenCV编译Darknet---
修改darknet/ 目录下的Makefile文件
https://blog.csdn.net/dcrmg/article/details/78565350
(1) 将1~3行改为:
GPU=1
CUDNN=1
OPENCV=1
(2) 将23行左右的NVCC路径改为以下代码( 具体路径根据自己的安装版本/位置决定 ):
NVCC=/usr/local/cuda-9.0/bin/nvcc
(3) 将49行左右的ifeq ($(GPU), 1)内容改为:
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand
endif
修改配置完毕后,保存
在darknet/ 目录下运行以下命令:
$ make -j4
$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
效果很好