1.下载代码
git clone https://github.com/AlexeyAB/darknet.git
cd darknet
make
2.修改Makefile文件(用CPU训练则忽略此步)
打开darknet下Makefile文件,修改以下参数
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
OPENMP=1
LIBSO=1
DEBUG=1
保存退出,在darknet文件夹下打开终端,执行make
3.测试开源权重
#图片结果保存在darknet/predictions.jpg
./darknet detect cfg/yolov4.cfg yolov4.weights data/person.jpg
4.准备数据集,在scripts文件夹下创建文件夹VOCdevkit(根据下图在VOCdevkit文件夹下创建文件,并放入相应的数据
VOCdevkit
——VOC2007 #文件夹的年份可以自己取,但是要与其他文件年份一致
————Annotations #放入所有xml文件
————ImageSets
——————Main #放入train.txt,val.txt文件
————JPEGImages #放入所有的图片文件
Main中的txt文件是要写文件名,如train.txt里是用来训练的图片的文件名(不包含后缀,只是文件名),这个文件可以用如下代码生成
import os
from os import listdir, getcwd
from os.path import join
if __name__ == '__main__':
source_folder='/home/lka/darknet/scripts/VOCdevkit/VOC2007/JPEGImages'#按照自己存放文件的路径修改
dest='/home/lka/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/train.txt'
dest2='/home/lka/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/val.txt'
file_list=os.listdir(source_folder)
train_file=open(dest,'a')
val_file=open(dest2,'a')
for file_obj in file_list:
file_path=os.path.join(source_folder,file_obj)
file_name,file_extend=os.path.splitext(file_obj)
file_num=int(file_name)
if(0<file_num<175): #按照图片的数量和编号划分数据集,我这里文件的编号为1-250,以1-175为训练集,其余为验证集
train_file.write(file_name+'\n')
else :
val_file.write(file_name+'\n')
train_file.close()
val_file.close()
5.修改scripts下的voc_label.py,这个文件就是根据Main中txt里的文件名,生成相应的txt,里面存放的是它们的路径
sets=[('2007', 'train'), ('2007', 'val')] #这里要与Main中的txt文件一致
classes = ["Flammable"] #你所标注的类别标签名
os.system("cat 2007_train.txt 2007_val.txt 2012_train.txt 2012_val.txt > train.txt")
#os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")
#文件最后一句,意思是要将生成的文件合并,所以很据需要修改,这里的年份都是一致的
修改完了之后在scripts下执行voc_label.py
,运行后生成 2007_train.txt、2007_val.txt、train.txt,如图
同时,主目录darknet下的scripts/VOCdevkit/VOC2007/下面会生成一个label文件夹
6.修改配置文件
修改cfg/coco.data
classes= 1 #类别数
train = /home/lka/darknet/scripts/2007_train.txt #训练集路径
valid = /home/lka/darknet/scripts/2007_val.txt #测试集路径
#valid = data/coco_val_5k.list
names = /home/lka/darknet/cfg/coco.names #自己的类别
backup = /home/lka/darknet/backup/ #权重保存地址
eval=coco
修改cfg/coco.names,改成自己类别的名称
7.修改cfg/yolov4-custom.cfg
8 width=416 #修改width和height为416
9 height=416
20 max_batches = 6000 #修改最大batch迭代多少个数max_batches = 6000
21 policy=steps
22 steps=4800,5400 #修改steps多久学习率下降一次,一般设置为batch个数的80%和90%
然后三个classes的地方要修改,分别为第970,1058和1146行
970 classes=1
还有三个filters=255的地方要修改成自己的
963 filters=18 #(类别数+5)*3
8.开始训练
下载权重 yolov4.conv.137
链接:https://pan.baidu.com/s/1yhB8pRcGH84gyRWeNictBA
提取码:gi4d
下载好放入主目录中
./darknet detector train cfg/coco.data cfg/yolov4-custom.cfg yolov4.conv.137
如果要使用gpu的话输入以下
./darknet detector train cfg/coco.data cfg/yolov4-custom.cfg yolov4.conv.137 -gpus gpu_id #加上gpu编号
9.预测
./darknet detector test cfg/coco.data cfg/yolov4-custom.cfg backup/yolo-custom_1000.weights data/test.jpg