简单使用YOLOv5自己训练模型

使用YOLOv5自己训练模型

前言:本文基于我的另一篇文章作为基础,文章戳这里,主要还是实操为主,让大家能快速上手使用。

数据集构建

1.准备工作

数据收集:
  • 图片类型数据

  • 视频类型数据(使用opencv进行视频抽帧,相当于转为一张一张图片的数据)

    image-20231124142915206

    具体操作:

    1、建立如下目录

    image-20231124144123190

    2、PyCharm打开该路径

    image-20231124144253590

    3、放入视频文件、新建代码文件并配置jupyter,配置jupyter操作上面有说,结果如下图。

    image-20231124145750925

    4、接下来我们逐步输入代码

    ​ ①导入必要的包

    image-20231124150003477

    ​ ②读取视频文件

    image-20231124150339363

    ​ ③显示读取的帧

    image-20231124150359706

    这里可以发现图片颜色不对,这是因为原始图片是RGB格式,而这里imshow显示的是BGR格式,所以需要进行如下转换。

    image-20231124160917901

    ​ ④完整代码执行

    由于视频的帧数太多,所以设置参数每30帧读取一张图片。

    最后完整的代码如下(根据自己的文件路径),执行完后可以看到左侧的数据集。

    image-20231124161008111

标注工具:
  • labelimg(安装命令:pip install labelimg)

    结果如下

    image-20231124162009773

    下载好后终端输入labelimg,自动弹出该标注工具,这里如果出现了以下错误,看这篇文章,错误解决方法,设置一个系统环境变量即可。

    image-20231124163119486

再次运行,成功

image-20231124163233404

LabelImg操作方法:

点击openDir出现的选择框表示选择存图片的那个文件夹,点击Change Save Dir出现的选择框是选择把图片标注结果的目的文件夹。我在这里新建了一个label文件夹用于存放标注结果,在这里有一个小问题,Python3.10安装的labelimg无法识别jpg格式的图片,就算换成png也有别的错误,测试过别的版本python就可以正常识别,所以如果你使用的是Python3.10重新换一个版本吧(我在这里换成了3.9)。

image-20231124163754049

调整保存格式,labelImg打开默认保存是PascalVOC格式,我们需要点击把它改成yolo格式,如下图。

image-20231124175602598

点击save保存,打开AutoSavemode可以自动保存。

image-20231124175812210

此时我们可以正式开始标注图片。

右键点击CreateBox,用鼠标选择区域,并为这块区域命名,标注好后点击左侧nextImage进入下一张图片。

image-20231124180108521

快捷键: a上一张、d下一张、w画框框

标注好后打开label文件夹,可以看到很多txt文件,任意打开一个,第一个表示类别0(在class文件中可以看到类别),后面四个分别表示你画的框的中心点在整体图片中的一个比例以及宽和高对于整体图片的比例。

image-20231124180953139

这里有四个类别。

image-20231124181157489

2.开始训练

分装图片

image-20231124181340933

将images中的图片分为train和val两个文件夹放置(训练集多验证集少),如下图

image-20231124181748774

同样把labels也按相同操作放置一一对应的图片到train和val文件夹中,classes不用放。

关键参数

image-20231124182528862

我们可以打开train.py文件查看参数位置,可以看到data参数默认是coco128.yaml文件

image-20231124182901213

让我们打开coco128.yaml看看,path指定了数据集的位置,train指定的是数据集中训练集所在的位置,val指定的是数据集中测试集所在的位置,test是可选项,下面classes就是类别的定义。

image-20231124183743272

很明显,我们只需要整理好数据集改写对应的yaml文件同时更新train的,那么我们就可以训练了。

修改参数

复制一份coco128.yaml,更名为classroom

image-20231124184139455

并对文件内容进行修改,修改后如下图。

image-20231124185226839

train.py中修改参数

image-20231124184907785

点击运行,等待一会便训练成功

image-20231124192006615

模型训练时遇到的问题

image-20231124191952647

修改虚拟内存的方法:

image-20231124192225559

开始检测

训练完成后我们打开exp3,可以看到以下文件。

image-20231124192514512

best.pt表示训练过程中最好的那个模型,last.pt表示训练过程中最后一轮的模型,labels存放整体数据比例、分布这些内容、results.csv存的就是各项指标的变化(可以用于自己画图做分析)events开头的文件保存了训练过程中各种参数的变化,可以使用tensorboard来查看,命令如下

tensorboard --logdir runs

执行结果:

image-20231124192934300

按住ctrl点击网址即可查看结果。

image-20231124193005065

正式检测:

输入命令,weights指定刚刚训练时最好的模型,source指定我们一开始使用的视频,–view-img参数表示可以实时用可视化界面展示训练过程。

python detect.py --weights runs/train/exp3/weights/best.pt --source datasets/classroom.mp4 --view-img

hell
tensorboard --logdir runs


