用yolov5训练自己的数据集【绝对能学会系列】

news/2024/7/10 23:05:21 标签: YOLO

【第一部分:环境搭建;第二部分:测试代码;第三部分:训练自己的数据集】

第一部分:环境搭建

首先确保您的电脑上面有Anaconda和PyCharm。

去一个您喜欢的地方创建一个文件夹【不创建也ok,直接打开cmd】:(注意最好不要有中文路径!)

输入:

activate

激活环境,出现以下界面说明你的conda是没有问题的,处于base环境下:

然后后续需要安装各种包嘛,所以我们可以切换一下源,让下载速度更快(之前试过清华的源,这次试一下中科大的源):

conda config --remove-key channelsconda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/conda config --set show_channel_urls yespip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

ok,切换完了。

去白嫖一个项目下来修改,综合网络上的百花齐放的资料,我觉得这个是个不错的项目:(没有gitee账号的先去注册登录一下)

YOLOV5-mask-42: 基于YOLOV5的口罩检测系统-提供教学视频 (gitee.com)

(记得给人家点赞收藏转发,哈哈)

ok,下载下来并解压到刚刚创建的那个文件里边,如下:

首先先用cmd打开根目录(就是yolov5-mask-42-master),然后创建虚拟环境:

conda create -n py811 python==3.8.5

(py811指的是虚拟环境的名字,python版本指定3.8.5)

出现以下界面说明创建成功:

然后需要激活这个环境:

conda activate py811

(出现左边这个小括号说明你正处于这个环境下面,是ok的)

该项目是基于pytorch框架的,所以需要去安装pytorch。

so,去pytoch官网找命令:

(另外,复制命令的时候后面的"-c pytorch"可以不选中,“-c pytorch”表示首选从国外的源进行加载,速度会灰常灰常慢。)

ok,选第一条命令复制到cmd:

conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2

安装到这里的时候好像卡住了?等一会试试?

ok的,没有问题,要有耐心哈哈哈:(怎么和别的博主不一样,他们的飞快?哈哈)

安装完了之后就是安装项目的第三方依赖包,安装第三方包的时候注意你所处的环境一定是py811就行,也可以用"dir"看一下,目录下一定要有这个requirements.txt文件:

然后就放心安装:

pip install -r requirements.txt

等待几分钟......

ok,第三方依赖也安装好了:

(呜呜我看了一下我的盘儿,挺占内存的啊)

再额外安装几个库,第一个是用来计算目标检测精度和map值的:(windows下,如果你是Linux,去掉"-windows")

pip install pycocotools-windows

第二个是用来展示图形化界面的:

pip install pyqt5

ok,目前代码所需要的依赖包就安装好了,也就是环境都搭建好了。

第二部分:测试代码

试一下看代码能不能跑通:

先简单看两个文件夹的东西,有助于跑代码:

第一个是:

项目中的pretrained文件夹里面存放的是三个预训练模型的权重文件,代表含义如下:

预训练模型是具有检测物体的能力的,它是已经在coco数据集上做过训练的。

"yolov5s.pt"比较小,咱直接采用它去做训练。

第二个是data下面的images文件夹(这是项目本身自带的图片哈):

看到bus.jpg木有,我们就检测一下这一张图片:

python detect.py --source data/images/bus.jpg --weights pretrained/yolov5s.pt

出现这些信息就说明是能跑通的,至于输出来的是什么东西,感兴趣可以去看看之前的几篇文章,有细讲,包括命令行输入的又是什么东西。(文末可以跳转到相应的文章)

看一下他执行完输出的测试结果吧:

ok,这也说明代码是可以跑通的。

在pycharm里面打开项目吧,好看一点,初次打开需要配置环境(保证右下角处于py811环境,也就是刚刚搭建的环境里):

番外:也不知道你们会不会调环境出来,不会的简单参考一下这张图:

同理,打开之后也可以先执行一下:(这张图片不是原有的,是临时随便截图的放进来的)

python detect.py --source data/images/dogs.png --weights pretrained/yolov5s.pt

在红框的路径看预测结果:

打开路径下的图片会发现图上什么显示都没有【因为这个项目是下载的别人的口罩检测的项目(而且你会发现他其实也检测不出来口罩,因为这个下载下来的项目没有提供口罩数据集,如果不做任何更改,其实他就是一个yolov5的原项目。我之所以会下载这一个是因为里面有我想要的东西哈哈),我想做的是检测狗狗和狗狗的舌头的任务,这也就是如标题所说的训练自己的数据,我的数据集不是口罩哦,因此我们接下来要做的就是如何训练自己的数据集】

第三部分:训练自己的数据集

对数据进行标注(借助labelimg工具):

pip install labelimg

进入labelimg:

labelimg

这时候他就会弹出labelimg,这就是用来进行数据标注的工具:

各个图标的含义:

一般,第一次打开这个软件先需要进行几个修改:

