我们知道使用labelimg标注好的文件格式是.xml文件 如果我们要使用yolov5就需要把它转换成yolov5需要的文件格式 .txt 这是重点 代码附下
# -*- coding: utf-8 -*-
import os
import xml.etree.ElementTree as ET
dirpath r D:\pythonProject1\yolov5-6.0\bottle_dataset\stronger\xml # 原来存放xml文件的目录
newdir r D:\pythonProject1\yolov5-6.0\bottle_dataset\stronger\labels # 修改label后形成的txt目录
if not os.path.exists(newdir):
os.makedirs(newdir)
dict_info { green : 0, transparent : 1, white : 2, blue : 3, unknown : 4, orange : 5} # 有几个 类别 填写几个label names
for fp in os.listdir(dirpath):
if fp.endswith( .xml ):
root ET.parse(os.path.join(dirpath, fp)).getroot()
xmin, ymin, xmax, ymax 0, 0, 0, 0
sz root.find( size )
width float(sz[0].text)
height float(sz[1].text)
filename root.find( filename ).text
for child in root.findall( object ): # 找到图片中的所有框
sub child.find( bndbox ) # 找到框的标注值并进行读取
label child.find( name ).text
label_ dict_info.get(label)
if label_:
label_ label_
else:
label_ 0
xmin float(sub[0].text)
ymin float(sub[1].text)
xmax float(sub[2].text)
ymax float(sub[3].text)
try: # 转换成yolov3的标签格式 需要归一化到 0-1 的范围内
x_center (xmin xmax) / (2 * width)
x_center %.6f % x_center
y_center (ymin ymax) / (2 * height)
y_center %.6f % y_center
w (xmax - xmin) / width
w %.6f % w
h (ymax - ymin) / height
h %.6f % h
except ZeroDivisionError:
print(filename, 的 width有问题 )
with open(os.path.join(newdir, fp.split( .xml )[0] .txt ), a ) as f:
f.write( .join([str(label_), str(x_center), str(y_center), str(w), str(h) \n ]))
print( ok )
代码只需要更改5 6行的文件路径和第11行你所标注的类别即可。
注 .xml转化成.txt文件放入labels内。
注 我们用到的所有照片放入JPEGImage内。
生成的.txt内容如下 以我的数据为例 第一列是设定的标签 后面是坐标位置
接下来切分数据集 对于我们标注的图片需要进行切分成训练集和验证集 一般比例是8 2 训练集放入创建的images/train中 验证集放入images/val中 训练的图片对应的.txt文件放入labels/train中 验证的图片对应的.txt文件放入labels/val中。 训练和验证的图片和.txt文档的数量一定要对应
*以上是完整的对于数据文件的划分。
四.构造自己的.yaml文件因为yolov5训练数据调用的都是.yaml文件 所以我们需要在date目录下创建一个xxx.yaml文件来存放我们已经整理好的数据 其中train存放的是我们切分好的训练.txt文件 需要存放其绝对路径 可以放相对 但要调整好目录级别 val存放的是我们切分好的验证.txt文件 路径同train一样。
nc: 存放类别个数
name 存放类别的名字 个数和nc对应
如图
五.运行train.py文件训练
开始训练我们的数据集 运行train.py需要注意这几个参数。
--weight 先选用官方的yolov5s.pt权重
--cfg 选用model目录下的yolov5s模型
--date选用自己编写的.yaml文件
--epoch指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点
--bath_size一次看完多少张图片才进行权重更新 梯度下降的mini-batch,显卡不行你就调小点
name 重命名results.txt to results_name.txt
device cuda device, i.e. 0 or 0,1,2,3 or cpu
adam 使用adam优化
multi-scale 多尺度训练 img-size /- 50%
single-cls 单类别的训练集
六.查看训练好的权重及可视化日志训练生成好的文件会在一个run文件中 代码跑完自己生成 。
注 生成的一些信息都存在这个文件里面 红标箭头标出的权重就是我们所训练好以后需要的内容。
*训练过程可视化
利用tensorboard可视化训练过程 使用tensorboard打开即可查看训练日志。
我们可以拿出best.pt权重来进行测试和推理这些会在另一篇博客中讲解 以上就是使用yolov5训练自己的数据集的全部内容。
感谢大家阅读
要训练一个mini数据集,你可以按照以下步骤进行操作:1. 准备数据集:将你的mini数据集按照YOLOv5的要求进行整理和标注。确保每个图像都有对应的标签文件,标签文件应包含物体的类别和边界框的位置信息。2. 配置训练参数:在yolov5目录下的`data`文件夹中创建一个新的配置文件(比如`mini.yaml`),根据你的数据集进行配置。在配置文件中指定训练、验证和测试数据集的路径,类别数目等信息。3. 开始训练:使用以下命令开始训练你的mini数据集:```python train.py --data data/mini.yaml --cfg models/yolov5s.yaml --weights --batch-size 16 --epochs 50```其中,`--data`指定数据集配置文件的路径,`--cfg`指定YOLOv5模型的配置文件的路径,`--weights`为空表示从头开始训练,`--batch-size`指定批量大小,`--epochs`指定训练的轮数。4. 模型测试:在训练完成后,你可以使用以下命令测试训练好的模型:```python test.py --data data/mini.yaml --weights runs/exp/weights/best.pt --augment```其中,`--data`指定数据集配置文件的路径,`--weights`指定训练好的模型权重文件的路径,`--augment`表示使用数据增强进行测试。5. 可视化训练过程:你可以使用Tensorboard来可视化训练过程。在yolov5目录下运行以下命令:```tensorboard --logdir=runs```然后在浏览器中打开Tensorboard,即可查看训练日志和指标。以上是使用YOLOv5训练mini数据集的一般步骤。你可以根据具体情况进行参数的调整和优化。 span >
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv182534