0%

YOLOv3训练自定义数据集

下载官方版yolov3项目工程

1
2
3
4
git clone https://github.com/pjreddie/darknet
cd darknet
# 如需使用GPU,将Makefile中的GPU赋值为1
make

修改/darknet/scripts/VOCdevkit文件夹结构如下

1
2
3
4
5
6
7
VOCdevkit 
——VOC2019 # 文件夹名可以自己取,但是要与其他文件一致
————Annotations # 放入所有的xml文件
————ImageSets
——————Main # 放入train.txt,val.txt文件
————JPEGImages # 放入所有的图片文件
————labels # 放入yolo所需的txt数据

使用labelImg为图片打VOC标注生成xml文件,运行voc_label.py将xml标注转成txt标注(或直接利用labelImg生成YOLO所需的txt标注,可省去xml转txt这一步)
新建cfg/my_voc.data

1
2
3
4
5
classes= 5 # 标签数量
train = /darknet/scripts/2019_train.txt # train的路径为训练样本集所在的路径
valid = /darknet/scripts/2019_val.txt # valid的路径为验证样本集所在的路径
names = data/my_voc.names # data/my_voc.names文件所在的路径
backup = backup

新建data/my_voc.name

1
2
3
4
5
6
# 填入自定义class_name
lesser panda
panda
swan
peacock
white crane

将cfg/yolov3-voc.cfg复制为cfg/my_yolov3-voc.cfg并修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64 # 每批训练多少张图片
subdivisions=8 # 如cuda报错内存不足,可增大subdivision解决,注意其值不能超过batch
......
[convolutional]
size=1
stride=1
pad=1
filters=30 # 修改为3*(classes+5)
activation=linear
[yolo]
mask = 6,7,8
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=5 # 修改为标签数量
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0 # 初始值为1,如果显存很小,将random设置为0,关闭多尺度训练
......
[convolutional]
size=1
stride=1
pad=1
filters=30 # 修改同上
activation=linear

[yolo]
mask = 3,4,5
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=5 # 修改同上
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0
......
[convolutional]
size=1
stride=1
pad=1
filters=30 # 修改同上
activation=linear

[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=5 # 修改同上
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0

下载预先训练好的权重

1
wget https://pjreddie.com/media/files/darknet53.conv.74

训练模型

1
2
3
4
5
# 基于训练好的darknet权重训练
./darknet detector train cfg/my_voc.data cfg/my_yolov3-voc.cfg darknet53.conv.74
# 从头重新训练
./darknet detector train cfg/my_voc.data cfg/my_yolov3-voc.cfg
# 用多gpu训练可以使用 -gpus 参数,如双gpu训练为 -gpus 0,1

训练后会在backup文件夹下生成权重文件,利用生成的权重文件进行检测

1
./darknet detector test cfg/my_voc.data cfg/my_yolov3-voc.cfg backup/my_yolov3-voc_100.weights data/test.jpg