当前位置:   article > 正文

yolov8官方代码训练模型(coco数据集和voc数据集训练)+onnx模型预测_yolov8需要什么样式的数据集格式

yolov8需要什么样式的数据集格式

目录

目录

一、环境安装

1. 运行环境windows

二、coco数据集格式及训练步骤

2.1 前期准备

2.2 数据集格式

2.3 yaml文件

2.4 开始训练

2.4.1 修改参数

2.4.2 开始训练

2.5 模型预测

三、voc数据集格式及训练步骤

3.1 前期准备

3.2 数据集划分

3.3 生成训练用的txt文件

3.4 开始训练

3.4.1 yaml文件参数修改

3.4.2 default.yaml参数修改

3.4.3 开始训练

3.5 模型预测

四、pt模型转onnx模型预测

4.1 pt转onnx

4.2 预测

参考:


一、环境安装

1. 运行环境
windows

首先切换到自己建立的虚拟环境安装 pytorch


pytorch


参照官网,直接使用以下语句即可导入项目所需要的库

pip install ultralytics

根据官方的解释,pip 的 ultralytics 库包含了 requirements.txt中的所有库

训练代码:

链接:https://pan.baidu.com/s/164sApCkqjGgUrittLh1xQg?pwd=hujv 
提取码:hujv

onnx预测代码:

链接: https://pan.baidu.com/s/1vkfL_p_TDG65FlW53CiX3g?pwd=ix43

提取码: ix43 

二、coco数据集格式及训练步骤

2.1 前期准备

在对应的目录下新建文件

yolov8模型仓库

2.2 数据集格式

coco数据集放在datasets文件夹下,格式如下

images 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 图片信息
labels 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 对应图片的标注信息

2.3 yaml文件

在之前创建的yaml里面,将以下内容复制进去,

如果按照我的步骤以及文件地址一样的话,就不用修改train和val的路径了

  1. train: images/train
  2. val: images/val
  3. # number of classes
  4. nc: 3
  5. # class names
  6. names: ['Paaper', 'Rock','Scissors']

nc:类名数量

names:类名

2.4 开始训练

2.4.1 修改参数

2.4.2 开始训练

出现以下画面,则代表成功

训练完后根据上面的提示到runs里面detect里面找到对应的train文件夹,比如上面就保存在train2里面

模型位置如下图:

2.5 模型预测

使用以下命令

yolo detect predict model=weights/best.pt source=data/test_images save=True

model参数:修改为你的best模型地址

source参数:修改为要测试的图片文件夹(没有的可以新建)        

三、voc数据集格式及训练步骤

3.1 前期准备

数据集文件结构如下

  1. VOCdevkit
  2. ————VOC2007
  3. ————Annotations # 存放图片对应的xml文件,与JPEGImages图片名称一一对应
  4. ————ImageSets
  5. ————Main # 存放trainval.txt、train.txt、val.txt、test.txt,开始为空
  6. ————JPEGImages # 存放所有图片文件

新建文件

3.2 数据集划分

将以下代码放入split_train_val.py里面

