扩展阅读:COCO 数据标注格式
COCO(**Common Objects in Context**)是由微软团队提出的一种**广泛使用的通用目标检测、分割和关键点标注数据集格式**。它不仅是一个数据集(如 COCO 2017),更是一种**标准化的 JSON 标注格式**,被绝大多数现代计算机视觉框架(如 Detectron2、MMDetection、YOLOv8、TensorFlow Object Detection API
COCO(Common Objects in Context)是由微软团队提出的一种广泛使用的通用目标检测、分割和关键点标注数据集格式。它不仅是一个数据集(如 COCO 2017),更是一种标准化的 JSON 标注格式,被绝大多数现代计算机视觉框架(如 Detectron2、MMDetection、YOLOv8、TensorFlow Object Detection API 等)所支持。
COCO 标注文件结构(JSON)
COCO 使用 单个 .json 文件 描述整个数据集(或按训练/验证拆分为多个),包含以下 5 个核心顶级字段:
{
"info": { ... },
"licenses": [ ... ],
"images": [ ... ],
"annotations": [ ... ],
"categories": [ ... ]
}
1、info:数据集元信息
"info": {
"description": "Face Detection Dataset",
"url": "",
"version": "1.0",
"year": 2025,
"contributor": "Your Name",
"date_created": "2025-10-26"
}
2、licenses:许可证信息(可选)
"licenses": [
{
"id": 1,
"name": "CC BY 4.0",
"url": "https://creativecommons.org/licenses/by/4.0/"
}
]
3、images:图像列表
每张图像一个对象,包含唯一 ID、文件名、尺寸等。
"images": [
{
"id": 1,
"file_name": "image_1.jpg",
"width": 640,
"height": 480,
"date_captured": "2025-10-26",
"license": 1,
"coco_url": "",
"flickr_url": ""
},
{
"id": 2,
"file_name": "image_2.jpg",
"width": 800,
"height": 600,
...
}
]
关键:
id必须唯一,后续annotations通过image_id关联。
4、categories:类别定义
定义所有目标类别,每个类别有唯一 ID 和名称。
"categories": [
{
"id": 1,
"name": "face",
"supercategory": "person"
}
]
注意:COCO 的
id通常从 1 开始(0 常被忽略或保留),且必须与标注中的category_id一致。
5、annotations:标注主体(核心!)
根据任务类型不同,annotations 内容略有差异:
A. 目标检测(Bounding Box)
{
"id": 1, // 标注唯一 ID
"image_id": 1, // 对应 images 中的 id
"category_id": 1, // 对应 categories 中的 id
"bbox": [30, 50, 120, 150], // [x, y, width, height] ← 注意!不是 x_min/y_min/x_max/y_max
"area": 18000, // width * height(用于评估)
"segmentation": [], // 可为空或 RLE(见下文)
"iscrowd": 0 // 0=单个对象,1=群体(用 RLE 编码)
}
重要:COCO 的
bbox格式是 [x, y, width, height],其中(x, y)是左上角坐标。
B. 实例分割(Instance Segmentation)
"segmentation": [[x1, y1, x2, y2, ..., xn, yn]] // 多边形坐标列表(每个点 x,y 交替)
// 或
"segmentation": RLE 编码(用于 iscrowd=1 的密集区域)
C. 关键点检测(Keypoint Detection)
"keypoints": [x1, y1, v1, x2, y2, v2, ...], // v: 0=未标注, 1=标注但不可见, 2=可见
"num_keypoints": 5
同时需在 categories 中定义关键点名称和骨架(skeleton):
"categories": [{
"id": 1,
"name": "face",
"keypoints": ["left_eye", "right_eye", "nose", "left_mouth", "right_mouth"],
"skeleton": [[1,3], [2,3], [3,4], [3,5]] // 连接关系(1-based 索引)
}]
与CSV格式对比
| CSV 格式 | COCO 格式 |
|---|---|
x_min, y_min, x_max, y_max |
x, y, width, height |
| 每行一个框 | 所有标注集中在一个 annotations 列表 |
| 无图像尺寸信息 | images 中明确记录 width/height |
| 无类别定义 | categories 显式定义类别 |
COCO 格式的优点
- 统一支持:检测、分割、关键点三种任务。
- 高效评估:官方提供
pycocotools,支持 mAP 等标准指标计算。 - 生态兼容:Detectron2、MMDetection、YOLOv8 等主流框架原生支持。
- 扩展性强:支持群体对象(
iscrowd)、属性标注等。
如何生成 COCO 格式?
你可以:
- 手动编写脚本(推荐):将你的 CSV 或 Labelme JSON 转换为 COCO JSON。
- 使用工具:
labelme2coco(Labelme 官方示例)CVAT、Roboflow等标注平台支持导出 COCO
示例:将你的 CSV 转为 COCO(检测任务)
假设你的 CSV:
image_name,x_min,y_min,x_max,y_max,label
image_1.jpg,30,50,150,200,face
转换后 COCO 片段:
{
"images": [{
"id": 1,
"file_name": "image_1.jpg",
"width": 640,
"height": 480
}],
"annotations": [{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [30, 50, 120, 150], // 150-30=120, 200-50=150
"area": 18000,
"iscrowd": 0,
"segmentation": []
}],
"categories": [{
"id": 1,
"name": "face"
}]
}
注意:你需要提前知道每张图的
width和height(可通过 PIL/OpenCV 读取图像获取)。
总结
COCO 标注格式是一种结构严谨、功能全面、行业标准的 JSON 格式,适用于:
- 目标检测(bounding box)
- 实例分割(polygon/RLE)
- 关键点检测(keypoints)
如果你计划使用现代深度学习框架训练模型,强烈建议将数据转换为 COCO 格式。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)