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

深度学习训练营之yolov5训练自己的数据集

深度学习训练营之训练自己的数据集

  • 原文链接
  • 环境介绍
  • 准备好数据集
  • 划分数据集
  • 运行voc_train.py
    • 遇到问题
    • 完整代码
  • 创建new_data.yaml文件
    • 模型训练时遇到的报错
  • 模型训练
  • 结果可视化
  • 参考链接

原文链接

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍦 参考文章:365天深度学习训练营-第Y2周:训练自己的数据集
  • 🍖 原作者:K同学啊|接辅导、项目定制

环境介绍

  • 语言环境:Python3.9.13
  • 编译器:vscode
  • 深度学习环境:torch
  • 显卡:NVIDIA GeForce RTX 3070 Laptop GPU

准备好数据集

我这里采用的数据集是经典的目标检测算法当中的一个数据集,这里附上链接:
文件提取:链接:https://pan.baidu.com/s/1SuNxOTCgrQlqXWK_cRzCZQ
提取码:0909

文件夹下内容:
在这里插入图片描述

划分数据集

运行如下命令进行数据集的划分

python split_train_val.py --xml_path D:\yolov5-master\yolov5-master\my_data\Annotations --txt_path D:\yolov5-master\yolov5-master\my_data\ImageSets\Main

原始应该是这样

python split_train_val.py --xml_path xx --txt_path xx

其中xx的地方根据相应的路径进行更改,需要注意到的是运行的路径是函数python split_train_val.py所在的文件夹下进行运行,否则会报错
在这里插入图片描述
在弹出的对话框中进行运行

在这里插入图片描述
可以看到已经成功生成了
在这里插入图片描述

运行voc_train.py

遇到问题

遇到如下报错unsupported operand type(s) for +: 'builtin_function_or_method' and 'str'
这里所说的意思应该是指不能将type(s)类型的字符加上一个函数或者方法,我简单查看了一些,是我在定义abs_path的时候漏加括号,导致abs_path的字符类型出现错误
在这里插入图片描述

完整代码

经过调试和更改路径之后得到的代码如下

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
sets = ['train','val','test']# 20类
classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog","horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
abs_path=os.getcwd()
print(abs_path)
# size w,h
# box x-min,x-max,y-min,y-max
def convert(size, box):dw = 1./size[0]dh = 1./size[1]x = (box[0] + box[1])/2.0 -1# 中心点位置y = (box[2] + box[3])/2.0 -1w = box[1] - box[0]h = box[3] - box[2]x = x *dww = w *dwy = y *dhh = h *dh # 全部转化为相对坐标return (x, y, w, h)def convert_annotation(image_id):# 找到2个同样的文件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()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: #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))# 传入的是w,h 与框框的周边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')wd = getcwd()for image_set in sets:# ('2012', 'train') 循环5次# 创建目录 一次性if not os.path.exists('labels/' ):os.makedirs('labels/')# 图片的id数据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:list_file.write(abs_path+'/JPEGImages/%s.jpg\n' % (image_id)) # 补全路径convert_annotation(image_id)list_file.close()

(记录一下:一开始这个最后的JPEGImages没加斜杠,导致后续报错,这里是添加过后的)
运行val_voc.py可以得到三个txt的文件,其内容如下:
在这里插入图片描述

创建new_data.yaml文件

这个文件的名称new_data.yaml是我自己随便起的一个名字,大家可以自行更改
在这里插入图片描述

模型训练时遇到的报错

expected '<document start>', but found '<scalar>'

这里主要的原因是在定义变量的时候我使用的是=,但是应该用:
错误图片:(这里突然发现这个mydata当中trian和val的名字不一样,导致后面一系列的错误,我后面改完之后就行)
在这里插入图片描述
更正以后:
在这里插入图片描述
models文件夹下的用于训练的yolov5s.yaml
把这个原本的分类从80改成20(20是我的数据集的类型)
在这里插入图片描述

模型训练

运行如下命令,开始训练

python train.py --img 928 --batch 2 --epoch 10 --data data/new_data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt 

