跑通 yolov5-7.0 项目之训练自己的数据集

yolov5

  • 一、yolov5 源码下载
  • 二、配置环境,跑通项目
  • 三、训练自己的数据集
    • 1、获取验证码数据
    • 2、标注图片,准备数据集
    • 3、开始训练自己的数据集
      • 1、train.py 训练数据集
      • 2、val.py 验证测试你的模型
      • 3、detect.py 正式用你的模型
  • 四、遇到的报错、踩坑
      • 1、import git 错误
      • 2、no detections
      • 3、Pillow 版本过高引起的报错

一、yolov5 源码下载

仓库地址:yolov5-v7.0

二、配置环境,跑通项目

我的环境:python — 3.9,cpu训练,新建的一个python虚拟环境。
博主用的电脑配置不高,又想在本地跑,就用的 cpu 训练的(训练的时候有点慢,但还是可以接受)。
在这里插入图片描述
代码拉倒本地打开后,整体结构如下:
在这里插入图片描述
安装 requirements.txt 依赖:切到 yolov5-7.0 路径下:
要先修改一下 Pillow>=7.1.2 ,把他改为:Pillow==9.5 为什么要改?点我看看就知道
在这里插入图片描述

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

下载好环境后,直接去运行:train.py 先跑一哈。我是 cpu 训练,那就要改一下 train.py 的配置,跑官方的数据,就改一个 cpu 训练那里后,右键运行就是。
在这里插入图片描述
成功的话,会提示画出框的图片在哪里的,可以看这个,跑通的结果

三、训练自己的数据集

1、获取验证码数据

验证码数据源
我是分的 图片 和 网站返回的数据各一个文件夹。
在这里插入图片描述

2、标注图片,准备数据集

中文版本的:Labelimg-中文编译版
链接:https://pan.baidu.com/s/1u0JcJKR5IhYuSWlPQ_qDTg
提取码:895i
先熟悉了解我们需要用到的几个东西:
在这里插入图片描述

快捷键
a:上一张
d:下一张
w: 画框
ctr+s:保存标注
鼠标控制框框的范围

注意:先要在 yolov5-7.0 同级别下创建一个 MyData_1 文件夹(可自定义),但里面的 imageslabels文件夹的名称最好不要改 (改了可能会报错)。先就创建这两个文件夹哈,其他的后面会介绍的。
这里的 images 是放我们上面下载的图片数据,labels 是放我们用 Labelimg 标注完成生成的东西。
如图:
在这里插入图片描述
标注的类,我们直接写一个 1 就 ok。
在这里插入图片描述
最后:准备的100张,标了 45 张就没搞了在这里插入图片描述

在这里插入图片描述
好,数据集搞好了。准备开训

3、开始训练自己的数据集

1、train.py 训练数据集

进入 train.py 文件,查看 parse_opt 方法修改配置:

def parse_opt(known=False):"""opt模型主要参数解析:--weights:初始化的权重文件的路径地址--cfg:模型yaml文件的路径地址--data:数据yaml文件的路径地址--hyp:超参数文件路径地址--epochs:训练轮次--batch-size:喂入批次文件的多少--img-size:输入图片尺寸--rect:是否采用矩形训练,默认False--resume:接着打断训练上次的结果接着训练--nosave:不保存模型,默认False--notest:不进行test,默认False--noautoanchor:不自动调整anchor,默认False--evolve:是否进行超参数进化,默认False--bucket:谷歌云盘bucket,一般不会用到--cache-images:是否提前缓存图片到内存,以加快训练速度,默认False--image-weights:使用加权图像选择进行训练--device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)--multi-scale:是否进行多尺度训练,默认False--single-cls:数据集是否只有一个类别,默认False--adam:是否使用adam优化器--sync-bn:是否使用跨卡同步BN,在DDP模式使用--local_rank:DDP参数,请勿修改--workers:最大工作核心数--project:训练模型的保存位置--name:模型保存的目录名称--exist-ok:模型目录是否存在,不存在就创建"""parser = argparse.ArgumentParser()parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')parser.add_argument('--cfg', type=str, default='', help='model.yaml path')parser.add_argument('--data', type=str, default='data/coco128.yaml', help='dataset.yaml path')  # 我修改的 修改的是里面的内容parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')parser.add_argument('--epochs', type=int, default=100, help='total training epochs')  # 我修改的 训练多少次parser.add_argument('--batch-size', type=int, default=2, help='total batch size for all GPUs, -1 for autobatch')  # 我修改的 改为 2 一次喂多少数据parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')parser.add_argument('--rect', action='store_true', help='rectangular training')parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')parser.add_argument('--noval', action='store_true', help='only validate final epoch')parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')parser.add_argument('--noplots', action='store_true', help='save no plot files')parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')parser.add_argument('--cache', type=str, nargs='?', const='ram', help='image --cache ram/disk')parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')parser.add_argument('--device', default='cpu', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')  # 我修改的  改为 cpu 训练parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')parser.add_argument('--name', default='exp', help='save to project/name')parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')parser.add_argument('--quad', action='store_true', help='quad dataloader')parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')parser.add_argument('--seed', type=int, default=0, help='Global training seed')parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')# Logger argumentsparser.add_argument('--entity', default=None, help='Entity')parser.add_argument('--upload_dataset', nargs='?', const=True, default=False, help='Upload data, "val" option')parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval')parser.add_argument('--artifact_alias', type=str, default='latest', help='Version of dataset artifact to use')return parser.parse_known_args()[0] if known else parser.parse_args()

