首页 飞桨领航团 帖子详情
常见数据集之COCO数据集与VOC数据集
收藏
快速回复
飞桨领航团 文章AI达人创造营 6641 3
常见数据集之COCO数据集与VOC数据集
收藏
快速回复
飞桨领航团 文章AI达人创造营 6641 3

一.Microsoft COCO(Common Objects in Context)

  1.1 COCO数据集介绍

  COCO的 全称是Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。COCO通过在Flickr上搜索80个对象类别和各种场景类型来收集图像,其使用了亚马逊的Mechanical Turk(AMT)。COCO数据集是微软团队获取的一个可以用来图像recognition+segmentation+captioning 数据集,其官方说明网址:http://mscoco.org/

  aistudio中的数据集链接 :

  该数据集主要有的特点如下:(1)Object segmentation(2)Recognition in Context(3)Multiple objects per image(4)More than 300,000 images(5)More than 2 Million instances(6)80 object categories(7)5 captions per image(8)Keypoints on 100,000 people

  该数据集主要解决3个问题:目标检测,目标之间的上下文关系,目标的2维上的精确定位。示意图:

  COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), 和image captions(看图说话),使用JSON文件存储。COCO数据集共有小类80个,大类12个。

 1.2 COCO数据集格式

   COCO格式,文件夹路径样式:

     COCO_2017/
  	    ├── val2017     # 总的验证集
  	    ├── train2017    # 总的训练集
        ├── annotations    # COCO标注
		│   ├── instances_train2017.json     # object instances(目标实例) ---目标实例的训练集标注 
		│   ├── instances_val2017.json        # object instances(目标实例) ---目标实例的验证集标注
		│   ├── person_keypoints_train2017.json     # object keypoints(目标上的关键点) ---关键点检测的训练集标注
		│   ├── person_keypoints_val2017.json       # object keypoints(目标上的关键点) ---关键点检测的验证集标注
		│   ├── captions_train2017.json    # image captions(看图说话) ---看图说话的训练集标注
		│   ├── captions_val2017.json      # image captions(看图说话) ---看图说话的验证集标注

   基本的JSON结构体类型 :

   在COCO的json标注文件中, object instances(目标实例)、object keypoints(目标上的关键点)、image captions(看图说话)这3种类型中info、image、license这些基本类型是一样的,但是annotation类型则呈现出了不一样。基本的格式如下:

{
    "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"
},

4. 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,
}

  另外需要注意,使用Labelme标注后生成的.json文件与coco数据集格式的json文件并不一样,虽然coco数据集格式也是依托于json文件。

二.Pascal VOC(Pascal Visual Object Classes)

2.1 VOC数据集介绍 

  VOC数据集是目标检测经常用的一个数据集,从05年到12年都会举办比赛(比赛有task: Classification 、Detection(将图片中所有的目标用bounding box框出来) 、 Segmentation(将图片中所有的目标分割出来)、Person Layout),常见的VOC数据集有VOC2007以及VOC2012.

  • VOC2007:中包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。 VOC2007的test数据label已经公布, 之后的没有公布(只有图片,没有label)。
  • VOC2012:对于检测任务,VOC2012的trainval/test包含08-11年的所有对应图片。 trainval有11540张图片共27450个物体。 对于分割任务, VOC2012的trainval包含07-11年的所有对应图片, test只包含08-11。trainval有 2913张图片共6929个物体。这些物体一共分为20类。

  Pascal VOC网址:http://host.robots.ox.ac.uk/pascal/VOC/ 

  aistudio中的数据集链接 : https://aistudio.baidu.com/aistudio/datasetdetail/4379

2.2 VOC数据集格式

VOC格式,文件夹路径样式:

      VOC_2017/
      ├── Annotations	# 每张图片相关的标注信息,xml格式
      ├── ImageSets
      │   ├── Main	# 各个类别所在图片的文件名
      ├── JPEGImages	# 包括训练验证测试用到的所有图片  
      ├── label_list.txt	# 标签的类别数
      ├── train_val.txt	#训练集 
      ├── val.txt   	# 验证集

1.JPEGImages
  主要提供的是PASCAL VOC所提供的所有的图片信息,包括训练图片,测试图片,这些图像就是用来进行训练和测试验证的图像数据。

2. Annotations
主要存放xml格式的标签文件,每个xml对应JPEGImage中的一张图片,示例格式如下:

  --  代码老是乱码,只能贴图了。。。

3. ImageSets
Action // 人的动作
Layout // 人体的具体部位
Main // 图像物体识别的数据,总共20类, 需要保证train val没有交集
  train.txt
  val.txt
  trainval.txt
Segmentation // 用于分割的数据


4. SegmentationObject & SegmentationClass
保存的是物体分割后的数据,在物体识别中没有用到

3. COCO数据集与VOC数据集之间的格式转换

3.1 VOC与COCO之间的对应关系

首先我们给出VOC下的一个简单的标注:

  --  好像这种就是会乱码,也不知道为啥,有人知道咋解决不???

其对应的COCO格式的标注信息如下:

{"images": [{"file_name": "001004.jpg", "height": 375, "width": 500, "id": 1004}], "type": "instances", "annotations": [{"area": 4278, "iscrowd": 0, "image_id": 1004, "bbox": [142, 151, 93, 46], "category_id": 0, "id": 1, "ignore": 0, "segmentation": [[142, 151, 142, 197, 235, 197, 235, 151]]}], "categories": [{"supercategory": "none", "id": 0, "name": "bird"}]}

3.2 VOC与COCO之间的转换

  1. 当然大佬可以自己写代码进行格式之间的转换。
  2. 使用VOC与COCO之间的转换工具,比如paddlex 和 PaddleDection中都有集成好的工具,一行代码即可将所有数据集进行转换,方便快速。
2
收藏
回复
全部评论(3)
时间顺序
小朋友打怪
#2 回复于2021-07

欢迎批评指正,有些资源是从往上找的

0
回复
A
AIStudio713464
#3 回复于2021-07

0
回复
刘峰Jason
#4 回复于2021-07
欢迎批评指正,有些资源是从往上找的

这个笔记厉害了

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户