1. COCO JSON格式完全指南:从数据结构到实战应用
计算机视觉领域的数据标注格式多种多样,但COCO JSON无疑是其中最流行且功能最全面的格式之一。作为一名长期从事目标检测和图像分割项目的开发者,我几乎每天都要与这种数据结构打交道。COCO JSON不仅被广泛应用于学术研究(如ImageNet、COCO挑战赛),更是工业界实际项目中的首选标注格式。本文将彻底拆解这种格式的每个细节,并分享我在实际项目中的使用心得。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. COCO JSON核心数据结构解析
2.1 基础结构概览
一个完整的COCO JSON文件由五个核心部分组成,它们共同构成了计算机视觉任务的基础数据框架:
json复制{
"info": {},
"licenses": [],
"images": [],
"annotations": [],
"categories": []
}
这种结构设计体现了计算机视觉任务的数据需求特点。info和licenses提供元数据,images建立图像索引,annotations存储标注信息,categories定义分类体系。我在处理工业级项目时发现,这种分离存储的方式能有效支持多人协作标注和增量更新。
2.2 图像信息(images)详解
images数组中的每个元素代表数据集中的一张图像,包含以下关键字段:
json复制{
"id": 1,
"width": 640,
"height": 480,
"file_name": "000001.jpg",
"license": 1,
"flickr_url": "",
"coco_url": "",
"date_captured": "2023-01-01 00:00:00"
}
特别需要注意的是:
- id字段必须是唯一且连续的整数(从1开始)
- width/height应该与原始图像尺寸严格一致
- 实际项目中建议添加自定义字段如"source"标注数据来源
2.3 标注信息(annotations)深度解析
annotations是COCO JSON最复杂的部分,根据任务类型(检测/分割/关键点)有不同的结构:
2.3.1 目标检测标注
json复制{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [x,y,width,height],
"area": 1000,
"iscrowd": 0
}
bbox采用[x_top_left, y_top_left, width, height]格式,这是与Pascal VOC等格式的主要区别。area字段对评估指标计算至关重要,建议通过width*height自动计算而非手动填写。
2.3.2 实例分割标注
json复制{
"segmentation": [[x1,y1,x2,y2,...]],
"iscrowd": 0
}
单个对象的segmentation可以是:
- 多边形:单个闭合环[[x1,y1,x2,y2,...]]
- RLE格式:当iscrowd=1时使用
- 实际项目中,建议对同一对象存储多个不同精度的多边形以支持多级渲染
2.4 类别体系(categories)设计
categories定义了数据集的分类体系:
json复制{
"id": 1,
"name": "person"
