首先从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是由于远程登陆了服务器的原因,可忽略也可自行解决。