出现以下报错(没有出现就是成功训练啦)
No labels found in D:\yolov5-master\yolov5-master\my_data\train.cache.
train.py当中更改成绝对路径
在这里插入图片描述
new_data.yaml也进行修改
在这里插入图片描述
更改D:\yolov5-master\yolov5-master\utils当中的sa,sb的路径
在这里插入图片描述

开始运行…

结果可视化

运行结果如下
在这里插入图片描述
使用wandb可以看到我们的运行结果的一些可视化
在这里插入图片描述

参考链接

  • yolov5数据读取报错:train: No labels found in /root/yolov5-master/VOCData/dataSet_path/train.cache
  • Python编译报错的自我记录

相关文章:

深度学习训练营之yolov5训练自己的数据集

深度学习训练营之训练自己的数据集原文链接环境介绍准备好数据集划分数据集运行voc_train.py遇到问题完整代码创建new_data.yaml文件模型训练时遇到的报错模型训练结果可视化参考链接原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…...

Java中的AQS

文章目录什么是AQSAbstractQueuedSynchronizer方法解析自旋与阻塞ReentrantLock&#xff0c;Semaphore以及CountDownLatch对比ReentrantLock实现原理原理ReentrantLock源码中compareAndSetState的方法Semaphore实现原理CountDownLatch实现原理什么是AQS AQS是Java中的一个抽象…...

Spring——案例-业务层接口执行效率和AOP通知获取数据+AOP总结

执行时间获取:记录开始时间和结束时间&#xff0c;取差值。 这里使用环绕通知来实现。 环境准备: 项目文件结构: 业务层接口和实现类: 数据层: 采用mybatis注解开发&#xff0c;这里没有实现类&#xff0c;直接在接口方法里面实现映射。 domain层: 实现了数据库里面每一个…...

国外SEO舆情处理最佳黄金时间

在国外市场&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;的舆情处理是非常重要的&#xff0c;因为它可以帮助提高网站的排名和流量&#xff0c;并且建立品牌的声誉和信誉。 然而&#xff0c;在什么时间进行舆情处理是一个值得探讨的问题。 在本文中&#xff0c;我们将…...

ROC和AUC

目录 ROC AUC ROC ROC曲线是Receiver Operating Characteristic Curve的简称&#xff0c;中文名为"受试者工作特征曲线"。ROC曲线的横坐标为假阳性率(False Postive Rate, FPR)&#xff1b;纵坐标为真阳性率(True Positive Rate, TPR).FPR和TPR的计算方法分别为 F…...

Dopamine-PEG-cRGD,DOPA-PEG-cRGD,多巴胺-聚乙二醇-crgd细胞穿膜肽

