Yolo v5模型训练那点事

关于Yolo 5的模型训练这点事

作者:胖橙


前言

​ 随着人工智能的不断发展,模型训练这门技术也越来越重要,很多人都开启了学习模型训练的篇章,现在我就来介绍以一下模型训练的基础内容。

准备工作

  • 数据集
  • labelImg
  • Yolov5的源代码

关于数据集

区分度

​ 关于数据集,我想说的是区分度越高越好。因为我们每一张照片之间的区分度越大的话,我们的电脑学习效率越高。打个比方:我们学习一个知识,那么如果一直做一个类型的例题的话,换一种新的题型可能就不认识了。同理我们的每一张照片之间的区分度越高,那么我们的电脑就会学习的越好。

训练集(train)和验证集(valid)

​ 在有监督的机器学习中,经常会说到训练集(train)、验证集(validation)和测试集(test),这三个集合的区分可能会让人糊涂,特别是,有些人就会搞不清楚验证集和测试集有什么区别。

​ 如果我们自己已经有了一个大的标注数据集,想要完成一个有监督模型的测试,那么通常使用均匀随机抽样的方式,将数据集划分为训练集、验证集、测试集,这三个集合不能有交集,常见的比例是8:1:1,当然比例是人为的。从这个角度来看,三个集合都是同分布的。

​ 有了模型后,训练集就是用来训练参数的,说准确点,一般是用来梯度下降的。而验证集基本是在每个epoch完成后,用来测试一下当前模型的准确率。因为验证集跟训练集没有交集,因此这个准确率是可靠的。

如何区分开训练集和验证集

​ 准确的来说,我们在分类之前,他们都是普通的照片,只不过我们赋予了他其他的含义而已(也就是说,我说谁是验证集,谁就是)。那么我们按照一个什么比例去划分呢?我们可以按照7:3的比例去进行一个划分。但是我们的图片计数不能太少,一般至少要100张才能出现一个效果。然后我么分别把他们放在两个文件夹之中,文件夹名字固然可以自己来定。这里也可以按照我的来定义。

|——train

​ |——images // 训练集的图片存储

​ |——labels //训练集的txt文件

|——valid

​ |——images //验证集的图片存储

​ |——labels //验证集的txt文件

labelImg

进行批量标注

利用Open Dir按钮可以打开需要被标注的图片的文件夹。
利用Change Save Dir按钮可以打开标注文件存放的文件夹。
利用w快捷键或者点击create RectBox可以开始标注,标注完后需要保存。所有图片标注完后可以得到标注文件。标注文件内容代表被标注图片内所含的物体。

XML文件转换TXT文件

XML文件进行转换的时候,我们可以用写好的脚本来进行转换。

代码如下:

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir,getcwd
from os.path import join
import glob

classes = ['Aubergine','Chili','Bone','Newspaper','Waste_Butteries','Medical_Cotton_Swabs','Pesticides','Leftover_Food','Radioactive_Material','Expired_Medicines']
#我们要训练的类的名字写好
def convert(size,box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x,y,w,h)

def convert_annotation(image_name):
    in_file = open('./valid/labels/'+image_name[:-3]+'xml')
    out_file = open('./valid/labels/'+image_name[:-3]+'txt','w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls not in classes:
            print(cls)
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))
        bb = convert((w,h),b)
        out_file.write(str(cls_id)+" "+" ".join([str(a) for a in bb]) + '\n')

wd = getcwd()

if __name__ == "__main__":
    for image_path in glob.glob("./valid/images/*.jpg"):
        image_name = image_path.split('\\')[1]
        convert_annotation(image_name)

然后我们把转换好的txt文件放入到我们对应的labels文件夹下面。

yaml的编写

YAML(YAML Ain’t Markup Language)以数据为中心,比json、xml更适合做配置文件。

我们的yaml要放到数据集那一层文件夹中。

|——train

|——valid

|——xxxx.yaml

yaml的书写方式
train: ../Rubbish_Data/train/images
val: ../Rubbish_Data/valid/images

nc: 10
names: ['Aubergine','Chili','Bone','Newspaper','Waste_Butteries','Medical_Cotton_Swabs','Pesticides','Leftover_Food','Radioactive_Material','Expired_Medicines']

开始准备训练

在Pycharm中的train文件加入Parameters文件

可以参考如下。

--data
../Rubbish_Data/Rubbish_data.yaml
--cfg
models/yolov5s.yaml
--batch-size
120

最后开始运行训练代码即可。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在使用Yolov5进行目标检测任务时,划分训练集、验证集和测试集是一个重要的步骤。划分数据集的目的是为了在训练模型时能够有足够的数据进行优化,同时也需要验证集来评估模型性能,测试集用于最终的模型评估。 可以通过以下步骤来划分数据集: 1. 获取自己的数据集,并对数据集进行标注。标注可以使用VOC(xml格式)进行保存。 2. 使用提供的代码将标注文件从xml格式转换为txt格式。这可以方便后续的处理和训练。代码可以参考引用中提供的代码。 3. 根据需求,确定训练集、验证集和测试集的比例。一般来说,常见的划分比例是70%的数据用于训练,10%用于验证,20%用于测试。 4. 使用代码将数据集按照比例划分为训练集、验证集和测试集。可以参考引用中提供的代码来实现。 5. 在Yolov5的配置文件中,根据划分后的数据集进行相应的配置。具体可以参考引用中提到的yaml文件的修改方法。 划分数据集后,可以使用划分好的训练集进行模型训练,使用验证集进行模型的调参和性能评估,最后使用测试集进行最终的模型评估。这样可以确保模型在不同的数据集上有较好的泛化能力和性能。 希望以上信息对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [YOLOv5将自己数据集划分为训练集、验证集和测试集](https://blog.csdn.net/qq_52763448/article/details/126622825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python脚本,划分训练集和测试集,coco、voc格式的数据转换成yolo系列数据](https://download.csdn.net/download/qq122716072/85812629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Loading_create

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

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

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

打赏作者

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

抵扣说明:

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

余额充值