
转换labelme格式数据为标准COCO数据集格式的方式
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
labelme是一种广泛使用的工具,用于创建图像标注的数据集。其输出遵循特定的JSON格式,在该任务中被标准化为结构化数据形式。该系统版本为3.11.2,支持将Label Me格式的数据转换为COCO数据集格式。
该图像标注工具展现出显著的性能,其生成的标注信息以JSON格式存储于本地计算机中。值得注意的是,许多深度学习模型和算法更倾向于采用COCO(Common Objects in Context)数据集格式。该数据集格式提供了多样化的标注类型,包括具体对象实例、关键点位置以及图像描述等内容。在实际应用中,若要利用LabelMe生成的标注信息进行训练或推理,则需将其转换为与主流深度学习框架兼容的数据表示方式。LabelMe JSON数据格式包括以下核心要素:
**Version Number**: 标注工具的版本号。
**Flags**: 较少使用,通常为空。
**Shapes**: 存储所有物体的列表。每个物体具有特定属性:
- **label**: 物体类型。
- **line_color** 和 **fill_color**: 分别表示线条和填充颜色,可为空。
- **points**: 多边形顶点坐标,用于定义边界形状。
- **shape_type**: 通常为“polygon”,表示多边形形状。
该数据集采用的格式则由下述关键组成部分构成:
**图像信息**: 涵盖所有图像的数据要素, 包括尺寸、ID码和文件名等关键参数。
**类别定义**: 完整列举了各类别及其属性, 包含类别ID、名称以及上级分类等多个维度。
**标注细节**: 每个注记包含以下详细信息:
- **边界框/多边形坐标**: 对象的范围定位。
- **群体标志**: 1表示群聚物,0则为独立个体。
- **图像关联**: 明确对应于特定图像的ID码。
- **边界框坐标**: 包括x、y起始点及宽度和高度参数。
- **面积计算**: 基于边界的几何形状得出大小值。
- **类别归属**: 标识所属分类系统的类编号。
- **唯一标识符**: 每个注记的独立编码信息。
在转换过程中,首先需要读取LabelMe提供的JSON文件内容。通过解析这些数据中的形状信息,可以为COCO格式准备好必要的图像描述、类别标签以及注释信息。Python代码示例如下:```python
import argparse
import json
import os
def labelme_to_coco(labelme_json_path, output_coco_path):
with open(labelme_json_path, r) as f:
labelme_data = json.load(f)
images = []
annotations = []
categories = []
for shape in labelme_data[shapes]:
label = shape[label]
points = shape[points]
if label not in categories:
categories.append({
id: len(categories) + 1, # 类别ID从1开始
name: label,
supercategory: none # 可以根据需求设置超类别
})
# 创建图像信息
image_id = len(images) + 1
image_info = {
id: image_id,
width: labelme_data[imageSize][width],
height: labelme_data[imageSize][height],
file_name: os.path.basename(labelme_data[imagePath])
}
images.append(image_info)
# 创建注释信息
polygon = np.array(points).reshape(-1, 2)
segmentation = [list(polygon.flatten())]
annotation = {
id: len(annotations) + 1,
image_id: image_id,
category_id: categories.index(label) + 1,
iscrowd: 0,
segmentation: segmentation,
area: (polygon[:, 0] * polygon[:, 1]).sum(),
bbox: list(np.min(polygon, axis=0)[:2]) + list(np.ptp(polygon, axis=0)[::-1])
}
annotations.append(annotation)
coco_format_data = {
images: images,
annotations: annotations,
categories: categories
}
with open(output_coco_path, w) as f:
json.dump(coco_format_data, f, cls=MyEncoder)
if __name__ == __main__:
parser = argparse.ArgumentParser()
parser.add_argument(labelme_json, type=str, help=Path to LabelMe JSON file.)
parser.add_argument(output_coco, type=str, help=Path to save COCO formatted JSON.)
args = parser.parse_args()
labelme_to_coco(args.labelme_json, args.output_coco)
```
该段代码最先打开了名为LabelMe的JSON文件,在其内部系统中遍历存储的各种形状数据,并构建了一个适用于COCO格式的数据结构,其中包括图像列表、类别标识符以及注释信息。随后该代码将收集到的这些数据整理后,以符合COCO规范的形式写入一个新的JSON文件中。该转换流程保证了LabelMe图像及其注释数据在COCO API下实现准确解析,从而允许我们建立并训练遵循COCO数据规范的目标检测与分割模型,例如Mask R-CNN或YOLO系列算法。通过这种方式,用户能够便捷地将自建注释数据集融入至深度学习框架中。
全部评论 (0)


