前文已经建立了自己的数据集并且进行了划分。本文主要介绍如何使用自己的数据集进行训练。
1.修改配置文件
1.修改darknet目录下data文件夹中的配置文件:
在data文件夹中找到voc.names文件,里边存放的是需要分类的物体的名字,
根据自己的情况修改,我把其中的文件内容修改为:
2.修改darknet目录下cfg文件夹中的配置文件:
在cfg文件夹中找到voc.data文件,
打开之后把其中的文件内容修改为:
classes= 1 //此处是你想要分类的类别数量,根据自己的实际情况填写
train = /home/pjreddie/data/voc/2007_train.txt //此处是存放生成的训练集的文件名,根据自己的实际情况填写
test = /home/pjreddie/data/voc/2007_test.txt //此处是存放生成的测试集图片的文件名,根据自己的实际情况填写
names = data/voc.names//此处文件代表,分类的类别名称。
backup = /backup/ 存放自己训练的权重文件
3.修改darknet目录下cfg文件夹中的配置文件:
3.1在cfg文件夹中找到yolov4-custom.cfg文件
之后复制yolov4-custom.cfg.重命名为 yolov4-custom-train.cfg。之后修改参数:
修改其中第6行batch,第7行的参数subdivisions,这两个参数有默认值但是,由于每个人的显卡不同,可能会报“out of memory”的错误,这是由于显卡内存太小,需要修改这两个值,我是自己试的值。图片的宽高等均可以自己设置:
batch=64
subdivisions=16
width=608
height=608
继续文件中第20行的修改迭代次数,以及第22行改变学习率的次数:
max_batches = 500500//最大迭代次数,自己根据情况而定
steps=400000,450000//分别在max_batches×0.8以及max_batches×0.8次时,改变学习率,防止达不到最优解
接下来分别修改第970、1058、1146行的类别数,根据自己的情况而定:
classes=1
之后分别修改第963、1051、1139行的filters的数目,filters的数目的计算规则为:
filters = (classes + 5)*3
我的只检测一类物体,因此设置为:
filters = 18
大家根据自己的实际情况修改。
2.开始训练
终于到了最重要的时候了
在完成以上所有配置之后,在终端输入以下命令:
./darknet detector train cfg/voc.data cfg/yolov4-custom-train.cfg yolov4.conv.137
注意:命令中的 yolov4.conv.137文件都在前文中的权重文件中,下载之后直接放到darknet文件夹中。训练过程中会显示你的损失函数变化情况:
如果在命令行的最后加上 “-map”,还会显示map的变化曲线:
命令行变为如下:
./darknet detector train cfg/voc.data cfg/yolov4-custom.cfg yolov4.conv.137 -map
3.训练结果
训练结果保存在 darknet目录下的backup文件夹中。下文将介绍如何测试自己的训练模型。