当前位置: 首页 > news >正文

基于Yolov5目标检测的物体分类识别及定位(二) -- yolov5运行环境搭建及label格式转换

刚开始跟着网上的教程做,把环境安装错了,后来直接用GitHub的官方教程来安装环境。

地址是yolov5官方团队代码及教程,看readme文件就可以。

系列文章:

基于Yolov5目标检测的物体分类识别及定位(一) -- 数据集原图获取与标注

基于Yolov5目标检测的物体分类识别及定位(二) -- yolov5运行环境搭建及label格式转换

目录

环境搭建

数据集格式转换

文件夹配置

标签文件的格式转换

更改配置文件

训练模型


环境搭建

       很简单,不要想的复杂。

       先下载完整的官方代码。地址在开头,下完解压。

       用conda为例,新建一个python3.8的版本的环境,可以就叫yolov5,然后进入下好的代码文件夹根目录,命令行激活新建的yolov5这个环境,并运行下面这句话来安装所有的必须的依赖包:

pip install -r requirements.txt

       没错,你没看错也没想错,就是在conda环境里用pip安装,我刚开始不知道,用conda install去挨个安装,最后还是失败重来,真的浪费时间。

       等待全部安装好后,应该是这个效果:

        如果下载太慢或者网络问题失败报错,建议进行换源。教程在我另外的博客中:

Anaconda使用conda连接网络时,出现网络错误CondaHTTPError(包括Anaconda安装与入门)

使用Python的pip方法安装第三方包时,很慢或者失败的问题

数据集格式转换

文件夹配置

        环境搭建好后,在项目的data文件夹中,新建mydatas文件夹,用来放自己做好的数据集。

        在mydatas文件夹中,新建images文件夹和labels文件夹。

        在images文件夹和labels文件夹中,新建train2021文件夹和val2021文件夹。

        效果为:

        把数据集的图片直接放入images/train2021/中(也可以留出一部分做验证集、测试集)。

标签文件的格式转换

        这一步很重要,大部分报错都因为这个。而最终判断是否成功运行起来的标志就是,如果你用的是笔记本,散热风扇有没有突然满速运转hhh

        接下来把标签文件放入 labels/train2021/中,但是不是把上一篇文章的一堆json文件放过来,而是把那些json转换为txt文件,因为yolov5需要的标签文件就是txt文件。这里借用一张知乎的博客截图,需要注意的是这一项需要把字符串对应顺序换成012345的数字,不然报错。

       需要注意的是json文件经过loads方法读取后是dict类型,而如果里面有嵌套的第二层json数据,会读取为list类型,不能通过简单的[‘key’]取出数据,需要安装并用jsonpath模块(简单有效),以   $..  模式寻找第二层子节点。

load() 或 loads()  :用于读取json文件,返回的是dict格式。
dump() 或 dumps()  :用于写入json文件,写入的是str格式。

       jsonpath基本语法:

value = jsonpath(theJsonData, '$..label')

        后面的 描述 的规则是:

       以下是多个文本内容的文件的合并代码以及格式转换代码。

# 合并一个文件夹下的多个文本内容形式的文件  
# 通用于txt、csv、json等的简单合并import osfiledir = './yourdir'
filenames = os.listdir(filedir) # 获取当前文件夹中的文件名称列表
f = open('result.json','w') # 打开当前目录下的result文件,如果没有则创建
i = 0
for filename in filenames: # 先遍历文件名i += 1print(i)if i > 0:filepath = filedir + '\\' + filenameprint(filepath)#遍历单个文件,读取行数for line in open(filepath,encoding = 'gbk', errors = 'ignore'):# print(str(line))f.writelines(line)f.write('\n') # 最后换行
f.close() # 关闭文件
# 转换json为txt,并按规则计算坐标import os 
import json
from jsonpath import jsonpathfiledir = ''./yourdir/'
str2float = {'yourLabel_1':0, 'yourLabel_2':1, 'yourLabel_3':2, 'yourLabel_4':3, 'yourLabel_5':4, 'yourLabel_6':5}def jsontotxt(jsonfile):txt_path = './txts/'imginfo = json.load(open(filedir + jsonfile))fn = txt_path + imginfo['imagePath'].replace('.jpg', '.txt')file = open(fn, 'a')print(fn)height = imginfo['imageHeight']weight = imginfo['imageWidth']category = jsonpath(imginfo, '$..label')[0] # 最有效,取子节点,返回列表(假列表),取第一个就是strcategory = str2float[category]# 通过字典把字符串格式的标签名换成012345,解决 could not convert string to float 的报错pointsValue = jsonpath(imginfo, '$..points') # 有的图标了多个矩形,是个真列表for ap in pointsValue: # 将坐标换算成yolov5的需求格式:相对坐标x1,y1 = ap[0]x2,y2 = ap[1]x = ((x2+x1)/2)/weighty = ((y2+y1)/2)/heightw = (x2-x1)/weighth = (y2-y1)/heightx = round(x,8)y = round(y,8)w = round(w,8)h = round(h,8)file.write(str(category) + ' ')file.write(str(x) + ' ')file.write(str(y) + ' ')file.write(str(w) + ' ')file.write(str(h) + '\n')file.close()if __name__ == "__main__":filenames = os.listdir(filedir)for filename in filenames:jsontotxt(filename) # 处理

