COCO(Common Objects in Context)数据集是一个广泛使用的计算机视觉数据集,尤其在目标检测、语义分割、实例分割、关键点检测等任务中具有重要的应用。COCO 数据集的结构和格式较为复杂,主要包括图像数据和多种注释类型(如目标类别、位置、分割掩膜等)。
1. COCO 数据集的整体结构
COCO 数据集通常包括以下几个主要部分:
- images:存储所有图像的信息(图像文件路径、图像大小等)。
- annotations:存储与图像相关的各种注释信息(如目标边界框、类别标签、分割掩膜、关键点等)。
- categories:存储类别标签的定义。
- licenses:存储数据集图像的版权信息。
- info:包含关于数据集的元信息,如版本号、描述等。
COCO 数据集的主要文件是一个 JSON 文件,这个文件存储了所有这些信息,通常有以下几种格式:
instances_train2017.json
:用于目标检测、实例分割任务,包含图像、标注的目标边界框、类别等信息。panoptic_train2017.json
:用于全景分割任务,包含分割区域的信息。captions_train2017.json
:用于图像描述任务,包含图像的文字描述。
2. COCO 数据集 JSON 文件结构
下面是 COCO 数据集的 JSON 文件结构,它包含了关于图像、注释和类别等信息。
{"images": [{"id": 1,"width": 640,"height": 480,"file_name": "000000000001.jpg","license": 1,"coco_url": "http://images.cocodataset.org/train2017/000000000001.jpg","date_captured": "2013-11-14 17:02:12"},...],"annotations": [{"id": 1,"image_id": 1,"category_id": 1,"bbox": [x, y, width, height],"area": width * height,"segmentation": [[x1, y1, x2, y2, ..., xn, yn]],"iscrowd": 0},...],"categories": [{"id": 1,"name": "person","supercategory": "human"},...],"licenses": [{"id": 1,"name": "Attribution-NonCommercial 4.0 International","url": "http://creativecommons.org/licenses/by-nc/4.0/"},...],"info": {"description": "COCO 2017 Dataset","url": "http://cocodataset.org","version": "1.0","year": 2017,"contributor": "COCO Consortium","date_created": "2017/06/23"}
}
3. JSON 文件中的关键部分
-
images:一个列表,每个元素代表一张图片的元数据。
id
: 图片的唯一标识符。width
: 图片的宽度。height
: 图片的高度。file_name
: 图片文件的名称。license
: 图像版权的 ID(参考 licenses 部分)。coco_url
: 图像的 URL 地址。date_captured
: 图像的采集时间。
-
annotations:一个列表,包含所有注释信息。每个元素代表一个对象的注释。
id
: 注释的唯一标识符。image_id
: 该注释对应的图像 ID。category_id
: 该注释对应的物体类别 ID。bbox
: 包围盒(Bounding Box),格式为 [x, y, width, height],表示目标的位置和大小。area
: 目标的面积(可以通过 bbox 计算得到)。segmentation
: 分割掩膜的信息。如果是多边形分割,格式是一个坐标列表;如果是 RLE(Run-Length Encoding)格式的掩膜,格式是一个字符串。iscrowd
: 如果该目标是聚集体(例如一群人),则标记为 1;否则为 0。
-
categories:包含类别的信息。
id
: 类别的唯一标识符。name
: 类别的名称,例如 “person”、“car” 等。supercategory
: 类别的上层类别(例如 “human”、“vehicle”)。
-
licenses:存储图像的版权信息。
id
: 版权的唯一标识符。name
: 版权的名称。url
: 版权的链接。
4. 分割掩膜和 RLE(Run-Length Encoding)
- 在 COCO 数据集中,分割掩膜可以有两种形式:
- 多边形格式:通过一组坐标点表示多边形的轮廓,适用于大多数目标。
- 例如:
"segmentation": [[x1, y1, x2, y2, ..., xn, yn]]
- 例如:
- RLE 格式:对于一些密集的物体,COCO 采用 RLE(Run-Length Encoding)来编码分割掩膜。
- 例如:
"segmentation": {"counts": "5 3 2 1 6 2", "size": [height, width]}
counts
是一个压缩后的序列,表示连续的像素值。size
是图像的大小[height, width]
。
- 例如:
- 多边形格式:通过一组坐标点表示多边形的轮廓,适用于大多数目标。
5. 使用示例
假设我们有一个图像 000000000001.jpg
,其在 annotations 中的一个注释可能如下所示:
{"id": 1,"image_id": 1,"category_id": 1,"bbox": [100, 50, 200, 150],"area": 30000,"segmentation": [[100, 50, 100, 200, 300, 200, 300, 50]],"iscrowd": 0
}
image_id
指的是图像的 ID。category_id
代表该目标的类别 ID。bbox
描述了目标的位置(x, y, width, height
)。segmentation
是该目标的多边形分割坐标。iscrowd
表示是否为拥挤的目标(例如一群人)。
6. 数据集的目录结构
COCO 数据集的文件夹结构通常如下:
COCO/
├── annotations/
│ ├── instances_train2017.json
│ ├── instances_val2017.json
│ ├── captions_train2017.json
│ └── panoptic_train2017.json
├── train2017/
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ └── ...
├── val2017/
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ └── ...
└── test2017/├── 000000000001.jpg├── 000000000002.jpg└── ...
annotations
文件夹包含了所有标注的 JSON 文件。train2017
、val2017
和test2017
文件夹分别存放训练集、验证集和测试集的图像。
总结:
COCO 数据集的结构和格式通过 JSON 文件进行定义,包含了图像信息、注释(包括目标类别、边界框、分割掩膜、关键点等),以及类别和版权信息。COCO 数据集为计算机视觉任务提供了丰富的标注信息,广泛应用于目标检测、语义分割、实例分割等领域。