用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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元