yolo3训练自己的数据

训练自己的数据主要分为以下几个步骤:

A.数据集制作

1.制作VOC格式的xml文件

工具:labelImg (github上直接下载即可)

2.将VOC格式的xml文件转换成YOLO格式的txt文件

找到darknet/script目录下的脚本:voc_label.py,根据自己的数据集修改执行就行了。
本人设置:
sets = [('2007', 'train'), ('2007', 'val')]
classes=[ ] /一共18种类别

B.文件修改

1.关于 .data .names 两个文件修改非常简单,参考官网YOLOv3.txt连接中的文件。

举个栗子,本人对服务器类别识别训练设置:
.data文件:
classes=18
train=(train.txt所在路径)
valid=(2007_val.txt所在路径)
names=(.names所在文件夹/.names)
backup=(在darcknet下建一个文件夹,可命名为backup)
.names文件:
server.names保存所有服务器类型的名字

2.关于cfg修改,以6类目标检测为例,主要有以下几处调整(蓝色标出)#表示注释,根据训练和测试,自行修改。
[net]
# Testing
# batch=1
# subdivisions=1
# Training
 batch=64

 subdivisions=8

......

[convolutional]
size=1
stride=1
pad=1
filters=33###75

 

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=6###20
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0###1

 

......

[convolutional]
size=1
stride=1
pad=1
filters=33###75
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=6###20
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0###1

......

[convolutional]
size=1
stride=1
pad=1
filters=33###75
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=6###20
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0###1

A.filters数目是怎么计算的:3x(classes数目+5),和聚类数目分布有关,论文中有说明;

B.如果想修改默认anchors数值,使用k-means即可;

C.如果显存很小,将random设置为0,即关闭多尺度训练;

D.其他参数如何调整,有空再补;

E.前100次迭代loss较大,后面会很快收敛;

Region xx: cfg文件中yolo-layer的索引;

Avg IOU: 当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;

Class: 标注物体的分类准确率,越大越好,期望数值为1;

obj: 越大越好,期望数值为1;

No obj: 越小越好;

.5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本

0.75R: 以IOU=0.75为阈值时候的recall;

count: 正样本数目。

本文参考:https://blog.csdn.net/lilai619/article/details/79695109/

你可能感兴趣的:(yolo3训练自己的数据)