• 【人工智能】用Yolov5训练数据集



    训练自己的数据集,首先需要安装Yolov5及创建数据集,这些部分在之前的文章中已经提到。
    Yolov5安装及简单使用: Yolov5安装及简单使用
    数据集标注: 数据集标注方法

    1.创建数据集文件夹

    coco数据集官网地址:https://cocodataset.org/

    此处使用的是coco数据集来完成,选择Dataset
    在这里插入图片描述
    选择Download
    在这里插入图片描述

    一般情况下,下载2017年的训练、测试、验证集加上2017年Annotations即可
    在这里插入图片描述

    但由于硬件设备限制,在这里便使用验证集来进行训练
    在这里插入图片描述

    下载完成后,需要进行一定的处理来使其能够符合yolov5训练要求的格式,在此处使用一种开源工具来完成。
    官网地址:https://github.com/ssaru/convert2Yolo
    具体操作按官方文档操作即可。
    注意: coco.names文件中只填入所需要的类别即可,之后会对对于无意义图片进行过滤删除,使模型更轻量化。

    2.过滤

    训练模型时,由于coco数据集存在很多实际项目并不需要的类别的数据,所以需要进行过滤。由于在之前数据格式转换时,已经通过coco.names指定了类别,故而生成的labels文档中存在许多无类别的项,此时需要将其这些无意义的内容删除,若图片要素全部无意义,则删除图片。

    import os
    
    url = './data/yolo/dataset/labels'
    dirs = os.listdir(url)
    pic_zero = []
    # 删除labels文件中无意义的内容,并记录下内容全部无意义的文件
    for file in dirs:
        whole_url = url + '/' + file
        f = open(whole_url, 'r+')
        flag = 0
        contents = []
        while True:
            content = f.readline()
            if content != '':
                if content[:4] != 'None':
                    flag += 1
                    contents.append(content)
                continue
            break
        name = f.name[-16:-4]
        f.close()
        f1 = open(whole_url, 'w+')
        f1.writelines(contents)
        f1.close()
        if flag == 0:
            pic_zero.append(name)
            os.remove(whole_url)
        flag = 0
    
    # 删除无意义的图片
    for pic in pic_zero:
        url_pic = './data/yolo/dataset/images/' + pic + '.jpg'
        os.remove(url_pic)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    3.训练前置准备

    3.1 创建数据集目录

    创建数据集目录,使其符合类似于以下的目录结构:
    在这里插入图片描述
    train文件夹中就是想要的图片和标签数据了。

    3.2 创建并写入配置文件

    类似于以下文件内容即可:
    在这里插入图片描述

    3.3 修改训练参数

    找到train.py文件,找到main函数,修改其中参数
    在这里插入图片描述

    选择预训练模型,在此处选择yolov5s.pt
    在这里插入图片描述

    选择配置文件,就是之前所创建的配置文件的路径
    在这里插入图片描述

    选择训练轮数,这个参数设置参考设备情况以及数据集大小情况
    在这里插入图片描述

    设置device,选择cpu或第几个gpu,此处选择第0gpu
    在这里插入图片描述

    设置结果保存路径,此处不作改变
    在这里插入图片描述

    设置结果目录名,此处不作改变
    在这里插入图片描述
    之后直接运用train.py文件即可

    3.4 部分训练结果解释

    在这里插入图片描述
    weights:训练所得的模型,有best.pt和last.pt,一般选择best.pt
    在这里插入图片描述
    confusion_matrix.png:混淆矩阵
    在这里插入图片描述
    以上图为例,计算bus类别精确率与召回率如下所示:
    精确率:0.84/(0.84+0.01+0.02+0.02)=0.94
    召回率:0.84/(0.84+0.04+0.10+0.01)=0.85

    results.png:
    在这里插入图片描述
    第一个图表示的是训练轮数与损失函数均值之间的关系,box表示GIOU损失函数均值,一般值越小,预测框越准;第二个图则表示目标检测loss均值,越小目标检测越准;第三个图是分类loss均值,越小分类越准;val表示验证集的情况;mAP是用Precision和Recall作为两轴作图后围成的面积,@后面的数表示判定iou为正负样本的阈值,@0.5:0.95表示阈值取0.5:0.05:0.95后取均值。

    其余结果大部分较易理解,便不再解释。

    由结果可以得出,模型训练效果较为优秀。

  • 相关阅读:
    Android 子线程为什么不能更新UI?
    【力扣-1337打卡】
    Linux CentOS8 安装MySQL步骤-(rpm方式)
    笔记本电脑Windows10安装
    两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送
    MySQL日志管理和权限管理(重点)
    自动化方案不合理的原因浅析
    PyTorch使用快速梯度符号攻击(FGSM)实现对抗性样本生成(附源码和数据集MNIST手写数字)
    基于 Python 的地理空间绘图(附源码)
    【python手写算法】逻辑回归实现分类(含公式推导)
  • 原文地址:https://blog.csdn.net/treesorshining/article/details/125546268