COCO 数据集介绍

embedded/2025/1/8 5:24:06/

COCO(Common Objects in Context)数据集是一个广泛使用的计算机视觉数据集,尤其在目标检测、语义分割、实例分割、关键点检测等任务中具有重要的应用。COCO 数据集的结构和格式较为复杂,主要包括图像数据和多种注释类型(如目标类别、位置、分割掩膜等)。

1. COCO 数据集的整体结构

COCO 数据集通常包括以下几个主要部分:

  1. images:存储所有图像的信息(图像文件路径、图像大小等)。
  2. annotations:存储与图像相关的各种注释信息(如目标边界框、类别标签、分割掩膜、关键点等)。
  3. categories:存储类别标签的定义。
  4. licenses:存储数据集图像的版权信息。
  5. 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: 版权的链接。
  • info数据集的元信息,包括数据集的描述、版本、创建者、创建时间等。

4. 分割掩膜和 RLE(Run-Length Encoding)

  • 在 COCO 数据集中,分割掩膜可以有两种形式:
    1. 多边形格式:通过一组坐标点表示多边形的轮廓,适用于大多数目标。
      • 例如:"segmentation": [[x1, y1, x2, y2, ..., xn, yn]]
    2. 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 文件
  • train2017val2017test2017 文件夹分别存放训练集、验证集和测试集的图像。

总结:

COCO 数据集的结构和格式通过 JSON 文件进行定义,包含了图像信息、注释(包括目标类别、边界框、分割掩膜、关键点等),以及类别和版权信息。COCO 数据集为计算机视觉任务提供了丰富的标注信息,广泛应用于目标检测、语义分割、实例分割等领域。


http://www.ppmy.cn/embedded/152193.html

相关文章

Flutter项目开发模版,开箱即用(Plus版本)

前言 当前案例 Flutter SDK版本:3.22.2 本文,是由这两篇文章 结合产出,所以非常建议大家,先看完这两篇: Flutter项目开发模版: 主要内容:MVVM设计模式及内存泄漏处理,涉及Model、…

Spring AMQP ----消息转换器

为什么要有消息转换器?? 我们在传递消息的时候,可能会传递不同类型的消息,比如map,list等集合,甚至更加复杂的消息,但是AMQP的默认消息转换器是java提供的,他在解析的时候会进行序列…

嵌入式驱动开发详解8(阻塞/非阻塞/异步通信)

文章目录 前言阻塞非阻塞异步通知后续 前言 首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就 可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, 在中断服务函数…

VulnHub—potato-suncs

使用命令扫描靶机ip arp-scan -l 尝试访问一下ip 发现一个大土豆没什么用 尝试扫描一下子域名 没有发现什么有用的信息 尝试扫描端口 namp -A 192.168.19.137 -p- 尝试访问一下端口,发现都访问不进去 查看源代码发现了网页的标题 potato,就想着爆破一下密码 hydr…

【软考网工笔记】计算机基础理论与安全——网络安全

病毒 Melissa 宏病毒 1. 是一种快速传播的能够感染那些使用MS Word 97 和MS Office 2000 的计算机宏病毒。 2. 前面有**Macro** 表示这是宏病毒; 3. 宏病毒可以感染后缀为.xls的文件;Worm 蠕虫病毒 1. 通常是通过网络或者系统漏洞进行传播。 2. 利用信…

C++二十三种设计模式之桥接模式

C二十三种设计模式之桥接模式 一、组成二、特点三、目的四、缺点五、示例代码 一、组成 抽象类:声明功能接口,维护实现类的引用。 扩展抽象类:调用实现类功能接口,并实现自己的功能接口。 实现类:声明功能接口。 具体…

最好用的图文识别OCR -- PaddleOCR(1) 快速集成

最近在项目中遇到了 OCR 的需求,希望能够实现高效而准确的文字识别。由于预算限制,我并未选择商业付费方案,而是优先尝试了开源工具。一开始,我测试了 GOT-OCR2.0,但由于我的 Mac 配置较低,不支持 GPU 运算…

VVenC 编码器源码结构与接口函数介绍

VVenC VVenC(Fraunhofer Versatile Video Encoder)是由德国弗劳恩霍夫海因里希研究所(Fraunhofer Heinrich Hertz Institute, HHI)开发的一个开源的高效视频编码器。它实现了最新的视频编码标准——Versatile Video Coding (VVC)…