YOLOv5训练自己的数据集并测试(以及踩坑记录)

news2024/11/16 15:37:22

YOLOv5是一个非常流行的图像识别框架,这里介绍一下使用YOLOv5给自己的数据集进行训练和测试

官方介绍文档:YOLOv5官方文档

基本流程:

  1. 下载必要的库和包,以及yolov5框架
  2. 自制数据集:收集图像、视频数据,labelimg标注
  3. 修改train.py参数,进行训练
  4. 修改dectect.py参数,进行推理

下面逐步来演示一下
环境:Windows10,Python3.9,Anaconda

一、下载yolov5框架

建议使用Anaconda新开一个虚拟环境

  1. 在自己项目的目录下运行git clone,下载yolov5
git clone https://github.com/ultralytics/yolov5

如果网速不好的话可以直接在github下载:YOLOv5-master

  1. cd到yolov5的根目录后,pip install依赖项
cd [path]\yolov5
pip install -r requirements.txt

常见报错:
1.安装依赖项时可能会出现部分包无法安装,报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98
原因:读取文件出现编码问题导致没法读取文件,解决方式详见我的另一篇文章:
【已解决】Windows10 pip安装报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98
2. 如果虚拟环境里没有安装过gpu版本的torch,则此处使用requirements.txt安装的pytorch可能为cpu版本,后续训练无法使用gpu进行训练,因此需要将已安装的pytorch卸掉,然后重新安装gpu版本的pytorch,gpu版本的pytorch安装见官网:INSTALL PYTORCH
注:请事先下载对应的cuda和cudnn,以及确认好版本, 下载cuda和cudnn可见我另一篇文章的第一节内容:TensorFlow安装步骤


二、自制数据集

  1. 获取数据集(本次使用kaggle上面的一个猫狗数据集,里面大概有1000张猫狗图片,本次仅使用约170张猫和狗的图片做示例)
    文件夹目录结构如下:
    在这里插入图片描述

  2. 下载labelimg

pip install labelimg

然后他就会弹出一个软件:

在这里插入图片描述

  • 点击Open Dir,选择我们的数据集的路径,本例为\datasets\cat_dog\images\train
  • 点击Change Save Dir,选择我们标签保存的位置,本例为\datasets\cat_dog\labels\train
  • 点击save下面的模块,选择为YOLO,表示打标签的格式为YOLO的格式
  • 点击View,选择Auto save mode,设置为自动保存模式

然后就可以进行打标签了。
快捷键:w:画框;d:下一张图;a:上一张图;del:删除多余框

打完标签后可以看到labels文件夹里每张图片的标签,以及一个classes.txt的文件,内含标签类别,图片标签如下:
在这里插入图片描述

这表示为标签为0,物体位置坐标为【0.492188 0.177647 0.846875 0.345882

常见问题:
无法打开labelimg,报错:qt.qpa.plugin: Could not load the Qt platform plugin “windows“ in ““ even though it was found.
在这里插入图片描述

解决方法详见我的另一篇文章:【已解决】qt.qpa.plugin: Could not load the Qt platform plugin “windows“ in ““ even though it was found.


三、训练

