用yolov5训练了一个自己的数据集效果杠杠的

2023-11-01 03:40

本文主要是介绍用yolov5训练了一个自己的数据集效果杠杠的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

cv识别无人机(yolo算法)

在github上download了yolov5的源码,想用视觉识别一下空中飞行的无人机,识别对象有:1:鸟类bird,2:无人机UAV,3:直升机helicopter;想通过自己创建一个数据集,训练yolov5,在调用detect.py来识别一下效果。

第一步还是把最终训练出来的效果放上

我把视频上传到b站了

yolov5算法训练无人机数据集检测视频中无人机效果


下面整理一下整个训练+测试的步骤:

第二步: 准备数据集

百度了一下,在B站上看到有一个视频是做这个识别的,私信了up主,也没有理我,索性自己弄一个数据集吧!再说了有用不了半个小时。(这里提醒大家,自己做数据集不费时间,给100多张图打标签label就行,用不了半个小时,图片就从百度搜索就行,我们的目的是感性的认识这套牛掰的算法,100张图训练个几个小时就可以出来很好的效果,还有不用非要显卡,虽然我的电脑有显卡,但是装pytorch的显卡cuda版本的总是出错,索性不弄了,直接用cpu版本,cpu版本的pytorch包还小,一会儿就能安装好,这100张图我训练了100个epoch花费了3到4个小时,我的电脑的cpu是i7-9700的)
我是从百度上找了大概130多张图片,我截个图
UAV数据集
用labelimage打上标签,所有的标签数量大概也就200来个吧!
不会用labelimgage制作数据集的同学可以看我之前的一个blog,我之前写过过程。
yolo的数据文件夹格式又要巩固一下了,先建一个数据文件夹data,在数据文件夹data目录下面建图像文件夹images和标签文件夹labels,然后在images文件夹下面建立训练数据集train和验证集val(validation的缩写,验证校验的意思),在labels的文件夹下面也是建立train和val两个文件夹,分别放训练集和验证集的标签。
另外说一下验证集,验证集里面我找了26张图片,标记了40个左右的labels吧,所以所有的数据加起来大概150张图片。
我放一个图片看一下验证集里面的图片如下图:
验证集里面的图片
到这里为止,所有的数据基本整理完毕,另外还需要几张测试的图片,到测试的时候再从网上找就是了。

第三步:下载yolov5源码,并改参数

这里下载yolov5的源码就不写怎么下载了,自己百度就好,相对难度低,我是从gitee上下载的,github总是卡,这个源码也没有多大,几分钟的时间就下载好了。下面直接写怎么改一下代码训练自己制作好的无人机的数据集。
分步骤写吧
这里分一个三级标题

首先:明确思路

怎么训练这个算法?我要训练什么模型?我要拿这个模型做什么?这些问题是在训练这个算法的时候首先要想的问题。
回答:
我要训练一个模型能够识别空中飞行的无人机,并打上红框label,空中的复杂环境下可能不只有无人机,会有鸟、树、白云、直升机、飞机等等其他干扰因素印象,简单起见,我又加上了鸟bird和直升机helicopter,所以用yolov5分类nc(number class)为3个,也就是无人机UAV、鸟bird、直升机、helicopter,看下图,建立一个数据信息文件,文件格式yaml
chenchen.yaml

我把这个文件名保存成了chenchen.yaml
训练集图片train在uav_train下面的data里面,训练集也是,这个文件不用写标签label的地址,因为文件夹结构是定的,程序会自动判断出label的位置。
chenchen.yaml文件里面的nc改成2,names改成自己的,也就是uav bird 和helicopter
下面我贴两张图片,这两张图片是我训练了100张图后,测试的标签和测试的预测,基本上框的位置已经很好了,只有左上角的这个直升机helicopter没有被识别出来,这个我感觉是因为我找的直升机图片的问题,这个直升机图片有点特别,训练数据中这样的图片少的原因。
test  prediction,测试预测的图
测试标签的图
总结:思路明确了,就是做一个三分类模型,无人机、鸟、直升机,

其次修改train.py文件

思路确定了后就是训练这个模型了,我们已经把数据集准备好了,现在就训练这个模型。下载下来的yolo源码里面的train.py文件,我截图一下:

train.py
这个是train.py文件,三部分:
第一:导入各种依赖包;
第二:定义train函数方法,主要的就是这个train方法;
第三:主程序;
解释一下,各种依赖包不用解释,train方法就是作者的核心了,简单解释就是yolo算法的原理,主程序里面就是调用tran方法画框框,(到目前位置我能给的解释也只有这么多,我没有花费时间研究,我感性上的理解应该是这样)
这个文件中主要要修改的参数是什么呢?
下面这张图中我给出了箭头
在这里插入图片描述
第一个箭头:yolov5s.pt,这个是权重文件,用的是s版本,small,yolov5的权重文件不同分为几个不同版本,这里我用的是s版本,这里可以认为是模型的初始权重,
第二个箭头:这个yolov5s.yaml文件我保存到了uav_train文件夹里面,这个文件是配置yolov5模型的,叫做配置文件吧,等下这个文件我截图一下,这个文件也要改一个地方。
第三个箭头:就是数据文件,就是上面定义的一个chenchen.yaml文件,这里有训练数据集的地址。
第四个箭头:是epoch,我写的是100,大家也可以改成10试一下,20分钟训练完成,我当时做了一下,10个epoch效果很差,100个的时候效果就是我视频的效果,都能到70%准确率以上。
第五个箭头:是batch,我是16张图片一个batch

第二个箭头解释图片如下:
yolov5s.yaml
这里是这个算法的配置文件,最终输出的类别是3,这改成3保存就行,其他的能看出来这个里面是yolo的架构,我也不会解释,有想了解的可以自己百度。

总结:到这里train.py就修改完毕了

训练

到这里就可以训练了,我用的是pycharm这个集成环境,所以选中train.py文件直接右键运行就可以
在这里插入图片描述
下面就是漫长的训练时间,只有等着了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

第四步:训练完成,开始测试test

其实这一步可以不用,test.py文件主要是用来测试验证集val的,这里和训练一样,不要把训练好的权重文件的地址换一下,就是best.pt文件,data的参数改一下,改成chenchen.yaml就可以。最激动人心的是第五步,就是训练好的模型验证一下其他的图片,看看效果怎么样。

第五步:测试新图片,新视频看效果

这个文件是detect.py,我截图看下:
detect.py
这里有四个箭头
第一个:训练好的最好的权重文件,加载上
第二个:我从百度找了一个视频文件保存成了666.mp4
第三个:置信度,我这里其实可以写0.7,
第四个:iou,
解释:如果训练的epoch少,可以把三四箭头改小点,要不然视频和图片中不会被标记出,会让你误认为自己训练的不对。

好了就先写到这里吧,基本上该说的都说完了。

后记

至于这个数据集,故短时间我整理一下,分享到网上。

这篇关于用yolov5训练了一个自己的数据集效果杠杠的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320220

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很