一、pascal voc
pascal voc数据集是目标检测的常用的大规模数据集之一,从05年到12年都会举办比赛,比赛任务task:
- 分类classification
- 目标检测object detection
- 语义分割class segmentation
- 实例分割object segmentation
- action classification(专注于人体动作的一种分类)
- person layout(专注于人体各部位的一种目标检
a. 数据集包含种类
一共包含了20类。一共包含了20类。
person: person
animal: bird, cat, cow, dog, horse, sheep
vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor
b. v0c2007和v0c2012的区别
voc2007中包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。
对于检测任务,voc2012的trainval/test包含08-11年的所有对应图片。 trainval有11540张图片共27450个物体
c. voc数据集文件结构
pascal voc数据集 由五个部分构成:jpegimages,annotations,imagesets,segmentationclass以及segmentationobject。
- jpegimages:目录中存放的是源图片的数据,包括训练与测试的所有图片。(当然图片并不一定要是 .jpg 格式的,只是规定文件夹名字叫 jpegimages );
- annotations(注释):存放的是标注数据,通过xml文件格式,为图像数据存储各类任务的标签。其中部分标签为目标检测的标签。里面存放的是每张图片打完标签所对应的xml文件。每一张图片文件都对应一个xml文件。
- imagesets/main:imagesets文件夹下本次讨论的只有main文件夹,---存放的是训练和验证时的文件列表,此文件夹中存放的主要又有四个文本文件test.txt、train.txt、trainval.txt、val.txt, 其中分别存放的是测试集图片的文件名、训练集图片的文件名、训练验证集图片的文件名、验证集图片的文件名。每行一个文件名(不包含扩展名),例如 train.txt 是下面这种格式的:
- segmentationclass与segmentationobject:存放的都是图片,且都是图像分割结果图,对目标检测任务来说没有用。class segmentation 标注出每一个像素的类别
- object segmentation 标注出每一个像素属于哪一个物体。
目录如下所示
d. 标注信息是用xmi文件组织
xml文件的标注格式如下:
<annotation>
<folder>voc2007</folder> # 图片所处文件夹
<filename>000001.jpg</filename> # 图片文件名
<path>pathto/000001.jpg</path>
<source>
<database>the voc2007 database</database>
<annotation>pascal voc2007</annotation>
<image>flickr</image>
<flickrid>341012865</flickrid>
</source>
<owner>
<flickrid>fried camels</flickrid>
<name>jinky the fruit bat</name>
</owner>
<size> # 图像尺寸,深度
<width>353</width>
<height>500</height>
<depth>3</depth>
</size>
<segmented>0</segmented> # 是否用于分割(在图像物体识别中无所谓)
<object> # 标注目标 1
<name>dog</name> # 物体类别
<pose>left</pose> # 拍摄角度:front, rear, left, right, unspecified,如果是自己的数据集就unspecified
<truncated>1</truncated> # 目标是否被截断,(比如在图片之外),或者被遮挡(超过15%), 0表示完整
<difficult>0</difficult> # 检测难易程度,0表示容易识别),这个主要是根据目标的大小,光照变化,图片质量来判断,虽有标注, 但一般忽略这类物体
<bndbox> # 物体的bound box, 包含左下角和右上角xy坐标
<xmin>48</xmin>
<ymin>240</ymin>
<xmax>195</xmax>
<ymax>371</ymax>
</bndbox>
</object>
<object> # 标注目标 2
<name>person</name>
<pose>left</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>8</xmin>
<ymin>12</ymin>
<xmax>352</xmax>
<ymax>498</ymax>
</bndbox>
</object>
</annotation>
二、coco数据集
参考文章: coco数据集解析
coco数据集有91类,虽然比imagenet和sun类别少,但是每一类的图像多,这有利于获得更多的每类中位于某种特定场景的能力,对比pascal voc,其有更多类和图像。
和voc相比,coco数据集上小目标多,单幅图片目标多,物体大多非中心分布,更符合日常环境,所以coco检测难度更大.
coco难度更大,因为coco数据集每张图片中的物体数目很多,所以导致相对别的数据集,该数据集检测的准确率很低
为了更好的介绍这个数据集,微软在eccv workshops里发表这篇文章:microsoft coco: common objects in context。从这篇文章中,我们了解了这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。
a. coco数据集包含类别:
80类分别为
b. coco 数据集文件结构
与voc一个文件一个xml标准不同的是,coco所有的目标框标注都是在同一个json里(instances_train2017.json 或者 instances_val2017.json)。json解析出来是字典格式
coco共有3种标注类型,这3种类型共享这些基本类型:info、image、license,使用json文件存储。每种类型包含了训练和验证
- object instances(目标实例): 也就是目标检测object detection 标注;
- object keypoints(目标上的关键点);
- image captions(看图说话)
annotations: 对应标注文件夹
├── instances_train2017.json : 对应目标检测、分割任务的训练集标注文件
├── instances_val2017.json : 对应目标检测、分割任务的验证集标注文件
├── captions_train2017.json : 对应图像描述的训练集标注文件
├── captions_val2017.json : 对应图像描述的验证集标注文件
├── person_keypoints_train2017.json : 对应人体关键点检测的训练集标注文件
└── person_keypoints_val2017.json : 对应人体关键点检测的验证集标注文件夹
object segmentation : 目标级分割
recognition in context : 图像情景识别
superpixel stuff segmentation : 超像素分割
330k images (>200k labeled) : 超过33万张图像,标注过的图像超过20万张
1.5 million object instances : 150万个对象实例
80 object categories : 80个目标类别
91 stuff categories : 91个材料类别
5 captions per image : 每张图像有5段情景描述
250,000 people with keypoints : 对25万个人进行了关键点标注
""" 注意 """
coco数据集格式中,bbox 的保存格式为 [x, y, w, h]
如果需要转换为[x1,y1,x2,y2],可以通过如下进行转换
bbox = [x1, y1, x1 + w - 1, y1 + h - 1]
json文件的标注格式如下,以object instance为例,这种格式的文件从头至尾按照顺序分为以下段落:
注意: 虽然每个json文件都有"info", “images” , “annotations”, "licenses","categories"关键字,但不同的任务对应的json文件中annotation的形式不同。
# 整个 json 文件格式
{
"info": info, # dict
"licenses": [license], # list,内部是dict
"images": [image], # list,内部是dict
"annotations": [annotation],# list,内部是dict
"categories": [category] # list,内部是dict
}
# 上面中每个字典的结构
info{ # 数据集信息描述
"year": int, # 数据集年份
"version": str, # 数据集版本
"description": str, # 数据集描述
"contributor": str, # 数据集提供者
"url": str, # 数据集下载链接
"date_created": datetime, # 数据集创建日期
}
license{
"id": int, # int 协议id号 在images中遵循的license即1
"name": str, # str 协议名
"url": str, # str 协议链接
}
# images是一个list,存放所有图片(dict)信息。image是一个dict,存放单张图片信息
image{
"id": int, # 图片的id编号(每张图片id唯一)
"width": int, # 图片宽
"height": int, # 图片高
"file_name": str, # 图片名字
"license": int, # 协议
"flickr_url": str, # flick图片链接url
"coco_url": str, # coco图片链接url
"date_captured": datetime, # 数据集获取日期
}
# annotations是一个list,存放所有标注(dict)信息。annotation是一个dict,存放单个目标标注信息。
annotation{
"id": int, # 图片中每个被标记物体的id编号,目标对象id(每个对象id唯一),每张图片可能有多个目标
"image_id": int, # 该物体所在图片的对应id
"category_id": int, # 被标记物体的对应类别id编号,与categories中的id对应
"segmentation": rle or [polygon], # 实例分割,对象的边界点坐标[x1,y1,x2,y2,....,xn,yn]
"area": float, # 对象区域面积
"bbox": [xmin,ymin,width,height], # 目标检测,对象定位边框[x,y,w,h]
"iscrowd": 0 or 1, # 表示是否是人群/ 0 or 1 目标是否被遮盖,默认为0
}
# 类别描述
categories{
"id": int, # 类别对应的id编号(0默认为背景)
"name": str, # 子类别名字
"supercategory": str, # 主类别名字, 类别所属的大类,如卡车和轿车都属于机动车这个class
}
三、yolo数据集格式
标签使用txt文本进行保存。yolo的目录如下所示:
标签使用txt文本进行保存。
yolo标注格式如下所示:
例如:
每一行代表标注的一个目标
- 0:对象的标签索引
- x,y:目标的中心坐标,相对于图片的h和w做归一化。即x/w,y/h。
- width,height:目标(bbox)的相对宽和高,相对于图像的h和w做归一化。
发表评论