当前位置: 代码网 > it编程>前端脚本>Python > 目标检测任务中常用的数据集格式(voc、coco、yolo)

目标检测任务中常用的数据集格式(voc、coco、yolo)

2024年07月31日 Python 我要评论
从这篇文章中,我们了解了这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。COCO数据集有91类,虽然比ImageNet和SUN类别少,但是每一类的图像多,这有利于获得更多的每类中位于某种特定场景的能力,对比PASCAL VOC,其有更多类和图像。├── Annotations #存放xml文件,与JPEGImages中的图片一一对应,每个xml对应JPEGImage中的一张图片描述了图片信息。

一、pascal voc

voc数据集(annotation的格式是xmi)

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做归一化。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com