猫12分类:使用yolov5训练检测模型
前言:
在使用yolov5之前,尝试过到百度飞桨平台(小白不建议)、AutoDL平台(这个比较友好,经济实惠)训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置嘛!勉强过的去。毕竟训练的模型也不是很大。本来想着也想搞一些nb轰轰的模型,但想想还是算了,一是经济(云平台,只想白嫖),二是时间(准备那些数据集就非常浪费时间,自己昨天制作的那150关于猫的label就标了三四个小时,还标错了,导致训练时全部返工,真的烦),三是学校电脑配置还是不咋行,训练完估计模型精度也就那样子。想想嘛!还是根据喜好训练一个模型吧!
使用yolov5进行本地部署的原因:
推荐使用YOLOv5训练检测模型有以下几个原因:
1. 高性能:YOLOv5在检测任务上具有出色的性能。相比于之前的版本,YOLOv5采用了更深的网络结构和更多的特征层,可以提供更准确的检测结果,并且在速度上也有所提升。
2. 简单易用:YOLOv5提供了一个简单的训练和测试框架,使得用户可以轻松地进行模型的训练和评估。用户只需要准备好训练数据,并进行简单的配置,就可以开始训练模型。
3. 多平台支持:YOLOv5支持多种平台,包括CPU、GPU和TPU等。这使得用户可以根据自己的需求选择合适的硬件平台来进行训练和推理。
4. 开源社区支持:YOLOv5是一个开源项目,有一个庞大的开源社区支持。这意味着用户可以从社区中获取到丰富的资源、教程和解决方案,以帮助他们更好地使用和优化YOLOv5模型。
综上所述,YOLOv5是一个性能优秀、简单易用、多平台支持且有开源社区支持的检测模型,因此推荐使用它进行训练和应用。
数据预处理:
xml文件转txt文件
在使用yolov5训练模型之前,需要将label目录下的xml文件转为txt文件。


转换代码如下
import os
import xml.etree.ElementTree as ETimport os
import xml.etree.ElementTree as ETdef convert_xml_to_yolov5_label(xml_file, txt_file):tree = ET.parse(xml_file)root = tree.getroot()with open(txt_file, 'w') as f:for obj in root.findall('outputs/object/item'):class_name = obj.find('name').textbbox = obj.find('bndbox')x_min = float(bbox.find('xmin').text)y_min = float(bbox.find('ymin').text)x_max = float(bbox.find('xmax').text)y_max = float(bbox.find('ymax').text)width = x_max - x_minheight = y_max - y_minx_center = x_min + width / 2y_center = y_min + height / 2# 将坐标归一化到0-1之间width /= float(root.find('size/width').text)height /= float(root.find('size/height').text)x_center /= float(root.find('size/width').text)y_center /= float(root.find('size/height').text)f.write(f"{class_name} {x_center} {y_center} {width} {height}\n")def batch_convert_xml_to_yolov5_label(xml_folder, txt_folder):if not os.path.exists(txt_folder):os.makedirs(txt_folder)for file in os.listdir(xml_folder):if file.endswith('.xml'):xml_file = os.path.join(xml_folder, file)txt_file = os.path.join(txt_folder, file.replace('.xml', '.txt'))convert_xml_to_yolov5_label(xml_file, txt_file)# 示例用法
xml_folder = r'C:\Users\1\Desktop\images\labelsxml'
txt_folder = r'C:\Users\1\Desktop\images\labels'
batch_convert_xml_to_yolov5_label(xml_folder, txt_folder)
划分训练集和验证集
因为数据集比较少,所以验证集部分直接使用训练集来做验证。
数据目录结构如下:

编写data目录yaml文件(索引文件,加载数据的访问路径以及检测类别)
# 数据集根路径
path: C:\Users\1\Desktop\catmaoxunlian\catdata
#训练集
train: images/train
#验证集
val: images/valnc: 1
# Classes
names: ['cat']
示例编辑如下

编写models目录下的yum文件

模型训练
找到yolov5目录下的train.py,加载数据集yaml文件和models云文件,以及预训练模型,
详细教程请找我的另一篇博客(懒得再写一遍)基于yolov5的NEU-NET产品缺陷目标检测_map50_挽风起苍岚的博客-CSDN博客

基本上检测出来了,不过精度不是很高,精度不高的原因,主要时数据集太少(猫的类别很多),训练次数不是很够。

模型推理
python detect.py --weights yolov5s.pt --source 0 # webcamimg.jpg # imagevid.mp4 # videoscreen # screenshotpath/ # directorylist.txt # list of imageslist.streams # list of streams'path/*.jpg' # glob'https://youtu.be/LNwODJXcvt4' # YouTube'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
测试图片如下:

模型推理后的结果

