使用yolov3训练自己的数据集

文章目录

  • 使用yolov3训练自己的数据集
    • 1、给自己的数据集做标签(train_imgaes和val_images)
    • 2、生成train.txt和val.txt
    • 3、准备类别文件
    • 4、准备配置文件1(train_cfg1.data)
    • 5、准备配置文件2(train_cfg2.cfg)
    • 6、下载预训练权重
    • 7、训练模型
    • 8、测试模型

使用yolov3训练自己的数据集

1、给自己的数据集做标签(train_imgaes和val_images)

建议使用LabelImage给数据集标框。为了方便大家的下载,这里提供LabelIamge的可执行文件下载地址:

[百度网盘](https://pan.baidu.com/s/1Tp4S6vJbVfld7efTtl0CXA) 提取码:aihc

解压之后里面有一个labelImage.exe,打开即可对数据集标框。

首先点击opendir,选择要打标签的数据集的路径,然后需要选着YOLO模式,这个模式把标签生成txt文件,yolov3需要的就是txt类型的文件。如果是默认的PscalVOC模式,会生成xml格式的标签。

使用yolov3训练自己的数据集_第1张图片

然后点击Create RectBox标框,然后save,再下一张。

完成之后是这样的:

使用yolov3训练自己的数据集_第2张图片

一个txt文件中可能有多行,这取决于你一张图片标了几个框。以dog.txt为例,使用yolov3训练自己的数据集_第3张图片

第一个数字是classes,接下来依次是x_center、 y_center、 width、height

将做好标签的的数据集train_images和val_images放到…\darknet-master\build\darknet\x64\data下

2、生成train.txt和val.txt

yolov3是根据读取设置好的txt来读取数据集的,所以接下来需要生成train.txt和val.txt。这两个文件txt每一行都是保存的一张图片的路径。放到…\darknet-master\build\darknet\x64\data下。代码如下:

#此代码和data文件夹同目录
import glob


path = 'data/'


def generate_train_and_val(image_path, txt_file):
    with open(txt_file, 'w') as tf:
        for jpg_file in glob.glob(image_path + '*.jpg'):
            tf.write(jpg_file + '\n')


generate_train_and_val(path + 'train_images/', path + 'train.txt')
generate_train_and_val(path + 'val_images/', path + 'val.txt')

3、准备类别文件

创建一个txt文本,文件放在…\darknet-master\build\darknet\x64\data,文本的每一行是一个类别,这个类别要和你之前做标签的类别对应
如图:dog的classes序列号为0,person的序列号为1…

使用yolov3训练自己的数据集_第4张图片

创建好后重命名为classes.names

4、准备配置文件1(train_cfg1.data)

新建一个txt,该文件放在…\darknet-master\build\darknet\x64\data,里面包含以下内容:

classes= 2 //类别
train = data/train.txt //训练集
valid = data/val.txt //验证集
names = data/classes.names //类别名对应表
backup = backup/ //训练模型保存的路径

根据上面自己的设置修改

5、准备配置文件2(train_cfg2.cfg)

在build\darknet\x64\cfg下创建一个train_cfg2.cfg文件,里面的内容可以复制build\darknet\x64\cfg\yolov3.cfg里面的内容,然后做几处修改即可:

(1)batch=16 //过大会out of memory

​ subdivisions=16

(2)classes=2

classes是类别数,这里只有两类,所以设置为2,文件里一共有3处需要修改classes,一般大约在文件的第610、696、783行。都在[yolo]下面的classes

使用yolov3训练自己的数据集_第5张图片

(3)filters=21

filters的计算公式为(classes + 5)x3,我们这里有两类,所以是(2+5)*3=21,文件里一共有3处需要修改,这里需要注意,文件里有多处filter,但我们只需要修改[yolo]层之前的[convolutional]层下面的filters,位置一般是文件的第603、696、783行,如下图:

使用yolov3训练自己的数据集_第6张图片

6、下载预训练权重

百度网盘,提取码:3a6y

将这个文件放在…build\darknet\x64下

7、训练模型

打开cmd,将路径切换到build\darknet\x64下

darknet.exe detector train data/train_cfg1.data cfg/train_cfg2.cfg darknet53.conv.74

8、测试模型

打开cmd,将路径切换到build\darknet\x64下

在build\darknet\x64\backup中查看模型的名称

将train_cfg2.cfg中的batch=16 和subdivisions=16改成batch=1 和subdivisions=1

darknet.exe detector test data/train_cfg1.data cfg/train_cfg2.cfg backup/模型名称 data/test1.jpg -thresh 0.5

你可能感兴趣的:(计算机视觉)