代码来自参考博客(【YOLOv5、YOLOv7、YOLOv8训练】——VOC数据集划分和YOLO格式转换_yolov7和yolov8训练集一样吗_下雨天不下雨的博客-CSDN博客

  1. # -*- coding: utf-8 -*-
  2. """
  3. Author:smile
  4. Date:2022/09/11 10:00
  5. 顺序:脚本A1
  6. 简介:分训练集、验证集和测试集,按照 8:1:1 的比例来分,训练集9,验证集1
  7. """
  8. import os
  9. import random
  10. import argparse
  11. parser = argparse.ArgumentParser()
  12. # xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
  13. parser.add_argument('--xml_path', default='datasets/VOC2007/Annotations', type=str, help='input xml label path')
  14. # 数据集的划分,地址选择自己数据下的ImageSets/Main
  15. parser.add_argument('--txt_path', default='datasets/VOC2007/ImageSets/Main/', type=str, help='output txt label path')
  16. opt = parser.parse_args()
  17. train_percent = 0.9 # 训练集所占比例
  18. val_percent = 0.1 # 验证集所占比例
  19. xmlfilepath = opt.xml_path
  20. txtsavepath = opt.txt_path
  21. total_xml = os.listdir(xmlfilepath)
  22. if not os.path.exists(txtsavepath):
  23. os.makedirs(txtsavepath)
  24. num = len(total_xml)
  25. list = list(range(num))
  26. t_train = int(num * train_percent)
  27. t_val = int(num * val_percent)
  28. train = random.sample(list, t_train)
  29. num1 = len(train)
  30. for i in range(num1):
  31. list.remove(train[i])
  32. val_test = [i for i in list if not i in train]
  33. val = random.sample(val_test, t_val)
  34. num2 = len(val)
  35. for i in range(num2):
  36. list.remove(val[i])
  37. file_train = open(txtsavepath + '/train.txt', 'w')
  38. file_val = open(txtsavepath + '/val.txt', 'w')
  39. for i in train:
  40. name = total_xml[i][:-4] + '\n'
  41. file_train.write(name)
  42. for i in val:
  43. name = total_xml[i][:-4] + '\n'
  44. file_val.write(name)
  45. file_train.close()
  46. file_val.close()

需要修改的地方

修改完后运行

3.3 生成训练用的txt文件

将以下代码放入voc_label.py

  1. # -*- coding: utf-8 -*-
  2. import xml.etree.ElementTree as ET
  3. import os
  4. sets = ['train', 'val'] # 如果你的Main文件夹没有test.txt,就删掉'test'
  5. # classes = ["a", "b"] # 改成自己的类别,VOC数据集有以下20类别
  6. classes = ['Paaper', 'Rock','Scissors'] # class names
  7. abs_path = os.getcwd()
  8. def convert(size, box):
  9. dw = 1. / (size[0])
  10. dh = 1. / (size[1])
  11. x = (box[0] + box[1]) / 2.0 - 1
  12. y = (box[2] + box[3]) / 2.0 - 1
  13. w = box[1] - box[0]
  14. h = box[3] - box[2]
  15. x = x * dw
  16. w = w * dw
  17. y = y * dh
  18. h = h * dh
  19. return x, y, w, h
  20. def convert_annotation(image_id):
  21. in_file = open(abs_path + '/datasets/VOC2007/Annotations/%s.xml' % (image_id), encoding='UTF-8')
  22. out_file = open(abs_path + '/datasets/VOC2007/labels/%s.txt' % (image_id), 'w')
  23. tree = ET.parse(in_file)
  24. root = tree.getroot()
  25. size = root.find('size')
  26. w = int(size.find('width').text)
  27. h = int(size.find('height').text)
  28. for obj in root.iter('object'):
  29. difficult = obj.find('difficult').text
  30. # difficult = obj.find('Difficult').text
  31. cls = obj.find('name').text
  32. if cls not in classes or int(difficult) == 1:
  33. continue
  34. cls_id = classes.index(cls)
  35. xmlbox = obj.find('bndbox')
  36. b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
  37. float(xmlbox.find('ymax').text))
  38. b1, b2, b3, b4 = b
  39. # 标注越界修正
  40. if b2 > w:
  41. b2 = w
  42. if b4 > h:
  43. b4 = h
  44. b = (b1, b2, b3, b4)
  45. bb = convert((w, h), b)
  46. out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
  47. for image_set in sets:
  48. if not os.path.exists(abs_path + '/datasets/VOC2007/labels/'):
  49. os.makedirs(abs_path + '/datasets/VOC2007/labels/')
  50. image_ids = open(abs_path + '/datasets/VOC2007/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()
  51. list_file = open(abs_path + '/datasets/VOC2007/%s.txt' % (image_set), 'w')
  52. for image_id in image_ids:
  53. list_file.write(abs_path + '/datasets/VOC2007/JPEGImages/%s.jpg\n' % (image_id)) # 要么自己补全路径,只写一半可能会报错
  54. convert_annotation(image_id)
  55. list_file.close()

需要修改的地方

修改完后运行

至此,数据集的样式是这样的

3.4 开始训练

3.4.1 yaml文件参数修改

将以下内容复制到最开始创建的yaml文件里面,注意修改nc 和 names

  1. train: VOC2007/train.txt
  2. val: VOC2007/val.txt
  3. # number of classes
  4. nc: 3
  5. # class names
  6. names: ['Paaper', 'Rock','Scissors']

train和val的路径看情况修改

3.4.2 default.yaml参数修改

3.4.3 utils.py修改参数

3.4.3 开始训练

出现以下画面则成功

3.5 模型预测

使用以下命令

yolo detect predict model=weights/best.pt source=data/test_images save=True

model参数:修改为你的best模型地址

source参数:修改为要测试的图片文件夹(没有的可以新建)

四、pt模型转onnx模型预测

4.1 pt转onnx

运行即可

4.2 预测

代码的目录结构如下:

图片检测只需要进入image_onnx文件夹里

代码中需要修改的地方:

参考:

【YOLO】YOLOv8训练自定义数据集(4种方式)-CSDN博客

【YOLOv5、YOLOv7、YOLOv8训练】——VOC数据集划分和YOLO格式转换_yolov7和yolov8训练集一样吗_下雨天不下雨的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/85034
推荐阅读
相关标签
  

闽ICP备14008679号