笔记2:yolov5训练自己的目标检测模型_创建并划分数据集

Posted 机器视觉—ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记2:yolov5训练自己的目标检测模型_创建并划分数据集相关的知识,希望对你有一定的参考价值。

 目标检测---数据集格式转化及训练集和验证集划分_didiaopao的博客-CSDN博客

1、 我们经常从网上获取一些目标检测的数据集资源标签的格式都是VOC(xml格式)的,而yolov5训练所需要的文件格式是yolo(txt格式)的,这里就需要对xml格式的标签文件转换为txt文件。同时训练自己的yolov5检测模型的时候,数据集需要划分为训练集和验证集。这里提供了一份代码将xml格式的标注文件转换为txt格式的标注文件,并按比例划分为训练集和验证集。先上代码再讲解代码的注意事项
 目标检测---数据集格式转化及训练集和验证集划分_didiaopao的博客-CSDN博客

2、标签为yolo格式数据集划分训练集和验证集
        由于yolov5训练需要的数据标签格式为txt格式,所以大家在利用labelimg标注的时候会用yolo格式(标注生成的标签为txt格式)。标注好的数据集训练的时候就要划分为训练集和验证集,因此就需要有划分为训练集和测试集的代码。这里需要讲的是我写的脚本代码可以成功将数据集划分为训练集和验证集,但是在训练模型的时候,加载数据集一直会出现问题。因此我就想到了,先把txt格式的数据集替换成xml格式的数据集,然后再按上述将xml格式标签转化为txt格式标签并划分为训练集和验证集的方法划分就好了。但是这里建议大家以后标注的时候就标注为voc格式(xml格式),因为该格式的标签里面有图片标注的具体内容,例如标注类别,图片大小,标注坐标。但是yolo格式(txt格式)里面是用数字来代表类别,这样很不直观,而且标注的坐标也是经过转化归一化的,坐标信息更加不直观。先上yolo转voc的代码。

3、 训练自己的数据集

目标检测---教你利用yolov5训练自己的目标检测模型_didiaopao的博客-CSDN博客

4、学习网站

 深入浅出Yolo系列之Yolov5核心基础知识完整讲解_江南研习社-CSDN博客_yolov5的输出

【Yolov5】1.爆肝6000字Yolov5保姆级教程,80岁老奶奶都看得懂!_若丶尘的博客-CSDN博客

5、用labelme   标记数据

生成的是json数据,但yolov5 识别的是txt数据集

所以还需要转换一下:

import json
import os

name2id = {'hero': 0, 'sodier': 1}  # 标签名称


def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def decode_json(json_floder_path, json_name):
    txt_name = 'D:\\pythonProject\\yolov5-master\\ldl\\lables\\txt\\\\' + json_name[0:-5] + '.txt'
    # 存放txt的绝对路径
    txt_file = open(txt_name, 'w')

    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))

    img_w = data['imageWidth']
    img_h = data['imageHeight']

    for i in data['shapes']:

        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])

            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\\n')


if __name__ == "__main__":

    json_floder_path = 'D:\\pythonProject\\yolov5-master\\ldl\\lables\\json\\\\'
    # 存放json的文件夹的绝对路径
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        print('start')
        decode_json(json_floder_path, json_name)
        print('end')

 6、开始检测

以上是关于笔记2:yolov5训练自己的目标检测模型_创建并划分数据集的主要内容,如果未能解决你的问题,请参考以下文章

机器学习笔记 - 在Vehicles数据集上训练 YOLOv5 目标检测器

保研笔记八——YOLOV5项目复习

手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程

手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程

深度学习和目标检测系列教程 17-300: 3 个类别面罩检测类别数据集训练yolov5s模型

深度学习和目标检测系列教程 17-300: 3 个类别面罩检测类别数据集训练yolov5s模型