yolov5-pytorch-Ultralytics训练+预测+报错处理记录

2024-05-03 21:28

本文主要是介绍yolov5-pytorch-Ultralytics训练+预测+报错处理记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

玩一段时间大模型,也该回归一下图像识别。本项目用于记录使用基于Ultralytics的yolov5进行目标检测测试。为什么用Ultralytics呢?答案有3
1、其良好的生态,方便我们部署到其它语言和设备上。因此本次测试结论:大坑没有,小坑不断~
2、对新手极度友好,只要装好依赖,按官方教程就可以运行起来。甚至export.py集成权重文件的各种转换功能比如:转ONNX文件!!
3.其对自定义数据集要求低,训练难度大减。当我们制作训练集时无需考虑吧图片压缩切割到成512x512或者640x640。只管找图标注,Ultralytics在train时会自动帮处理这些不合格尺寸的图片(爽爆了!!!)
在这里插入图片描述

二、简介

本篇使用的yolo5模型大小为yolov5l
由于需要识别一图片些细小的物体,我在Ultralytics的yolov5添加了一些注意力机制,但本次不会展开说,因为添加注意力前后对我们训练和预测的操作流程都没有任何影响。

三、训练

1.数据准备

也不知道是该夸还是该骂( ̄ェ ̄;)
Ultralytics提供了许多训练集数据格式,可以VOC、COCO、SKU等等。
但是label的数据格式不是xml而是txt…额…这就有些坑爹了▄█▀█●
以下我只选用其中一种格式:VOC实现
我采集数据文件夹取名MY_DataSet

(1)数据格式如下:

MY_DataSet
├── images└── train└── val
└── labels└── train└── val
└── dataset.yaml

(2)labels里数据的格式:

labels/train里的文件如下:
在这里插入图片描述
txt内容如下:
在这里插入图片描述
参考图图片如下:
在这里插入图片描述
即数据格式为:种类、x、y、w、h

通过以下方法可以使xml格式转成txt

def convert_annotation(voc_name,image_set,image_id):in_file = open('data/%s/Annotations/%s.xml' % (voc_name,image_id), encoding='utf-8')out_file = open('data/%s/labels/%s/%s.txt' % (voc_name,image_set,image_id), 'w', encoding='utf-8')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').text# difficult = obj.find('Difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

(3)dataset.yaml内部如下:

train: 本文件夹相对于trian.py文件的位置/MY_DataSet/images/train
val: 本文件夹相对于trian.py文件的位置/MY_DataSet/images/val
nc: 4
names: ['华强','西瓜','刀子','背带裤']

(4)修改模型yaml文件

到Ultralytics项目下的models文件夹找到对应yolo5l.yaml文件打开它将

nc: 80 # number of classes

改成你识别类的总数即可,我这只有4类改成4即可。

nc: 4 # number of classes

2.训练

在安装好Ultralytics的yolo5l.yaml和配置好训练数据后运行代码

python train.py --img 512 --batch 16 --epoch 300 --data dataset.yaml的相对位置  --cfg models/yolov5l.yaml --weights yolov5l.pt的位置 

即可!!开始训练

四、预测

默认会保存在项目的runs/train/exp/weights/文件夹中

python detect.py --weights runs/train/exp/weights/best.pt --data 训练集dataset.yaml的相对路径 --source  图片路径

五、报错处理

  1. assert nf > 0 or not augment, f"{prefix}No labels found in {cache_path}, can not start training. {HELP_URL}"
    答:yolov5的数据集里标签格式为.txt,而我的自定义数据集是.xml格式,总而言之,我们要按官方的数据格式来,不能按以前传统的xml来弄。

  2. 卡主并显示

 Downloading https://ultralytics.com/assets/Arial.Unicode.ttf to/root/.config/Ultralytics/Arial.Unicode.ttf...

答:初次运行,yolo5会检测你在/root/.config/Ultralytics的目录下是否有Arial.ttf 文件在,如果没有该文件,它会自动下载给你安装给你安装。由于需要连接该比较耗时。建议直接去网上下载文件

https://ultralytics.com/assets/Arial.Unicode.ttf

如果下载失败也可用我下载的文件,然后放到对应目录下即可。

  1. NotImplementedError(“cannot instantiate %r on your system”
    NotImplementedError: cannot instantiate ‘PosixPath’ on your system

答:这个是在windows运行时会报的问题。在from pathlib import Path前插入如下代码即可

import pathlib
pathlib.PosixPath = pathlib.WindowsPath

在这里插入图片描述

注意:如果要弄到到Linux时,记得把这两行删了

六、结语

训练+预测至此结束咯~~
在这里插入图片描述

这篇关于yolov5-pytorch-Ultralytics训练+预测+报错处理记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa