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时,记得把这两行删了

六、结语

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

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

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

相关文章

技术周总结 2024.04.29-05.05

一、python的数据表处理 """ 删除 Doris库中某些表中无效的数据 """ import mysql.connector import socket import socks import pandas as pd import pymysql from sqlalchemy import create_engine, text import csv from datetime import da…

UE5 蓝图入门

基础节点创建: 常量: 按住 1 ,点击鼠标左键,创建常量 二维向量: 按住 2 ,点击鼠标左键,创建二维向量 三维向量: 按住 3 ,点击鼠标左键 乘法: 按住 m 键…

基于node.js+css+html+mysql博客系统

博主介绍: 大家好,本人精通Java、Python、Php、C#、C、C编程语言,同时也熟练掌握微信小程序、Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

【C++风云录】图形和动作捕捉库全面解析:从OpenPose到OpenCV

深入浅出:六大计算机视觉和动作捕捉库的教程和比较 前言 本文将为读者详细介绍六种在计算机视觉领域广泛使用的开源软件和SDK,包括OpenPose、Vicon SDK、Intel RealSense SDK、Microsoft Kinect SDK、PCL (Point Cloud Library)和OpenCV。我们会一一解…

Vue进阶之Vue项目实战(一)

Vue项目实战 项目搭建初始化eslint版本约束版本约束eslint配置 stylelintcspellcz-githusky给拦截举个例子 zx 项目搭建 node版本:20.11.1 pnpm版本:9.0.4 初始化 vue3最新的脚手架 pnpm create vite byelide-demo --template vue-ts pnpm i pnpm dev…

MIPS32 指令架构

指令格式 R 类型 说明: 用于寄存器和寄存器操作 参数说明: Op: 指令操作码Rs: 第一个源操作数寄存器号,参与运算使用Rd: 目的操作数寄存器号,保存结果使用Shamt: 位偏移量,仅在位移指令使用,在此直接置0Func: 指令函…

区块链 | IPFS:IPNS(入门版)

🦊原文:IPFS 与 IPNS 啥关系? 🦊写在前面:本文属于搬运博客,自己留存学习。这篇文章讲得太入门了,不涉及任何底层原理。 正文 随着 2019 年 12 月 12 日 Filecoin 测试网的上线,IPF…

深入 Django 模型层:数据库设计与 ORM 实践指南

title: 深入 Django 模型层:数据库设计与 ORM 实践指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories: 后端开发 tags: Django ORM模型设计数据库关系性能优化数据安全查询操作模型继承 第一章:引言 Django是一个基于Python的开源…

安卓手机APP开发__媒体开发部分__分享声音的输入

安卓手机APP开发__媒体开发部分__分享声音的输入 目录 概述 安卓10之前的版本的行为 安卓10的行为 共享场景 小助手普通的APP 有可读取权的服务 普通的APP 两个普通的APP 语音电话 普通的APP 概述 声音的输入通常来自于内嵌的麦克风,还有外置的麦克网,或者是一个…

【C++】深入剖析C++11中右值引用和左值引用

目录 一、左值引用 && 右值引用 二、左值引用于右值引用的比较 三、 右值引用使用场景和意义 1、函数返回值 ①移动赋值 ②移动构造 2、STL容器插入接口 ​3、完美转发 一、左值引用 && 右值引用 传统的C语法中就有引用的语法,而C11中新增了…

【简单介绍下Lisp的学习历程】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

计算机网络 3.1网络的拓扑结构

第三章 网络技术基础 第一节 网络的拓扑结构 一、认识拓扑结构 1.定义: ①网络节点和链路的几何图形; ②网络中网络单元的地理分布和互联关系的几何构型; ③通信子网的拓扑结构。 2.三要素:可靠性、扩充性、费用高低。 3.影…

react 子组件调用父组件方法,获取的数据不是最新值

目录 原因解决方法方法一、去掉 useCallback, 这样每次父组件触发刷新,就会刷新子组件方法二、或者通过监听 val,val 值改变来刷新函数方法三、在父组件中,把 val 作为 key 值,每次 val 变化强制触发更新 出现问题的代…

Mybatis之Sqlsession、Connection和Transaction三者间的关系

前言 最近在看Mybatis的源码,搜到这篇文章Sqlsession、Connection和Transaction原理与三者间的关系,debug之后发现有不少疑惑,于是按照原文整理了一下,记录下debug中的一些困惑点。 对于我们开发来讲,不管跟任何关系…

django搭建一个AI博客进行YouTube视频自动生成文字博客

文章目录 一、生成Django框架二、项目代码(前端)1、编写前端代码(正文界面)1.1、生产html框架1.2、添加live preview扩展1.3、更改title元素中文本1.4、添加CDN(CSS)样式链接1.5、nav标签1.6、在body标签中…

Python | Leetcode Python题解之第66题加一

题目: 题解: class Solution:def plusOne(self, digits: List[int]) -> List[int]:n len(digits)for i in range(n - 1, -1, -1):if digits[i] ! 9:digits[i] 1for j in range(i 1, n):digits[j] 0return digits# digits 中所有的元素均为 9retu…

手撸Mybatis(三)——收敛SQL操作到SqlSession

本专栏的源码:https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中,我们实现了读取mapper配置并构造相关的mapper代理对象,读取mapper.xml文件中的sql信息等操作,现在,在上一章的基础上&#xff0c…

深度学习:基于TensorFlow、Keras,使用长短期记忆神经网络模型(LSTM)对Microsoft股票进行预测分析

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

等保测评考试培训题

等保2.0培训考试题目 一、网络安全法第几条,规定国家实行网络安全等级保护制度。 A、第五条 B、第十条 C、第十三条 D、第二十一条 二、等级保护有几个安全保护级别? A、3个 B、4个 C、5个 D、6个 三、什么样的系统可以作为定级对象&#…

UNIAPP小程序从入门到精通

第一章> 1、如何创建项目 2、项目的基本结构 3、页面组成(wxss可以不用) 4、组件的使用 5、协同开发与发布 第二章> 6、WXML页面结构渲染 7、style样式美化 8、a…