YOLOv8训练自己的数据集(包括环境搭建、超参数调整、模型训练、推理、模型导出等)

YOLOv8代码官方开源地址:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite 

1.环境准备(Anconada+pycharm)

先准备好主机需要的环境:

Anconada创建环境:

  • 点击开始搜索Anconada promot 进入命令行界面
  • 创建环境:conda create -name 环境名 python=3.8
  • 查看环境:conda env list
  • 激活环境:conda activate 环境名,这里显示已经激活成功。
  • 导入依赖: cd到项目文件夹,输入(这里推荐使用清华源)
  • pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 进入pycharm打开环境并激活环境,点击添加解释器
  • 选择conda环境并应用,这里conda可执行文件可以找你的conda环境安装位置的_conda.exe并加载,然后选择你刚刚创建的那个环境,我这里选的是torch-dl。

至此环境搭建完成

2.数据集准备

网上大多公开数据集标签是xml格式的,这里附上xml标签转换为txt格式的代码。

import os
import glob
import xml.etree.ElementTree as ET
#  这里指定xml文件目录
xml_file=r'E:\桌面\资料\cv4\数据集\voc数据集\Annotations'
# 这里修改成自己的类别名称
l=['apple', 'banana', 'mixed','orange']

def convert(box,dw,dh):
    x=(box[0]+box[2])/2.0
    y=(box[1]+box[3])/2.0
    w=box[2]-box[0]
    h=box[3]-box[1]

    x=x/dw
    y=y/dh
    w=w/dw
    h=h/dh

    return x,y,w,h

def f(name_id):
    xml_o=open(r'E:\桌面\资料\cv4\数据集\voc数据集\Annotations\%s.xml'%name_id)
    txt_o=open(r'E:\桌面\资料\cv4\数据集\voc数据集\labels1\%s.txt'%name_id,'w')
    #  这里指定xml文件目录和txt文件目录
    pares=ET.parse(xml_o)
    root=pares.getroot()
    objects=root.findall('object')
    size=root.find('size')
    dw=int(size.find('width').text)
    dh=int(size.find('height').text)

    for obj in objects :
        c=l.index(obj.find('name').text)
        bnd=obj.find('bndbox')

        b=(float(bnd.find('xmin').text),float(bnd.find('ymin').text),
           float(bnd.find('xmax').text),float(bnd.find('ymax').text))

        x,y,w,h=convert(b,dw,dh)

        write_t="{} {:.5f} {:.5f} {:.5f} {:.5f}\n".format(c,x,y,w,h)
        txt_o.write(write_t)

    xml_o.close()
    txt_o.close()

name=glob.glob(os.path.join(xml_file,"*.xml"))
for i in name :
    name_id=os.path.basename(i)[:-4]
    f(name_id)

注意修改的就是中文注释处。xml文件存储位置,生成txt文件存储位置,还有你的数据集类别名称,要修改成自己的类别。

3.模型训练

3.1数据集划分

import os
import random
from shutil import move

def split_dataset(src_images, dest_train_images, dest_val_images, src_labels, dest_train_labels, dest_val_labels, split_ratio=0.2):
    # 获取所有图片和标签文件
    all_images = os.listdir(src_images)
    all_labels = os.listdir(src_labels)

    # 计算要移动到验证集的数量
    num_val_samples = int(len(all_images) * split_ratio)

    # 随机选择要移动到验证集的样本
    val_samples = random.sample(all_images, num_val_samples)

    # 移动图片
    for image in val_samples:
        src_image_path = os.path.join(src_images, image)
        dest_image_path = os.path.join(dest_val_images, image)
        move(src_image_path, dest_image_path)

    # 移动标签文件
    for image in val_samples:
        label_file = image.split('.')[0] + '.txt'
        src_label_path = os.path.join(src_labels, label_file)
        dest_label_path = os.path.join(dest_val_labels, label_file)
        move(src_label_path, dest_label_path)

    print(f"{num_val_samples} samples moved to validation set.")

# 定义路径
src_images_path = r'D:\project-HL\v8-fruit\datasets\fruit\images\train'
dest_train_images_path = r'D:\project-HL\v8-fruit\datasets\fruit\images\train'
dest_val_images_path = r'D:\project-HL\v8-fruit\datasets\fruit\images\val'

src_labels_path = r'D:\project-HL\v8-fruit\datasets\fruit\labels\train'
dest_train_labels_path = r'D:\project-HL\v8-fruit\datasets\fruit\labels\train'
dest_val_labels_path = r'D:\project-HL\v8-fruit\datasets\fruit\labels\val'

# 调用函数进行数据集划分
split_dataset(src_images_path, dest_train_images_path, dest_val_images_path, src_labels_path, dest_train_labels_path, dest_val_labels_path, split_ratio=0.2)

 得到数据集后在你yolo项目中创建一个datasets文件夹,文件结构如下:

