猫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/*** 公共搜索表单赋值* 范围搜索有两个输入框,输入框绑定变量…...

企业级固态硬盘如何稳定运行?永铭固液混合铝电解电容来帮忙
企业级 固态硬盘 永铭固液混合铝电解电容 企业级固态硬盘(SSD)主要应用于互联网、云服务、金融和电信等客户的数据中心,企业级SSD具备更快传输速度、更大单盘容量、更高使用寿命以及更高的可靠性要求。 企业级固态硬盘的运行要求—固液混合电…...

【MISRA C 2012】Rule 4.2 不应该使用三连符
1. 规则1.1 原文1.2 分类 2. 关键描述3. 代码实例 1. 规则 1.1 原文 Rule 4.2 Trigraphs should not be used Category Advisory Analysis Decidable, Single Translation Unit Applies to C90, C99 1.2 分类 规则4.2:不应该使用三连符 Advisory建议类规范。 2…...

spring boot加mybatis puls实现,在新增/修改时,对某些字段进行处理,使用的@TableField()
1.先说场景,在对mysql数据库表数据插入或者更新时都得记录时间和用户id 传统实现有点繁琐,这里还可以封装一下公共方法。 2.解决方法: 2.1:使用aop切面编程(记录一下,有时间再攻克)。 2.2&…...

如何构建风险矩阵?3大注意事项
风险矩阵法(RMA)是确定威胁优先级别的最有效工具之一,可以帮助项目团队识别和评估项目中的风险,帮助项目团队对风险进行排序,清晰地展示风险的可能性和严重性,为项目团队制定风险管理策略提供依据。 如果没…...

SpringSecurity5|12.实现RememberMe 及 实现原理分析
security/day08 这个功能大家还熟悉么?我们在登录网站的时候,除了让你输入用户名和密码,还会有个勾选框: 记住我!!!不是让大家记住我哈。 值得一提的是,Spring Security 也提供了这个…...

持续集成交付CICD:Jenkins Sharedlibrary 共享库
目录 一、理论 1.共享库 2.共享库配置 3.使用共享库 4.共享库扩展 二、实验 1.连接共享库 2.使用共享库 三、问题 1.路径报错 2.readJSON 报错 一、理论 1.共享库 (1)概念 1)共享库这并不是一个全新的概念,其实在编…...

Linux--网络编程
一、网络编程概述1.进程间通信: 1)进程间通信的方式有**:管道,消息队列,共享内存,信号,信号量这么集中 2)特点:依赖于linux内核,基本是通过内核来实现应用层…...

数据结构 并查集
作用 快速的处理以下问题:【近乎O(1)的时间完成】 1.将两个集合合并 2.询问两个元素是否在一个集合中 用树的形式维护集合 基本原理 每一个集合用一棵树表示 每一个集合的编号就是根结点的编号,对于每一个结点,都存储其父结点…...

算法通关村第十六关黄金挑战——求滑动窗口中的最大值(滑动窗口与堆方法、双端队列法和直接比较法)
大家好,我是怒码少年小码。 今天这篇就讲一道题目,不难😎,但是一定要学会自己思考。 滑动窗口最大值 LeetCode 239:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。…...

常见树种(贵州省):009楠木、樟木、桂木种类
摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、楠木 …...