数据集准备及部分Debug总结

342 阅读4分钟

数据集的准备

常见数据集格式

1.COOCO数据集格式

COCO(Common Objects in COtext)数据集,是一个大规模的,适用于目标检测,图像分割,Image Captioning任务的数据集,其标注格式是最常用的几种格式之一。目前使用较多的是COCO2017数据集。其官网为COCO - Common Objects in Context (cocodataset.org)。 COCO数据集主要包含图像(jpg或者png等等)和标注文件(json),其数据集格式如下(/代表文件夹):

-coco/
    |-train2017/
    	|-1.jpg
    	|-2.jpg
    |-val2017/
    	|-3.jpg
    	|-4.jpg
    |-test2017/
    	|-5.jpg
    	|-6.jpg
    |-annotations/
    	|-instances_train2017.json
    	|-instances_val2017.json
    	|-*.json

train2017以及val2017这两个文件夹中存储的是训练集和验证集的图像,而test2017文件夹中存储的是测试集的信息,可以只是图像,也可以包含标注,一般是单独使用的。

annotations文件夹中的文件就是标注文件,如果你有xml文件,通常需要转换成json格式,其格式如下(更详细的可以参考官网):

{
	"info": info, 
	"images": [image], //列表
	"annotations": [annotation], //列表
	"categories": [category], //列表
	"licenses": [license], //列表
}

其中的image为图像的基本信息,包括序号,宽高,文件名等等信息,其中的序号(id)需要和后面的annotations中的标注所属图片序号对应如下所示:

image{
	"id": int, //必要
	"width": int, //必要
	"height": int, //必要
	"file_name": str, //必要
	"license": int,
	"flickr_url": str,
	"coco_url": str,
	"date_captured": datetime, 
}

其中的annotation是最重要的标注信息,包括序号,所属图像序号,类别序号等等信息,如下所示:

category{
	"id": int, //类别序号
	"name": str, //类别名称
	"supercategory": str, //父类别
}

2.Voc数据集格式

VOC(Visual Object Classes)数据集来源于PASCAL VOC挑战赛,其主要任务有Object ClassificationObject DetectionObject SegmentationHuman LayoutAction Classification。其官网为The PASCAL Visual Object Classes Homepage (ox.ac.uk)。其主要数据集有VOC2007以及VOC2012。VOC数据集主要包含图像(jpg或者png等等)和标注文件(xml),其数据集格式如下(/代表文件夹):

-VOC/
	|-JPEGImages/
		|-1.jpg
		|-2.jpg
	|-Annotations/
		|-1.xml
		|-2.xml
	|-ImageSets/
		|-Layout/
			|-*.txt
		|-Main/
			|-train.txt
			|-val.txt
			|-trainval.txt
			|-test.txt
		|-Segmentation/
			|-*.txt
		|-Action/
			|-*.txt
	|-SegmentationClass/
	|-SegmentationObject/

其中对于目标检测任务而言,最常用的以及必须的文件夹包括:JPEGImagesAnnotationsImageSets/Main

JPEGImages里存放的是图像,而Annotations里存放的是xml标注文件,文件内容如下:

<annotation>
	<folder>VOC</folder>            # 图像所在文件夹
	<filename>000032.jpg</filename> # 图像文件名
	<source>                        # 图像源
		<database>The VOC Database</database>
		<annotation>PASCAL VOC</annotation>
		<image>flickr</image>
	</source>
	<size>                          # 图像尺寸信息
		<width>500</width>    # 图像宽度
		<height>281</height>  # 图像高度
		<depth>3</depth>      # 图像通道数
	</size>
	<segmented>0</segmented>  # 图像是否用于分割,0代表不适用,对目标检测而言没关系
	<object>                  # 一个目标对象的信息
		<name>aeroplane</name>    # 目标的类别名
		<pose>Frontal</pose>      # 拍摄角度,若无一般为Unspecified
		<truncated>0</truncated>  # 是否被截断,0表示完整未截断
		<difficult>0</difficult>  # 是否难以识别,0表示不难识别
		<bndbox>            # 边界框信息
			<xmin>104</xmin>  # 左上角x
			<ymin>78</ymin>   # 左上角y
			<xmax>375</xmax>  # 右下角x
			<ymax>183</ymax>  # 右下角y
		</bndbox>
	</object>
    # 下面是其他目标的信息,这里略掉
	<object>
        其他object信息,这里省略
	</object>
</annotation>

[具体可以参考](目标检测 | 常用数据集标注格式及生成脚本 - 云+社区 - 腾讯云 (tencent.com))

PaddleDetection提供了voc转换coco的代码x2coco.py

转换为coco数据集格式文件,组织形式如上,需要注意到PaddleDetcection支持voc和coco数据训练所以上一步不是必须的。

数据集标注

常见的标注软件介绍labelImg(xml、json),labelme(json),精灵标注助手(xml),[具体使用方法看这一篇](数据标注软件的学习总结 - 知乎 (zhihu.com)) 标注最后生成的就是json,以及xml文件,最后以如上面的组织形式组织后便可以进行训练了。

环境准备

这些标注软件大多数都要求你电脑有python环境,且支持pip或者anaconda包管理器。[使用教程参考](深度学习标注工具 LabelMe 的使用教程(Windows 版本) - AHU-WangXiao - 博客园 (cnblogs.com))[或其他教程参考]((139条消息) 数据标注软件labelme详解_黑暗星球的博客-CSDN博客_labelme) 当然如果不想进行这么复杂的安装操作国内的一款的精灵标注助手可以完成你得任务并且安装过程简单,操作傻瓜式且支持多边形,位置标组等形式。

精灵标注助手的使用说明

官网下载地址

1.建立项目

在首页电击新建

image.png 标签和源文件夹在标注过程中都不可改记得一定要全部都要准备完毕

2.标注

按左右键切换图片,R选择标注形式为矩形框,鼠标拉框,由于Paddledetection内置配置文件中关键字为Rect,所以你如果使用多边形标注的话实际训练过程中会出现问题,报错不是Voc或coco数据集,所以为了避免麻烦建议还是使用矩形框标注就行,然后直接导出xml文件即可。 image.png

PaddleDetection关于数据处理的工具

首先介绍一下PaddleDetection提供的用于数据准备的工具、

./ppdet/data/source/voc.py

image.png 中改变标签。否则当你训练自定义数据集的时候你会发现推理照片与所给标签不符,tips:paddledetection2.2.2没有出现这样的问题。