当前位置: 首页 > 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

http://www.lryc.cn/news/91900.html

相关文章:

  • Office project 2019安装
  • 【leetcode-mysql】1251. 平均售价
  • Razor代码复用
  • PRL:上海交大张文涛团队实现量子材料相关突破
  • impala中group_concat()函数无法对内容进行order by
  • MySQL 数据库全局变量中文解释
  • 设计模式之~状态模式
  • 【21JavaScript break 和 continue 语句】JavaScript中的break和continue语句:控制循环流程的关键技巧
  • 【SpringBoot】 设置随机数据 用于测试用例
  • chatgpt赋能python:Python如何获取微信聊天记录
  • VP记录:Codeforces Round 599 (Div. 2) A~D
  • 01-项目介绍
  • 《Python编程从入门到实践》学习笔记06字典
  • 为什么说程序员和产品经理一定要学一学PMP
  • LearnOpenGL-高级OpenGL-9.几何着色器
  • 8.视图和用户管理
  • bootstrapvue上传文件并存储到服务器指定路径及从服务器某路径下载文件
  • Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)
  • C++基础讲解第八期(智能指针、函数模板、类模板)
  • JMeter 测试 ActiveMq
  • 2023年4月和5月随笔
  • 新Linux服务器安装Java环境[JDK、Tomcat、MySQL、Nacos、Redis、Nginx]
  • 精简总结:一文说明软件测试基础概念
  • 通过 Gorilla 入门机器学习
  • 【二叉树】298. 二叉树最长连续序列
  • Matlab论文插图绘制模板第100期—紧凑排列多子图(Tiledlayout)
  • [2.0快速体验]Apache Doris 2.0 日志分析快速体验
  • MySQL学习-数据库创建-数据库增删改查语句-事务-索引
  • 浏览器渗透攻击-渗透测试模拟环境(9)
  • MySQL数据库基础(基础命令详解)