复现YOLOv8语义分割训练自己的数据集

一、YOLOv8源码下载:https://github.com/ultralytics/ultralytics/tree/v8.2.76

我下载的是最新版本8.2.76

接着下载权重

下载源码后解压

二、配置虚拟环境

创建虚拟环境

python 复制代码
conda create -n yolov8 python==3.9

激活环境

python 复制代码
conda activate yolov8

下载pytorch,官网地址:PyTorch

出现以下内容就是已经装好了pytorch

用pycharm打开源代码工程文件,虚拟环境选择yolov8

虚拟环境中装ultralytics

python 复制代码
pip install ultralytics

进入项目路径下运行测试代码,cd ultralytics-8.2.76,然后预测目标检测

python 复制代码
 yolo predict model=yu/detection/yolov8n.pt source='ultralytics/assets/bus.jpg'

也可预测实例分割功能

python 复制代码
yolo predict model=yu/segmentation/yolov8n-seg.pt source='ultralytics/assets/bus.jpg' 

三、训练自己的数据集,segment数据集是用labelme标注的,所以是json格式的,但yolov8训练需要用txt后缀的数据集,所以需要将json格式转成txt格式

(1)labelme标注后的json格式文件

json2txt代码

python 复制代码
# -*- coding: utf-8 -*-
import json
import os
import argparse
from tqdm import tqdm


def convert_label_json(json_dir, save_dir, classes):
    json_paths = os.listdir(json_dir)
    classes = classes.split(',')

    for json_path in tqdm(json_paths):
        # for json_path in json_paths:
        path = os.path.join(json_dir, json_path)
        with open(path, 'r') as load_f:
            json_dict = json.load(load_f)
        h, w = json_dict['imageHeight'], json_dict['imageWidth']

        # save txt path
        txt_path = os.path.join(save_dir, json_path.replace('json', 'txt'))
        txt_file = open(txt_path, 'w')

        for shape_dict in json_dict['shapes']:
            label = shape_dict['label']
            label_index = classes.index(label)
            points = shape_dict['points']

            points_nor_list = []

            for point in points:
                points_nor_list.append(point[0] / w)
                points_nor_list.append(point[1] / h)

            points_nor_list = list(map(lambda x: str(x), points_nor_list))
            points_nor_str = ' '.join(points_nor_list)

            label_str = str(label_index) + ' ' + points_nor_str + '\n'
            txt_file.writelines(label_str)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='json convert to txt params')
    parser.add_argument('--json-dir', type=str,default='./json', help='json path dir')
    parser.add_argument('--save-dir', type=str,default='./txt' ,help='txt save dir')
    parser.add_argument('--classes', type=str, default='spring_water',help='classes')  
    args = parser.parse_args()
    json_dir = args.json_dir
    save_dir = args.save_dir
    classes = args.classes
    convert_label_json(json_dir, save_dir, classes)

改后的txt文件

(2)修改数据加载配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\datasets,选择coco128-seg.yaml

我图片较少,没分训练集验证集。

(3)修改模型配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\models\v8

选择yolov8-seg.yaml,修改nc为自己数据集所需检测类别的个数

至此,所有的配置已经完成。

四、训练自己的数据集

在Terminal下输入指令:yolo train data=你的配置文件(xx.yaml)的绝对路径 model=yolov8s.pt epochs=300 imgsz=640 batch=8 workers=0 device=0 这是用的yolov8s-seg.pt当作预训练模型

python 复制代码
 yolo segment train data=ultralytics\cfg\datasets\coco128-seg-0812.yaml model=yu\segmentation\yolov8s-seg.pt epochs=100 imgsz=640 batch=2 workers=0 device=0

linux下训练的指令: yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=yu/segmentation/yolov8s-seg.pt epochs=100 imgsz=640 batch=2 workers=0 device=0 注意Linux下用正斜杠/,而不是反斜杠\

也可用改好的模型配置文件训练

python 复制代码
yolo segment train data=ultralytics\cfg\datasets\coco128-seg-0812.yaml model=ultralytics\cfg\models\v8\yolov8-seg-0812.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

注意Linux下用正斜杠/,指令是yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=ultralytics/cfg/models/v8/yolov8-seg-0812.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

如果想使用多卡训练,device='\0,1,2,xxx\'

训练过程首先会显示你所使用的训练的硬件设备信息,然后下一段话则是你的参数配置,紧接着是backbone信息,最后是加载信息,并告知你训练的结果会保存在runs\segment\trainxx。

训练结束后可以测试自己的模型,把结果坐标也保存下来

python 复制代码
 yolo segment predict model=runs/segment/train3/weights/best.pt source=datasets/segment/1first_0812/images  save_txt

就可以在runs\segments\predict\看到测试的结果图和labels了。

相关推荐
weixin_156241575764 小时前
基于YOLOv8深度学习花卉识别系统摄像头实时图片文件夹多图片等另有其他的识别系统可二开
大数据·人工智能·python·深度学习·yolo
QQ676580084 小时前
AI赋能轨道交通智能巡检 轨道交通故障检测 轨道缺陷断裂检测 轨道裂纹识别 鱼尾板故障识别 轨道巡检缺陷数据集深度学习yolo第10303期
人工智能·深度学习·yolo·智能巡检·轨道交通故障检测·鱼尾板故障识别·轨道缺陷断裂检测
云程笔记4 小时前
002.计算机视觉与目标检测发展简史:从传统方法到深度学习
深度学习·yolo·目标检测·计算机视觉
weixin_156241575765 小时前
基于YOLO深度学习的动物检测与识别系统
人工智能·深度学习·yolo
赵药师8 小时前
YOLO中task.py改复杂的模块
python·深度学习·yolo
小高求学之路9 小时前
本地MP4视频文件转为视频流
yolo·计算机视觉
QQ6765800811 小时前
城市治理之河道污染识别 无人机河道污染巡检 塑料带识别 瓶子图像识别 深度学习垃圾识别第10384期
人工智能·深度学习·yolo·河道污染·无人机河道污染·瓶子图像·塑料袋识别
一勺汤12 小时前
双骨干并行,极简融合:一款高效双 Backbone 目标检测网络详解(单模态增强创新点,双模态检测)
yolo·多模态·双backbone·yolo双backbone·单模态·yolo26双backbone·yolo11双backbone
weixin_1562415757613 小时前
基于YOLO深度学习的运动品牌检测与识别系统
人工智能·深度学习·yolo·识别·模型、
爱喝雪碧的可乐14 小时前
[特殊字符] YOLO26 实战教程:从 0 到 1 完成自定义数据集训练全流程 | 附性能对比 + YOLOv5 迁移指南
yolo