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

news2024/11/15 13:37:41

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

我下载的是最新版本8.2.76

接着下载权重

下载源码后解压

二、配置虚拟环境

创建虚拟环境

conda create -n yolov8 python==3.9

激活环境

conda activate yolov8

下载pytorch,官网地址:PyTorch

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

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

虚拟环境中装ultralytics

pip install ultralytics

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

 yolo predict model=yu/detection/yolov8n.pt source='ultralytics/assets/bus.jpg'

也可预测实例分割功能

yolo predict model=yu/segmentation/yolov8n-seg.pt source='ultralytics/assets/bus.jpg' 

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

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

json2txt代码

# -*- 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当作预训练模型

 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下用正斜杠/,而不是反斜杠\

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

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。

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

 yolo segment predict model=runs/segment/train3/weights/best.pt source=datasets/segment/1first_0812/images  save_txt

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——关于栈

1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则 比如:羽毛球桶,弹夹等等 压…

【C++面经】

1 2 因为ptr还记录了对象的个数,通过中括号标识,就知道药一一调用数组的每个对象的析构函数 3 4 5 6

【C语言】二叉树链式结构的实现,详解

0.前言 二叉树的基本操作的实现基本离不开一个思想——分治算法。 分治算法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这样&#xff0…

mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、mycat读写分离实现

一、mysql主从复制及同步 1、mysql主从自动开机同步 2、配置mysql5.7版本 mysql-5.7.44-linux-glibc2.12-x86_64.tar 启动服务、登录 对数据库进行基本操作 3、使用python操纵mysql数据库 4、编辑python脚本自动化操纵mysql数据库 二、mycat读写分离实现 1.上传jdk和mycat安装包…

项目简介:pyiqa-sal | 图像质量评价代码库

项目地址:https://github.com/Alexkkir/pyiqa-sal/tree/main 这是一个纯python和pytorch编写的图像质量评估工具箱,提供了许多主流全参考(FR)和无参考(NR)指标的重新实现(如果有的话&#xff0…

MES系统从哪几方面提升企业制造水平?

在当今这个快速变化的制造环境中,企业对于提升制造水平的追求从未停止。制造执行系统(MES)作为连接企业战略规划与车间实际操作的核心工具,其重要性日益凸显。盘古信息MES系统,凭借其独特的功能模块和创新的设计理念&a…

数据库-DDL语言-数据定义语言

DDL语言-数据定义语言 对数据库对象进行操作的语言, 涉及到的关键字CREATE,ALTER,DROP 对数据库的操作 新建一个数据库 语法 CREATE DATABASE 数据库名 [charset字符集]例 新建一个数据库:mydb CREATE DATABASE mydb;注:SQL语句不区分大小写,但是好的书写习惯…

【考研数学】题目类型:出现两次积分限,但实际上是一次积分。

考研中,有一类题目是出现了两次积分限(尤其是人为对题目进行变换、化简时),但解题方法不是利用二重积分方法,而是一次积分。常用凑微分、分部积分法。 以武忠祥老师严选题的两道题目为例: 这两道题就是“披…

模拟实现字符串相关函数(第二十七天)

!!assert---断言在函数中非常有用,能明确的指出哪里出了错误,然后后续自己方便进行更改 const不能通过直接赋值来改变,但是!!但是可以通过改地址的方式来改值!!这时只需要…

如何进军海外短剧市场?从了解海外短剧CPS开始

随着国内土味短剧在各大短视频平台爆火,从初期的蓝海红利到现在的如日中天,其中不乏有人将眼光瞄准了海外市场,预计将在未来几年打造出短剧出海的百亿市场,早期入局海外市场相当于小白一样,而现在和你们分享如何跻身海…

OpenCV图像滤波(15)梯度计算函数Scharr()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数使用 Scharr 运算符计算图像的第一个 x- 或 y- 空间导数。 调用 Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType) \texttt{Sc…

数据库(六):事务和索引

一、事务 (一)概念 1、事务是一组操作集合,它是一个不可分割的工作单位,事物会把所有操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失效。 2、默认MySQL的事务是自动…

用关系图和示例解释异步/等待

**解释在各种场景中使用等待时的程序执行流**本文原文 前言 这个文档解释了 Async/Await 是如何工作的。这可能是一个令人困惑的话题。我们将从一些简单的基本概念开始,然后慢慢地向更高级的概念发展。希望这些可视化图表能够帮助那些学习者。 下面的讨论主要是从…

从Retrofit支持suspend协程请求说开去

在现代Android开发中,异步请求已经成为不可或缺的一部分。传统的异步请求往往涉及大量的回调逻辑,使代码难以维护和调试。随着Kotlin协程的引入,异步编程得到了极大的简化。而作为最流行的网络请求库之一,Retrofit早在Kotlin协程的…

【JavaEE】深入探索SpringBoot的日志管理功能与实践应用

目录 SpringBoot 日志日志概述日志使用打印日志在程序中得到⽇志对象使用日志对象打印日志 ⽇志框架介绍(了解)⻔⾯模式(外观模式)SLF4J 框架介绍日志格式的说明⽇志级别日志级别的分类日志级别的使用 ⽇志配置配置⽇志级别⽇志持久化配置⽇志⽂件分割配置⽇志格式 更简单的⽇志…

IBMS管理平台,推动建筑行业向智能化发展

智能建筑管理系统是一套集成了多种技术和功能的综合性管理平台,旨在提高建筑设施的运行效率、减少能源消耗、改善室内环境质量,并为建筑管理者提供全面的监控、控制和分析手段。IBMS管理平台的特点和优势如下: IBMS系统融合了建筑自动化、能源…

2024 国内自闭症学校排名榜:突破边界,创造无限可能

在 2024 年,当家长们面对国内自闭症学校的排名榜时,心中或许充满了期待与困惑。然而,这些排名榜虽然能提供一定的参考,但绝不能成为选择学校的唯一依据。家长们更需要深入了解每所学校的真实情况,通过线下考察&#xf…

网络协议栈应用层的意义(内含思维导图和解析图通俗易懂超易理解)

绪论​: “节省时间的方法就是全力以赴的将所要做的事情完美快速的做完,不留返工重新学习的时间,才能省下时间给其他你认为重要的东西。” 本章主要讲到OSI网络协议栈中的应用层的作用和再次在应用层的角度理解协议的具体意义,以及…

#Datawhale AI夏令营第4期#多模态大模型Task3

写在前面的碎碎念》 为时一个礼拜的学习,即将结束了。回顾这一个礼拜,因此这次的任务较难,大部分的时间都花在跑模型上了,跑一次一天就没了,所以基本没有很好的去尝试优化上分,一个礼拜,差不多…

微商城系统 goods.php SQL注入漏洞复现

0x01 产品简介 微商城系统,又称微信商城系统,是基于微信等社交平台构建的一种小型电子商务系统。该系统融合了社交媒体的互动性和网络商城的交易功能,为商家提供了一个集商品展示、在线交易、营销推广、用户管理、数据分析等功能于一体的综合性电商平台。系统充分利用了微信…