在目标检测领域,有三种常用的数据集:
数据集 | 标注文件格式 | bbox格式 |
---|---|---|
voc | xml | xmin, ymin, xmax, ymax: bbox左上角(xmin, ymin)和右下角(xmax, ymax)的坐标 |
coco | json | x, y, w, h: bbox左上角坐标(x, y)以及宽(w)和高(h) |
yolo | txt | xcenter, ycenter, w, h: bbox的中心x坐标(xcenter)、y坐标(ycenter)以及宽度(w)和高度(h) xcenter, w相对图片实际宽度W做了归一化,即:xcenter/W, w/W ycenter, h相对图片图片高度H做了归一化,即:ycenter/H, h/H |
1. voc格式
1.1 文件结构
该文件结构指的是从 voc 官网下载的数据的文件结构(不同年份的数据集略有不同,但结构大致相同)。
VOCdevkit # 根目录
- VOCXXXX # 不同年份的数据集,目前有 2005 年到 2012 年的
- Annotations # 存放 xml 格式的标注文件,与 JPEGImages 下的图片一一对应,每个 xml 文件都描述一张图片的信息
- ImageSets # 存放的是 txt 文件,文件中每一行包含一张图片的名称以及 ±1 表示正负样本
- Layout # 可用于检测人体部位的数据(train.txt 用于训练的图片、trainval.txt用于训练和验证的图片合集、val.txt 用于验证的图片,下同)
- Main # 可用于目标检测的数据
- Segmentation # 可用于图像分割的数据
- JPEGImages # 存放图片
- SegmentationClass # 存放按照类别分割的图片,可用于语义分割
- SegmentationObject # 存放按照个体分割的图片,可用于实例分割
1.2 标注文件
voc格式的数据集使用 xml 文件标注图片及其bbox信息,一张图片对应个xml文件,以 Main 中其中一个xml文件的部分内容为例:
xml
<annotation>
<folder>VOC2007</folder> <!--图片所在文件夹(实际用不到)-->
<filename>000005.jpg</filename> <!--图片文件名-->
<source> <!--图片来源-->
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>325991873</flickrid>
</source>
<owner> <!--图片拥有者-->
<flickrid>archintent louisville</flickrid>
<name>?</name>
</owner>
<size> <!--图片宽度、高度、通道数量-->
<width>500</width>
<height>375</height>
<depth>3</depth>
</size>
<segmented>0</segmented> <!--是否用于分割-->
<object> <!--标注目标1-->
<name>chair</name> <!--物体类别-->
<pose>Rear</pose> <!--拍摄角度: front, rear, left, right, unspecified-->
<truncated>0</truncated> <!--目标是否被截断-->
<difficult>0</difficult> <!--检测难易程度-->
<bndbox> <!--标注目标1的 bbox-->
<xmin>263</xmin>
<ymin>211</ymin>
<xmax>324</xmax>
<ymax>339</ymax>
</bndbox>
</object>
<object> <!--标注目标2的 bbox-->
<name>chair</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>165</xmin>
<ymin>264</ymin>
<xmax>253</xmax>
<ymax>372</ymax>
</bndbox>
</object>
<!--其余标注信息结构同上-->
</annotation>
2. coco格式
2.1 文件结构
该文件结构指的是从 coco 官网下载的数据的文件结构。
- annotations_XXXX # 存放 json 格式的标注文件,一个 json 文件里面包含了多张图片的相关信息
- annotations
- caption_xxxx.json # 存储图像标注用于描述图像
- instances_xxxx.json # 用于目标检测的标注信息
- person_keypoints_xxxx.json # 目标上的关键点信息
- trainXXX # 存放训练集图片
- valXXXX # 存放验证集图片
2.2 标注文件
coco格式的数据集使用 json 文件标注图片及其 bbox 信息,与voc格式一张图片对应一个xml文件不同,coco格式中一个 json 文件里面存放了若干张图片的信息。以 instances_xxxx.json 中的部分内容为例:
json
{
"info": { #数据集描述信息
"description": "COCO 2017 Dataset", # 数据集描述
"url": "http://cocodataset.org", # 数据集地址
"version": "1.0", # 数据集版本
"year": 2017, # 数据集年份
"contributor": "COCO Consortium", # 数据集提供者
"date_created": "2017/09/01" # 数据集创建日期
},
"licenses": [ # 许可协议
{
"url": "http://creativecommons.org/licenses/by-nc-sa/2.0/", # 协议链接
"id": 1, # 协议 id ,下面将会用到
"name": "Attribution-NonCommercial-ShareAlike License" # 协议名称
}
# 其他许可协议格式同上
],
"images": [ # 图片信息
{
"license": 4, # 使用的许可协议
"file_name": "000000397133.jpg", # 图片文件名
"coco_url": "http://images.cocodataset.org/val2017/000000397133.jpg", # 图片在 coco 上的url
"height": 427, # 图片高度
"width": 640, # 图片宽度
"date_captured": "2013-11-14 17:02:52", # 图片获取日期
"flickr_url": "http://farm7.staticflickr.com/6116/6255196340_da26cf2c9e_z.jpg", 图片在 flickr 上的url
"id": 397133 # 图片 id
}
# 其他图片信息格式同上
],
"annotations": [ # 标注信息
{
"segmentation": [ # 实例分割时的边界点坐标[x1, y1, x2, y2 ...... xn, yn]
[
510.66,
423.01,
......,
510.45,
423.01
]
],
"area": 702.1057499999998, # 区域面积
"iscrowd": 0, # 目标是否被遮盖
"image_id": 289343, # 标注所在的图片的 id 编号(与上面 images 中的对应)
"bbox": [ # bbox框 [左上角x, 左上角y, 宽度, 高度]
473.07,
395.93,
38.65,
28.67
],
"category_id": 18, # 被标注物体对应的类别 id 编号(与下面 categories 中的对应)
"id": 1768 # 该标注的 id 编号(唯一)
}
# 其他标注信息格式同上
],
"categories": [ # 类别描述
{
"supercategory": "person", # 该类别所属的大类
"id": 1, # 类别 id 编号
"name": "person" # 类别名字
}
# 其他标注信息格式同上
]
}
3. yolo格式
3.1 文件结构
使用yolo时,默认的文件结构如下(不同数据集会略有不同,但结构大致相同):
XXXX # 根目录,视使用的数据集决定
- images # 存放图片,已划分为训练集、验证集、测试集(部分数据集无测试集)
- train
- val
- test
- labels # 存放的是 txt 文件,每个txt文件对应一张图片,文件中每一行包含一个bbox的相关信息
- train
- val
- test
3.2 标注文件
yolo格式的数据集使用 txt 文件标注图片bbox信息,一张图片对应一个txt文件,txt文件中的每一行都标注了一个bbox的相关信息。标注格式如下:
<类别索引> <bbox的中心x坐标> <bbox的中心y坐标> <bbox的宽度> <bbox的高度>
- 信息之间以空格分割
- bbox的中心xy坐标以及宽度、高度都相对于图片的实际宽度W和高度H做了归一化
以其中一个txt文件的部分内容为例:
45 0.479492 0.688771 0.955609 0.5955
# 标注目标1的 bbox的类别索引是45,中心x坐标是0.479492, 中心y坐标是0.688771, 宽度是0.955609, 高度是0.5955
45 0.736516 0.247188 0.498875 0.476417
# 标注目标2的 bbox
# 其余标注信息结构同上