COCO数据集格式介绍

news/2024/11/28 3:48:23/

        COCO是微软构建的一个目标检测大型基准数据集,非常非常著名,包括检测、分割、关键点估计等任务,目前用的比较多的是COCO2017数据集,其他如COCO2014数据集格式类似,所以我这里以COCO2017为例。

        首先我们来看目录结构,关键的文件如下所示。其中unlabeled2017存放的是无标注的图片,train2017、val2017以及test2017则存放的分别为训练集图片、验证集图片和测试集图片,图片以jpg格式存储。annotations文件夹中包含各种类型的标注,它们的命名风格为任务_子集名称.json,其中检测和分割对应的任务名为实例级别标注用instance表示,子集名称就是我们上面提到的三个文件夹(测试集标注是不公开的),所以对目标检测任务而言有效的标注文件就是instances_train2017.json和instances_val2017.json,下面我具体来解析这个json标注文件(以训练集标注为例)。

─coco2017├─annotations│  ├─instances_train2017.json│  ├─instances_val2017.json│  └─*.json├─train2017│  ├─1.jpg│  ├─2.jpg│  └─3.jpg├─val2017│  ├─4.jpg│  ├─5.jpg│  └─6.jpg├─test2017│  ├─7.jpg│  ├─8.jpg│  └─9.xml└─unlabeled2017

        首先,和VOC不同的是,COCO整个训练集的标注都在一个文件内,json文件可以理解为键值对的格式,所以这边看最外层可以发现,整个标注其实由下面5个部分组成,每个部分又是新的键值对。info包含的是整个数据集的一些信息,包括年份、版本、描述等,这些信息对训练而言不是必要的。licenses则是一个列表,它包含多个license对象,每个license由id、name、url组成,这是
数据集的多个协议许可证,这对训练也不是必须的。也就是说,自定义数据集转为COCO格式时,上述两项是可以没有的。

        接着我们来看images这一项,这是个列表,列表中的每个元素是如下格式的对象,它指的其实就是一张图片的信息,包括图片的license、文件名、链接地址、宽高、捕获日期、网络链接、图片id这些信息,其中filename、height、width和id是必须的,所以在构建自己的数据集时保证有这四项就行了。这个id指的是图片id,每个图像唯一对应这个id,这个用来和后面的标注进行对应,因为多个标注可能有同一个图像id(这是因为多个目标在一幅图上)。

{"license": 4,"file_name": "000000397133.jpg","coco_url": "http://images.cocodataset.org/val2017/000000397133.jpg","height": 427,"width": 640,"date_captured": "2013-11-14 17:02:52","flickr_url": "http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg","id": 397133
}

我们再来看一开始五个对象中的categories,这也是一个列表,列表中每个对象为一个类别对象,这个类别对象由父类别、类别id和名称组成,比如下面的bicycle这个类别的父类为vehicle,id号为2。原始的COCO2017共有80类目标。

[{"supercategory": "person","id": 1,"name": "person"
}, {"supercategory": "vehicle","id": 2,"name": "bicycle"
}, {"supercategory": "vehicle","id": 3,"name": "car"
}, {"supercategory": "vehicle","id": 4,"name": "motorcycle"
}, {"supercategory": "vehicle","id": 5,"name": "airplane"
}, {"supercategory": "vehicle","id": 6,"name": "bus"
},  ...]

最后,我们来开开始五个对象中最关键的annotations,它依然是一个列表,列表的每一个对象是一个标注annotation,它包含的字段如下。首先有一个唯一确定这个标注框的id号,然后是这个边界框所在的图像的id和类别的id(这俩id在imagescategories中),接下来的segmentation是分割级别标注,根据iscrowd的值不同有两种类型,下面的示例用的是polygon格式这种比较简单的,还有当iscrowd=1时的RLE格式,因为我们这里不以分割为主,所以不做拓展,自己构造数据集的时候填写如下就行。area是分割区域的面积,bbox就是我们最关注的边界框标注,格式为[x,y,w,h]iscrowd表示实例是否密集。

{"id": int,    "image_id": int,"category_id": int,"segmentation": [[x1, y1, x2, y1, x2, y2, x1, y2]],"area": float,"bbox": [x,y,width,height],"iscrowd": 0 or 1,
}

至此,我们讲完了COCO数据集格式,我们构造的时候只要生成子集文件夹和标注文件夹即可,标注文件夹每个json对应一个子集的标注,标注的格式上面已经说了。

这里补充一下YOLO格式(它虽然不常用,因为每个版本的YOLO都不太一样),和VOC类似,它的标注也是一个图像一个标注文件,不过这个标注文件是txt格式的,它包含多行内容,每行是一个目标框,空格分隔的数值含义如下。当然,熟悉YOLO的都知道,这个x,y,w,h不同于VOC和COCO那种,是归一化之后的。

类别编号 x y w h类别编号 x y w h


http://www.ppmy.cn/news/48821.html

相关文章

1.18 从0开始学习Unity游戏开发--资源加载

在上一篇文章中,我们大约是开始接触到资源加载的事情了,场景资源则是一个比较特殊的资源,我们只要添加到Build Settings里面,那么我们就可以通过API直接加载。 但是其他类型的资源怎么办呢?比如我们制作一个网络游戏&…

JavaScript加解密

加密是一种将信息转换为其他形式的过程,使得只有授权人才能访问它。解密是将已经加密的信息转换回原始形式的过程。在互联网上,加密和解密通常是通过密码实现的,这些密码称为密钥。 JavaScript是一种非常流行的编程语言,用于在网…

2023年淮阴工学院五年一贯制专转本大学语文考试大纲

2023年淮阴工学院五年一贯制专转本大学语文考试大纲 一、考试目标 淮阴工学院五年一贯制高职专转本入学考试秘书学专业《大学语文》考试是我校为招收五年一贯制高职专转本学生设置的具有选拔性质的考试科目。其目的是科学、公平、有效地测试考生是否具备攻读秘书学本科学位所…

C/C++每日一练(20230419)

目录 1. 插入区间 🌟🌟🌟 2. 单词拆分 🌟🌟 3. 不同路径 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

原型设计工具即时设计、Axure、Figma、Sketch,哪个更好用?

在线网页原型图设计软件的使用与桌面端相比具备优势,因为在线网页原型图设计软件的使用全程不需要安装,而且在线网页原型图设计软件也没有任何地点上的限制,更主要的是在线网页原型图设计软件在操作系统上也没有限制,不论是现在使…

运维需要懂产品和运营吗

研发团队对运维团队的诉求,以及运维呈现的价值已经发生了变化,我们更加需要能够帮助团队建设出高效运维体系的角色,而不是能够被动响应更多问题的角色。 打造一个运维体系,我们完全可以把它类比为一个产品业务体系。公司的组织架…

字节跳动正式开源分布式训练调度框架 Primus

动手点关注 干货不迷路 项目地址:https://github.com/bytedance/primus 随着机器学习的发展,模型及训练模型所需的数据量越来越大,也都趋向于通过分布式训练实现。而算法工程师通常需要对这些分布式框架涉及到的底层文件存储和调度系统有较深…

4.4 使用分组聚合进行组内计算

4.4 使用分组聚合进行组内计算 4.4.1 使用groupby方法拆分数据groupby方法的参数及其说明:groupby对象常用的描述性统计方法如下: 4.4.2 使用agg方法聚合数据agg函数和aggregate函数的参数说明1、使用agg求出当前数据对应的统计量2、使用agg分别求字段的…