首页 > 其他分享 >基于yolov5,在labelimg标记后训练数据集

基于yolov5,在labelimg标记后训练数据集

时间:2025-01-10 19:28:41浏览次数:3  
标签:index yolov5 val 标记 train labelimg test path txt

来自一个小白的视角,使用labelimg标记,训练数据集,含label的功能使用,yolov5数据集训练容易产生的错误及解决方式

----纯小白,如有遗漏或错误,欢迎大家改正

关于Anaconda环境配置,yolov5的下载可以看我之前的博客:

通过Yolov5使用ip摄像头实时监测(CPU)_yolo5控制台cmd检测网络摄像头-CSDN博客

下载和使用labelimg工具

下载labelimg

进入我们的yolov5环境

在anaconda prompt 的base环境键入

conda activate yolov5

进入yolov5环境后,键入:

conda install labelimg

开始在该环境下下载labelimg工具

使用labelimg

建立数据文件夹

首先我们先新建一个文件夹Ameng_dataser:

分别包含这三部分(当然,可以使用其他名字,不要对.yaml产生惊慌,把它当作一个文本文档来对待就好了)

images:储存图片

labels:储存标记后数据

.yaml:主要是指明路径,类数,类名

对Ameng.yaml编辑:

#path为自己数据集的文件夹名称,要根据的数据集放置自己项目路径下的哪个位置进行更改

path: .../Ameng_dataset

#train是训练时加载的图片或者标签的路径

train: ./train.txt

#val是验证时加载的图片或者标签的路径

val: ./val.txt

#test是测试时加载的图片或者标签的路径

test: ./test.txt

nc: 1  # 只有一个类别

names:

  0: 'Ameng'

不要担心,先把这个模板复制上,之后会说明的

label的简单介绍

在yolov5环境下键入(简单粗暴),即可打开labelimg:

labelimg

这里我们先做如下设置:

在view里勾选这些(英语字面意思,很好理解),会对接下来的数据划分有所帮助

左侧栏分别对应:

Open:打开文件

Open Dir:打开文件夹-->对应先前创建好的images

Change Save Dir:打开储存标记数据的文件夹-->对应先前创建好的labels

Next Image:下一张(a)

Prev Image:上一张(d)

Save:保存(view勾选后默认保存)(s)

Yolo/... :模式(我们使用Yolo)

Create RectBox : 创建一个标记框(w)

使用labelimg来标记

w+拉开矩形框即可,选中我们需要的目标区域,输入目标名称即可

右键可以编辑名称

在最右侧的栏里有目前所有的标签名称

示例:

通常这一步需要大量的图片数据来标注,在标注过程中也是很有意思的

标记完成后,我们打开label文件夹可以看到这些txt文档,

第一个数代表类型数,这里的0代表第1个类型(1的话代表第2个类型)

后面的四个数字表示在图片中的位置

对数据集进行划分

这部分主要依赖于这段代码(可以自己写,网上也有很多,这个也是我在网上找到的),将.yaml里的未填的三个部分train,val,test划分出来(直接运行即可)

这里我把它写在了Ameng_dataset目录下

import os
import random

root_path = "E:\Ameng_dataset"
## 这里的root_path换成你的数据集路径,其他的不变即可

train_precent = 0.8
val_percent = 0.1
test_percent = 0.1

img_path = os.path.join(root_path,'images')
txt_path = os.path.join(root_path,'labels')

imgname_list = os.listdir(img_path)
nums = len(imgname_list)

train_num = int(nums * train_precent)
val_num = int(nums * val_percent)
test_num = int(nums * test_percent)

train_index = random.sample(range(nums), train_num)
vt_index = set(range(nums)) - set(train_index)
val_index = random.sample(list(vt_index), val_num)
test_index = list(set(vt_index) - set(val_index))

