一.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之间的转换
- 当然大佬可以自己写代码进行格式之间的转换。
- 使用VOC与COCO之间的转换工具,比如paddlex 和 PaddleDection中都有集成好的工具,一行代码即可将所有数据集进行转换,方便快速。
欢迎批评指正,有些资源是从往上找的
嗯
这个笔记厉害了