名称:多巴胺-聚乙二醇-cRGD穿膜肽,多巴胺-聚乙二醇-crgd细胞穿膜肽英文名称:Dopamine-PEG-cRGD,DOPA-PEG-cRGD规格:50mg,100mg,150mg(根据要求可定制&#xff09;描述&#xff1a;cRGD多肽序列: cyclo(RGDfK)外 观 : 半固体或固体&#xff0c;取决于分子量。溶解性&#xff1a;…...

动态规划回文子串

647. 回文子串方法&#xff1a;双指针回文子串有长度为奇数和偶数两种&#xff0c;extend(s, i, i, n); extend(s, i, i 1, n);就分别对应长度为奇数和偶数的情况class Solution { private:int extend(const string& s, int i, int j, int n) {int res 0;while (i > 0…...

windows 域控提权CVE-2014-6324CVE-2020-1472CVE-2021-42287CVE-2022-26923

一、CVE-2014-6324复现 环境&#xff1a;god.org域&#xff0c;两台主机&#xff0c;一台win2008域控&#xff0c;另一台web服务器win2008 工具&#xff1a;ms14-068.exe(漏洞exp) mimikatz psexec 利用条件&#xff1a; 1.域用户账号密码 2.获得一台主机权限(本地administ…...

1、JDK 安装 Java环境变量配置

jdk下载&#xff08;Java8&#xff09; &#xff08;下载时间不同&#xff0c;小版本号会有变化&#xff0c;不影响后续安装&#xff09; 官网下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8-windows 下载完后安装 JDK 环境变量配置 Win…...

[c++]list模拟实现

目录 前言&#xff1a; 学习类的方式&#xff1a; 1 类成员变量 1.1 list成员变量 1.2 结点结构体变量 1.3 迭代器成员变量 2 默认函数——构造 2.1 结点结构体构造函数 2.2 list构造函数 2.3 迭代器构造函数 3 迭代器实现 3.1 list部分 3.2 迭代器结构体部分 3.2…...

实用的仓库管理软件有哪些,盘点2023年5大仓库管理软件!

对于做批发生意的老板或工厂老板来说&#xff0c;选择一款实用的仓库管理软件是至关重要的。仓库管理软件除了可以帮你降低仓库管理成本&#xff0c;提高经营管理的效率&#xff0c;还能够在手机上随时随地掌控仓库员工和商品的最新信息&#xff0c;与客户、供应商的订单情况能…...

(八十二)透彻研究通过explain命令得到的SQL执行计划(1)

今天我们正式进入研究explain命令得到的SQL执行计划的内容了&#xff0c;只要把explain分析得到的SQL执行计划都研究透彻&#xff0c;完全能看懂&#xff0c;知道每个执行计划在底层是怎么执行的&#xff0c;那么后面学习SQL语句的调优就非常容易了。 首先&#xff0c;我们现在…...

【Linux】旋转锁 | 读写锁

在之前的线程学习中&#xff0c;用到的锁都是挂起等待锁&#xff0c;如果申请不到锁&#xff0c;那就会在锁中等待&#xff1b; 自旋锁则不大相似 文章目录1.自旋锁1.1 概念1.2 接口1.2.1 pthread_spin_init/destroy1.2.2 pthread_spin_lock1.2.3 pthread_spin_unlock2.读写锁…...

EasyExcell导出excel添加水印

EasyExcell导出excel添加水印1、添加easyExcel相关依赖2、准备基础工具类3、创建水印handler类4、创建单元测试类WriteTest.class5、测试结果1、添加easyExcel相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId&…...

SpringCloud:Nacos配置管理

Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#xff0c;可以集中管理…...

正则表达式引擎NFA自动机的回溯解决方案总结

前几天线上一个项目监控信息突然报告异常&#xff0c;上到机器上后查看相关资源的使用情况&#xff0c;发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具&#xff0c;我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法&#…...

卷积神经网络之AlexNet

目录概述AlexNet特点激活函数sigmoid激活函数ReLu激活函数数据增强层叠池化局部相应归一化DropoutAlexnet网络结构网络结构分析AlexNet各层参数及其数量模型框架形状结构关于数据集训练学习keras代码示例概述 由于受到计算机性能的影响&#xff0c;虽然LeNet在图像分类中取得了…...

React中setState什么时候是同步的,什么时候是异步的?

本文内容均针对于18.x以下版本 setState 到底是同步还是异步&#xff1f;很多人可能都有这种经历&#xff0c;面试的时候面试官给了你一段代码&#xff0c;让你说出输出的内容&#xff0c;比如这样&#xff1a; constructor(props) {super(props);this.state {val: 0}}compo…...

优秀开源软件的类,都是怎么命名的?

日常编码中&#xff0c;代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图&#xff0c;也是一项必备的能力。 Java项目的代码结构&#xff0c;能够体现它的设计理念。Java采用长命名的方式来规范类的命名&#xff0c;能够自己表达它的主要意图。配合高级的 IDEA&…...

绘制CSP的patterns矩阵图

最近在使用FBCSP处理数据,然后就想着看看处理后的样子,用地形图的形式表现出来,但是没有符合自己需求的函数可以实现,就自己尝试的实现了一下,这里记录一下,方便以后查阅。 绘制CSP的patterns矩阵图 对数据做了FBCSP处理,但是想画一下CSP计算出来的patterns的地形图,并…...

OFA模型处理网络拓扑图:自动化生成网络设备连接描述

OFA模型处理网络拓扑图&#xff1a;自动化生成网络设备连接描述 1. 引言&#xff1a;网络工程师的文档之痛 如果你是一名网络工程师&#xff0c;或者负责过网络运维&#xff0c;一定对下面这个场景不陌生&#xff1a;面对一张密密麻麻、设备林立的网络拓扑图&#xff0c;你需…...

CLIP-GmP-ViT-L-14与YOLOv11结合:实现目标检测后的细粒度语义描述

CLIP-GmP-ViT-L-14与YOLOv11结合&#xff1a;实现目标检测后的细粒度语义描述 你有没有遇到过这种情况&#xff1f;一个智能摄像头告诉你“画面里有人”&#xff0c;但你更想知道的是“画面里有一个穿着蓝色外套、正在打电话的年轻人”。或者&#xff0c;一个货架分析系统告诉…...

RTX4090D显存优化:OpenClaw长文本处理实测Qwen3-32B性能

RTX4090D显存优化&#xff1a;OpenClaw长文本处理实测Qwen3-32B性能 1. 测试背景与实验设计 去年我在处理学术论文时&#xff0c;经常遇到需要分析几十页PDF的情况。传统工具要么截断文本&#xff0c;要么丢失关键上下文。当我发现OpenClaw支持本地部署大模型后&#xff0c;立…...

墨语灵犀开源模型生态:对接LangChain/RAG构建专属翻译知识库

墨语灵犀开源模型生态&#xff1a;对接LangChain/RAG构建专属翻译知识库 1. 引言&#xff1a;当古典美学遇见现代AI架构 在人工智能技术快速发展的今天&#xff0c;翻译工具已经从简单的词汇转换演变为理解文化语境和语义深度的智能系统。「墨语灵犀」作为基于腾讯混元大模型…...

PWM技术原理与电机调速应用详解

PWM技术原理与电机调速应用详解1. PWM基础概念解析1.1 脉冲宽度调制定义PWM(Pulse Width Modulation)即脉冲宽度调制&#xff0c;是一种通过调节脉冲信号的宽度(占空比)来实现能量控制的电子电力技术。该技术在直流电机调速、开关电源、逆变器等电力电子领域有广泛应用。1.2 脉…...

Fast-GitHub:突破网络瓶颈的开发效率工具解决方案

Fast-GitHub&#xff1a;突破网络瓶颈的开发效率工具解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 1 痛点直击&#xff…...

PP实战指南:ECN工程变更在物料计划中的关键应用与系统操作解析

1. ECN工程变更的核心价值与业务场景 第一次接触ECN&#xff08;Engineering Change Notice&#xff09;是在2015年负责汽车零部件项目时&#xff0c;当时产线因为一个螺丝规格变更导致全线停产8小时。这个惨痛教训让我深刻理解到&#xff0c;工程变更绝不是简单的技术文档更新…...

AIGC时代,程序员会被取代吗?我的看法与行动建议

AIGC时代&#xff0c;程序员会被取代吗&#xff1f;我的看法与行动建议 随着AI生成内容&#xff08;AIGC&#xff09;技术的迅猛发展&#xff0c;许多人开始担忧&#xff1a;程序员这一职业是否会被AI取代&#xff1f;从代码生成工具GitHub Copilot到对话式编程助手ChatGPT&am…...

轨迹规划实战:用多项式插值+粒子群玩转机械臂运动优化

轨迹规划 路径规划 matlab 353多项式插值 基于改进粒子群算法 时间最优 针对六自由度 四自由度都可以&#xff0c;轨迹规划&#xff0c;多项式插值&#xff0c;更改轨迹点位置就可以搞机器人轨迹规划最头疼的就是既要轨迹丝滑又要时间最短。今天咱们用Matlab整点狠活—…...

PyQt新手必看:Fluent Widgets vs PyQtGraph,哪个更适合你的GUI项目?

PyQt新手指南&#xff1a;Fluent Widgets与PyQtGraph的深度对比与选型策略 当你第一次踏入PyQt GUI开发的世界&#xff0c;面对琳琅满目的框架选择&#xff0c;是否感到迷茫&#xff1f;Fluent Widgets和PyQtGraph这两个名字可能已经出现在你的搜索列表中&#xff0c;但它们究竟…...