执行结果:[外链图片转存中...(img-jcqtmzr8-1700826447637)]按住ctrl点击网址即可查看结果。[外链图片转存中...(img-09iWVA6H-1700826447637)]**正式检测:**输入命令,weights指定刚刚训练时最好的模型,source指定我们一开始使用的视频,--view-img参数表示可以实时用可视化界面展示训练过程。```shell
python detect.py --weights runs/train/exp3/weights/best.pt --source datasets/classroom.mp4 --view-img

由于原视频中有我的同学们,这里就不做展示了,最终结果是符合预期的,简单场景基本能满足需求,但是如果一直在动或者动效效果比较大的时候,最终结果会有出入,但整体来说置信度还是可以的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216255.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报表生成器Stimulsoft用户手册:具有交叉基元的报告

Stimulsoft Reports 是一款报告编写器,主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署,如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等,在你的应用程序中嵌入报告设计器…

MySQL介绍及安装

MySQL介绍及安装 一、MySQL概述 1、关系型数据库与非关系型数据库 RDBMS(relational database management system),既关系型数据库管理系统。 简单来说,关系型数据库,是指采用了二维表格来组织数据的数据库。 扩展…

python cv2.imread()和Image.open()的区别和联系

文章目录 1. cv2.imread()1.1 cv2.imread参数说明1.2 注意事项 2. Image.open()3. cv2.imread()与Image.open()相互转化3.1 cv2.imread()转成Image.open():Image.fromarray()3.2 Image.open()转成cv2.imread():np.array() 1. cv2.imread() cv2.imread()…

NX二次开发UF_CURVE_ask_curve_struct_data 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_struct_data Defined in: uf_curve.h int UF_CURVE_ask_curve_struct_data(UF_CURVE_struct_p_t curve_struct, int * type, double * * curve_data ) overview…

数据链路层-以太网协议

目录 数据链路层的作用认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对UDP协议的影响MTU对TCP协议的影响数据跨网络传输的过程ARP协议ARP协议作用ARP数据报的格式ARP协议的工作流程 数据链路层的作用 我们知道数据能在网络中从一台主机发送到另一台主机…

从0开始学习JavaScript--深入了解JavaScript框架

JavaScript框架在现代Web开发中扮演着关键角色,为开发者提供了丰富的工具和抽象层,使得构建复杂的、高性能的Web应用变得更加容易。本文将深入探讨JavaScript框架的核心概念、常见框架的特点以及它们在实际应用中的使用。 JavaScript框架的作用 JavaSc…

ONNX实践系列-修改yolov5-seg的proto分支输出shape

一、目标 本文主要介绍要将原始yolov5分割的输出掩膜从[b,c,h,.w]修改为[b, h, w, c] 原来的: 目标的: 代码如下: Descripttion: version: @Company: WT-XM Author: yang jinyi Date: 2023-09-08 11:26:28 LastEditors: yang jinyi LastEditTime: 2023-09-08 11:48:01 …

利用Nginx与php处理方式不同绕过Nginx_host实现SQL注入

目录 首先需要搭建环境 nginxphpmysql环境: 搭建网站 FILTER_VALIDATE_EMAIL 绕过 方法1:冒号号分割host字段 方法2:冒号号分割host字段 方法3:SNI扩展绕过 首先需要搭建环境 nginxphpmysql环境: php安装包&a…

WPF实战项目十七(客户端):数据等待加载弹框动画

1、在Common文件夹下新建文件夹Events&#xff0c;新建扩展类UpdateLoadingEvent public class UpdateModel {public bool IsOpen { get; set; }}internal class UpdateLoadingEvent : PubSubEvent<UpdateModel>{} 2、新建一个静态扩展类DialogExtensions来编写注册和推…

Codeforces Round 786 (Div. 3) D. A-B-C Sort

D. A-B-C Sort 步骤 1 &#xff1a;当 a不为空时&#xff0c;从 a中取出最后一个元素&#xff0c;并将其移动到数组 b的中间。如果 b 当前长度为奇数&#xff0c;则可以选择&#xff1a;将 a 中的元素放到 b 中间元素的左边或右边。结果&#xff0c; a 变空&#xff0c; b 由 n…

第97步 深度学习图像目标检测:RetinaNet建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;RetinaNet模型。 二、RetinaNet简介 RetinaNet 是由 Facebook AI Research (FAIR) 的研究人员在 2017 年提出的一种目标检测模型。它是一种单阶段&#xff08;o…

讲述 什么是鸿蒙 为什么需要鸿蒙 为什么要学习鸿蒙

首先 我们为什么要学习鸿蒙开发&#xff1f; 因为 鸿蒙发展前景巨大 鸿蒙自发布依赖 一直受社会各界关注 强两百的 App厂商 大部分接受了与鸿蒙的合作 硬件也有非常多与鸿蒙合作的厂商 鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求 所以鸿蒙的崛起不过是早晚的问题 …