ubuntu 16.04基于darknet实践yolo cpu&gpu版

首先从github上下载darknet的代码

git clone https://github.com/pjreddie/darknet.git

成功之后便会在当前目录下有一个darknet文件夹


CPU版

由于Makefile中默认的是cpu,所以不用修改Makefile文件,直接make

编译成功后会生成一个 darknet 的可执行文件,运行时执行 ./darknet 

如果需要使用GPU等可以修改 Makefile 中相应的参数,修改完 Makefile 文件后需要再次 make 一下才能生效。

还需要安装opencv,yolov3要求opencv版本在3.4.2以上。


安装完opencv之后需要打开Makefile文件,将开头的OPENCV=0修改为=1,退出之后进行make编译。


如果make出现错误




解决方案

sudo apt install libopencv-dev

安装完成之后再次进行make即可成功


接下来可以测试opencv是否安装成功

./darknet imtest data/eagle.jpg

会出现很多张图片


可以使用tree -L 2查看darknet的代码结构

如果tree还未安装可以使用sudo apt install tree进行安装

之后输入tree -L 2即可查看代码结构


接下来需要下载一个预训练模型(.weights文件)

wget http://pjreddie.com/media/files/yolov1/yolov1.weights

网慢的话需要下载很久

之后就可以进行简单测试

./darknet yolo test cfg/yolov1.cfg yolov1.weights data/dog.jpg


但是网上很多教程的命令是

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

我试的时候发现不能成功运行,会出现一个错误的类别然后卡住,目前不清楚原因是什么




GPU版

需要先确保安装了opencv

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python

如果提示没有安装pip 需要先进行安装sudo apt install python-pip

首先修改Makefile文件中的一些信息

将GPU、CUDA、OPENCV的值由0改为1


将和cuda有关的路径改为相关的路径



然后保存退出进行make

此时会报错 cudnn.h 找不到

需要安装cudnn

首先去cudnn官网下载所需文件

之后粘贴到cuda安装包路径下相应的位置

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

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

sudo chmod 777 /usr/local/cuda-9.1/include/cudnn.h /usr/local/cuda-9.1/lib64/libcudnn*

然后再次进行make

但还是会报错


提示说 libcudnn.so文件格式识别不到

需要cd 到/usr/loacl/cuda-9.1/lib64/路径下

删除libcudnn.so和libcudnn.so.7

sudo rm libcudnn.so

sudo rm libcudnn.so.7

现在只剩下一个libcudnn.so.7.1.3的文件

用libcudnn.so.7.1.3的文件来生成sudo rm libcudnn.so.7

sudo ln -s libcudnn.so.7.1.3 libcudnn.so.7

这时生成了libcudnn.so.7的文件,再用该文件生成libcudnn.so

sudo ln -s libcudnn.so.7 libcudnn.so

这时便生成了libcudnn.so文件

至此,需要的文件已生成完毕

然后

make clean

make

即可完成编译

之后进行测试

./darknet imtest data/eagle.jpg

会报如下错误

解决方案:

cd /etc/ld.so.conf.d

新建一个conf文件,比如命名为cuda.conf

加权限

sudo chmod 777 cuda.conf

添加内容

vim cuda.conf

添加内容如下:

/usr/local/cuda-9.1/lib64

保存退出之后,还需要使文件生效

sudo ldconfig


再次进行测试

./darknet imtest data/eagle.jpg

会出现如下问题

解决方案:

更新Makefile中的内容

改之前:


改为:


不知道为什么出现了nvidia驱动的问题

输入nvidia-smi会报错

Failed to initialize NVML: Driver/library version mismatch

该问题的解决方案是:重启!!

重启之后再次进行测试

./darknet yolo test cfg/yolov1.cfg yolov1.weights


可以成功检测,最后的WARNING是由于远程登陆了服务器的原因,可忽略也可自行解决。

你可能感兴趣的:(ubuntu 16.04基于darknet实践yolo cpu&gpu版)