with open(os.path.join(root_path,'train.txt'),'w') as f:
    for i in train_index:
        name = imgname_list[i]
        path = os.path.join(img_path, name)
        f.write(path)
        f.write('\n')

with open(os.path.join(root_path,'val.txt'),'w') as f:
    for i in val_index:
        name = imgname_list[i]
        path = os.path.join(img_path, name)
        f.write(path)
        f.write('\n')

with open(os.path.join(root_path,'test.txt'),'w') as f:
    for i in test_index:
        name = imgname_list[i]
        path = os.path.join(img_path, name)
        f.write(path)
        f.write('\n')

划分出来是这样的:

训练数据集

现在我们把已经划分好了的Ameng_dataset复制到yolov5-master/data下(可以不要split.py):

移动文件后,Ameng.yaml应该是这样的:

#path为自己数据集的文件夹名称,要根据的数据集放置自己项目路径下的哪个位置进行更改
path: data/Ameng_dataset
#train是训练时加载的图片或者标签的路径
train: ./train.txt
#val是验证时加载的图片或者标签的路径
val: ./val.txt
#test是测试时加载的图片或者标签的路径
test: ./test.txt

nc: 1  # 只有一个类别
names:
  0: 'Ameng'

在pycharm里打开整个yolov5项目,打开train.py

这里,我们主要关注这一部分代码即可(我的因为训练过有所改动):

简单介绍:

--weights : 指定了用于训练的预训练模型权重文件(例如,yolov5s.pt)

--cfg:指定模型的配置文件路径(通常是 .yaml格式的配置文件)

--data:指定数据集配置文件的路径(通常是 .yaml 格式的配置文件)

--epochs:指定训练的总轮数(即迭代次数)

--batch-size:指定训练时每个批次的样本数量

第一次使用train.py的一些提醒(如果之前顺利运行过train.py直接看第二部分)

一:初始时epochs是100,我使用的是CPU跑的大概跑了一个半小时,挺慢的

二:容易遇到的错误:

1.

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.

解决措施:在文件开头import后,加入:

os.environ[“KMP_DUPLICATE_LIB_OK”]=“TRUE”

2. 

RuntimeError : CUDA out of memory

解决措施:

主要是因为内存溢出,电脑带不动了,适当减小epochs

顺利运行过train.py

如上面的简介:

在这里,我们的

权重文件:yolov5s.pt

模型配置:使用 yolov5s.pt 权重文件,YOLOv5 会自动使用 yolov5s.yaml

数据集配置:使用我们处理好了的Ameng.yaml

训练轮数:设置为5(这里只做简单的尝试)

每批次处理的图像数量:设置为5

有一个小问题需要注意的是:

目前yolov5s.yaml里的nc(类数)跟我们的不匹配:修改为我们训练的类数即可

接下来就可以直接运行train.py文件了,最后所有的结果被储存在了runs\train\expn里

包括了PR Curve 曲线、Confusion matric (混淆矩阵)、results.png/txt ,训练好的模型的权重(weights)等

标签:index,yolov5,val,标记,train,labelimg,test,path,txt
From: https://blog.csdn.net/2301_80282532/article/details/145062331

