Labelme批量导出:如何同时生成VOC与COCO两种格式
你是否还在为数据集格式转换而烦恼?标注完成后需要手动转换VOC和COCO格式?本文将一步一步教你如何使用Labelme的批量导出功能,轻松搞定两种格式的自动转换,让你专注于标注本身而非格式处理。读完本文你将学会:VOC与COCO格式的批量导出方法、自定义标签配置、转换结果验证以及常见问题解决。
准备工作
在开始批量导出前,请确保你已经完成以下准备:
- 安装Labelme:确保从仓库 https://link.gitcode.com/i/ddea669e82ce999da2460c1a049fda61 克隆项目并完成安装
- 标注文件:准备好已标注的JSON文件,存放在同一目录下
- 标签配置:创建标签文件,如 examples/instance_segmentation/labels.txt
Labelme提供了完整的转换工具链,主要转换脚本位于实例分割示例目录中:
- VOC格式转换:examples/instance_segmentation/labelme2voc.py
- COCO格式转换:examples/instance_segmentation/labelme2coco.py
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 # 类别名称文件
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目录查看: 
同时生成两种格式的自动化方案
为了提高效率,我们可以创建一个简单的批处理脚本,实现一次运行同时生成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格式转换后会生成多个目录,关键验证点包括:
- 图像完整性:检查 data_dataset_voc/JPEGImages/ 目录中的图片是否完整
- 类别文件:确认 data_dataset_voc/class_names.txt 内容与标签文件一致
- 掩码可视化:查看 SegmentationClassVisualization/ 目录中的结果,确保掩码与原图匹配
COCO格式验证
COCO格式验证主要关注标注文件的完整性:
- 标注文件结构:检查 data_dataset_coco/annotations.json 是否存在且格式正确
- 图像路径:确认标注文件中的图像路径是否正确指向 JPEGImages/ 目录
- 可视化结果:查看 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还提供了其他场景的转换工具:
- 视频标注转换:examples/video_annotation/labelme2voc.py
- 语义分割转换:examples/semantic_segmentation/labelme2voc.py
- 目标检测转换:examples/bbox_detection/labelme2voc.py
这些工具的使用方法与本文介绍的类似,只需替换相应的脚本路径即可。希望本文能帮助你更高效地处理计算机视觉数据集!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




