经过前面两篇博客((一)使用YOLOv3训练BDD100K数据集之数据集下载
和(二)使用YOLOv3训练BDD100K数据集之标签格式转换),我们已经准备了BDD100K数据集
,并且已经生成了darknet格式的标签,需要的训练集和验证集train.txt和val.txt
,现在我们只需要简单地修改几个配置文件就可以开始训练了。
在darknet/data/目录下创建文件bdd100k.names,里面存放了每一类的类名,这个将在测试一张图片时在右上角显示一个物体的标签名。文件内容如下(注意顺序要与xml_to_yolo_txt.py文件里面的顺序一致。):
car
bus
person
bike
truck
motor
train
rider
traffic sign
traffic light
在darknet/data/目录下创建文件bdd100k.data,其内容如下,其中classes表示类的数目,train和val表示前一篇文章中生成的train.txt和val.txt的存放路径(相对于darknet安装路径),backup表示训练的yolo权重存放的位置。
classes = 10
train = bdd100k_data/train.txt
valid = bdd100k_data/val.txt
names = bdd100k_data/bdd100k.names
backup = backup/
在darknet/cfg目录下,创建一个文件yolov3-bdd100k.cfg,里面的内容可以先拷贝yolov3.cfg,在修改以下几个部分:
也可以模仿此处,
修改yolov3-tiny.cfg或yolov2.cfg来使用YOLOv3-tiny或YOLOv2模型
训练BDD00K
[convolutional]
size=1
stride=1
pad=1
filters=255 # 此处需要修改为filters=45,注意一定要修改[yolo]层前面的第一个[convolutional]
activation=linear
[yolo]
mask = 3,4,5
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=80
num=9
batch表示一个批次训练的图片数目,一个epoch=total_train_images/batch
,而subdivisions表示将一个batch分为subdivisions个组进行分别训练,每个组有batch/subdivisions个图片
。max_batches表示最大的批次数,而iterations=max_batches/batch。yolov3默认的训练权重为darknet53,我们可以在darknet路径下打开终端,输入命令下载权重:
wget https://pjreddie.com/media/files/darknet53.conv.74
输入以下命令,即可开始训练
sudo ./darknet detector train bdd100k_data/bdd100k.data cfg/yolov3-bdd100k.cfg darknet53.conv.74
输入以下命令,即可开始测试模型:
sudo ./darknet detector test bdd100k_data/bdd100k.data cfg/yolov3-bdd100k.cfg backup/yolov3-bdd100k.backup data/000005.png
sudo ./darknet detector demo bdd100k_data/bdd100k.data cfg/yolov3-bdd100k.cfg backup/yolov3-bdd100k.backup driving.mp4
sudo ./darknet detector demo bdd100k_data/bdd100k.data cfg/yolov3-bdd100k.cfg backup/yolov3-bdd100k.backup -c 1
输入以下命令,即可开始测试模型:
sudo ./darknet detector train bdd100k_data/bdd100k.data cfg/yolov3-bdd100k.cfg backup/yolov3-bdd100k.backup