数据集标注文件JSON格式简析

Hey,最近在处理数据集的标注问题,今天来简要介绍一下数据集标注文件的json格式。

主要简介一下主流数据集COCO:COCO的全称是Common Objects in Context,是微软团队提供的一个可以用来进行影象识别的资料集。MS COCO资料集中的影象分为训练、验证和测试集。COCO通过在Flickr上搜索80个物件类别和各种场景型别来收集影象,其使用了亚马逊的Mechanical Turk(AMT)。

COCO通过大量使用Amazon Mechanical Turk来收集资料。COCO资料集现在有3种标注型别:object instances(目标例项), object keypoints(目标上的关键点),和image captions(看图说话),使用JSON档案储存。比如下面就是从COCO官网下载的COCO 2017年训练集中的标注档案:

数据集标注文件JSON格式简析_第1张图片

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

基本的JSON结构为:

object instances(目标例项)、

object keypoints(目标上的关键点)、

image captions(看图说话)

以上3种类型共享这些基本型别:info、image、license。

{

    "info": info,

    "licenses": [license],

    "images": [image],

    "annotations": [annotation],

}

 

info{

    "year": int,

    "version": str,

    "description": str,

    "contributor": str,

    "url": str,

    "date_created": datetime,

}

license{

    "id": int,

    "name": str,

    "url": str,

}

image{

    "id": int,

    "width": int,

    "height": int,

    "file_name": str,

    "license": int,

    "flickr_url": str,

    "coco_url": str,

    "date_captured": datetime,

}

1,info型别,比如一个info型别的例项:

"info":{

    "description":"This is stable 1.0 version of the 2014 MS COCO dataset.",

    "url":"http:\/\/mscoco.org",

    "version":"1.0","year":2014,

    "contributor":"Microsoft COCO group",

    "date_created":"2015-01-27 09:11:52.357475"

},

2,Images是包含多个image例项的阵列,对于一个image型别的例项:

{

    "license":3,

    "file_name":"COCO_val2014_000000391895.jpg",

    "coco_url":"http:\/\/mscoco.org\/images\/391895",

    "height":360,"width":640,"date_captured":"2013-11-14 11:18:45",

    "flickr_url":"http:\/\/farm9.staticflickr.com\/8186\/8119368305_4e622c8349_z.jpg",

    "id":391895

},

3,licenses是包含多个license例项的阵列,对于一个license型别的例项:

{

    "url":"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/2.0\/",

    "id":1,

    "name":"Attribution-NonCommercial-ShareAlike License"

},

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年);

2annotations栏位

这个型别中的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
},

3categories栏位

最后,对于每一个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]]
}

标注文件在CV领域是非常重要的,也是最为难以处理的。我还没把数据集的标注文件搞定,今天先把我最近关注的json标注文件的格式做个介绍,等我把标注文件处理好,我再单独写一篇关于如何处理标注文件的文章。最后我还是在租用远程服务器,不管是跑实验还是运行python脚本,都很快,它们的环境都是配置好的,解决了我们配置实验环境的麻烦。让我们可以用跟多的时间去看论文,学习代码。

有需要的朋友可以通过以下方式了解:智星云官网: http://www.ai-galaxy.cn/,淘宝店:https://shop36573300.taobao.com/公众号: 智星AI,

今天是六一儿童节,在这里祝天下所有的小朋友和所有拥有童心的朋友节日快乐,天天开心。

 

 

 

参考资料

http://www.ai-galaxy.cn/,

https://shop36573300.taobao.com/

公众号: 智星AI

https://www.itread01.com/content/1540990693.html

http://cocodataset.org/#download

 

你可能感兴趣的:(数据集标注文件JSON格式简析)