cocostuff10k数据集介绍_(六)COCO数据集的简单介绍

COCO通过大量使用Amazon Mechanical Turk来收集数据。COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), 和image captions(看图说话),使用JSON文件存储。比如下面就是Gemfield下载的COCO 2017年训练集中的标注文件:

可以看到其中有上面所述的三种类型,每种类型又包含了训练和验证,所以共6个JSON文件。

以instances_train2014.json为例,总体形式如下:

(1)images字段列表元素的长度等同于划入训练集(或者测试集)的图片的数量;

(2)annotations字段列表元素的数量等同于训练集(或者测试集)中bounding box的数量;

(3)categories字段列表元素的数量等同于类别的数量,coco为80(2017年);

>>> ann_train_file='annotations/instances_train2017.json'

>>> coco_train = COCO(ann_train_file)

loading annotations into memory...

Done (t=19.30s)

creating index...

index created!

>>> len(coco_train.dataset['categories'])

80

>>> len(coco_train.dataset['images'])

118287

>>> len(coco_train.dataset['annotations'])

860001

>>>

这是用来train的json中保存的东西,首先json保存的是一个大的字典:

info这个key指向的字典是一些基本信息,包括时间,版本,贡献者,网址链接等不重要,可以忽略。

images这个key指向的列表(注意是列表,上面info指向的是字典)是图片信息,列表中的每一个字典下存储一张图片的信息,license、coco_url、data_captured和flickr_url这几个key指向的信息大概了解下就行,在你已经下载到原图jpg文件的情况下,这些信息基本没用。接下来就是比较重要的几个信息了,首先是file_name,指向的是一个字符串,是jpg的文件名;其次是height和width指向的是该图片的高和宽,id指向的数字可能让大家比较迷惑,这个信息非常至关键,这一串数字是每张图片特有的一个标志,数字不重复,可以看作是图片的身份信息,就像身份证那一串数字一样。

下一个License这个key指向的信息也可以忽略不计,就是途中被我选中标黑的那个部分。

再下一个annotations这个key是本json中最最最最最重要的一个部分了。

annotations字段是包含多个annotation实例的一个数组,annotation类型本身又包含了一系列的字段,如这个目标的category id和segmentation mask。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)。如下所示:

annotation{

"id": int,

"image_id": int,

"category_id": int,

"segmentation": RLE or [polygon],

"area": float,

"bbox": [x,y,width,height],

"iscrowd": 0 or 1,

}

注意,单个的对象(iscrowd=0)可能需要多个polygon来表示,比如这个对象在图像中被挡住了。而iscrowd=1时(将标注一组对象,比如一群人)的segmentation使用的就是RLE格式。

注意啊,只要是iscrowd=0那么segmentation就是polygon格式;只要iscrowd=1那么segmentation就是RLE格式。另外,每个对象(不管是iscrowd=0还是iscrowd=1)都会有一个矩形框bbox ,矩形框左上角的坐标和矩形框的长宽会以数组的形式提供,数组第一个元素就是左上角的横坐标值。

该key指向的是一个list,然后包含多个字典,每个字典包含一个物体分割的信息。看该列表中第一个字典,segmentation指向是的一个套着两个list的东西,里面一堆数字的含义是像素级分割得到的物体边缘坐标(有心的同学会发现这里面的数字个数都是偶数,因为坐标是成对出现的);area指向该segmentation的面积,iscrowd目前来看都指向0,表示没有重叠吧,有重叠指向1(我的理解是这样,可能有偏差,不过影响不大);image_id就是前面images中存储的id !读取json信息的时候会用到;bbox指向的就是物体的框;category_id指向的数字代表类别(这里说一下,有些博客说是有90类,但是从coco2014上来看,只是category_id标定到了90这个数字而已,但是实际类数只有80类,因为,1-90这数字中有一些是跳过的,即有些数字没有);id不同于images中的id,images中的id是每幅图片的身份编号,而此处的id是每个框的身份编号,注意区分。

最后一部分

Object Keypoint 类型的标注格式

1,整体JSON文件格式

比如上图中的person_keypoints_train2017.json、person_keypoints_val2017.json这两个文件就是这种格式。

Object Keypoint这种格式的文件从头至尾按照顺序分为以下段落,看起来和Object Instance一样啊:

{

"info": info,

"licenses": [license],

"images": [image],

"annotations": [annotation],

"categories": [category]

}

是的,你打开这两个文件,虽然内容很多,但从文件开始到结尾按照顺序就是这5段。其中,info、licenses、images这三个结构体/类型 在第一节中已经说了,在不同的JSON文件中这三个类型是一样的,定义是共享的。不共享的是annotation和category这两种结构体,他们在不同类型的JSON文件中是不一样的。

images数组元素数量是划入训练集(测试集)的图片的数量;

