当前位置: 首页 > article >正文

YOLOv5 :训练自己的数据集

- **🍨 本文为[🔗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

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

相关文章:

YOLOv5 :训练自己的数据集

- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rnFa-IeY93EpjVu0yzzjkw) 中的学习记录博客** - **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 我们接着上一篇文章配置完YOLOv5需要的环境后&#…...

flutter项目迁移空安全

重中之重 备份好项目文件,甚至连已经加载好的flutter库也可以备份。环境包升级 2.1 不要直接换成flutter:3.0以上的版本,这样做既有基本的库兼容问题,又有空安全下的语法问题(整个项目中需要增加 late、?、!的语法错误,一片报错的…...

vue element日期范围选择器只能选择指定天数内的

<el-date-pickerv-model"dateRange"type"daterange"range-separator"至"start-placeholder"开始日期"end-placeholder"结束日期"format"yyyy-MM-dd"value-format"yyyy-MM-dd"clearable:picker-optio…...

从 AMQP 到 RabbitMQ:核心组件设计与工作原理(二)

五、RabbitMQ 工作原理全揭秘 在深入了解了 RabbitMQ 的核心组件之后&#xff0c;接下来让我们深入探究 RabbitMQ 的工作原理&#xff0c;揭开其在消息生产、投递、消费以及可靠性保障等方面的神秘面纱。 5.1 消息生产与投递流程 建立连接与信道&#xff1a;生产者首先通过 …...

MySql(十二)

目录 MySql约束 1.添加主键约束 语法格式 1&#xff09;创建一个带主键的表 查看表结构 2&#xff09;创建表的时候指定主键名称 查看表结构 3&#xff09;创建一个表然后&#xff0c;然后再使用alter为列添加主键 查看表结构 4&#xff09;为表添加数据 1---正常数据 2---主键…...

51c视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D时空中追踪万物&#xff01;国防科大提出首个长时场景流估计方法 本篇分享 TPAMI 2025 论文​​SceneTracker: Long-term Scene Flow Estimation Network​​&#xff0c;国防科大提出首…...

windows11安装编译QtMvvm

windows11安装编译QtMvvm 1 从github下载代码2 官方的Download/Installtion3 自行构建编译QtMvvm遇到的问题3.1 `qmake`问题执行命令报错原因分析qmake报错:找不到编译器 cl解决方案3.2 `make qmake_all`问题执行命令报错原因分析make命令未识别解决方案3.3 缺少`perl`问题执行…...

【2025年电工杯数学建模竞赛A题】光伏电站发电功率日前预测问题+完整思路+paper+源码

本人7年数学建模竞赛经验&#xff0c;历史获奖率百分之百。团队成员都是拿过全国一等奖的硕博&#xff0c;有需要数模竞赛帮助的可以私信我 本题主要涉及数据预测&#xff0c;数据分析&#xff0c;机器学习&#xff0c;时间序列等知识 1.问题背景与问题描述 2.解题思路分析 …...

OpenCv高阶(十九)——dlib关键点定位

文章目录 一、什么是人脸关键点定位&#xff1f;二、关键点模型的下载及关键信息的理解三、dlib关键点定位的简单实现&#xff08;1&#xff09;导入必要的库&#xff08;2&#xff09;从指定路径读取图像文件&#xff08;3&#xff09;创建dlib的正面人脸检测器对象&#xff0…...

BUUCTF之[ACTF2020 新生赛]BackupFile

打开环境就一句话 找出源文件! 结合题目名字&#xff1a;BackupFile 先用dirsearct扫描网站文件 发现一个index.php.bak ,拼接url下载 打开发现php代码 <?php include_once "flag.php";if(isset($_GET[key])) {$key $_GET[key];if(!is_numeric($key)) {exit…...

头歌之动手学人工智能-Pytorch 之autograd

目录 第1关&#xff1a;Variable 任务描述 编程要求 测试说明 没有伟大的愿望&#xff0c;就没有伟大的天才。——巴尔扎克开始你的任务吧&#xff0c;祝你成功&#xff01; 第2关&#xff1a;Variable 属性 任务描述 编程要求 测试说明 真正的科学家应当是个幻想家&a…...

OIer常用的软件

前言 现在许多软件的官网多不好找&#xff0c;所以我今天就将常用的一些软件官网地址翻了出来&#xff0c;并简单介绍了他的用法。 正文 1.DEV-C DEV-C 用途&#xff1a;c编译软件&#xff0c;是OIer的生涯之路的必备软件 2.Katex KATex 用途&#xff1a;展现公式的软件&…...

Centos7.x内网环境Jenkins前端打包环境配置

Centos7.x内网环境Jenkins前端打包环境配置 参考地址&#xff1a; https://www.cnblogs.com/guangdelw/p/18763336 https://2048.csdn.net/682c1be8606a8318e857d687.html 前言&#xff1a;环境描述和目标 最近公司新接了一个项目&#xff0c;要求是&#xff1a;需要再桌面…...

Kafka集成Flume/Spark/Flink(大数据)/SpringBoot

Kafka集成Flume Flume生产者 ③、安装Flume&#xff0c;上传apache-flume的压缩包.tar.gz到Linux系统的software&#xff0c;并解压到/opt/module目录下&#xff0c;并修改其名称为flume Flume消费者 Kafka集成Spark 生产者 object SparkKafkaProducer{def main(args:Array[S…...

Scratch节日 | 拯救屈原 | 端午节

端午节快乐&#xff01; 这款特别为端午节打造的Scratch游戏 《拯救屈原》&#xff0c;将带你走进古代中国&#xff0c;感受历史与文化的魅力&#xff01; &#x1f3ee; 游戏介绍 扮演勇敢的探险者&#xff0c;穿越时空回到古代&#xff0c;解锁谜题&#xff0c;完成任务&…...

rabbitmq Direct交换机简介

在实际开发中&#xff0c;需求可能变得复杂&#xff0c;如消息的收发和处理。以支付系统为例&#xff0c;成功支付后需要改变订单状态并通知用户&#xff0c;而失败则不需要。为处理这种情况&#xff0c;提出了使用Direct交换机&#xff0c;它可以根据规则将消息路由到指定队列…...

Git实战--基于已有分支克隆进行项目开发的完整流程

Git克隆项目开发流程 ✅ 一、完整流程概述✅ 二、详细操作步骤Step 1&#xff1a;克隆仓库&#xff08;如果尚未克隆&#xff09;Step 2&#xff1a;获取远程分支信息并切换到 feature/ 获取所有远程分支Step 3&#xff1a;创建并切换到你的新分支Step 4&#xff1a;开始开发新…...

MapReduce(期末速成版)

起初在B站看3分钟的速成视频&#xff0c;感觉很多细节没听懂。 具体例子解析(文件内容去重) 对于两个输入文件&#xff0c;即文件A 和文件B&#xff0c;请编写MapReduce 程序&#xff0c;对两个文件进行合并&#xff0c;并剔除 其中重复的内容&#xff0c;得到一个新的输出文件…...

鸿蒙OSUniApp 移动端直播流播放实战:打造符合鸿蒙设计风格的播放器#三方框架 #Uniapp

UniApp 移动端直播流播放实战&#xff1a;打造符合鸿蒙设计风格的播放器 在移动互联网时代&#xff0c;直播已经成为一种主流的内容形式。本文将详细介绍如何使用 UniApp 框架开发一个优雅的直播流播放器&#xff0c;并融入鸿蒙系统的设计理念&#xff0c;实现一个既美观又实用…...

C3、C2f、C3K2、C2PSA的具体结构

YOLOV5 C3 Bottleneck C2f...

2_MCU开发环境搭建-配置MDK兼容Keil4和C51

MCU开发环境搭建-配置MDK兼容Keil4和C51 一、概述 本文以MDK-ARM V5.36版本基础介绍DMK-ARM工程兼容Keil4和C51的配置。 注:在阅读本文前,请先安装和配置完成MDK-ARM(Keil5)。 二、工具包下载 链接: https://pan.baidu.com/s/1Tu2tDD6zRra4xb_PuA1Wsw 提取码: 81pp 三、…...

通过远程桌面连接Windows实例提示“出现身份验证错误,无法连接到本地安全机构”错误怎么办?

本文介绍通过远程桌面连接Windows实例提示“出现身份验证错误无法连接到本地安全机构”错误的解决方案。 问题现象 通过本地电脑内的远程桌面连接Windows实例提示“出现身份验证错误&#xff0c;无法连接到本地安全机构”错误。 问题原因 导致该问题的可能原因如下&#x…...

百度golang研发一面面经

输入一个网址&#xff0c;到显示界面&#xff0c;中间的过程是怎样的 IP 报文段的结构是什么 Innodb 的底层结构 知道几种设计模式 工厂模式 简单工厂模式&#xff1a;根据传入类型参数判断创建哪种类型对象工厂方法模式&#xff1a;由子类决定实例化哪个类抽象工厂模式&#…...

TC3xx学习笔记-启动过程详解(一)

文章目录 前言Firmware启动过程BMHD Check流程ABM启动Internal Flash启动Bootloader ModeProcessing in case no valid BMHD foundProcessing in case no Boot Mode configured by SSW 总结 前言 之前介绍过UCB BMHD的使用&#xff0c;它在启动过程中起着重要的作用&#xff0…...

Scratch节日 | 六一儿童节抓糖果

六一儿童节怎么能没有糖果&#xff1f;这款 六一儿童节抓糖果 小游戏&#xff0c;让你变身小猫&#xff0c;开启一场甜蜜大作战&#xff01; &#x1f3ae; 游戏玩法 帮助小猫收集所有丢失的糖果&#xff0c;收集越多分数越高&#xff01; 小心虫子一样的“坏糖果”&#xff…...

系统调用与程序接口的关系

程序接口类型 系统调用&#xff1a;是操作系统提供给应用程序的接口 &#xff0c;允许应用程序请求操作系统执行特定操作&#xff0c;像文件操作&#xff08;打开、读写、关闭文件 &#xff09;、进程管理&#xff08;创建、终止进程 &#xff09;、设备管理&#xff08;操作磁…...

从线性方程组角度理解公式 s=n−r(3E−A)

从线性方程组角度理解公式 sn−r(3E−A) 这个公式本质上是 ​齐次线性方程组解空间维度 的直接体现。下面通过三个关键步骤解释其在线性方程组中的含义&#xff1a; 1. ​公式对应的线性方程组 考虑矩阵方程&#xff1a; (3E−A)x0 其中&#xff1a; x 是 n 维未知向量3E−…...

通信算法之280:无人机侦测模块知识框架思维导图

1. 无人机侦测模块知识框架思维导图, 见文末章节。 2. OFDM参数估计,基于循环自相关特性。 3. 无人机其它参数估计...

【Doris基础】Apache Doris中的Coordinator节点作用详解

目录 1 Doris架构概述 2 Coordinator节点的核心作用 2.1 查询协调与调度 2.2 执行计划生成与优化 2.3 资源管理与负载均衡 2.4 容错与故障恢复 3 Coordinator节点的关键实现机制 3.1 两阶段执行模型 3.2 流水线执行引擎 3.3 分布式事务管理 4 Coordinator节点的高可…...

软考 系统架构设计师之考试感悟3

接前一篇文章&#xff1a;软考 系统架构设计师之考试感悟2 上周六&#xff08;2025年5月24日&#xff09;&#xff0c;本人第三次参加了软考系统架构师的考试。和前两次一样&#xff0c;考了一天&#xff0c;身心俱疲。不过这次感觉比上一次要稍微好点&#xff0c;可能也是考的…...