使用yolov5训练自己的目标检测数据集

使用yolov5训练自己的目标检测数据集

yolov4出来后不久,又出现了yolov5,没有论文。虽然作者没有放上和yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。很多人考虑到YOLOv5的创新性不足,对算法是否能够进化,因此yolov5的名头仍有争议。但是既然github上有如此多的star,说明还是受到大多数人认可的一个工程。

并且yolov5是十分容易上手使用的一个目标检测开源项目,只需要改几个文件,配置好自己的数据集格式和目录结构,即可开始训练,对新手十分友好。可以先把训练跑起来,在根据需要去细扣其中的模块设计。

并且,yolov5项目一直在更新维护,除了日常处理bug,还有更优算法的版本(如激活函数的更新)更迭和新的训练可视化工具wandb的加入等,这也是十分难得的。

今天,笔者就来介绍一下自己第一次使用yolov5训练自己的数据集的过程。

工程项目准备

PyTorch等其他依赖的安装这里就不说了,网上有很多教程。

首先从yolov5 github上克隆下代码:

git clone https://github.com/ultralytics/yolov5.git

然后从github下载预训练权重(.pt文件),没有百度云版本,这里笔者提供下载好的权重文件放到云盘(密码: afp3)供不方便的朋友直接下载。下载好后放到yolov5/weights文件夹下。

数据集准备

yolov5项目所需的数据集文件路径格式如下:

---yolov5
---yolo_data---train---images---labels---val---images---labels---data.yaml

数据集文件夹放在与工程文件同级的目录下。其中包含两个子文件夹和一个配置文件data.yaml,两个子文件夹分别存放训练样本和验证样本,注意images和labels文件夹的名字不要改

先说一下data.yaml配置文件内的内容

train: ../yolo_data/train
val: ../yolo_data/valnc: [你的检测数据集的类别数]
names: [你的检测数据集的类别名称列表]

共有四个键值对,train,val,nc,names,分别对应如下表:

train你的训练数据的文件夹路径
val你的验证数据的文件夹路径
nc你的检测数据集的类别数(如COCO数据集中nc=80)
names你的检测数据集的类别名称列表(如:[‘plane’, ‘car’, ‘dog’, …])

然后说一下数据集格式的要求:

在train/val目录下要有images和labels两个目录,分别存放图像和标签,其中的文件名要相互对应,分别为.jpg格式和.txt格式,即:

---train---imagesaaaa.jpg	...---labelsaaaa.txt...

其中图像不必多说,放入你的数据集图像即可,而标签label目录下的txt文件要求格式如下:

类别索引           x 	      y				w				h
0 			0.53857421875 0.8779296875 0.158203125 0.06184895833333333

第一列是图像中每个object的类别索引,注意这里要与data.yaml配置文件中的names相互对应。后面四个列就是该object的检测框坐标了,这里采用的是经过归一化的中心长宽xywh格式,如果你的数据集原生不是这种格式(如对角坐标xyxy)的话,请注意调整。

开始训练

直接运行yolov5/train.py即可,注意配置好参数

python train.py \
--data ../yolo_data/data.yaml \
--cfg models/yolov5s.yaml \
--weights weights/yolov5s.yaml \
--batch-size 8 \
--epochs 100

yolov5最近一次更新增加了wandb(weights and biases,其官网,直接访问不太稳定,建议科学上网访问)训练可视化工具,没有安装的话需要先安装一下,直接pip安装即可

pip install wandb

在这里插入图片描述

第一次使用的话会需要注册账号,访问站点https://wandb.ai/authorize,拿到API Key,复制到终端中即可,首次绑定API Key账号后再训练就不在需要输入API Key了,直接将训练可视化结果送到你的wandb账号,可在该站点登录查看。

不仅有训练过程可视化,loss曲线等

在这里插入图片描述
在这里插入图片描述

甚至还有训练过程中系统的信息的展示:

在这里插入图片描述

还是非常简单实用的一个训练可视化工具。

训练完成后再yolov5/runs/train/exp文件夹下可查看一些结果PR曲线,F1曲线等,还有一些样本可视化的结果。

在这里插入图片描述

可以看到效果还是可以的(我这个数据集只有猪仔一个类 ^^可爱小猪仔)。

测试

训练完成后可以运行yolov5.detect.py文件,指定一个文件夹,测试其中的图像。

python detect.py \
--weights runs/train/exp/weights/best.pt \
--source ../images/test \
--save-txt 

如果设置打开–save-txt,则会保存结果文件。

测试结果会保存在yolov5/runs/detect内。txt结果文件则会保存在yolov5/runs/detect/labels内。

在这里插入图片描述

使用yolov5训练自己的数据集就先介绍到这里,如果有问题欢迎留言讨论。

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

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

相关文章

php的integer,PHP整型 integer

