Yolo v5模型训练那点事

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: Yolo v5模型训练那点事

前言


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

准备工作


  • 数据集
  • 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

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

相关文章
|
7月前
|
监控 计算机视觉 知识图谱
YOLOv10的改进、部署和微调训练总结
YOLOv10在实时目标检测中提升性能与效率,通过无NMS训练解决延迟问题,采用一致的双任务和效率-精度驱动的模型设计。YOLOv10-S比RT-DETR-R18快1.8倍,YOLOv10-B比YOLOv9-C延迟减少46%。新方法包括一致性双标签分配,优化计算冗余和增强模型能力。实验结果显示YOLOv10在AP和延迟上均有显著改善。文章还提供了部署和微调YOLOv10的示例代码。
789 2
|
算法 Go 计算机视觉
【YOLO系列】YOLOv8算法(尖端SOTA模型)
Ultralytics YOLOv8 是由 Ultralytics开发的一个前沿 SOTA 模型。它在以前 YOLO 版本的成功基础上,引入了新的功能和改进,进一步提升了性能和灵活性。YOLOv8 基于快速、准确和易于使用的理念设计,使其成为广泛的物体检测、图像分割和图像分类任务的绝佳选择。
2994 0
【YOLO系列】YOLOv8算法(尖端SOTA模型)
|
5月前
|
Python
模型训练
【8月更文挑战第20天】模型训练。
60 0
|
3月前
|
数据处理 算法框架/工具 计算机视觉
手把手教你使用YOLOV5训练自己的目标检测模型
本教程由肆十二(dejahu)撰写,详细介绍了如何使用YOLOV5训练口罩检测模型,涵盖环境配置、数据标注、模型训练、评估与使用等环节,适合大作业及毕业设计参考。提供B站视频、CSDN博客及代码资源链接,便于学习实践。
583 1
手把手教你使用YOLOV5训练自己的目标检测模型
|
5月前
|
机器学习/深度学习
DNN模型训练
【8月更文挑战第9天】DNN模型训练。
37 1
|
5月前
|
机器学习/深度学习 自然语言处理 数据可视化
训练模型
【8月更文挑战第1天】
56 2
|
7月前
|
计算机视觉
【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用
【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用
|
8月前
|
机器学习/深度学习 算法 Serverless
YoLo_V4模型训练过程
YoLo_V4模型训练过程
110 0
|
并行计算 数据可视化 PyTorch
单目3D目标检测——MonoCon 模型训练 | 模型推理
本文分享 MonoCon 的模型训练、模型推理、可视化3D检测结果、以及可视化BEV效果。
372 0
|
机器学习/深度学习
使用卷积神经网络CNN训练minist数据集(二)
使用卷积神经网络CNN训练minist数据集(二)

热门文章

最新文章

下一篇
开通oss服务