X-AnyLabeling 图像标注工具及模型自动标注;json2yolo格式转换、yolo训练数据集划分

本文介绍了使用X-AnyLabeling进行图像标注,包括下载与自定义模型加载,特别是利用yolov8模型进行自动标注,并将标注结果转换为yolo格式。此外,还讲述了json2yolo格式转换和训练数据集的划分过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、X-AnyLabeling 图像标注工具及模型自动标注

参考:https://github.com/CVHub520/X-AnyLabeling

1、下载

直接https://github.com/CVHub520/X-AnyLabeling/releases/tag/下载对应版本

在这里插入图片描述

软件打开:
在这里插入图片描述

2、自定义标注模型yaml构建

这里自定义模型自动标注加载预训练的yolov8 佩戴眼镜检测模型

yolov8 pt转onnx:

 yolo export model=/mn
<think>好的,我现在需要帮用户解决如何将X-AnyLabeling生成的JSON标注文件转换为YOLO格式的问题。首先,我得回想一下用户提供的引用内容,特别是引用2和3,里面提到X-AnyLabeling支持半自动标注和转换,以及如何将JSON转成YOLO的txt文件。 首先,用户的问题很明确,他们已经有了X-AnyLabeling生成的JSON文件,现在需要转成YOLO格式。根据引用3,软件本身可能已经生成了一些txt文件,但用户可能需要自己处理转换,或者可能他们需要手动转换?我需要先理解X-AnyLabeling的输出结构。 根据引用3中的信息,X-AnyLabeling标注后会在图片目录下创建一个labels文件夹,里面保存了YOLO格式的txt文件。所以可能用户的情况是,他们可能没有正确导出,或者需要自己处理JSON文件。或者,用户可能想在没有自动生成的情况下手动转换? 接下来,我需要考虑YOLO格式的具体要求。YOLO格式通常是将每个标注对象表示为一行,包含类别索引、中心点x和y的归一化坐标,以及宽度和高度,也是归一化的。这些坐标是相对于图片的宽度和高度的。 所以,转换的关键步骤应该是解析JSON文件中的每个标注对象的坐标,将其转换为归一化的值,并写入txt文件,每个图片对应一个txt文件,文件名与图片相同,存放在labels文件夹中。 用户提供的引用3中提到,转换后的txt文件保存在原始图片目录的labels文件夹里。所以可能需要用户将JSON文件中的信息提取出来,计算归一化后的坐标,并按照这个结构保存。 可能的步骤是: 1. 解析JSON文件,获取图片的尺寸(宽度和高度)。 2. 遍历每个标注对象,获取其边界框的坐标。 3. 将边界框的坐标转换为YOLO格式的归一化值。 4. 生成对应的txt文件,保存到指定目录。 同时,用户可能需要处理不同的类别,将类别名称映射为索引,比如0,1,2等,这需要有一个类别列表,并在转换时查找对应的索引。 此外,用户可能需要划分数据集,如训练集、验证集和测试集,这可能涉及到将图片和对应的txt文件移动到不同的目录中,如引用3提到的数据集划分。 可能的代码实现步骤: - 读取JSON文件,加载标注数据。 - 对于每个图像,提取其标注信息。 - 计算归一化后的中心点坐标和宽高。 - 写入txt文件,每行对应一个对象。 需要处理异常情况,比如图片不存在或者坐标超出范围等。此外,确保路径正确,生成的目录结构符合YOLO的要求,比如images和labels目录,每个下面有train、val等子目录。 用户可能遇到的问题包括如何确定类别索引,如何处理不同的形状标注(比如多边形转换为矩形框?不过X-AnyLabeling可能默认用矩形框标注),或者坐标的归一化计算是否正确。 根据引用2和3,X-AnyLabeling本身可能已经提供了转换工具,但用户可能需要手动处理,或者需要编写脚本来自动化这个过程。例如,引用3提到导入成功后自动生成txt文件,所以用户可能需要检查是否已经存在这些文件。如果用户需要自定义转换,或者处理特定的JSON结构,可能需要自己编写代码。 总结,回答用户的问题需要给出具体的步骤,包括解析JSON,计算归一化坐标,生成txt文件,处理类别映射,并可能需要代码示例。同时,引用相关的引用内容,特别是引用3提到的转换过程和目录结构。</think>### 如何将 X-AnyLabelingJSON 标注文件转换为 YOLO 数据集格式? 以下是具体步骤和代码实现: --- #### **1. 理解文件格式差异** - **X-AnyLabelingJSON 格式**:存储标注的坐标(绝对像素值)、类别名称、图片尺寸等信息。 - **YOLO 格式**:每张图片对应一个 `.txt` 文件,每行表示一个对象的标注,格式为: $$ \text{类别索引} \quad x_{\text{中心}} \quad y_{\text{中心}} \quad \text{宽度} \quad \text{高度} $$ 其中坐标和尺寸需归一化到 `[0,1]`(相对于图片宽度和高度)[^3]。 --- #### **2. 转换步骤** 1. **解析 JSON 文件** 提取图片路径、尺寸、标注框的绝对坐标和类别名称。 2. **计算归一化坐标** 将绝对坐标转换为 YOLO 格式的相对坐标。 3. **生成 YOLO 标注文件** 按图片名称创建对应的 `.txt` 文件,保存归一化后的标注信息。 4. **划分数据集** 将图片和标注文件按比例分配到 `train`、`val`、`test` 文件夹中。 --- #### **3. Python 代码示例** ```python import json import os from pathlib import Path import shutil def json2yolo(json_path, output_dir, class_list): # 读取JSON文件 with open(json_path, 'r') as f: data = json.load(f) # 创建输出目录 Path(output_dir).mkdir(parents=True, exist_ok=True) # 遍历所有标注数据 for image_info in data['images']: image_name = image_info['file_name'] image_width = image_info['width'] image_height = image_info['height'] # 生成对应的YOLO标注文件路径 txt_path = os.path.join(output_dir, Path(image_name).stem + '.txt') with open(txt_path, 'w') as f_txt: for ann in image_info['annotations']: # 获取类别索引 class_name = ann['label'] class_id = class_list.index(class_name) # 提取边界框坐标(假设为矩形框) x_min, y_min, x_max, y_max = ann['bbox'] # 计算归一化后的中心点和宽高 x_center = (x_min + x_max) / 2 / image_width y_center = (y_min + y_max) / 2 / image_height width = (x_max - x_min) / image_width height = (y_max - y_min) / image_height # 写入YOLO格式 f_txt.write(f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n") # 示例调用 class_list = ["cat", "dog"] # 替换为实际类别列表 json_path = "path/to/annotations.json" output_dir = "labels" json2yolo(json_path, output_dir, class_list) ``` --- #### **4. 数据集目录结构** 最终目录应满足 YOLO 训练要求: ``` ├── images │ ├── train │ ├── val │ └── test └── labels ├── train ├── val └── test ``` 使用 `shutil` 库将图片和标注文件按比例分配到对应文件夹。 --- #### **注意事项** - 确保 JSON 文件中 `bbox` 字段为 `[x_min, y_min, x_max, y_max]` 格式。 -标注为多边形或其他形状,需先转换为矩形边界框。 - 数据集划分比例建议为 `train:val:test = 7:2:1`[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loong_XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值