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()

相关推荐
受之以蒙12 分钟前
Rust ndarray 高性能计算:从元素操作到矩阵运算的优化实践
人工智能·笔记·rust
野生面壁者章北海18 分钟前
NeurIPS 2024|大语言模型高保真文本水印新范式
人工智能·语言模型·自然语言处理
KG_LLM图谱增强大模型20 分钟前
如何利用大语言模型(LLM)实现自动标注与内容增强
人工智能·知识管理·内容管理·本体论·图谱增强大模型·自动标签·大模型内容标注
数据与后端架构提升之路1 小时前
小鹏VLA 2.0的“神秘涌现”:从痛苦到突破,自动驾驶与机器人如何突然“开窍”?
人工智能·机器人·自动驾驶
fruge1 小时前
CANN核心特性深度解析:简化AI开发的技术优势
人工智能
沛沛老爹1 小时前
AI入门知识之RAFT方法:基于微调的RAG优化技术详解
人工智能·llm·sft·raft·rag
zskj_zhyl1 小时前
科技助老与智慧养老的国家级政策与地方实践探索
大数据·人工智能·科技
YangYang9YangYan1 小时前
职业本科发展路径与规划指南
大数据·人工智能·学习·数据分析
牛客企业服务2 小时前
2025年AI面试防作弊指南:技术笔试如何识别异常行为
人工智能·面试·职场和发展
shayudiandian2 小时前
CNN详解:卷积神经网络是如何识别图像的?
人工智能·深度学习·cnn