YOLOv5 :训练自己的数据集

article/2025/7/2 21:27:55

- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rnFa-IeY93EpjVu0yzzjkw) 中的学习记录博客**
- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)**

我们接着上一篇文章配置完YOLOv5需要的环境后,今天我们试着用YOLOv5训练自己的数据集

可供学习使用的数据集:Fruit Detection | Kaggle

一:准备好自己的数据

我的目录结构是这样的

  • fruit_data(自己创建一个文件夹,将数据放到这里)
  • annotations(放置我们的.xml文件)
  • images(放置图片文件)
  • ImageSets下创建Main(会在该文件夹内自动生成train.txt,val.txt,test.txt和trainval.txt四个文件,存放训练集,验证集,测试集图片的名字)

annotations文件夹为xml文件,我的文件如下:

我images文件为.png格式,官方的为.jpg. 

二:运行split_train_val.py 文件

ImageSets文件夹下面有个Main子文件夹,其下面存放了train.txt,val.txt,test.txt和trainval.txt四个文件,他们是通过split_train_val.py 文件来生成的。

split_train_val.py 的内容如下:

import os
import random
import argparseparser = argparse.ArgumentParser()
#添加命令行参数,用于指定XML文件的路径,默认为annotations文件夹
parser.add_argument('--xml_path', type=str, default='/Users/brandom/Downloads/yolov5-master/fruit_data/annotations',help = 'input xml label path')
#添加命令行参数,用于指定输出txt标签文件的路径,默认为ImageSets/Main文件夹
parser.add_argument('--txt_path',type=str,default = '/Users/brandom/Downloads/yolov5-master/fruit_data/ImageSets/Main',help = 'output txt label path')opt = parser.parse_args()trainval_percent = 1.0
train_percent = 0.9
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num = len(total_xml)
list_index = range(num)tv = int(num * trainval_percent)
tr = int(tv * train_percent)trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)file_trainval = open(txtsavepath+'/trainval.txt', 'w')
file_test = open(txtsavepath+'/test.txt', 'w')
file_train = open(txtsavepath+'/train.txt', 'w')
file_val = open(txtsavepath+'/val.txt', 'w')for i in list_index:name = total_xml[i][:-4] + '\n'if i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

运行split_train_val.py文件后你将得到train.txt,val.txt.test.txt 和 trainval.txt四个文件

三:生成train.txt,test.txt,val.txt 文件

现在我们需要的是voc_label.py文件