annotations是bounding box的数量,在这里只有人这个类别的bounding box;

categories数组元素的数量为1,只有一个:person(2017年);

2,annotations字段

这个类型中的annotation结构体包含了Object Instance中annotation结构体的所有字段,再加上2个额外的字段。

新增的keypoints是一个长度为3*k的数组,其中k是category中keypoints的总数量。每一个keypoint是一个长度为3的数组,第一和第二个元素分别是x和y坐标值,第三个元素是个标志位v,v为0时表示这个关键点没有标注(这种情况下x=y=v=0),v为1时表示这个关键点标注了但是不可见(被遮挡了),v为2时表示这个关键点标注了同时也可见。

num_keypoints表示这个目标上被标注的关键点的数量(v>0),比较小的目标上可能就无法标注关键点。

annotation{

"keypoints": [x1,y1,v1,...],

"num_keypoints": int,

"id": int,

"image_id": int,

"category_id": int,

"segmentation": RLE or [polygon],

"area": float,

"bbox": [x,y,width,height],

"iscrowd": 0 or 1,

}

从person_keypoints_val2017.json文件中摘出一个annotation的实例如下:

{

"segmentation": [[125.12,539.69,140.94,522.43...]],

"num_keypoints": 10,

"area": 47803.27955,

"iscrowd": 0,

"keypoints": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142,309,1,177,320,2,191,398...],

"image_id": 425226,"bbox": [73.35,206.02,300.58,372.5],"category_id": 1,

"id": 183126

},

3,categories字段

最后,对于每一个category结构体,相比Object Instance中的category新增了2个额外的字段,keypoints是一个长度为k的数组,包含了每个关键点的名字;skeleton定义了各个关键点之间的连接性(比如人的左手腕和左肘就是连接的,但是左手腕和右手腕就不是)。目前,COCO的keypoints只标注了person category (分类为人)。

定义如下:

{

"id": int,

"name": str,

"supercategory": str,

"keypoints": [str],

"skeleton": [edge]

}

从person_keypoints_val2017.json文件中摘出一个category的实例如下:

{

"supercategory": "person",

"id": 1,

"name": "person",

"keypoints": ["nose","left_eye","right_eye","left_ear","right_ear","left_shoulder","right_shoulder","left_elbow","right_elbow","left_wrist","right_wrist","left_hip","right_hip","left_knee","right_knee","left_ankle","right_ankle"],

"skeleton": [[16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13],[6,7],[6,8],[7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]]

}

Image Caption的标注格式

1,整体JSON文件格式

比如上图中的captions_train2017.json、captions_val2017.json这两个文件就是这种格式。

Image Caption这种格式的文件从头至尾按照顺序分为以下段落,看起来和Object Instance一样,不过没有最后的categories字段:

{

"info": info,

"licenses": [license],

"images": [image],

"annotations": [annotation]

}

是的,你打开这两个文件,虽然内容很多,但从文件开始到结尾按照顺序就是这4段。其中,info、licenses、images这三个结构体/类型 在第一节中已经说了,在不同的JSON文件中这三个类型是一样的,定义是共享的。不共享的是annotations这种结构体,它在不同类型的JSON文件中是不一样的。

images数组的元素数量等于划入训练集(或者测试集)的图片的数量;

annotations的数量要多于图片的数量,这是因为一个图片可以有多个场景描述;

2,annotations字段

这个类型中的annotation用来存储描述图片的语句。每个语句描述了对应图片的内容,而每个图片至少有5个描述语句(有的图片更多)。annotation定义如下:

annotation{

"id": int,

"image_id": int,

"caption": str

}

从captions_val2017.json中摘取的一个annotation实例如下:

{

"image_id": 179765,

"id": 38,"caption": "A black Honda motorcycle parked in front of a garage."

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:单链表操作之如何判断链表是否带环及相关操作

//判断链表是否有环 int HasCircle(Node* pHead) { Node* lowpHead; Node* fastpHead; while(fast ! NULL && fast->next ! NULL) { lowlow->next; fastfast->next->next; if(lowfast) return 1; } return 0; } 时…

smart700iev3 程序下载设置_分享一款Aira2下载工具

Qdown,一款新的Aria2下载器,Aria2是一个命令行的下载器,非常强大,本软件套壳了Aria2,并且制作了界面版本,使用体验不错。Qdown是一款基于Aria2的Windows文件下载器,几乎支持现阶段所有的下载协议…

引用js_js值和引用

值和引用在许多编程语言中,赋值和参数传递可以通过值复制或者引用复制来完成,这取决于我们使用什么语法。例如,在 C 中如果要向函数传递一个数字并在函数中更改它的值,就可以这样来声明参 数 int& myNum,即如果传递…

]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)

1、判断两个链表是否相交,若相交,求交点。(假设链表不带环) 两个指针同时指向两个链表,分别依次往后遍历链表到最后一个节点,如指针的值相同(即节点地址相同),反之没有交…

