当前位置: 首页 > article >正文

yolov8自定义实例分割

1.yolo实例分割数据集格式与标注 标注工具labelImg使用方法-CSDN博客(没有多边形的绘制方式)下载github.com  windows直接下载exe.

下载好后与之前的操作都一样,由于labelmg生成的是json文件需要重新写一个脚本生成txt文件,之后和之前一样

之前文章

数据集构建与训练前准备-CSDN博客

模型推理测试与导出-CSDN博客

注意的是实例分割模型训练要用

yolo task=segment mode=train model=yolov8s-seg.pt epochs=5 batch=1
data=co2_dataset.yaml

转化脚本

import json
import os

def json2txt():
    json_dir = "C:/yolov8study/cs"
    train_label_dir = "C:/yolov8study/cs/1"
    valid_label_dir = "C:/yolov8study/cs/2"

    # 确保标签目录存在
    if not os.path.exists(train_label_dir):
        os.makedirs(train_label_dir)
    if not os.path.exists(valid_label_dir):
        os.makedirs(valid_label_dir)

    files = os.listdir(json_dir)
    for json_file in files:
        if not json_file.endswith(".json"):
            print(f"跳过非 JSON 文件: {json_file}")
            continue
        json_path = os.path.join(json_dir, json_file)
        print(f"正在处理 JSON 文件: {json_file}")
        with open(json_path, 'r') as f:
            data = json.load(f)

        # 直接从 JSON 数据中获取图像宽高信息
        img_width = data.get("imageWidth")
        img_height = data.get("imageHeight")
        img_name = data.get("imagePath")

        if img_name and img_width and img_height:
            # 生成对应的 TXT 文件路径
            if img_name.endswith("bmp"):
                img_name = img_name.replace("bmp", "jpg")
            if img_name.endswith("png"):
                img_name = img_name.replace("png", "jpg")

            # 判断 json_dir 路径中是否包含 "valid" 或 "train"
            if "valid" in json_dir.lower():
                current_label_dir = valid_label_dir
            elif "train" in json_dir.lower():
                current_label_dir = train_label_dir
            else:
                print(f"无法确定标签目录,默认使用训练集目录。JSON 文件: {json_file}")
                current_label_dir = train_label_dir

            data_label_text_f = os.path.join(current_label_dir, img_name.replace(".jpg", ".txt"))
            shapes = data.get("shapes", [])
            if not shapes:
                print(f"JSON 文件 {json_file} 中的 shapes 列表为空,生成的 TXT 文件将为空。")
            with open(data_label_text_f, 'w') as file_write_obj:
                # 类别索引固定为 0(只有 cs 标签),仅输出一次
                clazz_index = 0
                file_write_obj.write(f"{clazz_index}")

                # 遍历所有目标对象
                for shape in shapes:
                    points = shape.get("points", [])
                    # 遍历 points 数组中的每个点
                    for point in points:
                        x = float(point[0])
                        y = float(point[1])

                        # 转换为 YOLO 格式(仅保留中心点坐标)
                        cx = x / img_width
                        cy = y / img_height

                        # 写入 TXT 文件,不换行
                        file_write_obj.write(f" {cx:.6f} {cy:.6f}")

                # 最后添加换行符
                file_write_obj.write("\n")

            print(f"已处理图像: {img_name},生成标签文件: {data_label_text_f}")
        else:
            print(f"JSON 文件 {json_file} 缺少必要的图像信息,跳过处理。")

if __name__ == "__main__":
    json2txt()


http://www.kler.cn/a/581455.html

相关文章:

  • 清华大学出品《DeepSeek从入门到精通》超详细使用手册pdf
  • React学习笔记14
  • 从零构建 KNN 分类: sklearn 与自定义实现对比
  • JMeter使用BeanShell断言
  • 训练大模型LLM选择哪种开发语言最好
  • 前端开发中的设计模式:策略模式的应用与实践
  • C#的判断语句总结
  • Ubuntu开荒
  • llvm数据流分析
  • 【1688】崖山集群YAC安装备忘
  • 【软件设计】23 种设计模式解析与实践指南
  • bash---括号之间的区别
  • 『PostgreSQL』PGSQL备份与还原实操指南
  • kubernetes——part3-5 核心概念 Service
  • 《基于深度学习的图像修复技术研究与应用-图像修复》—3000字论文模板
  • golang从入门到做牛马:第十五篇-Go语言切片(Slice):动态数组的“魔法”
  • 【编程题】7-6 列出连通集
  • 电力行业能源管理系统(Energy Management System, EMS)的技术实现方案
  • gitlab add an ssh key 多个ssh配置
  • 晋升系列4:学习方法