Labelme批量导出:如何同时生成VOC与COCO两种格式

Labelme批量导出:如何同时生成VOC与COCO两种格式

【免费下载链接】labelme Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 【免费下载链接】labelme 项目地址: https://gitcode.com/gh_mirrors/la/labelme

你是否还在为数据集格式转换而烦恼?标注完成后需要手动转换VOC和COCO格式?本文将一步一步教你如何使用Labelme的批量导出功能,轻松搞定两种格式的自动转换,让你专注于标注本身而非格式处理。读完本文你将学会:VOC与COCO格式的批量导出方法、自定义标签配置、转换结果验证以及常见问题解决。

准备工作

在开始批量导出前,请确保你已经完成以下准备:

  1. 安装Labelme:确保从仓库 https://link.gitcode.com/i/ddea669e82ce999da2460c1a049fda61 克隆项目并完成安装
  2. 标注文件:准备好已标注的JSON文件,存放在同一目录下
  3. 标签配置:创建标签文件,如 examples/instance_segmentation/labels.txt

Labelme提供了完整的转换工具链,主要转换脚本位于实例分割示例目录中:

VOC格式批量导出

VOC(Visual Object Classes)格式是计算机视觉领域常用的数据集格式,特别适用于目标检测和语义分割任务。Labelme提供了专门的转换脚本实现批量导出。

基本转换命令

在终端中执行以下命令,将标注数据转换为VOC格式:

python examples/instance_segmentation/labelme2voc.py \
    data_annotated/ \
    data_dataset_voc/ \
    --labels labels.txt

其中参数说明:

  • data_annotated/:存放标注JSON文件和原图的目录
  • data_dataset_voc/:输出VOC格式数据集的目录
  • --labels labels.txt:标签定义文件路径

转换过程解析

examples/instance_segmentation/labelme2voc.py 脚本会自动创建标准VOC目录结构:

data_dataset_voc/
├── JPEGImages/         # 原始图片
├── SegmentationClass/  # 类别分割掩码
├── SegmentationClassNpy/ # 类别掩码的Numpy数组
├── SegmentationClassVisualization/ # 类别掩码可视化结果
├── SegmentationObject/ # 实例分割掩码
└── class_names.txt     # 类别名称文件

转换完成后,你可以在可视化目录中查看转换效果,例如: VOC格式分割结果

COCO格式批量导出

COCO(Common Objects in Context)格式是另一种广泛使用的数据集格式,特别适用于实例分割任务。Labelme同样提供了高效的转换工具。

基本转换命令

在终端中执行以下命令,将标注数据转换为COCO格式:

python examples/instance_segmentation/labelme2coco.py \
    data_annotated/ \
    data_dataset_coco/ \
    --labels labels.txt

参数与VOC转换类似,但输出目录结构有所不同。

转换过程解析

examples/instance_segmentation/labelme2coco.py 脚本生成的COCO格式目录结构如下:

data_dataset_coco/
├── JPEGImages/      # 原始图片
├── Visualization/   # 可视化结果
└── annotations.json # COCO格式标注文件

其中,annotations.json 是COCO格式的核心标注文件,包含了所有图像和标注的元数据。转换后的可视化效果可以在Visualization目录查看: COCO格式分割结果

同时生成两种格式的自动化方案

为了提高效率,我们可以创建一个简单的批处理脚本,实现一次运行同时生成VOC和COCO两种格式。

创建批处理脚本

在项目根目录创建 batch_export.sh 文件,内容如下:

#!/bin/bash

# 定义输入输出目录和标签文件
INPUT_DIR="data_annotated"
VOC_OUTPUT="data_dataset_voc"
COCO_OUTPUT="data_dataset_coco"
LABELS="labels.txt"

# 创建输出目录
mkdir -p $VOC_OUTPUT $COCO_OUTPUT

# 转换VOC格式
python examples/instance_segmentation/labelme2voc.py \
    $INPUT_DIR $VOC_OUTPUT --labels $LABELS

# 转换COCO格式
python examples/instance_segmentation/labelme2coco.py \
    $INPUT_DIR $COCO_OUTPUT --labels $LABELS

echo "转换完成!"
echo "VOC格式数据: $VOC_OUTPUT"
echo "COCO格式数据: $COCO_OUTPUT"

运行批处理脚本

给脚本添加执行权限并运行:

chmod +x batch_export.sh
./batch_export.sh

这个脚本会依次执行VOC和COCO格式的转换,省去了手动运行两次命令的麻烦。

转换结果验证

转换完成后,我们需要验证输出结果是否正确,确保后续模型训练不会出现问题。

VOC格式验证

VOC格式转换后会生成多个目录,关键验证点包括:

  1. 图像完整性:检查 data_dataset_voc/JPEGImages/ 目录中的图片是否完整
  2. 类别文件:确认 data_dataset_voc/class_names.txt 内容与标签文件一致
  3. 掩码可视化:查看 SegmentationClassVisualization/ 目录中的结果,确保掩码与原图匹配

COCO格式验证

COCO格式验证主要关注标注文件的完整性:

  1. 标注文件结构:检查 data_dataset_coco/annotations.json 是否存在且格式正确
  2. 图像路径:确认标注文件中的图像路径是否正确指向 JPEGImages/ 目录
  3. 可视化结果:查看 Visualization/ 目录中的标注效果

高级配置选项

Labelme的转换脚本提供了多种高级选项,可以根据实际需求进行自定义配置。

VOC转换高级选项

examples/instance_segmentation/labelme2voc.py 支持的高级参数:

# 禁用对象分割掩码生成
--noobject

# 不生成Numpy格式掩码
--nonpy

# 禁用可视化结果生成
--noviz

例如,如果你只需要类别分割而不需要实例分割,可以使用 --noobject 参数:

python examples/instance_segmentation/labelme2voc.py \
    data_annotated/ data_dataset_voc/ \
    --labels labels.txt --noobject

COCO转换高级选项

examples/instance_segmentation/labelme2coco.py 支持的高级参数:

# 禁用可视化结果生成
--noviz

常见问题解决

在批量转换过程中,可能会遇到一些常见问题,以下是解决方案:

标签不匹配问题

症状:转换后掩码全为背景色或出现错误类别
解决:确保标注时使用的标签与 labels.txt 中定义的完全一致,包括大小写和空格

中文路径问题

症状:出现文件找不到错误或乱码
解决:确保所有目录和文件名不包含中文字符,避免编码问题

依赖缺失问题

症状:运行转换脚本时提示缺少pycocotools
解决:安装所需依赖:

pip install pycocotools imgviz

内存不足问题

症状:处理大量数据时程序崩溃
解决:分批次处理数据,或增加系统内存

总结与扩展应用

通过本文介绍的方法,你已经掌握了如何使用Labelme同时批量导出VOC和COCO两种格式的数据集。这将极大提高你的工作效率,让你能够专注于模型训练而非数据处理。

Labelme还提供了其他场景的转换工具:

这些工具的使用方法与本文介绍的类似,只需替换相应的脚本路径即可。希望本文能帮助你更高效地处理计算机视觉数据集!

【免费下载链接】labelme Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 【免费下载链接】labelme 项目地址: https://gitcode.com/gh_mirrors/la/labelme

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值