train.py 中我修改的配置

  • –weights:初始权重,直接用 官方的 yolov5s.pt
  • –data:这里我们直接找到位置,进去改里面的东西就好 (把原来的全删啦)
    这里的 vals 是放你要验证的数据:这里面要包括 图片和 对应图片的标注数据(我是直接去 images里面找的 5 张图片 和 他们对应的标注数据)后面val.py 会用到的,这里先说明一下。如图:
    在这里插入图片描述
    路径代码对应如下:

path: ../MyData_1
train: images  #  train 是训练的数据集路径
val: vals  # val是验证的数据集路径test:# Classes
nc: 1  # 有多少类
names: [1]  # 所有的类名

在这里插入图片描述
弄好后,直接开跑,在 train.py 里面,右键运行:没报错的话,等它停止就OK。(我 45 张图片,100轮,训了快 2 个小时。)在这里插入图片描述

在这里插入图片描述
好好好,训完了就好啊,去看看给我指出的位置下有些啥子东西嘛。
这样的图看不太懂:
在这里插入图片描述
没得事,后面就会慢慢懂的,我们现在就看这些图片就OK:
1、train_batch0.jpg 这是程序训练时画的框。在这里插入图片描述2、val_batch2_labels.jpg 这张图是 我们 人工画的框框图。在这里插入图片描述
3、val_batch2_pred.jpg 这是程序模型预测识别画出来的框框图。
在这里插入图片描述
看嘛,上面的 0.3 0.4 的框框就是错的,这个 0.3 这些小数点可以理解为:程序模型画的框我们人工画的框相似度。后面可以选择 相似度 > 0.8 (或其他值)来保障识别的准确度。
初看,没得啥子问题,再看还是感觉没啥子问题… 嘿,yolov5 给了程序帮你看:val.py 是专门来验证测试你的模型的。yolov5 之前的版本叫 test.py,后面更新给改名了。在这里插入图片描述

2、val.py 验证测试你的模型

测试的话是要测试图片其标注的数据的哈,就是哪个 vals 文件夹,为了方便就直接从你训练的数据集拿一些就行的。看看我的:(都要对应好哈)
在这里插入图片描述
验证一下,找到 val.py 这里就 改 2 个参数,那个 weights 找到你训练完产生的模型哈,best.pt 是最佳的模型,last.pt是最好一轮的模型。
在这里插入图片描述
要验证的数据集 我们在 coco128.yamlval 指定了的哈在这里插入图片描述
改好配置后,直接在 val.py 右键润,结果:
在这里插入图片描述
虽然只验证了 5 张,但还是能说明,训练的模型还是不错滴。( 0.8 那个框框是错的哈,还是要加大数据集的训练才更准),总的来看还是很可以的,起码文字没有少标出来。在这里插入图片描述

3、detect.py 正式用你的模型

detect:查明,察觉;测出,检测,识别的意思。
直接拿一些没有出现在你训练数据集的图片,来试试。还是在之前获取训练图片的那个网站中找。
建一个文件夹:no_have。 我找了一张图片,看看训练好的模型聪不聪明,能不能画出文字的框框。
在这里插入图片描述
结果:
在这里插入图片描述
好好好, 图片上是啥子字我都不知道,结果它都给我框出来了。 very very good 不错 !!!

四、遇到的报错、踩坑

