【实例分割】Labelme数据集转换YOLO格式

YOLOv5的7代版本以及YOLOv8都开始支持了实例分割的操作,其效果十分优秀,但是在自己的数据集上进行训练其格式是YOLO自己的格式(如coco128-seg),而通常的自己标注的数据集为labelme的格式(图片+json),为了方便使用YOLO来进行实例分割,可以使用python脚本来进行转换

原始的Labelme格式的实例分割数据集通常如下组织,图片存放在images文件夹下,json中存放同名的标记数据。

在这里插入图片描述

我们在original_data文件夹下创建目录labels,同时将如下脚本放在和original_data一级的目录下并运行

在这里插入图片描述

import os
import json

def findAllFile(path):
    for root, ds, fs in os.walk(path):
        for f in fs:
            if f.endswith('.json'):
                yield f[:-5]

# 使用字典对于标签进行存储
label_dict=dict()
label_num = 0

base = "./original_data"

for name in findAllFile(base+"/json"):
    # 获取json数据
    with open(f"{base}/json/{name}.json", 'r') as jf:
        data = json.load(jf)
    height = data["imageHeight"]
    width = data["imageWidth"]

    s="" # 用来储藏txt中的内容
    for item in data["shapes"]: # 遍历数据集中每一个分割子类
        # 对于标签进行收集和处理
        if (label:=item["label"]) not in label_dict.keys():
            label_dict[label]=label_num
            label_num+=1

        s = s+str(label_dict[item["label"]])+" "

        points = item["points"]
        for point in points:
            s=s+str(point[0]/width)+" "
            s=s+str(point[1]/height)+" "
        s = s[:-1]+"\n"

    # 将数据集进行写入labels文件夹下
    with open(f"{base}/labels/{name}.txt", 'w') as tf:
        tf.write(s)

with open("./dataset.yaml","w") as f:
    f.write(f"path: {base}\n")
    f.write("train: images\n")
    f.write("val: images\n")
    f.write("test: \n\n")
    f.write("names:\n")
    for key,num in label_dict.items():
        f.write(f"  {num}:{key}\n")

运行之后得到如下的组织结构

在这里插入图片描述

其中images,labels和dataset.yaml组成了我们训练yolo实例分割模型所需要的数据集。(其中的json没用,可以直接进行删除)

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: Labelme数据集格式是指用于标注图像和语义分割的数据集格式。它包含用于标记图像中目标位置,类别和形状的元数据以及散布在不同目录中的图像本身。这个数据集格式是一个JSON(JavaScript Object Notation)文件,其中包含图像的基本信息如高度、宽度、通道数、文件名等等,还包含标注信息,如目标的类别、位置和形状。此外,Labelme还支持在图像中创建并编辑多边形、矩形、线条和点等的标注工具。 Labelme数据集格式的优点在于可以快速创建和编辑标注数据,同时也能够方便地转换成其他格式,如COCO等。此外,这种格式还支持多人标注,可以同时处理不同人员进行的标注。同时,可视化的图像标注操作也使得该数据集格式非常方便。 总体来说,Labelme数据集格式是充满灵活性和可扩展性的。它是目前用于图像标注和语义分割的主要格式之一,可以帮助开发者和研究人员更好地实现相关的工作。 ### 回答2: Labelme数据集是一个用于计算机视觉和机器学习的开源数据集,包含了许多图像和语义分割的标注。它提供了一种方便的方式来收集、标注和分享图像数据。 Labelme数据集的标注格式JSON(JavaScript Object Notation)文件,可以通过许多开源工具和库进行解析和处理。在每个JSON文件中,有一些重要的字段,如"version"表示标注版本号,"flags"表示标注标志,"shapes"表示标注形状等等。 在一个"shapes"字段下,通常会列出所有标注的形状信息。每个形状信息包含了一些关键信息,如形状的类型("rectangle", "polygon"等),形状的坐标组成("points"),形状的标注类别("label")等等。 Labelme数据集格式可扩展,用户可以根据需要自定义字段,例如添加属性来描述颜色、尺寸等属性,以满足不同的应用场景。总的来说,Labelme数据集是一个非常方便的数据集,特别适合用于语义分割、物体检测、图像分割等任务的训练和评估。 ### 回答3: Labelme数据集是一个广泛使用的图像标注数据集,其中包含大量的标注信息,可用于训练机器学习模型和深度学习模型。该数据集是由美国麻省理工学院的人工智能实验室开发的,目前被多个应用和研究领域广泛应用,如计算机视觉和自然语言处理等。 Labelme数据集格式主要包括图像文件和标注文件两部分,其中图像文件是一系列后缀名为JPG、PNG或BMP的图像文件,包含了需要标注的图像。而标注文件则是一个以JSON格式保存的文件,其中包含了图像中各个物体的坐标、类别等信息。通过这些标注文件,训练模型可以识别并分类图像中的不同物体和图案,实现目标物体识别和图像分割等功能。 在Labelme数据集的标注文件中,每个标注都标记有ID号、类别、位置和颜色等信息,其中,颜色信息用于区分不同的标注。在标注完成后,可使用Labelme软件进行可视化和编辑操作,以便更好地了解和呈现标注信息。 总之,Labelme数据集是一个标注丰富、格式简单、易于使用的图像标注数据集,可以帮助研究者更好地训练和测试图像分割和物体识别算法。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值