主要参考博客
辅助参考博客
评价参考博客
本人电脑ubuntu系统,2080ti,cuda10.0,cudnn7.6,python3.6
最开始电脑的cuda是9.0,cudnn7.6,参考博客:主要参考博客的时候在测试预训练好的模型的时候发生错误:
cuDNN status Error in: file: ./src/convolutional_kernels.cu : () : line: 544 :
这个博客的作者也是cuda9.0没有遇到我的错误,但是作者的电脑是1080ti的,我自己百度以后说是2080ti最好用cuda10.0,所以我参考博客将cuda9.0改为了cuda10.0.不在报错。
项目代码
如果需要使用GPU加速,那么得打开项目里面的makefile文件修改一些参数的值。
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
OPENMP=1
LIBSO=1
DEBUG=1
修改之后,cd darknet-master
目录下,直接make
。
但是,我报错了,是opencv有问题,可能是版本问题。解决办法就是将opencv修改一下:
OPENCV=0
测试代码:./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
结果会保存在darknet-master目录下的predictions.jpg。
build/darknet/x64/data/voc/voc_label.py
,修改voc_label.py里面的内容:sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]
classes = ["normal", "defect", "norbolt", "debolt"]
接着给每个路径前面加个data,一共7处
26行27行:
in_file = open('data/VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
out_file = open('data/VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')
48行到53行:
if not os.path.exists('data/VOCdevkit/VOC%s/labels/'%(year)):
os.makedirs('data/VOCdevkit/VOC%s/labels/'%(year))
image_ids = open('data/VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
list_file = open('%s_%s.txt'%(year, image_set), 'w')
for image_id in image_ids:
list_file.write('%s/data/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))
修改之后,回到主目录,cd darknet-master
执行命令:
python ./build/darknet/x64/data/voc/voc_label.py
运行代码。
然后发现darknet-master/data/VOCdevkit/VOC2007
目录下多了一个labels文件夹,里面存的是所有图片的txt文件。同时darknet-master目录下,多了三个txt文件:train_2007.txt;test_2007.txt;val_2007.txt。将这三个文件放到data目录下。
coco.data
,并且重命名为obj.data
。然后使用修改下面以下内容:classes= 4 # 自己的类别数
train = ./data/2007_train.txt #训练数据集文件路径
valid =./data/2007_val.txt
#valid = data/coco_val_5k.list
names = cfg/obj.names #自己类别的名字文件
backup = backup/ # 训练好的网络权重保存路径
eval=coco
normal
defect
norbolt
debolt
width=416 # 608
height=416 # 608
20行22行:
max_batches = 6000 # 500500
steps=4800,5400 ## 400000,450000
上图中修改width和height为416,修改最大batch迭代多少个数max_batches = 6000,修改steps多久学习率下降一次,一般设置为batch个数的80%和90%。
然后三个classes的地方要修改:
classes = 4 ##80 # 970 1058 1146行附近
还有三个filters=255的地方要修改成自己的。
filters=27 # 255 # (类别数+5)*3
# 963 1051 1139行附近
下载预训练权重:
如若报错关于mosaic这个错误,则将cfg/yolo-obj.cfg 里面26行mosaic=1改成mosaic=0或者注释掉。没报错就忽略。
代码:主目录下进行评价:./darknet detector map cfg/obj.data cfg/yolo-obj.cfg backup/yolo-obj_last.weights
对训练好的权重进行评价。权重在backup下,可以自己查看评价哪一个权重。
目前只会单张测试:
./darknet detector test cfg/obj.data cfg/yolo-obj.cfg yolo-obj_xxxx.weights
然后会让你输入图片路径,可以随便测试一张输入:./data/VOCdevkit/VOC2007/JPEGImages/000001.jpg
,回车,结果会显示在predictions.jpg中。
如果会批量测试可以告诉我一下,感谢!
代码只是跑通,任何细节都没有看呢。。。