超详细:自制yolo3训练数据集总结

概述

本文总结yolo作者实现的darknet版本的yolo3训练数据集格式。

数据集文件目录

最终数据集需要3个文本文件和2个目录:

    train.txt  # 文本文件,保存训练图片目录列表
    test.txt   # 文本文件,保存测试图片目录列表
    class.names # 文本文件,保存分类名称
    labels # 目录,保存每个图片的边界框和分类信息
    JPEGImages # 目录,保存所有的图片

train.txt和test.txt

这两个文本文件格式很简单,每行一个图片的绝对路径即可。

内容如下:

/yolo3_dateset_181224/JPEGImages/983_2018_11_27_08_43_25_167090_7980.jpg
/yolo3_dateset_181224/JPEGImages/952_2018_11_27_15_13_33_062760_6636.jpg
/yolo3_dateset_181224/JPEGImages/970_2018_11_27_13_04_22_315053_6764.jpg
/yolo3_dateset_181224/JPEGImages/994_2018_11_27_09_12_57_493763_4692.jpg

...

class.names

这个文件用于存储各个分类的名字,每个分类一行

我的例子只有两个分类:

dm
zc

JPEGImages

存储图片的目录。所有的图片在这个目录下并列排放,不需要分子目录。

需要注意的是,JPEGImages必须和labels在同一个目录下。因为darknet程序是按照这个约定去寻找图片的。

labels

这个目录下存放所有的标注信息,每个图片一个对应的txt文件,txt文件必须和图片名字相同(后缀不同)。

# ls  yolo3_dateset_181224/labels/
983_2018_11_27_08_43_25_167090_7980.txt  # 注意它的名字和图片是相同的
2018_10_25_14_06_26_956996_7112.txt     

...

每个txt文件可以有多行,每行标注一个bbox和一个分类。

每行格式如下:

class_index center_x cnter_y w h

每行五个字段,用空格分开。第一个字段class_index是分类的序号,从数字0开始,对应class.names里的顺序。center_x和cnter_y是bbox中心的坐标,w和h是bbox的宽和高。注意着四个值都是小于1的浮点数,center_x和w是绝对值除以图片宽度得到的,cnter_y和h是绝对值除以图片高度得到的。

例子:

1 0.543125 0.353333333333 0.25125 0.56

启动训练前的其它准备

1. 编译生成darknet

按照需求修改Makefile

GPU=1   
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0

在显卡机器上,我修改了最上面两行。然后make以下,生成darknet可执行文件及so库。

2. 下载预训练的 darknet53

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

3. 准备网络配置文件

可以从官方github上下载一个模板来改,我用的yolov3-voc.cfg来修改。
具体修改方法可以参考文末的《yolo3训练自己的数据集》。

除了文中对应的字段,我还修改了文件开头的训练总步数:
原始内容:

[net]
# Testing
 batch=1
 subdivisions=1
# Training
# batch=64
# subdivisions=16
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 50200
policy=steps
steps=40000,45000
scales=.1,.1

我修改后的内容(有框的地方就是修改的地方,主要加快训练,减少训练步数)

超详细:自制yolo3训练数据集总结_第1张图片

4. 准备数据集配置文件xx.data

数据集配置文件一般以data结尾。我的例子中命名为daimao.data。

$ cat  yolo3_cfg/daimao.data 
classes= 2  # 类个数
train  = ./yolo3_dateset_181224/train.txt  # 训练图片名单文件
valid = ./yolo3_dateset_181224/test.txt   # 测试图片名单文件
names =  ./yolo3_cfg/daimao.names # 类名文件
backup = ./backup  # 生成模型的存放目录

5. 启动训练

./darknet detector train yolo3_cfg/daimao.data  yolo3_cfg/yolov3-voc.cfg  darknet53.conv.74

生成的weights文件存在backup目录下。

参考资料

官网 YOLO: Real-Time Object Detection

github源码

yolo3训练自己的数据集

你可能感兴趣的:(机器学习,DL/ML/AI,深度学习,目标检测,深度学习论文笔记和实践)