YOLO的训练基于GPU要比CPU快非常多,但是基于GPU有一些小坑,再次记录以下;
我用配置是ubuntu18.04 + cuda-9.2
1. 首先确保ubuntu系统是nvidia(训练起来好用)
判断显卡参考:https://blog.csdn.net/lightyoung/article/details/105875533
2.安装相应的版本的cuda和cudnn
这个坑较多,具体可以参考:
https://www.pianshen.com/article/262069239/
https://blog.csdn.net/u010801439/article/details/80483036
介绍比较详细,结合两篇文章进行安装,基本避开坑
安装后及时查看自己的版本,及时找出错误的地方,避免后续难以查找
3.进行yolo的配置
打开darknet/MakeFile文件,进行如下修改:
GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0
CC=gcc
NVCC=/usr/local/cuda-9.2/bin/nvcc #NVCC=nvcc 修改为自己的路径
AR=ar
ARFLAGS=rcs
OPTS=-Ofast
LDFLAGS= -lm -pthread
COMMON= -Iinclude/ -Isrc/
CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC
...
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-9.2/include/ #修改为自己的版本
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-9.2/lib64 -lcuda -lcudart -lcublas -lcurand #修改为自己的版本
endif
修改后进行保存,然后在darknet目录下再次编译:make (一定要make)
编译结束后,再次执行:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
小坑:检测如下显示
...
....
.....
20 CUDA Error: out of memory
darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
已放弃 (核心已转储)
解决办法:在cfg文件夹中找到YOLOv3.cfg文件
需要修改所使用的模型cfg文件中的subdivision的参数。
改成subdivisions=64。
在进行测试即可。