一.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中都有集成好的工具,一行代码即可将所有数据集进行转换,方便快速。
欢迎批评指正,有些资源是从往上找的
嗯
这个笔记厉害了