YOLOv8检测、分割和分类训练自己数据集

Yolov8下载地址:GitHub - ultralytics/ultralytics: YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLitexx

下载完成后 按照YOLOv8教程系列:一、使用自定义数据集训练YOLOv8模型(详细版教程,你只看一篇->调参攻略),包含环境搭建/数据准备/模型训练/预测/验证/导出等_Zhijun.li@Studio的博客-CSDN博客

所写的进行目标检测的自己数据集的训练即可。

但是网上对于yolov8进行自己数据集的分割训练的教程较少 ,不会的可以看本文。

首先就是数据集的格式:(我自己使用的是这样,可以训练,参照coco数据集)

其中images/train2017中是训练图片原图,labels/train2017中是转换出来的yolo格式txt标签文本文件,train2017.cache是自动生成的,不用管

其次,就是配置文件 ,在下图所示位置,并且按照右下所示进行修改:

 

此处修改完后,就是修改参数配置文件 (cdg里的default.yaml),要做分割任务首先是将task设置为segment,其实就是model改为yolov8n-seg.py(分割预训练权重),最后就是将data修改为自己数据集所在文件夹的路径就可以开始训练。

 如果报错runtimeerror: sizes of tensors must match except in dimension 1. expected size 2 but got size 0 for tensor number 1 in the list.

        原因是 torch.cat()函数中参数的维度不对应,如果数据集没有问题,那就是丢失信息了。

        那你使用的数据集中label里的txt文件的内容,大概率是转出来的是只有对应类别索引和四个点坐标(也就是rectangle格式),只能做检测,不可做分割,会丢失segment信息。

        可使用以下代码进行转换数据集:

# 处理labelme多边形矩阵的标注  json转化txt,提取点
import json
import os


name2id = {'chip': 0}    #  修改你的类别并且赋与index


def decode_json(json_floder_path, txt_outer_path, json_name):
    txt_name = txt_outer_path + json_name[:-5] + '.txt'
    with open(txt_name, 'a') as f:
        json_path = os.path.join(json_floder_path, json_name)
        data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))
        img_w = data['imageWidth']
        img_h = data['imageHeight']
        isshape_type = data['shapes'][0]['shape_type']
        print(isshape_type)
        dw = 1. / (img_w)
        dh = 1. / (img_h)
        for i in data['shapes']:
            label_name = i['label']
            if (i['shape_type'] == 'polygon'):
                point = []
                for lk in range(len(i['points'])):
                    x = float(i['points'][lk][0])
                    y = float(i['points'][lk][1])
                    point_x = x * dw
                    point_y = y * dh
                    point.append(point_x)
                    point.append(point_y)
                f.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in point]) + '\n')
        f.close()


if __name__ == "__main__":
    json_floder_path = r'F:\Workprojects\front_corner_drop\train_data\json'  # 存放json的文件夹的绝对路径
    txt_outer_path = r'F:\Workprojects\front_corner_drop\labels\segment/'  # 存放txt的文件夹绝对路径
    json_names = os.listdir(json_floder_path)
    flagcount = 0
    for json_name in json_names:
        decode_json(json_floder_path, txt_outer_path, json_name)
        flagcount += 1

    print('-----------转化完毕------------')

要是做分类训练的话,自制数据集格式如图所示:

                                                

其中,train和val的里面只用放所有的训练集图片,error和normal是我当前需要的分类类别,其中放置对应的类别的图片,根据自身需求创建类别文件夹,放入对应图片即可。

接着修改yaml文件:

 将类别和类别数量和数据集路径修改好即可训练。

  • 14
    点赞
  • 166
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
要使用YOLOv8进行语义分割训练自己的数据集,你可以按照以下步骤进行操作: 1. 首先,按照YOLOv8教程系列中的指导,搭建好环境并准备好自己的数据集。 2. 修改参数配置文件,将任务设置为分割任务,即将task设置为"segment"。同时,将模型改为"yolov8n-seg.py",这是用于分割任务的预训练权重。 3. 在参数配置文件中,将"data"修改为你自己数据集所在文件夹的路径。这样YOLOv8就能够找到你的数据集并开始训练。 4. 下载YOLOv8的代码和相关文件,可以在Github上找到YOLOv8下载地址。 5. 根据教程中的指导,运行训练脚本,开始训练你的自定义数据集。根据需要,你可以进行预测和验证,并导出模型。 通过以上步骤,你就可以使用YOLOv8进行语义分割训练自己的数据集了。记得根据自己的具体情况进行相应的参数和路径的修改,以确保训练能够顺利进行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [YOLOv8检测分割分类训练自己数据集](https://blog.csdn.net/sadjhaksdas/article/details/128936644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值