笔记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、开始训练

需要改train一些参数

1)复制一份coco128.yaml,修改自己的路径

 2)yolov5配置

yolov5有4种配置,不同配置的特性如下,我这里选择yolov5s,速度最快,但是效果最拉胯

需要修改的参数是nc,nc就是标签的数量

3)train.py

打开这个文件,需要修改的参数比较多

第一个是with open,参数要加上encoding='utf-8',不然的话很可能会出现编码报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 577

以下修改的都是default处 ,根据自己的电脑配置即可

第二个是484行的配置,用的是yolov5s

第三个是486行和488行的路径

第四个是491行,因为我的电脑拉胯,所以不能按照原配置搞(这就是我为什么在一开始就声明配置的原因)

第五个是495行,原来长宽都是640,不行的话减32直至可以run

第六个是513行

7、开始检测

总结:配置就结束了,按着前人走的路走,没有什么特别的,后面就需要慢慢钻研你们的算法,优化方式。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenCv学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值