1、import git 错误

在这里插入图片描述
网上说加上,就能行,

import os
os.environ["GIT_PYTHON_REFRESH"] = "quiet"

但我还是报错,这里让我搞了好久
在这里插入图片描述
电脑的 git 环境也没问题,它就是错。我在另一台电脑上也是报错,那你我是直接把它报错的地方文件的代码 注释了就没问题了。(目前没发现问题)。现在的电脑我胡乱的加一些 git 环境变量再重启,它就好了在这里插入图片描述

2、no detections

运行 detect.py 时 不出框框,并提示 no detections :没有检测的东西
开始是我觉得数据集训练的少了(2张图片),然后才加到 45 张图片的。结果还是报错,后来去一个一个的看参数:

parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3')  # 我修改的

我加了个:default=1, 把它改成:default=0, 或者 不要 default 这个参数指定就能出框(但我的类就是1啊,我改成 0 又有框,还没搞懂,再看看,后面来修改)

3、Pillow 版本过高引起的报错

参考:参考链接
降低 Pillow 版本就好
先卸载它:

pip uninstall Pillow

再指定低版本安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  Pillow==9.5

好的,到这里就先结束了,下一篇就记录一下爬虫程序怎么对接训练好的模型。~ bye ~

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

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

相关文章

电脑内存满了怎么清理内存?试试这6个方法~

内存越大&#xff0c;运行越快&#xff0c;程序之间的切换和响应也会更加流畅。但是随着时间的增加&#xff0c;还是堆积了越来越多的各种文件&#xff0c;导致内存不够用&#xff0c;下面就像大家介绍三种好用的清理内存的方法。 方法一&#xff1a;通过电脑系统自带的性能清理…

vim 编辑器如何同时注释多行以及将多行进行空格

当然可以&#xff0c;以下是我对您的文字进行润色后的版本&#xff1a; 一、场景 YAML文件对空格的要求非常严格&#xff0c;因此在修改YAML时&#xff0c;我们可能需要批量添加空格。 二、操作步骤 请注意&#xff1a;您的所有操作都将以第一行为基准。也就是说&#xff0…

OpenCV-Python(39):Meanshift和Camshift算法

目标 学习了解Meanshift 和Camshift 算法在视频中找到并跟踪目标 Meanshift 原理 Meanshift算法是一种基于密度的聚类算法&#xff0c;用于将数据点划分为不同的类别。它的原理是通过数据点的密度分布来确定聚类中心&#xff0c;然后将数据点移动到离其最近的聚类中心&#…

【代码随想录07】344.反转字符串 541. 反转字符串II 05.替换空格 151.翻转字符串里的单词 55. 右旋转字符串

目录 344. 反转字符串题目描述做题思路参考代码 541. 反转字符串 II题目描述参考代码 05. 替换数字题目描述参考代码 151. 反转字符串中的单词题目描述参考代码 55. 右旋转字符串题目描述参考代码 344. 反转字符串 题目描述 编写一个函数&#xff0c;其作用是将输入的字符串反…

C语言从入门到实战——动态内存管理

动态内存管理 前言一、 为什么要有动态内存分配二、 malloc和free2.1 malloc2.2 free 三、calloc和realloc3.1 calloc3.2 realloc 四、常见的动态内存的错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释放一块动态开…

用于自动驾驶最优间距选择和速度规划的多配置二次规划(MPQP) 论文阅读

论文链接&#xff1a;https://arxiv.org/pdf/2401.06305.pdf 论文题目&#xff1a;用于自动驾驶最优间距选择和速度规划的多配置二次规划&#xff08;MPQP&#xff09; 1 摘要 本文介绍了用于自动驾驶最优间距选择和速度规划的多配置二次规划&#xff08;MPQP&#xff09;。…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(6)解散部门

指路&#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;3&#xff09;&#xff08;4&#xff09;&#xff08;5&#xff09;&#x1f447; 黑马程序员JavaWeb开发|案例&#xff1a;tlias智能学习辅助系统&#xff08;1&#xff09;准备工作、部门管理_tlias智能…

MATLAB对话框与菜单设计实验

本文MATLAB源码&#xff0c;下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740733 一、实验目的 1.掌握建立控件对象的方法。 2.掌握对话框设计方法。 3.掌握菜单设计方法。 二、实验内容 建立如下图所示的菜单。菜单…

15.云原生之k8s容灾与恢复实战