整数是一个没有小数的数字。整数规则:整数必须至少有一个数字 (0-9)整数不能包含逗号或空格整数是没有小数点的整数可以是正数或负数整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。在以下实例中我们将测试不同的数字。 …

einops和einsum:直接操作张量的利器

einops和einsum:直接操作张量的利器 einops和einsum是Vision Transformer的代码实现里出现的两个操作tensor维度和指定tensor计算的神器,在卷积神经网络里不多见,本文将介绍简单介绍一下这两样工具,方便大家更好地理解Vision Tra…

php的filter input,php中filter_input函数用法分析

本文实例分析了php中filter_input函数用法。分享给大家供大家参考。具体分析如下:在 php5.2 中,内置了filter 模块,用于变量的验证和过滤,过滤变量等操作,这里我们看下如何直接过滤用户输入的内容.fliter 模块对应的 filter_input 函数使用起来非常的简单…

COCO 数据集格式及mmdetection中的转换方法

COCO 数据集格式及mmdetection中的转换方法 COCO格式 CV中的目标检测任务不同于分类,其标签的形式稍为复杂,有几种常用检测数据集格式,本文将简要介绍最为常见的COCO数据集的格式。 完整的官方样例可自行查阅,以下是几项关键的…

php获取h1,jQuery获取h1-h6标题元素值方法实例

本文主要介绍了jQuery实现获取h1-h6标题元素值的方法,涉及$(":header")选择器操作h1-h6元素及事件响应相关技巧,需要的朋友可以参考下,希望能帮助到大家。1、问题背景:查找到h1-h6,并遍历它们,打印出内容2、实现代码&am…

在导入NVIDIA的apex库时报错 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在导入NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 报错 在使用NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中获取Request对象?

我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块:SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析 论文:https://arxiv.org/abs/2104.00323 代码:https://github.com/dvlab-research/JigsawClustering 总结 本文提出了一种单批次&#xff0…

java jps都卡死,java长时间运行后,jps失效

在部署完应用后,原本jps使用的好好的,能正确的查询到自己正在运行的java程序。但,过了一段时间后,再使用jps来查看运行的应用时,自己运行的程序都看不到,但是自己也没有关闭这些程序啊!然而使用…

指针(*)、取地址()、解引用(*)与引用()

指针(*)、取地址(&)、解引用(*)与引用(&) C 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。 指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一…

matlab电类,985电气研二,有发过考研经验贴 电气电力类的有

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼clc;clear;p[2.259;2.257;2.256;2.254;2.252;2.248;2.247;2.245;2.244;2.243;2.239;2.238;2.236;2.235;2.234;2.231;2.229;2.228;2.226;2.225;2.221;2.220;2.219;2.217;2.216;2.211;2.209;2.208;2.207;2.206;2.202;2.201;2.199;2.1…

matlab legend 分块,matlab legend 分块!

matlab legend 分块!(2013-03-26 18:07:38)%%%压差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理论q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化) 本文主要就少opencv中两个函数polylines和fillPoly分别用于绘制多边形框或区域填充,并会会以常见用途分割任务mask(还是笔者…

matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作

本文根据网上零散的信息以及这三款软件自带的说明文档整理而成,为备忘而记录。记录了Matlab和Maple之间的相互调用,以及Matlab和Mathematica之间相互调用的安装配置方法。为何需要互操作? 数值计算和图形方面Matlab毫无疑问是最强的&a…

PyTorch中的topk方法以及分类Top-K准确率的实现

PyTorch中的topk方法以及分类Top-K准确率的实现 Top-K 准确率 在分类任务中的类别数很多时(如ImageNet中1000类),通常任务是比较困难的,有时模型虽然不能准确地将ground truth作为最高概率预测出来,但通过学习&#…

java高级语言特性,Java高级语言特性之注解

注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义,单独的注解就是一种注释&am…

C/C++中的typedef 和 #define

C/C中的typedef 和 #define typedef C/C中的关键字typedef允许用户为类型名来起一个新名字,通常会是缩写或者能够清晰表明类型含义的新名字。 例: typedef unsigned int UINT; UINT 100;值得注意的是,typedef除了为C/C内置的数据类型取别…

php3.2.3 升级,thinkphp3.2.3 升级到3.2.4时出错问题

有些项目最初用OneThink做的,而OneThink 默认使用的TP 是3.2.0 的,没事的时候就想给升级一下,但是直接复制进去的时候,有错误,导致OneThink 不能运行,排查后,需要修改两个地方1、修改 Applicati…

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷,本文将聚焦于各种最新的视觉trans…

mysql 分析查询语句,MySQL教程之SQL语句分析查询优化

怎么获取有功能问题的SQL1、经过用户反应获取存在功能问题的SQL2、经过慢查询日志获取功能问题的SQL3、实时获取存在功能问题的SQL运用慢查询日志获取有功能问题的SQL首要介绍下慢查询相关的参数1、slow_query_log 发动定制记载慢查询日志设置的办法,能够经过MySQL指…