YOLOv8---seg实例分割(制作数据集,训练模型,预测结果)

YOLOv8----seg实例分割(制作数据集,训练模型,预测结果)

内容如下:【需要软件及工具:pycharm、labelme、anaconda、云主机(跑训练)】


1.制作自己的数据集
2.在yolo的预训练模型的基础上再训练自己的模型
3.训练结束后,尝试预测图片的实体分割

1.制作数据集:
下载安装labelme:

$ conda create -n labelme python=3.8 #创建一个专门做数据集的虚拟环境
$ conda activate labelme #进入此虚拟环境
#下载并安装labelme以及依赖软件包
$ conda install pyqt
$ conda install pillow
$ pip install labelme
$ conda list #查看labelme有没有安装进去
$ labelme #直接在终端输入labelme即可进入labelme

在这里插入图片描述
在这里插入图片描述

可能遇到的问题:【CondaHTTPError: HTTP 000 CONNECTION FAILED for url】
解决方法:【修改国内源】
找到.condarc文件【一般位于C盘的user,主机用户的文件夹下】
替换成:

channels:
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
show_channel_urls: true
ssl_verify: false

安装好labelme之后,就可以开始制作数据集了:
在这里插入图片描述

【说明一下,创建矩形就是制作detect检测数据集,创建多边形就是制作segment实体分割数据集】
【制作好一幅图之后,点击保存,会在图片的同级目录下生成对应的JSON文件】

JSON文件生成之后,想要在YOLO中使用,得先转换成TXT模式:【代码如下】

1.detect数据集JSON转TXT

import json
import os
import pandas as pd
def convert(img_size, box):
    x1 = box[0]
    y1 = box[1]
    x2 = box[2]
    y2 = box[3]
    return (x1, y1, x2, y2)
def decode_json(json_floder_path, json_name,label):
    txt_name = r'' #转换后,TXT文件所在的文件夹目录
    + json_name[0:-5] + '.txt'
    txt_file = open(txt_name, 'w')
    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r'))
    img_w = data['imageWidth']
    img_h = data['imageHeight']
    for i in data['shapes']:
        if i['shape_type'] == 'rectangle':
            if (label['label'] != i['label']).all():
                new_label=pd.DataFrame(columns=['label'], data=[i['label']])
                label=label.append(new_label,ignore_index=True)
            try:
                x1 = float((i['points'][0][0])) / img_w
                y1 = float((i['points'][0][1])) / img_h
                x2 = float((i['points'][1][0])) / img_w
                y2 = float((i['points'][1][1])) / img_h
                n = label[label['label']==i['label']].index[0]
                bb = (x1, y1, x2, y2)
                bbox = convert((img_w, img_h), bb)
                txt_file.write(str(n) + " " + " ".join([str(a) for a in bbox]) + '\n')
            except IndexError:
                print(json_name[0:-5]+'的'+i['label']+"标签坐标缺失")
    return label
if __name__ == "__main__":
    json_floder_path = r''#JSON数据的文件夹
    json_names = os.listdir(json_floder_path)
    label= pd.DataFrame(columns = ['label'])
    for json_name in json_names:
        if json_name[-4:]=='json':
            print(json_name)
            label=decode_json(json_floder_path, json_name,label)

    label.to_csv('label.txt', sep='\t', index=True) 

2.segment数据集JSON转TXT

import json
import os
import glob
import os.path as osp


