最近导师让跑一下yolo算法,给了我一个jetson TX2 的板子。
内部环境: ubuntu16 + cuda-9.0 ,然后其他的都是原来学长留下来的,所以因为不懂,走了很多坑。
下面说一下 进行 YOLO 算法从 测试的过程:
1、dartnet 的架构配置(GPU)
为了好管理,我是自己在主目录下创建了一个名字为 yolo 的文件。然后在yolo 文件里打开终端:
git clone https://github.com/pjreddie/darknet.git
用于下载dartnet 的架构,完成后会在 yolo 文件夹中生成一个 dartnet 文件夹,然后 cd 进去:
然后在 dartnet 文件夹中找到 Makefile 文件,使用 gedit 打开 修改如下:
GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=1
NVCC=/usr/local/cuda-9.0/bin/nvcc
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-9.0/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand
一定要主要文件路径,特别是 NVCC 那里,我就是因为这里路径搞错了,走了好多歪路。
完成后,在dartnet 为终端中进行 make
编译
如果出现 image_opencv.cpp 的 文件出的一个函数 image mat_to_image(Mat m) 中的
IplImage ipl = m
; 出现问题。这是由于 opencv 的版本为问题导致的,IplImage
与 mat
类型的转换需要改成:
IplImage ipl = cvIplImage(m);
在进行 make
如果 dartnet 文件中出现了 名为dartnet的执行文件,就算编译完成了。
下面就是下载权重:
wget https://pjreddie.com/media/file/yolov3-ting.weights
wget https://pjreddie.com/media/file/yolov3.weights
下两个的原因是,其中一个权重可能会在运行时出现自动 killed 的情况出现,比如我就是在使用yolov3.weights 时出现了自动 killed 退出的状态(一般是内存问题),但是在使用 yolov3-ting.weights 时就是运行成功了。还有就是在使用 wegt 时会出现问题(无法解析主机地址),解决方法是:
sudo gedit /etc/resolv.conf
添加:
nameserver 8.8.8.8
nameserver 8.8.4.4
保存退出,在继续使用wget。
完成后,将 yolov3-ting.weights 与 yolov3.weights 都放到 dartnet 的文件目录下,然后执行:
./dartnet detect cfg/yolov3-ting.cfg yolov3-ting.weights data/dog.jpg
如果前面 opencv = 1 则会有图像出来,如下: