COCO数据集格式解析

article/2025/9/9 21:25:40

COCO数据集是我们经常使用的一个数据集,并且 COCO数据集格式也很受大家欢迎,但不同于 VOC数据格式,COCO是将所有的标注数据存放在一个json文件中,使得查看的时候云里雾里,最近也在用COCO数据集做实例分割,顺道整理下,为自己扫清一些盲区,如有解释不清的地方,欢迎留言

官网地址: https://cocodataset.org/
标注文件的格式说明: https://cocodataset.org/#format-data

MC COCO2017年主要包含以下四个任务:目标检测与分割、图像描述、人体关键点检测,如下所示:

annotations: 对应标注文件夹├── instances_train2017.json		: 对应目标检测、分割任务的├── instances_val2017.json			: 对应目标检测、分割任务的验证集标注文件├── captions_train2017.json			: 对应图像描述的训练集标注文件├── captions_val2017.json			: 对应图像描述的验证集标注文件├── person_keypoints_train2017.json	: 对应人体关键点检测的训练集标注文件└── person_keypoints_val2017.json	: 对应人体关键点检测的验证集标注文件夹Object segmentation			  : 目标级分割
Recognition in context		  : 图像情景识别
Superpixel stuff segmentation : 超像素分割
330K images (>200K labeled)	  : 超过33万张图像,标注过的图像超过20万张
1.5 million object instances  : 150万个对象实例
80 object categories		  : 80个目标类别
91 stuff categories			  : 91个材料类别
5 captions per image		  : 每张图像有5段情景描述
250,000 people with keypoints :25万个人进行了关键点标注""" 注意 """
COCO数据集格式中,bbox 的保存格式为 [x, y, w, h]  
如果需要转换为[x1,y1,x2,y2],可以通过如下进行转换
bbox = [x1, y1, x1 + w - 1, y1 + h - 1]

JSON文件的基本格式,以实例分割为例,主要有五个部分:info、licenses、images、annotations、categories

在这里插入图片描述

  1. info记录关于数据集的一些基本信息
"info":{"description":"This is stable 1.0 version of the 2014 MS COCO dataset.","url":"http:\/\/mscoco.org","version":"1.0","year":2017,"contributor":"Microsoft COCO group","date_created":"2017-01-27 09:11:52.357475"
}
  1. licenses是数据集遵循的一些许可
"licenses":{"url":"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/2.0\/","id":1,"name":"Attribution-NonCommercial-ShareAlike License"
}
  1. images是数据集中包含的图像,长度等于图像的数量
"images":{"coco_url": "", "date_captured": "", "file_name": "000001.jpg", "flickr_url": "", "id": 1, "license": 0, "width": 416, "height": 416
}
  1. annotations是数据集中包含的实例掩膜,数量等于bounding box的数量。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式,以多边形顶点表示)还是一组对象(即iscrowd=1,将使用RLE格式,mask编码)
"annotations":{"id": int,"image_id": int,"category_id": int,"segmentation": RLE or [polygon],"area": float,"bbox": [x,y,width,height],"iscrowd": 0 or 1
}# 以多边形顶点形式表示的实例:
"annotations":{"segmentation": [[510.66,423.01,511.72,420.03,510.45......]],"area": 702.1057499999998,"iscrowd": 0,"image_id": 289343,"bbox": [473.07,395.93,38.65,28.67],"category_id": 18,"id": 1768
}
  1. categories是数据集中的类别信息
"categories":{"id": int,"name": str,"supercategory": str,
}

解析其中的类别ID、图像ID:

coco = COCO(annotation_file.json)
catIds = coco.getCatIds()
imgIds = coco.getImgIds()

mask 读取模式

对于灰度模式,直接使用cv2.imwrite()函数进行保存即可,只不过读取时,需要按照灰度图的方式读取|(用OpenCV或者PIL格式均可以):

# 方式一:
label = cv2.imread(label_path, 0)# 方式二:
label = np.asarray(Image.open(label_path), dtype=np.int32)

调色板模式,mask保存 方式如下:

def save_colored_mask(mask, save_path):lbl_pil = Image.fromarray(mask.astype(np.uint8), mode="P")colormap = imgviz.label_colormap()lbl_pil.putpalette(colormap.flatten())lbl_pil.save(save_path)

需要先将array格式的mask转为PIL.Image格式,然后,使用imgviz中的Label colormap给mask添加调色板,最后保存PIL.Image格式的图像即可。读取时,则需要同样使用PIL.Image格式来读取,然后转为array,而不可以使用OpenCV进行读取:

# 正确的读取方式
label = np.asarray(Image.open(label_path), dtype=np.int32)# 错误的读取方式:因为调色板模式下,使用cv2.imread(label_path, 0)
# 会默认以BGR转灰度图的模式读取,从而导致得到的label值不一致
label = cv2.imread(label_path, 0)

mask 可视化

将 mask 与原图叠加可视化的方式有两种,可通过OpenCV的加权叠加也可以采用Pillow的 blend方法

# OpenCV方式:
image = cv2.imread('2007_000033.jpg')
mask = cv2.imread('2007_000033.png')
mask_img = cv2.addWeighted(image, 0.5, mask, 0.7, 0.9)
cv2.imwrite("vis.jpg", mask_img)# PIL方式:
image = Image.open('2007_000033.jpg')
mask = Image.open('2007_000033.png')
mask_img = Image.blend(image.convert('RGBA'), mask.convert('RGBA'), 0.7)
mask_img.save("vis2.png")

参考:

  • MS COCO数据集介绍以及pycocotools简单使用
  • 从coco2017数据集中提取语义分割mask
  • 语义分割标签——mask的读取与保存
  • MS COCO数据集介绍以及pycocotools简单使用

http://chatgpt.dhexx.cn/article/d8AmhAaG.shtml

相关文章

自定义coco数据集

1、环境 anaconda环境安装配置 2、工具 安装labelme工具 3、安装软件 3.1、打开anaconda控制台 3.2、创建虚拟环境 conda create -n labelme python3.73.3、激活环境 conda activate labelme3.4、下载labelme pip install labelme3.5、输入labelme打开软件 以后打开跳…

COCO数据集概述

COCO数据集概述 COCO的全称是Common Objects in Context,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。其行业地位就不再多少了,本文主要梳理一下该数据集包含的内容。下图是官网给出的可下载的数…

CoCo数据集下载

文章目录 1.介绍2.下载2.1 官网2.2 百度网盘2.3 下载到linux服务器 1.介绍 MS COCO的全称是Microsoft Common Objects in Context,起源于微软2014年的Microsoft COCO数据集 COCO is a large-scale object detection, segmentation, and captioning dataset. COCO h…

COCO数据集梳理

COCO数据集简介 coco数据集下载需要翻墙 COCO - Common Objects in Context 关键索引 以instances_val2017.json为例,有的博客说还有一个关键索引type,但是我没找到 info/licenses 这俩货没啥可说的,数据信息和版权吧,个人用…

COCO 数据集

COCO简介: COCO数据集是微软团队获取的一个可以用来图像recognitionsegmentationcaptioning 数据集. 官方说明网址:http://mscoco.org/。 该数据集主要有的特点如下: (1)Object segmentation; (2&#xff…

Pascal VOC 和 Microsoft COCO(MS COCO)(COCO2017COCO2014) 数据集

Pascal VOC(Pascal Visual Object Classes)数据集 VOC数据集是目标检测/分割经常用的一个数据集,从05年到12年都会举办比赛 VOC数据集的格式 用于分割 Paslcal VOC 2012 用于分隔的数据集是由20个类1个背景类 训练集1464张 val集 1449张 Micr…

COCO数据集解析

1 简介 官方网站:http://cocodataset.org/ 全称:Microsoft Common Objects in Context (MS COCO) 支持任务:Detection、Keypoints、Stuff、Panoptic、Captions 说明:COCO数据集目前有三个版本,…

COCO数据集介绍

COCO数据集详细介绍 前言一、什么是COCO数据集?COCO数据集可以应用到的Task:一个简单的数据集实例展示:附录80个类别 二、COCO数据集的格式介绍基础的数据格式介绍不同Task下的annotationObject Detection annotationother task: …

COCO数据集的介绍和使用

这篇文章是我研究生阶段入学期间学习所记,主要供自己使用,结合了论文原作和源码,中间借鉴的一些b站的视频以及他人博客的解释,会在文章末尾贴出链接。 目录 COCO数据集的介绍 COCO数据集标注格式 pycocotools的安装和coco api…

数据结构与算法之基础概述

目录 数据结构和算法的重要性数据结构概述逻辑结构存储结构 算法概述如何理解“大O记法”时间复杂度空间复杂度 数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 数据结构和算法的关系: 程序 数…

1.0 JAVA数据结构与算法

学习总结 利用计算机来解决显示世界中的各种实际问题时,首先要将实际问题中的操作对象抽象为能够用计算机表示的数据,为这些数据建立一个数学模型(数据的逻辑结构),再面对数据以某种组织形式进行存储(数据…

数据结构和算法的区别

1.数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。 1.数据的逻辑结构 数据的逻辑结构分类图如下: 2.数据的存储结构 存储结构是指数据结构在计算机中的表示&#xf…

肝完了,一天掌握数据结构和算法面试题,吊打面试官,一起学习吧

最近有小伙伴面试,对数据结构和算法比较头疼,我整理了一波资料,帮助大家快速掌握数据结构和算法的面试,感觉有用的小伙伴,点赞支持哦! 不叨叨,直接上干货。 目录 Q1:数据结构和算…

大一新生先学C语言编程还是先学C语言的数据结构和算法?

大家好,我是辣条。 这是一位粉丝朋友给我的私信,今天就他这个问题好好聊聊。 先学C语言在学数据结构和算法 先说答案建议先学C语言,掌握基本的语法基础后,再学数据结构与算法,C语言编程与数据结构和算法这两个完全是…

【数据结构和算法】如何学习数据结构与算法 ?过来人的建议(一)【方法篇】

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

数据结构与算法简介

0. 内容说明 最近在自己编写一些小的算法的时候,深感自己的算法过于臃肿。碰巧Datawhale在新的一期组队学习中组织了数据结构与算法的课程学习。于是就参加了,再次感谢Datawhale~~ 首先跟大家分享一下两个自己感觉比较好的学习资料,一个是 …

数据结构和算法知识点整理

Q1:数据结构和算法的知识点整理: 数据结构和算法的需要掌握的知识点,我的好朋友启舰整理的: Q2:链表,队列和栈的区别 链表是一种物理存储单元上非连续的一种数据结构,看名字我们就知道他是一种…

如何学习数据结构和算法

首先掌握常用的、基础的。然后在此基础上往进行扩展学习。 常用的、基础的数据结构和算法有20个。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树 算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法…

Java的数据结构和算法

今天我们来简单介绍一下Java的数据结构和算法。 一、数据结构 1、数据结构的分类 2、数据结构的基本功能 二、算法 1、算法是什么 2、算法的特点 一、1、数据结构是计算机组织、存储数据的方式。简单来说就是,数据按指定的规则进行存储,从而得到一个有固定存储格式的数据集…

数据结构与算法——绪论

前言:数据结构与算法是计算机科学与工程的基础,它们的相互关系和作用是程序的本质。凭借一句话获得图灵奖的Pascal之父Nicklaus Wirth把它们表示为 算法数据结构程序 目录: 1、算法与数据结构的重要性①相关定义②为什么要学习算法③数据结构…