由于最近需要在无人机上做一些目标识别的任务,经过一番调研,决定使用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- 将前三个设置为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下载对应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
即可