import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']
classes = ['apple', 'banana', 'orange', 'pear', 'peach', 'plum', 'strawberry', 'watermelon']
abs_path = os.getcwd()
print(abs_path)def convert(size,box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0-1y = (box[2] + box[3]) / 2.0-1w = box[1]-box[0]h = box[3]-box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file = open('./annotations/%s.xml' % (image_id), encoding='utf-8')out_file = open('./labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()filename = root.find('filename').textfilenameFormat = filename.split('.')[1]size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_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))b1, b2, b3, b4 = bif b2 > w:b2 = wif b4 > h:b4 = hb=(b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')return filenameFormatwd = getcwd()
for image_set in sets:if not os.path.exists('./labels/'):os.makedirs('./labels/')ROOT = os.path.dirname(os.path.abspath(__file__))image_set_path = os.path.join(ROOT, 'ImageSets', 'Main', f'{image_set}.txt')with open(image_set_path) as f:image_ids = f.read().strip().split()#image_ids = open('./ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('./%s.txt' % (image_set), 'w')for image_id in image_ids:filenameFormat = convert_annotation(image_id)list_file.write(abs_path + '/images/%s.%s\n' % (image_id, filenameFormat))list_file.close()

运行之后你将得到上面截图中的三个文件

四:创建ab.yaml文件

文件名随意,我的文件路径在yolov5-master/data/ab.yaml

内容如下:

train: ./fruit_data/train.txt
val: ./fruit_data/val.txt
nc: 10
names:["apple","banana","orange","pear","peach","strawberry","grape","mango","pineapple","watermelon",]

五:开始用自己的数据集训练模型

调用GPU只需要将下面的--device mps 改为 --device '0'即可,我这边调用的是MacOs自带的mps进行加速

python train.py --img 900 --batch 2 --epoch 100 --data data/ab.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --device mps

就可以直接训练我们的数据集啦,运行部分代码如下:


http://www.hkcw.cn/article/YjWDNFlfjr.shtml

相关文章

【Unity】云渲染

1 前言 最近在搞Unity云渲染的东西,所以研究了下官方提供的云渲染方案Unity Renderstreaming。注:本文使用的Unity渲染管线是URP。 2 文档 本文也只是介绍基本的使用方法,更详细内容参阅官方文档。官方文档:Unity Renderstreamin…

每日一道面试题---ArrayList的自动扩容机制(口述版本)

首先,ArrayList是基于动态数组实现的,它的容量是可以动态增长的,ArrayList的默认容量是10,当我们向ArrayList中插入一个数据时,第一步,会先进行一个条件的校验操作,先去判断ArrayList是不是一个…

分布式锁优化:使用Lua脚本保证释放锁的原子性问题

分布式锁优化(二):使用Lua脚本保证释放锁的原子性问题 💻黑马视频链接:Lua脚本解决多条命令原子性问题 在上一章节视频实现了一个可用的Redis分布式锁,采用SET NX EX命令实现互斥和过期自动释放机制&…

B1、进度汇报(— 25/05/31)

本文档汇总了各成员在 2025 年 5 月 11 日 ~ 5 月 31 日完成的工作。我们遇到了进度问题(收工后需反思): 本学期第十四周(05/19 ~ 05/25)有相当多课程需要提交实验结果或上台展示。本学期第十六周(06/02 ~…

BUUCTF[极客大挑战 2019]Havefun 1题解

BUUCTF[极客大挑战 2019]Havefun 1题解 题目分析解题理解代码逻辑:构造Payload: 总结 题目分析 生成靶机,进入网址: 首页几乎没有任何信息,公式化F12打开源码,发现一段被注释的源码: 下面我们…

常见算法题目5 -常见的排序算法

常见算法题目5 -常见的排序算法 本文介绍常见的排序算法的思路及代码实现(都是按照从小到大排列),包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序。 1.冒泡排序 思路:重复遍历数组,依次比较相邻元素,若顺序错误…

3.需求分析与测试用例设计方法

设计方法 测试点 定义: 测试时需要考虑的可测试方面,不同公司可能称为"检查点"或其它名称特点: 是需求分析的最后一个环节,用于解决"测哪里"和"怎么测"的问题举例说明: 如同打架时的各种招数,如直接约架、设…

【PCB设计】STM32开发板——电源设计

电源稳压器(Power Regulator)是一种在电源电压或者负载电流发生变化的时候,依然能够提供稳定输出电压的元件。 一、关于LDO电路 1.引入 小灯泡实验 2.LDO原理 3.LDO芯片结构框图 PNP型三极管,Ube上升,截至&#xff…

BUUCTF[HCTF 2018]WarmUp 1题解

BUUCTF[HCTF 2018]WarmUp 1题解 分析解题过程代码审计主体函数CHECK函数: 构造payload 总结 分析 启动靶机,进入网址,是一张滑稽的表情包: 程序化F12查看源码: 发现注释内容,访问 url:/source.php得到…

如何使用DAXStudio将PowerBI与Excel连接

如何使用DAXStudio将PowerBI与Excel连接 之前分享过一篇自动化文章:PowerBI链接EXCEL实现自动化报表,使用一个EXCEL宏工作薄将PowerBI与EXCEL连接起来,今天分享另一个方法:使用DAX Studio将PowerBI与EXCEL连接。 下面是使用DAX S…

neo4j 5.19.0两种基于向量进行相似度查询的方式

介绍 主要讲的是两种相似度查询 一种是创建向量索引,然后直接从索引的所有数据中进行相似度搜索,这种不支持基于自己查询的结果中进行相似度匹配另一种是自己调用向量方法生产相似度进行相似度搜索,这种可以基于自己的查询结果中进行相似度…

中科院报道铁电液晶:从实验室突破到多场景应用展望

2020年的时候,相信很多关注科技前沿的朋友都注意到,中国科学院一篇报道聚焦一项有望改写显示产业格局的新技术 —— 铁电液晶(FeLC)。这项被业内称为 "下一代显示核心材料" 的研究,究竟取得了哪些实质性进展…

任务26:绘制1-12月各省份平均气温和预测可视化图形(折线

任务描述 知识点: DjangoECharts 重 点: DjangoECharts折线图 内 容: 绘制列表框,能够切换不同的省份根据ECharts官方示例,绘制ECharts折线图根据ECharts配置项手册,修改ECharts图形配置 任务指导…

【Redis】Set 集合

文章目录 常用命令saddsmemberssismemberscardspopsmovesrem 集合间操作sinter && sinterstoresunion && sunionstoresdiff && sdiffstore 内部编码应用场景 集合类型也是用于存储多个字符串类型的数据结构 集合中元素之间是 1. 无序的 2. 不允许重复的…

python打卡训练营打卡记录day43

复习日 作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 数据集来源:Flowers Recognition 选择该数据集原因: 中等规模:4242张图片 - 训练快速但足够展示效…

向量空间的练习题目

1.考虑 中的向量x1 和x2 求每一向量的长度 令x3x1x2,求x3的长度,它的长度与x1和x2的和有什么关系? 2.重复练习1,取向量 3.令C为复数集合,定义C上的加法为 (abi)(cdi)(ac)(bd)i 并定义标量乘法为对所有实数a (abi) a bi 证明&…

Android Studio历史版本下载地址汇总

Android Studio 下载文件归档 | Android Developers本页提供了各个 Android Studio 版本的下载归档文件。https://developer.android.google.cn/studio/archive?hlzh-cn

SpringBoot-Thymeleaf

大佬写的真好:Thymeleaf一篇就够了-阿里云开发者社区

序列搜索策略

序列搜索策略 贪心搜索(greedy search) 在大语言模型中, 对于输出序列的每一时间步t′, 我们都将基于贪心搜索从Y中找到具有最高条件概率的词元,即: y t ′ argmax ⁡ y ∈ Y P ( y ∣ y 1 , … , y t ′…

MG影视登录解锁永久VIP会员 v8.0 支持手机电视TV版影视直播软件

MG影视登录解锁永久VIP会员 v8.0 支持手机电视TV版影视直播软件 MG影视App电视版是一款资源丰富、免费便捷、且专为大屏优化的影视聚合应用,聚合海量资源,畅享电视直播,是您电视盒子和…