def labelme2yolov2Seg(jsonfilePath="", resultDirPath="", classList=["类别1","类别2"]):
    """
    此函数用来将labelme软件标注好的数据集转换为yolo实体分割中使用的数据集
    :param jsonfilePath: labelme标注好的*.json文件所在文件夹
    :param resultDirPath: 转换好后的*.txt保存文件夹
    :param classList: 数据集中的类别标签
    :return:
    """
    # 0.创建保存转换结果的文件夹
    if (not os.path.exists(resultDirPath)):
        os.mkdir(resultDirPath)

    # 1.获取目录下所有的labelme标注好的Json文件,存入列表中
    jsonfileList = glob.glob(osp.join(jsonfilePath, "*.json"))
    print(jsonfileList)  # 打印文件夹下的文件名称

    # 2.遍历json文件,进行转换
    for jsonfile in jsonfileList:
        # 3. 打开json文件
        with open(jsonfile, "r") as f:
            file_in = json.load(f)
            # 4. 读取文件中记录的所有标注目标
            shapes = file_in["shapes"]
            # 5. 使用图像名称创建一个txt文件,用来保存数据
            with open(resultDirPath + "\\" + jsonfile.split("\\")[-1].replace(".json", ".txt"), "w") as file_handle:
                # 6. 遍历shapes中的每个目标的轮廓
                for shape in shapes:
                    # 7.根据json中目标的类别标签,从classList中寻找类别的ID,然后写入txt文件中
                    file_handle.writelines(str(classList.index(shape["label"])) + " ")
                    # 8. 遍历shape轮廓中的每个点,每个点要进行图像尺寸的缩放,即x/width, y/height
                    for point in shape["points"]:
                        x = point[0] / file_in["imageWidth"]  # mask轮廓中一点的X坐标
                        y = point[1] / file_in["imageHeight"]  # mask轮廓中一点的Y坐标
                        file_handle.writelines(str(x) + " " + str(y) + " ")  # 写入mask轮廓点
                    # 9.每个物体一行数据,一个物体遍历完成后需要换行
                    file_handle.writelines("\n")
            # 10.所有物体都遍历完,需要关闭文件
            file_handle.close()
        # 10.所有物体都遍历完,需要关闭文件
        f.close()
if __name__ == "__main__":
    jsonfilePath = ""  # 要转换的json文件所在目录
    resultDirPath = ""  # 要生成的txt文件夹
    labelme2yolov2Seg(jsonfilePath=jsonfilePath, resultDirPath=resultDirPath, classList=["类别1","类别2"])  # 更改为自己的类别名

转换好之后,创建一个这样的文件夹:【解释如下】
在这里插入图片描述
【train:训练所用的数据(包含图片,和图片所标注的数据集文件)】
【val:训练的时候,验证所用的数据,同样包含图片和类别坐标txt数据】

然后训练代码如下:【代码中的文件解释,在下面文章中紧随】

from ultralytics import YOLO
model = YOLO('yolov8-seg.yaml').load('yolov8x-seg.pt')#改成自己所放的位置
model.train(data='./datasets/coco128-seg.yaml',epochs=50,imgsz=640)

yolov8-seg.yaml
在这里插入图片描述
yolov8x-seg.pt【yolo代码GitHub官网下载的实例分割的预训练模型,一般直接放到根目录即可】
在这里插入图片描述
coco128-seg.yaml【注意:calss写的时候,要和labelme中你标注的时候创建的label序号对应上】

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128-seg dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128-seg  ← downloads here (7 MB)


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:/yoloProject/ultralytics-registry/ultralytics/yolo/data-of-me  # dataset root dir
train: train/images  # train images (relative to 'path') 128 images
val: val/images  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
names:
  0: 类别1 #自己起名字
  1: 类别2  

OK,run完my_train.py后,就可以得到训练的结果:
在这里插入图片描述
然后,可以直接拿着weight文件夹下生成的两个模型进行预测【best,last顾名思义】
预测的时候,直接命令行、python脚本都可以:
1.命令行:yolo predict model=best.pt source=图片文件或所在文件夹
2.python代码:

from ultralytics import YOLO

# 读取模型,这里传入训练好的模型
model = YOLO('best.pt')

# 模型预测,save=True 的时候表示直接保存yolov8的预测结果
metrics = model.predict(['123.png'], save=True)
# 如果想自定义的处理预测结果可以这么操作,遍历每个预测结果分别的去处理
for m in metrics:
    # 获取每个boxes的结果
    box = m.boxes
    # 获取box的位置,
    xywh = box.xywh
    # 获取预测的类别
    cls = box.cls

    print(box, xywh, cls)

