美文网首页
Yolov3:训练自己的模型 Part2:训练

Yolov3:训练自己的模型 Part2:训练

作者: Melesmay | 来源:发表于2020-06-06 23:42 被阅读0次

上一篇文章介绍了数据集的制作,本篇文章将介绍yolo训练的流程及参数设置。

划分训练集

在ImageSets/Main下生成train.txt、test.txt、trainval.txt、val.txt。本质是根据xml的文件名划分训练集、验证集、测试集,参考代码如下。

import os

import random

trainval_percent = 0.2

train_percent = 0.8

xmlfilepath = 'Annotations'

txtsavepath = 'ImageSets\Main'

total_xml = os.listdir(xmlfilepath)

num = len(total_xml)

list = range(num)

tv = int(num * trainval_percent)

tr = int(tv * train_percent)

trainval = random.sample(list, tv)

train = random.sample(trainval, tr)

ftrainval = open('ImageSets/Main/trainval.txt', 'w')

ftest = open('ImageSets/Main/test.txt', 'w')

ftrain = open('ImageSets/Main/train.txt', 'w')

fval = open('ImageSets/Main/val.txt', 'w')

for i in list:

    name = total_xml[i][:-4] +'\n'

    if i in trainval:

        ftrainval.write(name)

        if i in train:

            ftest.write(name)

        else:

            fval.write(name)

    else:

        ftrain.write(name)

ftrainval.close()

ftrain.close()

fval.close()

ftest.close()

若Annotations中的文件如下图

则train.txt的内容会是以下的形式

train.txt

转换标注文件

将标注文件由xml格式转化为训练所需的txt格式,txt格式的标注文件如下

txt标注文件示例

一幅图中有多少个目标就会有多少行,第一个数字代表类别,后四个数分别为归一化后的中心点X坐标、Y坐标、宽度、高度。

将scripts文件夹下的voc_label.py放在与VOCdevkit文件夹相同的位置,根据实际情况修改py文件,主要修改以下几处:

运行voc_label.py,会在与py文件同级的位置生成一个包含转化成txt文件的标注文件的名为label的文件夹。

(若对于python比较熟练文件夹可以用其他名称)

修改训练参数

这一部分主要需要修改3个文件:cfg、names、data。cfg文件描述不同网络的结构与参数,names文件记录模型的标签,data文件保存训练的总体信息。(以下内容以训练一个yolov3的模型为例)

cfg文件

1、在cfg文件夹下新建yolo-obj.cfg,内容与yolov3.cfg(在cfg文件夹下)相同

2、将width、height设置为32的倍数,且width==height,一般设置为608

3、max_batches设置为类别数*2000

4、steps设置为max_batches*0.8和max_batches*0.9

cfg文件及注释 part1

5、yolo标签的前一个filters修改为(类别数+5)*3,假设有6类则修改为33

6、重新计算yolo标签下的anchors(不重新计算则使用的是其他的数据集的anchor,可以训练,但会降低训练的模型的精度),原版需自己计算,alexey版提供了计算anchors的工具:

./darknet detector calc_anchors data/obj.data-num_of_clusters 9 -width 416 -height 416

7、修改classes的值为实际的类别数

8、若显存不够可将random置为0

9、共有3处yolo标签,重复4-7

cfg文件及注释part2

names文件

在data文件夹下新建obj.names文件,保存类别名称,格式可参考data文件夹下的voc.names

data文件

在data文件夹下新建obj.data文件,可参考cfg文件夹下的voc.data

voc.data

下载预训练权重

根据实际情况选择预训练权重,具体版本对应参考官网或readme文件,yolov3对应的预训练权重为darknet53.conv.74。

wget https://pjreddie.com/media/files/darknet53.conv.74

开始训练

在darknet下输入命令:

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74

Alexey版使用-map指令可以实时显示loss与accuracy曲线:

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74-map

当发现loss不再下降时可提前停止训练,loss最终的取值范围为0.05-3.0

最终生成的weights文件就是我们训练得到的模型。

相关文章

网友评论

      本文标题:Yolov3:训练自己的模型 Part2:训练

      本文链接:https://www.haomeiwen.com/subject/nyhqtktx.html