更改配置文件

       接下来修改配置文件(也可以自己新建),由于我还是初学者,所以先直接修改模板文件。

       1、项目的data目录下的coco128.yaml文件修改:

       我们需要修改的是  train: 和 val: 和 nc: 和 names: [ 'a', 'b', 'c'] 四行,分别对应训练图片的路径,验证图片的路径,以及数据集的类别的数量,和那些类别的名字。改完的效果例子(sm隐藏):

       2、项目的models目录下的yolov5s.yaml(也可选择其他的模型方法)文件修改:

       这个文件只需要修改 nc: 那行,跟上一个文件对应就可以。改完的例子:

       3、修改时需要注意的问题是,train: val: 以及 nc: name: 的后面要有一个空格,原来的模板里就有,修改的时候不要删除就可以,跟后面的路径和数字隔开,不然会报错。

训练模型

       在项目根目录运行命令,如果报错就按照错误信息修改命令或文件,或依赖包,或者重新配置环境。

python train.py --img 640 --batch 16 --epochs 5 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights weighs/yolov5s.pt

       有点长,我们分开解读一下参数。 

–img:输入网络的图片经预处理后的照片尺寸
–batch:每次输入网络的照片数量,这里如果太大了会超过gpu的显存,根据实际情况调整
–epoch:代表要训练的循环次数,根据你的想法调
–data:上一步更改的第一个文件
–cfg:上一步更改的第二个文件
–weights:开发团队训练好的模型,用来进行迁移训练,可以加上也可以不加,不加的话可能就是训练效果不好以及训练时长更长。

       官方训练好的模型需要自己fq去作者给的链接去下载,放在weighs文件夹中。

       模型的百度云链接:百度网盘 请输入提取码
       提取码:8g6c

       作者团队是利用tensorboard来可视化训练过程的,训练开始会在主目录生成一个runs文件.利用tensorboard打开即可(需要TensorFlow环境)。

tensorboard --logdir=./runs

       运行5个Epoch之后,就得到了一个初版训练模型(运行中的JPEG corrupt的报错不用管,会自动跳过然后继续训练)。 

参考文章:

https://github.com/ultralytics/yolov5/readme.md

yolov5训练自己的数据集(垃圾检测分类) - 知乎

https://blog.csdn.net/yapifeitu/article/details/106932503

相关文章:

基于Yolov5目标检测的物体分类识别及定位(二) -- yolov5运行环境搭建及label格式转换

刚开始跟着网上的教程做,把环境安装错了,后来直接用GitHub的官方教程来安装环境。 地址是yolov5官方团队代码及教程,看readme文件就可以。 系列文章: 基于Yolov5目标检测的物体分类识别及定位(一) -- 数据集…...

Office project 2019安装

哈喽,大家好。今天一起学习的是project 2019的安装,Microsoft Office project项目管理工具软件,凝集了许多成熟的项目管理现代理论和方法,可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…...

【leetcode-mysql】1251. 平均售价