预测结果:【控制台会输出存放路径】
在这里插入图片描述

补充:如果你想把框去掉,或者把label信息去掉不显示
找到yolo的cfg配置文件,找到prediction settings,然后想要啥,想去掉啥,随你
在这里插入图片描述
比如:
只要框:
在这里插入图片描述
只识别分割,别的啥都不要:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统下 安装 Nginx

一、下载Nginx安装包 压缩包下载地址:nginx: download 服务器有外网,可直接使用命令下载 wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 二、安装Nginx 1、解压 tar -zxvf nginx-1.24.0.tar.gz 2、安装Nginx所需依赖 yum install -y gc…

顶顶通呼叫中心中间件-asr录音路径修改(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-asr录音路径修改(mod_cti基于FreeSWITCH) 录音路径模板。如果不是绝对路径,会把这个路径追加到FreeSWITCH的recordings后面。支持变量,比如日期 ${strftime(%Y-%m-%d)}。最后一个录音文件路径会保存到变量 ${cti_asr_last_record_…

[职场] 项目实施工程师的工作前景 #笔记#经验分享

项目实施工程师的工作前景 项目实施工程师是负责将软件产品或解决方案实施到客户现场并确保项目成功落地的工作岗位。他们要负责整个项目的规划、组织、执行和控制,确保项目按照预定的进度、质量和预算完成。 一.工作内容 1. 项目规划:确定…

docker部署fastdfs

我的镜像包地址 链接:https://pan.baidu.com/s/1j5E5O1xdyQVfJhsOevXvYg?pwdhcav 提取码:hcav docker load -i gofast.tar.gz拉取gofast docker pull sjqzhang/go-fastdfs启动gofast docker run -d --name fastdfs -p 8080:8080 -v /opt/lijia/lijia…

耐酸碱腐蚀可溶性聚四氟乙烯(PFA)溶样罐

PFA溶样罐也叫PFA溶样瓶,可直接放在加热板上及油浴里加热,也可液氮下长期保存,使用温度-200—260℃。 根据不同实验的需求,PFA溶样罐有U型、V型、平底3种设计。V型底的设计,更加方便少量样品的集中收集。溶样罐广泛用…

Linux-桌面操作系统在服务器上未关闭休眠机制,使其开机半小时左右死机无法远程ssh连接

故障表述 操作系统:ubuntu desktop 18.04 异常描述:开机半小时左右死机 1、登录iBMC查看硬件无异常 2、登录ubuntu desktop 18.04操作系统,导出日志文件syslog、dmesg、lastlog(路径:/var/log),操作系统在11月8号~11月9号之间出现异常 经分析操作系统日志文件,操作系…

项目经理进入职场都会经历的三个阶段

对于项目经理而言,进入职场是一个不断学习和成长的过程。在这个过程中,项目经理通常会经历三个主要阶段,每个阶段都有其独特的特点和挑战。 一、基础建设与学习阶段 对于新入行的项目经理来说,最初的阶段主要是基础技能的积累和…

利用keepalived对zabbix-server做高可用,部署安装keepalived

有2台机器,每台都有1个zabbix-server,然后再每台上再装一个keepalived https://www.keepalived.org/download.html 1,创建安装路径 mkdir /usr/share/keepalived/2,在这个安装路径下面下载keepalived的软件包 我选的版本是1.3…

k8s-pod参数详解

目录 概述创建Pod编写一个简单的Pod添加常用参数为Pod的容器分配资源网络相关Pod健康检查启动探针存活探针就绪探针 作用整个Pod参数配置创建docker-registry 卷挂载 结束 概述 k8s中的pod参数详解。官方文档   版本 k8s 1.27.x 、busybox:stable-musl、nginx:stable-alpine3…

记忆++入门01

1.数字编码 2. 地点桩 1. 卧室 2.婴儿房 3.卫生间 4.次卧 5.书房 6.厨房 7.餐厅 8.客厅 9.阳台左 10.阳台右

ssh远程转发22端口,使用shell工具进行连接|使用服务器地址ssh连接本地ubuntu|端口映射

☆ 问题描述 我在内网主机中,使用docker创建了多个虚拟机,我希望能通过我的公网ip服务器端口进行shell访问 ★ 解决方案 我创建一个新的虚拟机为例 1. 创建并打开容器 docker run -itd --name test ubuntu2. 进入容器 docker exec -it test /bin/b…

先激活还是先插卡?流量卡的激活顺序你知道吗?

拿到流量卡后,先激活还是先插卡吗?你知道是流量卡的激活顺序吗? 在这里,小编提醒大家,拿到卡后先别着急着操作,一定要先看一遍激活流程。 以下为流量卡的激活方法: 如果你是快递激活的话&…

28、pxe自动装机

一、pxe 1.1、pxe自动装机 服务端和客户端 pxe c/s模式:允许客户端通过网络从远程服务器(服务端)下载引导镜像,加装安装文件,实现自动化安装操作系统。 无人值守:无人值守,就是安装选项不需…

将web项目打包成electron桌面端教程(一)vue3+vite+js

说明:后续项目需要web端和桌面端,为了提高开发效率,准备直接将web端的代码打包成桌面端,在此提前记录一下demo打包的过程,需要注意的是vue2或者vue3的打包方式各不同,如果你的项目不是vue3vitejs&#xff0…

MySQL进阶——索引使用规则

在上篇文章我们学习了MySQL进阶——索引,这篇文章学习MySQL进阶——索引使用规则。 索引使用规则 在使用索引时,需要遵守一些使用规则,否则索引会部分失效或全部失效。 最左前缀法则 最左前缀法则是查询从索引的最左列开始,并…

在 Windows 7 中安装 .NET Framework 时遇到错误:无法建立到信任根颁发机构的证书链

当全新安装 Windows 7 SP1 后,在未安装任何补丁,也未进行联网的状态下,安装 .NET Framework 4.6/4.7 或更高的版本时, 应该会遇到错误提示:无法建立到信任根颁发机构的证书链。 解决方法 1.下载证书 地址&#xff1…

电脑屏幕监控软件有哪些:5款好用的电脑屏幕监控软件(宝藏篇)

什么是电脑屏幕监控软件? 电脑屏幕监控软件是一种专业的应用软件,主要用于远程或本地监控局域网(LAN)内其他电脑的屏幕显示和操作活动。 这类软件通常由两部分组成:一个是安装在监控者电脑上的主控端(或称…

Serverless 使用OOS将http文件转存到对象存储

目录 背景介绍 系统运维管理OOS 文件转存场景 前提条件 实践步骤 附录 示例模板 背景介绍 系统运维管理OOS 系统运维管理OOS(CloudOps Orchestration Service)提供了一个高度灵活和强大的解决方案,通过精巧地编排阿里云提供的OpenAPI…

短视频评论截取提取软件技术思路

关于开发短视频评论所需要用到得技术第一篇 前言:根据业务需要,我们需要通过短视频找到准客户,这个软件应该是叫短视频评论提取软件,或者是短视频评论采集。无所谓叫什么都可以 进入正题。 第一篇只讲解所应该用到得基础工作 一…

通过龙讯旷腾PWmat发《The Journal of Chemical Physics》 :基于第一性原理分子动力学热力学积分的离子溶剂化自由能计算

背景导读 离子溶解是电化学中一个重要的过程。电化学反应中许多重要的参数,例如电化学还原电位、无限稀释活度系数、亨利定律溶解常数和离子溶解度等,都与离子的溶剂化能有关。然而,由于测量技术和数据处理的困难,离子溶剂化能的…