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

news2024/11/27 12:36:35

刚开始跟着网上的教程做,把环境安装错了,后来直接用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 os

filedir = './yourdir'
filenames = os.listdir(filedir) # 获取当前文件夹中的文件名称列表
f = open('result.json','w') # 打开当前目录下的result文件,如果没有则创建
i = 0
for filename in filenames: # 先遍历文件名
    i += 1
    print(i)
    if i > 0:
        filepath = filedir + '\\' + filename
        print(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 jsonpath

filedir = ''./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] # 最有效,取子节点,返回列表(假列表),取第一个就是str
    category = 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)/weight
        y = ((y2+y1)/2)/height
        w = (x2-x1)/weight
        h = (y2-y1)/height
        x = 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

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

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

相关文章

【MySQL】一文带你了解表的增删改查 CRUD

文章目录 1. 增加(Create)1.1 单行插入 全列插入1.2 多行插入 指定列插入 2. 查询(Retrieve)2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 别名2.5 去重2.6 排序 3. 条件查询(Where)3.1比较运算符…

【人工智能】— 学习与机器学习、无/有监督学习、强化学习、学习表示

【人工智能】— 学习与机器学习、无/有监督学习、强化学习、学习表示 上一章Bayesian Networks本章:观测学习学习学习元素机器学习概论机器学习对什么有用自动语音识别计算机视觉Information retrieval—信息检索 机器学习机器学习:定义 电子邮件过滤问题…

全志V3S嵌入式驱动开发(gpio输出)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 不管是对mcu,还是对soc来说,gpio肯定是越多越好。但是一个芯片上,它的引脚总是有限的,特别对于非BG…

修改邻接变量-0day漏洞利用原理(6)

大多数情况下,局部变量在栈中的分布是相邻的,但也有可能出于编译优化等需要而有所例外。具体情况我们需要在动态调试中具体对待,这里出于讲述基本原理的目的,可以暂时认为局部变量在栈中是紧挨在一起的。 提供理论基础 下一篇利用:非法的超长密码去修改 bufer 的邻接变量…

支持向量机练习

练习5:支持向量机 介绍 在本练习中,我们将使用支持向量机(SVM)来构建垃圾邮件分类器。 在开始练习前,需要下载如下的文件进行数据上传: data.tgz -包含本练习中所需要用的数据文件 其中: e…

2. 卷积的经典模型

一、什么是卷积神经网络 卷积神经网络就是含有卷积层的网络。 二、有哪些经典的模型?每一次的技术进步在哪里? 卷积神经网络(LeNet) LeNet第一次将卷积神经网络推上舞台,通过梯度下降训练卷积神经网络可以达到手写数字…

chatgpt赋能python:Python中取出中间文本的方法

Python中取出中间文本的方法 在Python开发中,我们常常需要从字符串中取出特定位置的文本,例如从一个网页源码中提取出指定的内容。而且,一份好的代码需要清晰易懂、高效可靠。那么,在Python中如何取出中间文本呢?下面…

超详细Redis入门教程——Redis 主从集群(下)

前言 本文小新为大家带来 Redis 主从集群 相关知识,具体内容包括哨兵机制实现(包括:哨兵机制简介,Redis 高可用集群搭建,Redis 高可用集群的启动,Sentinel 优化配置),哨兵机制原理&a…

史上最全网络安全面试题汇总

最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备?工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享一份网络安全工…

vmware创建ubuntu服务器>>(使用xshell)配置连接

目录 引言服务器创建准备镜像创建服务器全过程新建虚拟机选择虚拟机硬件兼容性镜像选择服务器目录名和基础信息设置虚拟机命名和存储位置设置处理器配置内存配置网络选型下一步连续点击启动 服务器配置root用户密码设置root用户切换安装ssh服务并启动vmware-ssh配置链接 xshell…

算法(三)—— 双指针

文章目录 27 移除元素344 反转字符串(手写reverse)剑指 Offer 05 替换空格19 删除链表的倒数第N个节点面试题 02.07. 链表相交15 三数之和二、使用步骤1.引入库2.读入数据 总结 27 移除元素 题目:原地移除数组中值为val的元素 思路&#xff…

Jetson Orin Nano nvme系统备份和恢复

大家好,我是虎哥,Jeston Orin nano 8G模块,我自己也玩了一段时间,配置了很多环境后,我就在琢磨如何将系统像之前的模块一样捞取出来后,在新模块上进行恢复。过程是曲折的,结果也是曲折的&#x…

开源字节 考研集训营小程序

考研集训营的价格要比普通的班课贵很多,价格通常在上万元。考研集训营分为春季、暑期、秋季等短期集训营,还有半年和全年长期集训,为学生提供英语、数学、政治的公共课辅导和各种专业课的教学。想要了解更多的考研相关信息,获得适…

自然语言处理从入门到应用——自然语言处理的基本问题:结构预测问题

分类目录:《自然语言处理从入门到应用》总目录 与文本分类问题不同,在结构预测问题中,输出类别之间具有较强的相互关联性。例如,在词性标注任务中,一句话中不同词的词性之间往往相互影响,如副词之后往往出现…

1、mysql的安装与配置

下载安装配置 下载zip文件解压之后配置环境变量 在path后面添加mysql bin文件夹的路径:C:\Program Files (x86)\MySQL\bin 配置完环境变量后,在C:\Program Files (x86)\MySQL目录下新建一个配置文件mysql.ini,同时在bin的同级目录C:\Program …

算法的复杂度【数据结构】

1、时间复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源,因此衡量一个算法的好坏一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要…

Jenkins安装配置

前言:Jenkins是一款CICD(持续集成与持续交付)工具。Jenkins可以帮你在写完代码后,一键完成开发过程中的一系列自动化部署的工作。 Jenkins 2.346.1 版本支持 jdk1.8 和 jdk11,最后一版支持jdk1.8的版本。 安装Jenkins前…

windows修改Pycharm的右键打开方式

title: windows中open floder as Pycharm太长了怎么修改 date: 2023-06-04 author: IoT_H2 tags: windows系统问题 categories: Markdown 问题描述: Pycharm这一栏这么长,长的我实在是很难受,事实上Jetbrains家的软件都是这个鸟模样 导…

RocketMq的单机版安装以及可视化软件的安装

一 RocketMq的单机版安装 1.1 RocketMq的上传 1.2 解压 [rootlocalhost export]# unzip rocketmq-all-4.9.6-bin-release.zip 1.3 修改配置 使用 vim 命令打开 bin/runserver.sh 文件。现将这些值修改为如下: [rootlocalhost bin]# vi runserver.sh 使用vim命令…

tinkerCAD入门操作(3):创建和操作分组对象

tinkerCAD入门操作(3):创建和操作分组对象 介绍 我们现在将探索Tinkercad的超能力 - 组合简单的形状来制作复杂的对象。 组合形状是实体建模的基本目的。这就是汽车、建筑物和宇宙飞船等有趣东西的制作方式。现在,我们要教你这个超能力。 创建复合形状…