手机网站注意哪些问题吗,天津市做网站的公司有哪些,贵州省建设工程造价信息网,全网推广方案准备自己的数据集
训练YOLOv8时#xff0c;选择的数据格式是VOC#xff0c;因此下面将介绍如何将自己的数据集转换成可以直接让YOLOv8进行使用。
1、创建数据集
我的数据集都在保存在mydata文件夹#xff08;名字可以自定义#xff09;#xff0c;目录结构如下#xf… 准备自己的数据集
训练YOLOv8时选择的数据格式是VOC因此下面将介绍如何将自己的数据集转换成可以直接让YOLOv8进行使用。
1、创建数据集
我的数据集都在保存在mydata文件夹名字可以自定义目录结构如下将之前labelImg标注好的xml文件和图片放到对应目录下
mydata
images # 存放图片
xml # 存放图片对应的xml文件
dataSet #之后会在Main文件夹内自动生成train.txtval.txttest.txt和trainval.txt四个文件存放训练集、验证集、测试集图片的名字无后缀.jpg
示例如下
mydata文件夹下内容如下 image为VOC数据集格式中的JPEGImages内容如下 xml文件夹下面为.xml文件标注工具采用labelImage内容如下 dataSet 文件夹下面存放训练集、验证集、测试集的划分通过脚本生成可以创建一个split_train_val.py文件代码内容如下 # coding:utf-8import osimport randomimport argparseparser argparse.ArgumentParser()# xml文件的地址根据自己的数据进行修改 xml一般存放在Annotations下parser.add_argument(--xml_path, defaultxml, typestr, helpinput xml label path)# 数据集的划分地址选择自己数据下的ImageSets/Mainparser.add_argument(--txt_path, defaultdataSet, typestr, helpoutput txt label path)opt parser.parse_args()trainval_percent 1.0train_percent 0.9xmlfilepath opt.xml_pathtxtsavepath opt.txt_pathtotal_xml os.listdir(xmlfilepath)if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num len(total_xml)list_index range(num)tv int(num * trainval_percent)tr int(tv * train_percent)trainval random.sample(list_index, tv)train random.sample(trainval, tr)file_trainval open(txtsavepath /trainval.txt, w)file_test open(txtsavepath /test.txt, w)file_train open(txtsavepath /train.txt, w)file_val open(txtsavepath /val.txt, w)for i in list_index:name total_xml[i][:-4] \nif i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()file_train.close()file_val.close()file_test.close()
运行代码后在dataSet 文件夹下生成下面四个txt文档 三个txt文件里面的内容如下 2、转换数据格式
接下来准备labels把数据集格式转换成yolo_txt格式即将每个xml标注提取bbox信息为txt格式每个图像对应一个txt文件文件每一行为一个目标的信息包括class, x_center, y_center, width, height格式。格式如下 创建voc_label.py文件将训练集、验证集、测试集生成label标签训练中要用到同时将数据集路径导入txt文件中代码内容如下 # -*- coding: utf-8 -*-import xml.etree.ElementTree as ETimport osfrom os import getcwdsets [train, val, test]classes [a, b] # 改成自己的类别abs_path os.getcwd()print(abs_path)def convert(size, box):dw 1. / (size[0])dh 1. / (size[1])x (box[0] box[1]) / 2.0 - 1y (box[2] box[3]) / 2.0 - 1w box[1] - box[0]h box[3] - box[2]x x * dww w * dwy y * dhh h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file open(data/mydata/xml/%s.xml % (image_id), encodingUTF-8)out_file open(data/mydata/labels/%s.txt % (image_id), w)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).textdifficult 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)wd getcwd()for image_set in sets:if not os.path.exists(data/mydata/labels/):os.makedirs(data/mydata/labels/)image_ids open(data/mydata/dataSet/%s.txt % (image_set)).read().strip().split()list_file open(paper_data/%s.txt % (image_set), w)for image_id in image_ids:list_file.write(abs_path /mydata/images/%s.jpg\n % (image_id))convert_annotation(image_id)list_file.close()
3、配置文件
1数据集的配置
在mydata文件夹下新建一个mydata.yaml文件可以自定义命名用来存放训练集和验证集的划分文件train.txt和val.txt这两个文件是通过运行voc_label.py代码生成的然后是目标的类别数目和具体类别列表mydata.yaml内容如下 2) 选择一个你需要的模型
在ultralytics/models/v8/目录下是模型的配置文件这边提供s、m、l、x版本逐渐增大随着架构的增大训练时间也是逐渐增大假设采用yolov8x.yaml只用修改一个参数把nc改成自己的类别数,需要取整可选 如下 至此自定义数据集已创建完毕接下来就是训练模型了。 1、下载预训练模型
在YOLOv8的GitHub开源网址上下载对应版本的模型 2、训练
接下来就可以开始训练模型了命令如下
yolo taskdetect modetrain modelyolov8x.yaml datamydata.yaml epochs1000 batch16
以上参数解释如下
task选择任务类型可选[detect, segment, classify, init]
mode: 选择是训练、验证还是预测的任务蕾西 可选[train, val, predict]
model: 选择yolov8不同的模型配置文件可选yolov8s.yaml、yolov8m.yaml、yolov8l.yaml、yolov8x.yaml
data: 选择生成的数据集配置文件
epochs指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。
batch一次看完多少张图片才进行权重更新梯度下降的mini-batch,显卡不行你就调小点。
文章参考(超详细)YOLOv8训练的练习数据集 - 知乎