images存放图片,lables存放txt格式的标签,未划分前将所有图片和标签都保存在train文件夹中,然后运行代码划分数据,我这里是8:2,想调整直接看代码最后一个小数。

至此数据集划分完成。

3.2 训练

3.2.1准备一个yaml文件,在此文件夹中复制一个出来放在项目根目录。

自己根据自己的数据集标签,配置一个yaml文件

3.2.2 开始训练

在根目录创建一个训练脚本代码如下

from ultralytics import YOLO
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
# Load a model 这里选择预训练模型或者网络结构 有不同模型可以选择 我这使用yolov8n.pt
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)
# Use the model0 data指定你的yaml文件,然后设置超参数
model.train(data="fruit.yaml", epochs=50,batch=8)  # train the model

RUN就开始训练了,最后一行可以设置不同的超参数,更多的超参数可以在default.yaml中设置

这里包括训练预测的一些超参数。

训练完成后得到结果:

得到这个权重用来进行预测:best.pt指最好的权重,last是最后一次的权重

4.推理

在根目录创建一个推理脚本代码如下

from ultralytics import YOLO
# # 推理结果保存在runs/detect/predict-检测
# 选择模型 这里要选择自己训练得到的权重进行推理
model = YOLO("runs/detect/train/weights/best.pt")  # load a pretrained model (recommended for training)
# # 选择数据来源 source
# results = model(source='datasets/picture-ceshi',save=True)  # predict-检测 on an image
# 实时显示 source:数据源  show:是否实时显示   save:是否保存预测结果
results = model(source='datasets/picture-ceshi/4.jpg',show=True,save=True)  # predict-检测 on an image

 

结果如上图

5.模型导出

如果想要部署模型,新建一个脚本。

from ultralytics import YOLO


model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Use the model
path = model.export(format="onnx")  # export the model to ONNX format

format可以选择不同的导出格式。

就到这里了,希望大家顺利。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于yolov5的极验空间推理验证码模型训练python源码+标注好的数据集+项目说明.zip 测试接口 接口随时都可能会关掉,如果不通就是被我关掉了。 测试接口:`http://49.234.3.186:8888/index` 限制每天500次请求,每小时100次请求,每分钟60次请求。(总计) ### GET请求参数 参数 | 值 | ---- | ---- | gt | c9428d9361cd70d26e28d7cd780ec640 | challenge | 9a5d3a1db9dadbaa867f6a34a5512740 | ### 请求成功示例 ```json { "msg":[], "result":"success", "score":"1", "validate":"ac00fdb3bc74b012c3b82cca057675fa" #使用challenge和validate一起提交验证即可 } ``` ## 验证码问题求解思路 训练模型比较简单,我自己标记了100张图的标签,可以直接训练,也可以直接用我训练好的权重文件`best.pt`,训练了大概700次左右,感觉效果还是不错的,我认为比较麻烦的部分还是分析问题找出符合条件的物体,我写出的逻辑识别成功率大概在80%,暂时不公开逻辑。 `请点击在黄色圆柱体后面的黄色物体。`判断前后左右,可以根据物体底部的xy坐标。 `请点击与绿色物品有相同大小的球。`判断相同大小,可以对比符合条件的物体的二维面积,最相近的可以认为相同大小。
要在YOLOv8训练自己的数据集,你需要按照以下步骤进行操作: 1. 准备数据集:首先,你需要准备一个包含自定义对象的数据集。确保每个图像都有相应的注释文件,以指定对象的位置和类别。 2. 数据集标注:将每个对象在图像中标注出来,并保存为相应的注释文件,常用的标注格式有YOLO、PASCAL VOC等。 3. 安装依赖:确保你的环境中已经安装了必要的依赖项,如Python、OpenCV、NumPy等。 4. 配置文件:准备YOLOv8的配置文件,其中包括网络结构、超参数等设置。你可以在Darknet库中找到示例配置文件,并根据自己的需求进行修改。 5. 调整网络结构:根据自己的数据集和目标进行网络结构的调整,例如调整输入图像尺寸、调整输出层的类别数量等。 6. 数据集划分:将数据集划分为训练集和验证集,一般来说,训练集占总数据集的大部分,验证集用于评估模型的性能指标。 7. 数据预处理:对图像进行预处理操作,例如调整大小、归一化、数据增强等。 8. 训练模型:使用准备好的数据集和配置文件,运行YOLOv8训练脚本开始训练模型。脚本会根据配置文件中的设置进行迭代更新权重参数。 9. 模型评估:使用验证集对训练过程中得到的模型进行评估,计算精度、召回率等指标。 10. 模型推理:在测试集上对训练好的模型进行推理,检测出图像中的对象,并输出结果。 请注意,以上步骤提供了一个基本的指导,具体的实现可能会根据你的数据集和需求有所不同。确保仔细阅读YOLOv8的文档和相关资料,以获得更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值