额,模型精度有待加强,不过先这样吧!勉勉强强,哈哈。。。
后续内容
训练一个猫12分类的模型;
部署到云平台,开放一个接口调用模型API;
然后结合猫目标检测模型制作一个C#小程序。
增加一个GPT功能等等吧!
....
相关文章:
猫12分类:使用yolov5训练检测模型
前言: 在使用yolov5之前,尝试过到百度飞桨平台(小白不建议)、AutoDL平台(这个比较友好,经济实惠)训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置…...
Kubernetes Dashboard部署ImagePullBackOff问题处理
通常,出现ImagePullBackOff问题是由于Kubernetes集群无法拉取所需的镜像导致的。解决这个问题的方法通常包括以下步骤: 1. 检查Pod的描述信息: kubectl describe pod/[pod名称] --namespacekubernetes-dashboard 查看Events部分是否有关于…...
十四、Docker的基本操作
目录 (一)镜像命令 一、拉取Nginx 二、查看镜像 三、导出文件 四、删除镜像 五、加载镜像 (二)容器命令 一、例子:运行一个nginx容器 1、输入运行命令 2、使用命令查看宿主机ip 3、在外部浏览器访问 4、查看…...
C#,数值计算——插值和外推,分段线性插值(Linear_interp)的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 分段线性插值 /// Piecewise linear interpolation object. /// Construct with x and y vectors, then call interp for interpolated values. /// </summary> …...
详细讲解什么是单例模式
当谈到单例模式时,我们指的是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式在软件开发中很常见,特别是需要控制资源访问、配置管理、日志记录器等情况下。 让我们用一个简单的例子来解释单…...
在springBoot中同时使用mysql和MongoDB
在SpringBoot中非关系向数据库MongoDB和关系型数据库MySQL都可通过引入相关依赖并按照指定配置单独集成; mysql引入依赖: compile "org.springframework.boot:spring-boot-starter-web:1.5.18.RELEASE"compile "org.springframework.boot:spring-boot-start…...
2023.11.19 hadoop之MapReduce
目录 1.简介 2.分布式计算框架-Map Reduce 3.mapreduce的步骤 4.MapReduce底层原理 map阶段 shuffle阶段 reduce阶段 1.简介 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架; Mapreduce核心功能是…...
力扣第841题 钥匙和房间 C++ DFS BFS 附Java代码
题目 841. 钥匙和房间 中等 相关标签 深度优先搜索 广度优先搜索 图 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间…...
React 中 react-i18next 切换语言( 项目国际化 )
背景 平时中会遇到需求,就是切换语言,语种等。其实总的来说都是用i18n来实现的 思路 首先在项目中安装i18n插件,然后将插件引入到项目,然后配置语言包(语言包需要你自己来进行配置,自己编写语言包ÿ…...
antd design 5 版本 文件上传
<UploadcustomRequest{customRequest}accept".csv" showUploadList{false}><Button icon{<UploadOutlined />}>上传 CSV 文件</Button></Upload> accept 代表限制的上传类型 也可设置 .excel // 文件上传 ( CSV ) const customReques…...
【如何学习Python自动化测试】—— 浏览器操作
4 、 浏览器操作 4.1 浏览器最大化 Webdriver 打开浏览器后,默认不是最大化,如果需要界面最大化,需要通过 maximize_window()方法来实现,代码如下: maximize_window()方法是Selenium WebDriver提供的一个方法…...
Python编程技巧 – 使用字典
Python编程技巧 – 使用字典 Python Programming Skills – Using Dictionary Dictionary, 即字典,这是Python语言的一种重要的数据结构;Python字典是以键(key)值(value)对为元素,来存储数据的集合。 前文提到Python列…...
el-tree 与table表格联动
html部分 <div class"org-left"><el-input v-model"filterText" placeholder"" size"default" /><el-tree ref"treeRef" class"filter-tree" :data"treeData" :props"defaultProp…...
Leetcode刷题详解——删除并获得点数
1. 题目链接:740. 删除并获得点数 2. 题目描述: 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] …...
HTTP四种请求方式,状态码,请求和响应报文
1.get请求 一般用于获取数据请求参数在URL后面请求参数的大小有限制 2.post请求 一般用于修改数据提交的数据在请求体中提交数据的大小没有限制 3.put请求 一般用于添加数据 4.delete请求 一般用于删除数据 5.一次完整的http请求过程 域名解析:使用DNS协议…...
Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]
一.引言 前面介绍了 GFP-GAN 的原理与应用,其用于优化图像画质。本文关注另外一个相关的项目 Wave2lip,其可以通过人物视频与自定义音频进行适配,改变视频中人物的嘴型与音频对应。 二.Wave2Lip 简介 Wave2lip 研究 lip-syncing 以达到视频…...
2311rust,1.31版本更新
1.31.0稳定版 Rust1.31可能是最激动人心的版本! 使用Cargo创建一个新项目: cargo new foo以下是Cargo.toml的内容: [package] name "foo" version "0.1.0" authors ["名字"] edition "2018" //版本. [dependencies]在[package]…...
文心一言-情感关怀之旅
如何让LLM更有温度。 应用介绍...
下厨房网站月度最佳栏目菜谱数据获取及分析PLus
目录 概要 源数据获取 写Python代码爬取数据 Scala介绍与数据处理 1.Sacla介绍 2.Scala数据处理流程 数据可视化 最终大屏效果 小结 概要 本文的主题是获取下厨房网站月度最佳栏目近十年数据,最终进行数据清洗、处理后生成所需的数据库表,最终进…...
buildadmin+tp8表格操作(5)自定义组装搜索的查询
有时候我们会自定义组装一些数据,发送给后端,让后端来进行筛选,这里有一个示例 const onComSearchIdEq () > {// 展开公共搜索baTable.table.showComSearch true/*** 公共搜索表单赋值* 范围搜索有两个输入框,输入框绑定变量…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