打开train.py文件,找到def parse_opt(),进行配置

  1. 配置--cfg
    1.1 在models文件夹里找到yolo5s.yaml,复制到models里,任意起一个名字(本例为cat_dog.yaml
    1.2 修改nc参数为标签的数量(本例的标签为猫和狗,所以这里nc修改为2)
    在这里插入图片描述
    1.3 然后在train.py文件里修改cfg的配置参数,填上我们新建的cat_dog.yaml文件路径
    在这里插入图片描述

  2. 配置--data
    2.1 在data文件夹里找到coco128.yaml,复制到data里,任意起一个名字(本例为cat_dog.yaml
    2.2 在cat_dog.yaml里修改数据集的路径,本例如下:
    在这里插入图片描述
    2.3 删除多余的分类,修改成自己的分类,本例如下:
    在这里插入图片描述

  3. 设置训练参数,如
    --epochs:设置训练轮数
    --device:设置训练的device,改为0则为使用GPU计算框架

  4. 运行train.py开始进行训练

训练完后可以在runs/train/exp里找到自己的训练结果

常见问题:

  • from torchvision.transform报错,找不到tranform模块
    解决:卸载torchvision后再重新安装
# 本例
pip3 install torchvision --index-url https://download.pytorch.org/whl/cu117
  • YOLOV5训练时找不到lables标签
    解决方式:检查用于训练的图片及标签的路径,可以在dataloaders.py文件下打印标签的路径进行检查
    在这里插入图片描述

  • 报错:Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
    原因:libiomp5md.dll在初始化的时候发现已经被初始化了
    解决(本例):删掉E:\envs\yolov5\Lib\site-packages\torch\lib路径下的libiomp5md.dll文件(建议先备份文件及其路径)
    参考:OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

  • 报错:OSError: [WinError 1455] 页面文件太小
    原因:虚拟内存不够了,可以关掉一些进程,也可以修改虚拟内存
    解决:OSError: [WinError 1455] 页面文件太小,或电脑崩溃出现 the window teminated unexpectedly (reason:‘oom‘code:‘-536870

  • 报错:RuntimeError: [enforce fail at C:\actions-runner_work\pytorch\pytorch\builder\windows\pytorch\c10\core\impl\alloc_cpu.cpp:72] data. DefaultCPUAllocator: not enough memory
    解决:修改train.py中 batchsize、worker,减少数值(本例将--workers修改为2)


四、推理

打开detect.py文件,找到def parse_opt()进行配置

  1. 配置训练的权重文件
    1.1 在runs/train/exp/weights文件夹里找到best.pt文件,复制到项目目录下
    1.2 在detect.py文件里将--weights参数改成best.pt
    在这里插入图片描述
  2. 配置--data
    --data参数改成之前cat_dog.yaml文件路径
    在这里插入图片描述
  3. 配置测试图片路径
    3.1 将测试图片文件cat_dog放在data/images/路径下
    3.2 设置--source路径参数
    (测试文件也可以放在其他路径,定义好路径参数就行)
    在这里插入图片描述
  4. 设置--conf-thres置信率,表示相似度在xx以上就会被标记出来
  5. 运行detect.py文件开始运行

更多参数设置可见:手把手带你调参YOLOv5 (v5.0-v7.0)(推理)
步骤参考来源:【一看就懂,一学就会】yolov5保姆级打标签、训练+识别教程

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

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

相关文章

从零开发JavaWeb入门项目--十天掌握

原文网址:从零开发JavaWeb入门项目--十天掌握_IT利刃出鞘的博客-CSDN博客 简介 这是一个靠谱的JavaWeb入门项目实战,名字叫蚂蚁爱购。从零开发项目,视频加文档,十天就能学会开发JavaWeb项目,教程路线是:搭…

Super Resolve Dynamic Scene from Continuous Spike Streams论文笔记

摘要 近期,脉冲相机在记录高动态场景中展示了其优越的潜力。不像传统相机将一个曝光时间内的视觉信息进行压缩成像,脉冲相机连续地输出二的脉冲流来记录动态场景,因此拥有极高的时间分辨率。而现有的脉冲相机重建方法主要集中在重建和脉冲相…

Windows 重新映射 CapsLock 大写锁定到 Ctrl

Windows 重新映射 CapsLock 大写锁定到 Ctrl 本要点中的这些方法适用于我的美国键盘布局。我不确定其他布局。如果出现问题,请恢复您的更改;删除您创建的注册表项(并重新启动)。 强烈推荐 方法5 ctrl2cap,因为不会影…

代码随想录第35天|860.柠檬水找零 , 406.根据身高重建队列(很多细节点注意一下),452. 用最少数量的箭引爆气球

860.柠檬水找零 思路比较简单 class Solution {public boolean lemonadeChange(int[] bills) {//然后向你付 5 美元、10 美元或 20 美元//如果收到5,直接收下//如果收到10,需要付回去5//如果收到20,需要付回去105或者555//开始时我手上拥有…

java基础-----第八篇

系列文章目录 文章目录 系列文章目录一、Java类加载器二、双亲委托模型 一、Java类加载器 JDK自带有三个类加载器:bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 BootStrapClassLoader是ExtClassLoader的父类加载器,默认负责加载%JAVA_HOME…

Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)...

各位看友,由于微信公众号推送机制改变,现在需要设置为星标才能收到的本公众号推送消息哟。关注回复【学习交流群】加入【安全开发运维】答疑交流群 请朋友们【多多点击文中的广告】,支持作者更新更多文章。 目录: 本文为作者原创文章&#xf…

c++数据结构之 队列

c数据结构 --- 队列 队列的特点队列的相关概念:队列的操作:队列的分类:演示例子简单的例子例子2、循环队列的C实现 队列的特点 队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点&#x…

学习振弦采集模块的开发基本原理

飞讯教学篇:学习振弦采集模块的开发基本原理 振弦采集模块是一种用于测量物体振动、形变、压力等物理量的电子设备。它通过测量物体的振动变化,可以得出物体在不同条件下的动态特性,对于工程设计、科学研究、医学检测等领域都有广泛应用。本…

代码随想录笔记--二叉树篇

1--递归遍历 1-1--前序遍历 前序遍历&#xff1a;根→左→右&#xff1b; #include <iostream> #include <vector>struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), le…

6400万美元:苹果与SpaceX达成合作协议,推进苹果 SOS 卫星服务

根据最新披露的文件&#xff0c;苹果卫星服务提供商Globalstar近期与马斯克旗下的SpaceX达成一项重要合作协议&#xff0c;向SpaceX支付了6400万美元&#xff0c;用于在2023-2025年期间发射卫星&#xff0c;以进一步扩展苹果iPhone系列的SOS卫星服务。 这项卫星服务的主要目的是…

Citespace、vosviewer、R语言的文献计量学 、SCI

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

中国太保首席数据库专家林春:先难后易,核心系统数据库升级复盘

P17 是中国太平洋保险&#xff08;以下简称太保&#xff09;关联关系最为复杂、商业数据库绑定程度最深、业务影响最多的核心系统之一。但就是这样一个对太保业务至关重要的系统却被选为数据库升级的“实验品”。当然&#xff0c;说是“实验品”只是因为这是太保第一次对关键的…

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求&#xff0c;以及层层过滤用户的访问需求&#xff0c;遵从“最后落地到数据库的请求数要尽量少”的原则。 1.消息队列解决削峰 要对流量进行削峰&#xff0c;最容易想到的解决方案就是用消息队列来缓冲瞬时流量&#xff0c;把同步的直…

ArcGIS地块面积分割调整工具插件

地块分割调整工具可以实现将选定的图斑按照面积比例或者指定的面积&#xff0c;分割成多个图斑。 各个图斑的面积用逗号分隔&#xff0c;比例分割设置时&#xff0c;用整数表示。 面积分割时&#xff0c;最后一个图斑的面积可以不写&#xff0c;插件可以自动计算图斑的面积&a…

1448. 统计二叉树中好节点的数目(javascript)1448. Count Good Nodes in Binary Tree

给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 解释…

unity面试题(性能优化篇)

CPU 预处理、缓存数据 注释空的unity函数 运算cpu->gpu 减少昂贵计算(开方) 限制帧数 加载(预加载、分帧加载、异步加载、对象池) 慎用可空类型比较 避免频繁计算(分帧、隔帧) 算法优化 变体收集预热 使用clear操作代替容器的new操作 unity spine使用二进制格式…

mac有些软件卸载不了怎么办?正确的Mac软件卸载方法

很多用户Mac用户在整理磁盘空间时发现有很多不常用的软件想要卸载&#xff0c;一顿卸载操作之后发现有些第三方软件是无法完成卸载或成功卸载之后桌面仍保留该软件的图标&#xff0c;在使用Mac过程中遇到有些软件卸载不了怎么办&#xff1f;别着急&#xff0c;小编这就给你支招…

基于指数分布算法优化的BP神经网络(预测应用) - 附代码

基于指数分布算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于指数分布算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.指数分布优化BP神经网络2.1 BP神经网络参数设置2.2 指数分布算法应用 4.测试结果&#xff1a;5…

2023年淘宝商家成长层级与利好规则

淘宝店铺成长层级越高&#xff0c;对店铺的经营会越好&#xff0c;但有些小伙伴对成长层级和商家利好规则内容的更新变化不太清楚&#xff0c;下面我们就来一起了解一下吧。 一、店铺成长层级 1、入口&#xff1a;店铺层级与权益 2、晋升路径 V1-V2&#xff1a;基础运营&#…

flutter plugins插件【二】【FlutterAssetsGenerator】

2、FlutterAssetsGenerator 介绍地址&#xff1a;https://juejin.cn/post/6898542896274735117 配置assets目录 ​ 插件会从pubspec.yaml文件下读取assets目录&#xff0c;因此要使用本插件&#xff0c;你需要在pubspec.yaml下配置资源目录 flutter:# The following line ens…