Shortcuts

Label Studio 标注工具转COCO脚本

Label Studio 是一款广受欢迎的深度学习标注工具,可以对多种任务进行标注,然而对于关键点标注,Label Studio 无法直接导出成 MMPose 所需要的 COCO 格式。本文将介绍如何使用Label Studio 标注关键点数据,并利用 labelstudio2coco.py 工具将其转换为训练所需的格式。

Label Studio 标注要求

根据 COCO 格式的要求,每个标注的实例中都需要包含关键点、分割和 bbox 的信息,然而 Label Studio 在标注时会将这些信息分散在不同的实例中,因此需要按一定规则进行标注,才能正常使用后续的脚本。

  1. 标签接口设置

对于一个新建的 Label Studio 项目,首先要设置它的标签接口。这里需要有三种类型的标注:KeyPointLabelsPolygonLabelsRectangleLabels,分别对应 COCO 格式中的keypointssegmentationbbox。以下是一个标签接口的示例,可以在项目的Settings中找到Labeling Interface,点击Code,粘贴使用该示例。

<View>
  <KeyPointLabels name="kp-1" toName="img-1">
      <Label value="person" background="#D4380D"/>
  </KeyPointLabels>
  <PolygonLabels name="polygonlabel" toName="img-1">
      <Label value="person" background="#0DA39E"/>
  </PolygonLabels>
  <RectangleLabels name="label" toName="img-1">
      <Label value="person" background="#DDA0EE"/>
  </RectangleLabels>
  <Image name="img-1" value="$img"/>
</View>
  1. 标注顺序

由于需要将多个标注实例中的不同类型标注组合到一个实例中,因此采取了按特定顺序标注的方式,以此来判断各标注是否位于同一个实例。标注时须按照 KeyPointLabels -> PolygonLabels/RectangleLabels 的顺序标注,其中 KeyPointLabels 的顺序和数量要与 MMPose 配置文件中的dataset_info的关键点顺序和数量一致, PolygonLabels 和 RectangleLabels 的标注顺序可以互换,且可以只标注其中一个,只要保证一个实例的标注中,以关键点开始,以非关键点结束即可。下图为标注的示例:

注:bbox 和 area 会根据靠后的 PolygonLabels/RectangleLabels 来计算,如若先标 PolygonLabels,那么bbox会是靠后的 RectangleLabels 的范围,面积为矩形的面积,反之则是多边形外接矩形和多边形的面积

image

  1. 导出标注

上述标注完成后,需要将标注进行导出。选择项目界面的Export按钮,选择JSON格式,再点击Export即可下载包含标签的 JSON 格式文件。

注:上述文件中仅仅包含标签,不包含原始图片,因此需要额外提供标注对应的图片。由于 Label Studio 会对过长的文件名进行截断,因此不建议直接使用上传的文件,而是使用Export功能中的导出 COCO 格式工具,使用压缩包内的图片文件夹。

image

转换工具脚本的使用

转换工具脚本位于tools/dataset_converters/labelstudio2coco.py,使用方式如下:

python tools/dataset_converters/labelstudio2coco.py config.xml project-1-at-2023-05-13-09-22-91b53efa.json output/result.json

其中config.xml的内容为标签接口设置中提到的Labeling Interface中的Codeproject-1-at-2023-05-13-09-22-91b53efa.json即为导出标注时导出的 Label Studio 格式的 JSON 文件,output/result.json为转换后得到的 COCO 格式的 JSON 文件路径,若路径不存在,该脚本会自动创建路径。

随后,将图片的文件夹放置在输出目录下,即可完成 COCO 数据集的转换。目录结构示例如下:

.
├── images
│   ├── 38b480f2.jpg
│   └── aeb26f04.jpg
└── result.json

若想在 MMPose 中使用该数据集,可以进行类似如下的修改:

dataset=dict(
    type=dataset_type,
    data_root=data_root,
    data_mode=data_mode,
    ann_file='result.json',
    data_prefix=dict(img='images/'),
    pipeline=train_pipeline,
)
Read the Docs v: latest
Versions
latest
0.x
dev-1.x
Downloads
epub
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.