Darknet图像训练的步骤
一、配置清单制作
1、创建yolo-voc.2.0.cfg的副本,并重命名为:yolo-obj.cfg
2、更改内容:batch=64
3、更改内容:subdivisions=8
4、更改classes=20 中的20为你将要训练的分类数量。
5、更改filters=125 中的125为 (classes+5)*5的值即:(classes+coords+1)*num。如:
[convolutional]
filters=35
[region]
classes=2
6、在相对目录./data/下创建obj.names文本文件,并依次按索引输入一行一个类别名称。
7、在相对目录./data/下创建obj.data文本文件,并录入如下内容,其中classes表示分类数量。
classes= 2
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
8、将要训练的.jpg文件放在目录./data/obj/下。
9、给每个.jpg文件创建一个同名的.txt文件,并按如下格式一行记录一个类别:<类别索引:从0开始> <类别中心相对坐标x:该类别框图的中心坐标x/整张图像宽度> <类别中心相对坐标y:该类别框图的中心坐标y/整张图像高度> <类别相对宽度:该类别框图宽度/整张图像宽度><类别相对宽度:该类别框图宽度/整张图像高度>:
<x> = <absolute_x> / <image_width>
<height> = <absolute_height> / <image_height>
1 0.716797 0.395833 0.216406 0.147222
0 0.687109 0.379167 0.255469 0.158333
1 0.420312 0.395833 0.140625 0.166667
10、在目录./data/下创建train.txt文件,一行一个要训练的jpg文件名,路径写相对主程序所在路径:
data/obj/img1.jpg
data/obj/img2.jpg
data/obj/img3.jpg
11、下载卷积层的预训练模型到./ (程序同目录下):http://pjreddie.com/media/files/darknet19_448.conv.23
二、开始训练:
1、开始训练,使用命令:darknet.exe detector train data/obj.data yolo-obj.cfg darknet19_448.conv.23
2、训练超过1000次迭代后,中途也可以停止训练,继续训练请使用还原点开始: darknet.exe detector train data/obj.data yolo-obj.cfg yolo-obj_1000.weights
3、你也可以在45000次迭代前,取得结果。
三、何时停止:
1、当训练过程中,平均Loss(error)不再减少时(Loss越小效果越好),可以停止。如下例中的9002表示当前已迭代次数,0.060730 avg表示Loss。
Region Avg IOU: 0.798363, Class: 0.893232, Obj: 0.700808, No Obj: 0.004567, Avg Recall: 1.000000, count: 8 Region Avg IOU: 0.800677, Class: 0.892181, Obj: 0.701590, No Obj: 0.004574, Avg Recall: 1.000000, count: 8
9002: 0.211667, 0.060730 avg, 0.001000 rate, 3.868000 seconds, 576128 images Loaded: 0.000000 seconds
2、训练开始后,从产生的backup目录下的多个还原点中,挑一个最好的。方法是:
(1)在obj.data文件中,修改valid=valid.txt(格式和train.txt一样),然后使用下列命令检测每个训练结果的效果。
- darknet.exe detector recall data/obj.data yolo-obj.cfg backupyolo-obj_7000.weights
- darknet.exe detector recall data/obj.data yolo-obj.cfg backupyolo-obj_8000.weights
- darknet.exe detector recall data/obj.data yolo-obj.cfg backupyolo-obj_9000.weights
(2)对比输出的结果中IOU(精度,越大越好,比较这个),Recall(也算精度,也是越大越好)。
7586 7612 7689 RPs/Img: 68.23 IOU: 77.86% Recall:99.00%
(3)测试检测效果: darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
四、提升效果:
1、在训练前,设置cfg文件中random=1,它可以让不同分辫率的图片训练后产生更高的精度。
2、训练的图片最好能从多个方面提供不同的:缩放大小、旋转角度、光照强弱。
3、提高网格分辩率,方法是:设置cfg文件中height=416和weight=416中相应值为(32的倍数),可以适当提高,用来检测小物体。
4、如果出现Out of memory的错误,可以尝试修改cfg中的subdivisions=16为32或64。