1. 目录树
新建项目文件夹project_yolov3,建立如下目录树。(并不是一定要这样组织,只是很多项目,
包括官网上面的,都把文件放到darknet的编译目录,显得文件组织结构不清晰)
project_yolov3 - data - - images - - labels - - .names - - train_list.txt - - test_list.txt - cfg - - .data - - .cfg - backup
2. 准备图片、标签文件
将准备训练的图片放在images文件夹;对应的标签放在labels文件夹。
每张图片对应一个同名的label txt文件,比如images/abc.jpg – > labels/abc.txt。
labels文件每行存放一个标注的Boungding Box,一行五个数分别代表类别(从0开始编号),
BoundingBox中心X坐标,中心Y坐标,宽,高。这些坐标都是0~1的相对坐标。比如,图片
的宽和高分别为WIDTH和HEIGHT像素,BoundingBox中心X、Y分别为x、y像素,宽、高
分别为w、h像素,label文件里面的值可以用下面的公式计算:
yolo_x = x/WIDTH yolo_y = y/HEIGHT yolo_w = w/WIDTH yolo_h = h/HEIGHT
未验证:
(1)标签文件可以为空,表示对应的图片里没有目标
(2)如果图片较多,图片和标签可以在各自目录下以相同的目录树存储。
比如:
images - class1 - class2 labels - class1 - class2
3. .names文件
.names文件存放训练的物体类别,比如car、person等,每行一个,和标签文件里面的类别编号
对应,第一行在标签文件里编号为0。
4. train_list.txt和test_list.txt
这两个文件,文件名称并不固定,分别存放训练和测试的图片路径,文件里每行存放一个图片
路径。比如,
PATH/TO/YOUR/PROJECT/project_yolov3/data/images/abc.jpg
5. .data文件
.data文件存放训练的物体类别数目,train_list.txt文件路径等。
例子:
classes= 4 train = PATH/TO/YOUR/PROJECT/project_yolov3/data/train_list.txt valid = PATH/TO/YOUR/PROJECT/project_yolov3/data/test_list.txt names = PATH/TO/YOUR/PROJECT/project_yolov3/data/XXX.names backup= PATH/TO/YOUR/PROJECT/project_yolov3/backup (backup目录下文叙述)
6. .cfg文件
.cfg文件是darknet描述神经网络结构的文件。
在darknet编译目录下面的cfg文件夹,有很多.cfg,比如yolov2.cfg,yolov3.cfg等。
需要根据自己训练的物体种类数目,做一些修改。
[convolutional] size=1 stride=1 pad=1 filters=27###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=4###20 num=9 jitter=.3 ignore_thresh = .5 truth_thresh = 1 random=0###1 classes的值改为物体种类数目,filters的值改为3 * (classes + 5),比如classes = 4,则filters = 3 * (classes + 5) = 3 * (4 + 5) = 27。在.cfg文件中搜索“yolo”,每一个对应的classes,filters都需 要修改。 其它的值,比如batch大小,输入网络的图片的像素等,可以根据自己的需要修改,当出现 “cuda, out of memory”错误,是显存不够的错误,可以改小batch,增大subdivisions;chanels是 图片通道数,比如灰度图像为1,rgb图像为3。.cfg文件的其它部分可以在对网络结构比较熟 悉之后修改,甚至定义自己的网络结构。 batch=64 subdivisions=16 #8 width=416 height=416 channels=3
7. backup目录
backup目录存放训练过程中的权值备份,每100次保存一个XXX.weights,后面产生的会覆盖
之前的,所以它一直是最新的,前9个会同时命名为XXX_100.weights~XXX_900.weights,可
以作为断点备份继续训练。
8. 下载权值文件,训练,测试
参照官网https://pjreddie.com/darknet/yolo/上的说明,下载darknet53.conv.74权值文件(这是
YOLO作者在ImageNet上预训练的权值)。
训练:
./darknet detector train PATH/TO/YOUR/PROJECT/project_yolov3/cfg/XXX.data PATH/TO/YOUR/PROJECT/project_yolov3/cfg/XXX.cfg darknet53.conv.74
测试:
./darknet detector test PATH/TO/YOUR/PROJECT/project_yolov3/cfg/XXX.data PATH/TO/YOUR/PROJECT/project_yolov3/cfg/XXX.cfg XXX.weights XXX.jpg