某月某日前包括当天吗_10月26日,你真的理解了导数的定义吗?(答思考题送猫王小音箱)...

点击并关注上方“鸡汤斋”,与斋主一起成长特别说明:公众号的“一天一题”都是从历年期中、期末,以及各个高等学校或者国家统一的考研试题中抽取的题目进行的详细讲解。如果您每天在固定的时间(无聊时、吃饭时、睡觉前、早上起床前、“吃鸡”前…

数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?

1、栈和队列分析 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删 …

人脸识别进水_万维|人脸识别闸机怎么选?

如今人脸识别在安防行业的逐渐普及,现在已经有越来越多的场景都已应用人脸识别闸机,像办公大厦啊,景区门口,社区门口等,什么都不用带,只要刷个脸就行,方便快捷又省事。那么,你又对人…

基于udp的网络群聊系统

一、系统简介 这是一个基于udp协议的网络群聊系统,为什么选择udp协议呢?这就需要了解TCP协议与udp协议。 1)TCP(Transmission Control Protocol,传输控制协议) 是面向连接的协议,也就是说&…

c 打印 callback 函数名_Go 中的函数

1. 函数参数和返回值的写法如果有多个参数是同一个类型,可以简略写:func testReturnFunc(v1,v2 int)(int,int) {x1 : 2 * v1x2 : 3 * v2return x1,x2 }Go 还支持命名返回值的方式。命名返回值作为结果形参(result parameters)被初…

二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像

1、判断二叉树是否为完全二叉树: 层序遍历,从上到下,从左到右,遍历二叉树; 当遇到一个节点的左子树为空时,则该节点的右子树为空和后面遍历的节点都为叶子节点,否则不是完全二叉树。 当该节点…

数据结构:将二叉搜索树转换成一个排序的双向链表

1、将二叉搜索树转换成一个排序的双向链表。提示:要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。--中序线索化的变型。 Node* BSTreeToList() {if(_pRoot NULL) return NULL; Node* p…

Android NDK 使用第三方静态库(转)

源:Android NDK 使用第三方静态库转载于:https://www.cnblogs.com/LittleTiger/p/4556382.html

[原创]好买财富接口测试自动化实践

[原创]好买财富接口测试自动化实践

spring boot security 权限用postman测试_Spring Security(五):前后端权限控制详解

文章回顾:Spring Security(一):整合JWT实现登录功能Spring Security(二):获取用户权限菜单树Spring Security(三):与Vue.js整合Spring Security(四…

数据结构:排序算法之插入排序

1、直接插入排序 void InsertSort(int array[], int size) {for(int idx1; idx<size; idx){int temp array[idx];int end idx-1;while(end>0 && array[end] > temp){array[end1] array[end];--end;}array[end1] temp; } }2、希尔排序 void ShellSort(i…

函数传参之商品价格计算—JS学习笔记2015-6-6(第50天)

经常我们可以看到很多网站会有多个相同功能的模块&#xff0c;比如淘宝首页的轮播&#xff0c;比如新浪首页的tab切换&#xff1b; 那么可以看出这些地方在HTML结构上是类似的&#xff0c;所以我们可以考虑用一块功能代码去实现&#xff0c;而不同是仅仅是传递参数的不同&#…

JavaScript 几种简单的table切换

方法一&#xff1a;for循环if判断当前点击与自定义数组是否匹配 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>tab切换</title><style type"text/css">button {width:120px;h…

和aes相比较有哪些特点_“黑枸杞”和“红枸杞”相比较,功效方面究竟存在哪些差别?...

对于枸杞&#xff0c;其功效的广泛&#xff0c;相信大家都会有所耳闻。不过&#xff0c;对于它的一些区分&#xff0c;可能大家并不会那么熟悉&#xff0c;尤其是在市场上&#xff0c;比较流行的有两类枸杞&#xff0c;一类是红色的&#xff0c;还有一类是黑色的。对于这两种颜…

数据结构:排序算法之堆排序和选择排序

1、堆排序 void HeapAdjust(int array[], int root, int size) {int parent root;int child root*2 1;while(child < size){ //还剩三个数据时&#xff1a;1&#xff08;0&#xff09;&#xff0c; 2&#xff08;1&#xff09;&#xff0c; 3&#xff08;2&#xff09;左…

关于 mahout factorize-movielens-1M.sh 执行

mahout 0.9 hadoop 1.2.1 新手上路 请多指教&#xff1b; 需要运行 /examples/bin/factorize-movielens-1M.sh 即 ALS 推荐算法&#xff0c;数据集从movielens官网上下载 根据脚本文件&#xff0c;首先需要 将ratings.csv文件 放置在hdfs 文件系统中&#xff08;/tmp/mahout-w…