由于前面介绍了我的数据集是狗狗,所以我去搞了1200张狗狗的图片作为需要标注的图片:(哈哈这个数据集有没有很眼熟,没错,就是猫狗大战的那个,不喜欢的话可以去爬其他的),并把这6张图片放在images目录下:(这一个路径就需要加载到labelimg的Open Dir)【如需要该标注后的数据集,文末有放!不过需要一点点💴💴哈哈】

并在images的同级目录下创建一个labels文件夹,如图(这个路径需要加载到labelimg的Change Save Dir)

把这几个调整过来之后,labelimg的界面如下:(如果在点击过程中遇到闪退情况,在cmd再运行一下labelimg即可)

然后进行标注任务:(点击下一张图片的时候ctrl+s保存一下或者左边的save键)

yolov5狗狗标注视频

标完了之后可以打开labels看一下:

0.543003 0.465962 0.712828 0.913146:前面两个代表中心点坐标,后面表示w和h,这里这个数据都是做了归一化处理的,这样的话模型算得会更快

(注意,图片名称和标签名称应该是一一对应的哦)

标注完了之后:

将数据集按照8:2划分为训练集和测试集。(直接手动拖就行)

so,我的训练集有960张,测试集有240张,存放的位置和内容如下:

(训练集路径)

(测试集路径)

接下来就是改代码部分的东西了:

第一个要改的就是yolov5s.yaml配置文件(模型的配置文件):(可以直接在yolov5s.yaml文件中把类别改为2,也可以如图所示复制到一个新文件再改)

第二个就是data.yaml(数据集的配置文件):【建议新建一个更改如下的内容即可】

ok,可以开始训练模型了。

可以去改train代码的内容进行模型训练,但是我一般不去更改,直接命令行输入参数也可以:

python train.py --data DogTongue_data.yaml --cfg dogtongue_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 2

运行这一句话的时候可能会遇到一个报错:

解决办法为:

完了之后立即重启电脑,再去pycharm运行那行命令,然后等待100轮训练完成:

训练完了之后:

新训练的结果会保存在runs下的train目录下:

(后续会更新训练完后的)

在训练完之后对生成权重文件进行验证(val.py进行):

python val.py --data data/DogTongue_data.yaml --weights runs/train/exp4/weights/best.pt --img 640

然后去到这个项目的windows.py文件中第的60行:

最后运行这个windows.py:

得到它的可视化界面,然后上传自己的图片预测即可:

(看过前面的文章就会知道在之前没有自己的数据集的时候预测这张狗狗的图片是不成功的,这里就能正确预测出来!)

over!​


http://www.niftyadmin.cn/n/4933126.html

相关文章

【周末闲谈】人工智能热潮下的AIGC到底指的是什么?

生成式人工智能AIGC(Artificial Intelligence Generated Content)是人工智能1.0时代进入2.0时代的重要标志。 个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一…

如何成为优秀的UI设计师 优漫动游

如何成为ui设计师,如何成为一名优秀的ui设计师? 如何成为优秀的UI设计师 随着互联网浪潮的不断发展,ui设计师这个职业也被越来越多的人所重视,成为了炙手可热的职业。 在零售,交通,金融等行业都可以…

SpringBoot相关面试题

Manticore Search比ES查询快15倍? Spring、SpringBoot和SpringCloud的区别 Spring是一个全面的应用开发框架,提供了丰富的功能和组件:依赖注入(DI)和面向切面编程(AOP) Spring Boot是用于快速搭建和部署Spring应用的框架,简化了配置和初始化过程:约定优于配置:内嵌的…

学以致用:python面向对象和PyEcharts的完美混合技

文章目录 学习目标数据案例分析数据内容需求分析参考代码data_define.pyfile_define.pymain.py 学习目标 使用面向对象思想完成数据读取和处理基于面向对象思想重新认知第三方库使用(PyEcharts) 数据案例分析 数据内容 1月份数据是普通文本,使用逗号分割数据记录&…

剑指Offer-学习计划(六)模拟

剑指 Offer 29. 顺时针打印矩阵 剑指 Offer 31. 栈的压入、弹出序列 题目一:栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 …

vue中文件上传(导入),文件下载(导出)

1、vue文件html部分 <a-button class"button" click"handleExport">列表导出</a-button><a-upload :before-upload"handleBeforeUpload" :custom-request"handleCustomRequest"><a-button class"button&quo…

Leetcode 动态规划 打家劫舍 337 股票 121 122 123 188 子序列 300 674 718 1143 1035

打家劫舍&#xff1a; 337. House Robber III class Solution { public:int rob(TreeNode* root) {vector<int> res robTree(root);return max(res[0], res[1]);}vector<int> robTree(TreeNode* cur){if(cur NULL) return vector<int> {0, 0};vector<…

Springboot 默认路径说明

Spring Boot基本上是Spring框架的扩展&#xff0c;它消除了设置Spring应用程序所需的样板配置&#xff0c;极大的方便了开发者&#xff0c;其默认识别路径如下&#xff1a; Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录&#xff1a; 1、classpath:/static 用于加…