云原生专栏大纲 文章目录 Velero与etcd介绍Velero与etcd备份应用场景Velero与etcd在k8s备份上的区别 Velero备份恢复流程备份工作流程Velero备份时&#xff0c;若k8s集群发送变化&#xff0c;会发发生情况&#xff1f;Velero 备份pv&#xff0c;pv中数据变化&#xff0c;会发发…

uniapp实现微信小程序富文本之mp-html插件详解

uniapp实现微信小程序富文本之mp-html插件 1 文章背景1.1 正则表达式1.2 mp-html插件1.3 uniapp 2 过程详解2.1 下载mp-html插件2.2 项目中引入mp-html2.3 引入正则规范图片自适应2.4 效果展示 3 全部代码 1 文章背景 1.1 正则表达式 正则表达式&#xff0c;又称规则表达式,&…

算法刷题——删除排序链表中的重复元素(力扣)

文章目录 题目描述我的解法思路结果分析 官方题解分析 查漏补缺更新日期参考来源 题目描述 传送门 删除排序链表中的重复元素&#xff1a;给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&…

【CA】《Coordinate Attention for Efficient Mobile Network Design》

CVPR-2021 github&#xff1a;https://github.com/Andrew-Qibin/CoordAttention 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Ablation Studies5.3 Comparison with Other Methods5.4 …

【华为 ICT HCIA eNSP 习题汇总】——题目集2

1、交换机某个端口配置信息如下&#xff0c;则此端口的PVID为&#xff08;&#xff09;。 A、100 B、2 C、4 D、1 # interface GigabitEthernet0/0/1 port hybrid tagged vlan 2 to 3 100 port hybrid unatgged vlan 4 6 #考点&#xff1a;VLAN&#xff08;虚拟局域网&#xff…

josef约瑟 三相电压继电器 WY-35A4 100V DC220V 导轨安装

三相 WY-35A4电压继电器&#xff1b;WY-35B4电压继电器&#xff1b;WY-35C4电压继电器&#xff1b;WY-31A4电压继电器&#xff1b;WY-31B4电压继电器&#xff1b; WY-31C4电压继电器&#xff1b;JY-45A4电压继电器&#xff1b;JY-45B4电压继电器&#xff1b;JY-45C4电压继电器…

Tortoise-orm 使用 (一) 创建表

项目基于Vue3.0, FastAPI的模板管理系统&#xff0c;从网上找了各种资源去实践&#xff0c;现在将总结发出来&#xff0c;分享给大家&#xff0c;希望帮助大家少走些弯路。 准备工作 # tortoise-orm pip install tortoise-orm # MySQL pip install tortoise-orm[asyncmy] # 迁…

Python实现自动化办公(使用第三方库操作Excel)

1 使用 xlrd 读取Excel数据 1.1 获取具体单元格的数据 import xlrd# 1. 打开工作簿 workbook xlrd.open_workbook("D:/Python_study_projects/Python自动化办公/Excel/test1.xlsx") # 2. 打开工作表 sheet1 workbook.sheets()[0] # 选择所有工作表中的第一个 # …

多文件转二维码的两种方式,有兴趣的了解一下

多个文件能一键生成二维码吗&#xff1f;二维码是现在很多人用来展示文件内容的一种手段&#xff0c;在制作二维码图片之后&#xff0c;其他人扫码就可以查看文件或者下载文件&#xff0c;有效的提升文件获取的效率。一般情况下&#xff0c;文件二维码分为多个文件生成一个二维…

Flutter:跨平台移动应用开发的未来

Flutter&#xff1a;跨平台移动应用开发的未来 引言 Flutter的背景和概述 Flutter是由Google开发的一个开源UI工具包&#xff0c;用于构建漂亮、快速且高度可定制的移动应用程序。它于2017年首次发布&#xff0c;并迅速引起了开发者们的关注。Flutter采用了一种全新的方法来…

【vue3项目初始化配置】vue3 + element plus

项目初始化是开发过程中很重要的一个环节&#xff0c;本篇博客带大家从零开始创建并初始化一个vue3项目&#xff0c;文章详细介绍了每个步骤&#xff0c;希望能帮助刚接触开发的小伙伴。 目录 一.创建项目 二.安装插件 ​编辑 ​编辑三.安装依赖 ​编辑 ​编辑四.配置项目 …

如何安装配置VisualSVN服务并实现公网访问本地服务【内网穿透】

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写&#xff0c;是一个开放源代码的版本控制系统…