在计算机视觉和机器学习项目中,数据标注是模型训练的基础环节。Label Studio作为一款开源的通用数据标注工具,因其灵活性和跨平台特性被广泛使用;而Roboflow则是专注于计算机视觉的数据集管理和预处理平台。将Label Studio中标注好的数据集迁移到Roboflow,能够充分利用后者强大的数据增强、版本控制和自动化工作流功能。
这个转换过程看似简单,但实际上涉及格式兼容性、标注映射关系、图像处理等多个技术环节。我在最近三个计算机视觉项目中都遇到了这类需求,总结出一套稳定可靠的迁移方法,特别适合处理包含复杂多边形标注(如分割任务)的情况。
Label Studio默认导出JSON格式的标注文件,其结构包含:
json复制{
"data": {"image": "/data/upload/image1.jpg"},
"annotations": [{
"result": [{
"type": "polygon",
"value": {
"points": [[x1,y1],[x2,y2],...],
"labels": ["cat"]
}
}]
}]
}
而Roboflow支持的标准格式包括:
需要特别注意:
当标注包含非矩形框(如多边形、折线)时,COCO格式是最佳选择,因其原生支持segmentation字段
推荐使用我改进过的转换脚本:
bash复制pip install label-studio-converter roboflow
关键依赖版本要求:
python复制from label_studio_converter import Converter
converter = Converter(
config='project.xml', # Label Studio的配置文件
label_config='<View><Image name="image"/></View>'
)
converter.convert_to_coco(
input_file='export.json',
output_file='coco_annotations.json',
image_root='/path/to/images'
)
python复制from roboflow import Roboflow
rf = Roboflow(api_key="YOUR_KEY")
project = rf.workspace().project("project-name")
project.upload(
dataset_path="coco_annotations.json",
dataset_format="coco"
)
python复制# 在convert_to_coco前添加
label_mapping = {
"cat": "animal",
"dog": "animal" # 合并相似类别
}
bash复制split -l 500 coco_annotations.json chunk_
for file in chunk_*; do
curl -X POST -F "file=@$file" "https://api.roboflow.com/upload..."
done
Label Studio使用相对坐标(0-100%),而Roboflow需要绝对坐标。转换公式:
code复制abs_x = (rel_x / 100) * image_width
abs_y = (rel_y / 100) * image_height
当单个图像有多个标注任务时,建议先合并:
python复制import json
with open('export.json') as f:
data = json.load(f)
merged = {}
for item in data:
img_id = item['data']['image']
if img_id not in merged:
merged[img_id] = []
merged[img_id].extend(item['annotations'])
使用Roboflow的校验工具:
python复制project.validate(
annotation_file='coco_annotations.json',
check_images=True # 自动验证图像可访问性
)
批量处理模式:对于超过1000张的数据集,建议:
网络传输优化:
python复制project.upload(...,
compression_quality=80, # 适当降低图像质量
chunk_size=1024*1024*10 # 10MB分块
)
python复制import pickle
with open('cache.pkl', 'wb') as f:
pickle.dump(converter.state, f)
在实际项目中,这套方法成功处理了我们包含35,000张医疗影像的数据集迁移,其中包含复杂的病灶区域多边形标注。关键是要在转换前仔细检查Label Studio的标签配置,确保所有类别在Roboflow中都有对应定义。对于特别大的数据集,建议先在10%的子集上测试完整流程。