本文总结yolo作者实现的darknet版本的yolo3训练数据集格式。
最终数据集需要3个文本文件和2个目录:
train.txt # 文本文件,保存训练图片目录列表
test.txt # 文本文件,保存测试图片目录列表
class.names # 文本文件,保存分类名称
labels # 目录,保存每个图片的边界框和分类信息
JPEGImages # 目录,保存所有的图片
这两个文本文件格式很简单,每行一个图片的绝对路径即可。
内容如下:
/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
...
这个文件用于存储各个分类的名字,每个分类一行
我的例子只有两个分类:
dm
zc
存储图片的目录。所有的图片在这个目录下并列排放,不需要分子目录。
需要注意的是,JPEGImages必须和labels在同一个目录下。因为darknet程序是按照这个约定去寻找图片的。
这个目录下存放所有的标注信息,每个图片一个对应的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
按照需求修改Makefile
GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0
在显卡机器上,我修改了最上面两行。然后make以下,生成darknet可执行文件及so库。
wget https://pjreddie.com/media/files/darknet53.conv.74
可以从官方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
我修改后的内容(有框的地方就是修改的地方,主要加快训练,减少训练步数)
数据集配置文件一般以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 # 生成模型的存放目录
./darknet detector train yolo3_cfg/daimao.data yolo3_cfg/yolov3-voc.cfg darknet53.conv.74
生成的weights文件存在backup目录下。
官网 YOLO: Real-Time Object Detection
github源码
yolo3训练自己的数据集