题目: Table: Prices ---------------------- | Column Name | Type | ---------------------- | product_id | int | | start_date | date | | end_date | date | | price | int | ---------------------- (product_id,start_date,end_dat…...

Razor代码复用

1.布局&#xff08;Layout&#xff09;复用 Layout的使用&#xff0c;就像WebForm的模板页一样&#xff0c;甚至会更加简单&#xff0c;更加方便和明了。 要使用Layout&#xff0c;首先要在模板页相应的位置添加RenderBody()方法&#xff1a; <!DOCTYPE html><html la…...

PRL:上海交大张文涛团队实现量子材料相关突破

来源&#xff1a;上海交通大学 近期&#xff0c;上海交通大学物理与天文学院张文涛研究组利用自行研制的高能量和高时间分辨率角分辨光电子能谱系统对量子材料1T-TiSe₂电子结构进行了超快激光操控研究。利用超快光激发与电荷密度波相有关的相干声子&#xff0c;引起晶格内原子…...

impala中group_concat()函数无法对内容进行order by

描述&#xff1a; 使用的是impala数据库&#xff0c;假设有四笔数据&#xff0c;是无序的&#xff0c;业务上要求将其行转列成一行数据&#xff0c;并且里面的数据要按从小到大排序。 过程&#xff1a; 猜测&#xff1a; 数据库Oracle、Mysql、MSsql等支持group_concat中使…...

MySQL 数据库全局变量中文解释

NameValueauto_increment_incrementAUTO_INCREMENT 字段值的自增长步长值。auto_increment_offsetAUTO_INCREMENT 字段值的初始值。autocommit指示新连接的默认提交模式是否启用。automatic_sp_privileges控制是否在存储过程上创建或更改时自动分配特定权限。back_log在开始拒绝…...

设计模式之~状态模式

状态模式&#xff08;State&#xff09;&#xff0c;当一个对象的内部状态改变时允许改变其行为&#xff0c;这个对象看起来像是改变了其类。 能够让程序根据不同的外部情况来做出不同的响应&#xff0c;最直接的方法就是在程序中将这些 可能发生的外部情况全部考虑到&#xff…...

【21JavaScript break 和 continue 语句】JavaScript中的break和continue语句:控制循环流程的关键技巧

JavaScript break 和 continue 语句 在JavaScript中&#xff0c;break和continue是两个关键字&#xff0c;用于控制循环结构的执行流程。 break语句 break语句用于中断循环并跳出循环体&#xff0c;使程序执行流程继续到循环之后的下一行代码。 在for循环中使用break for (…...

【SpringBoot】 设置随机数据 用于测试用例

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 设置随机数据——常用于测试用例 SpringBoot设…...

chatgpt赋能python:Python如何获取微信聊天记录

Python如何获取微信聊天记录 作为世界上最受欢迎的即时通讯工具之一&#xff0c;微信被大量用户使用。然而&#xff0c;微信聊天记录的备份和管理是一个重要的问题&#xff0c;特别是对于那些需要在工作和个人生活中快速查找重要信息的人来说。 幸运的是&#xff0c;Python编…...

VP记录:Codeforces Round 599 (Div. 2) A~D

传送门:CF 前提提要:无 A题:A. Maximum Square 刚开始的第一个想法是排序然后二分答案.但是一看范围才1000,果断直接使用暴力枚举. 考虑枚举最终的答案,然后记录有多少个 a i ai ai大于此值,然后判断能否构成一个正方形即可. #include <bits/stdc.h> using namespace…...

01-项目介绍

1、特色与亮点 千万级流量的大型分布式系统架构设计。 高性能、高并发、高可用场景解决方案。 2、项目安排 架构搭建&#xff0c;使用前后端分离架构。 功能开发&#xff0c;实现基本的选座排队购票功能。 引入高并发技术&#xff0c;实现高性能抢票。 3、项目收获 学习…...

《Python编程从入门到实践》学习笔记06字典

alien_0{color:green,points:5} print(alien_0[color]) print(alien_0[points])green 5 alien_0{color:green,points:5} new_pointsalien_0[points] print(fyou just earned {new_points} points!)you just earned 5 points! #添加键值对 alien_0{color:green,points:5} prin…...

为什么说程序员和产品经理一定要学一学PMP

要回答为什么说程序员和产品经理一定要学一学PMP&#xff1f;我们得先看一下PMP包含的学习内容。PMP新版考纲备考参考资料绝大多数涉及IT项目的敏捷管理理念。主要来源于PMI推荐的10本参考书&#xff1a; 《敏捷实践指南&#xff08;Agile Practice Guide&#xff09;》 《项目…...

LearnOpenGL-高级OpenGL-9.几何着色器

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 几何着色器使用几何着色器造几个房子爆破物体法向量可视化 几何着色器 简介 在顶点和片段着色器之间有一个可选的几何着色器几何着色器的输入是一个图元&#xff08;如点或三角形&#xff09;的一…...

8.视图和用户管理

目录 视图 基本使用 用户管理 用户 用户信息 创建用户 删除用户...

bootstrapvue上传文件并存储到服务器指定路径及从服务器某路径下载文件

前记 第一次接触上传及下载文件&#xff0c;做个总结。 从浏览器上传本地文件 前端 本处直接将input上传放在了button内实现。主要利用了input的type“file” 实现上传框。其中accept可以限制弹出框可选择的文件类型。可限制多种&#xff1a; :accept"[doc, docx]&qu…...

Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)

提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二) 冯一川注:GLSL其实也是不断迭代的,比如像3.3版本中,基本数据类型浮点型只支持float型,而GLSL4.0版本开始就…...

C++基础讲解第八期(智能指针、函数模板、类模板)

C基础讲解第八期 代码中也有对应知识注释&#xff0c;别忘看&#xff0c;一起学习&#xff01; 一、智能指针二、模板1. 概念2.函数模板1. 函数模板和普通函数 3. 类模板1.类模板的定义2.举个例子3.举例 一、智能指针 举个栗子: 看下面代码, 当我们直接new一个指针时, 忘记dele…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...