相关文章

  • Python Matplotlib 教程- Matplotlib 如何进行数据点标记
    PythonMatplotlib数据点标记在数据可视化中,数据点标记是非常重要的部分。无论是绘制折线图、散点图还是柱状图,清晰地标记关键数据点可以帮助观众快速理解图表的核心信息。本篇文章将详细介绍如何在Python的Matplotlib中实现数据点标记,从基础使用到高级自定义,帮助新手快速上......
  • 深度学习目标检测中_如何使用Yolov5训练变电站各种仪表数据集等共6000余张 ,yolo标签,构
    深度学习目标检测中如何使用Yolov5训练变电站各种仪表数据集等共6000余张,并且都已打上标签,构建一个各种仪表数据集检测的项目。图像信息清晰yolo格式yolov5目标检测变电站各种仪表数据集等共6000余张,并且都已打上标签,图像信息清晰以下所有代码仅供参考!构建一个基......
  • YOLOV5正样本匹配和损失函数 (全网最详细版小白讲解)
    一、正样本匹配因为损失函数的计算有一部分只会涉及正样本的计算,所以需要搞懂正样本匹配。Yolov5是anchors-based。目的:对于图像中的每一个gtbox,找出:(1)它由输出特征图中的哪些gridcell来负责预测(2)由哪些尺寸的anchor来负责预测基于这些负责预测的gridcells中......
  • 算法浅谈:插入-标记-查找
    前言lxl的课属实让我受益匪浅,这篇博客就来谈一谈他自创的算法:插入-标记-查找算法概述这是一个离线算法,用到了扫描线思想和数据结构,它可以秒掉这样一类问题:给定\(n\)个映射\(f_i(x)\;(i\in[1,n])\)和\(m\)个询问每个询问形如给定\(x,l,r\)求\(f_r(f_{r-1}(\dots......
  • uniapp - 详解使用高德地图在地图上实现绘制边界/点聚合/行政区域高亮等功能,Uniapp高
    效果图在uni-app手机h5网页网站/支付宝微信小程序/安卓app/苹果app/nvue等(全平台兼容)开发中,实现各端都兼容的“安装使用高德地图并实现点聚合/地图绘制边界部分高亮显示”,高德地图点聚合标记及高德地图绘制行政边界等,标点窗体信息展示,在高德地图上标点及卡片气泡框面板......
  • 毕业项目推荐:基于yolov8/yolov5的草莓病害检测识别系统(python+卷积神经网络)
    文章目录概要一、整体资源介绍技术要点功能展示:功能1支持单张图片识别功能2支持遍历文件夹识别功能3支持识别视频文件功能4支持摄像头识别功能5支持结果文件导出(xls格式)功能6支持切换检测到的目标查看二、数据集三、算法介绍1.YOLOv8概述简介2.YOLOv5概述简......
  • 如何构建一个用于草莓成熟度检测的YOLOv5模型,并使用Yolov5训练使用草莓成熟度检测数据
    **声明:博客内所有文章代码仅供参考!**如何训练这个——草莓成熟度检测数据集,共800余张大棚内实景拍摄,区分为成熟,未成熟,草莓花梗三类,提供yolo标注,1.4GB草莓成熟度检测数据集,共800余张大棚内实景拍摄,区分为成熟,未成熟,草莓花梗三类,提供yolo标注,1.4GB构建一个用于草莓成熟......
  • 如何利用深度学习框架训练使用 可以使用YOLOv5模型来进行目标检测 智慧化生产工地 钢
    如何训练自己的数据集——智慧化生产工地资产盘点,超大规模钢筋计数数据集,共23400组图像,多视角,多角度,多场景,采用voc方式标注。智慧化生产工地资产盘点,超大规模钢筋计数数据集,共23400组图像,多视角,多角度,多场景,采用voc方式标注。为了实现智慧工地资产盘点中的超大规模钢筋计......
  • 深度学习笔记08-YOLOv5-C3模块实现
    本文实现了YOLVv5-C3模块。文章目录前言一、加载数据1.引入库2.导入数据3.自定义transforms4.查看类别5.划分数据集6.加载数据二、建立模型1.搭建模型2.查看模型详情三、训练模型1.训练函数2.测试函数3.main4.结果可视化5.模型评估总结前言......
  • 请详细介绍下垃圾回收的标记清除
    垃圾回收的标记清除算法在前端开发中,特别是JavaScript环境中,扮演着至关重要的角色。这种算法是JavaScript引擎自动管理内存的一种方式,主要目的是识别和释放不再使用的内存,以防止内存泄漏。以下是对标记清除算法的详细介绍:一、工作原理标记清除算法的工作原理可以分为两个阶段:标......