↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:徐和鼎,浙江大学,Datawhale优秀学习者
前沿
在上节内容中,我们介绍了目标检测的基础概念,并分析了实现目标检测的常用思路,本篇文章将重点介绍在该领域的经典数据集:VOC数据集,以及使用Dataloader对其进行数据读取和预处理的全过程。
一、 目标检测数据集VOC
VOC数据集是目标检测领域最常用的标准数据集之一,几乎所有检测方向的论文,如faster_rcnn、yolo、SSD等都会给出其在VOC数据集上训练并评测的效果。本文中,我们使用VOC2007和VOC2012这两个最流行的版本作为训练和测试的数据。
1. 数据集类别
VOC数据集在类别上可以分为4大类,20小类,其类别信息下图所示。
2. 数据集量级
VOC数量集图像和目标数量的基本信息如下图所示:
其中,Images表示图片数量,Objects表示目标数量
3. 数据集下载
VOC官网经常上不去,确保后续实验准确且顺利的进行,已打包数据集,在Datawhale后台回复【目标检测】可直接下载,下载后放到dataset目录下解压即可。
下面是通过官网下载的步骤:
进入VOC官网链接:http://host.robots.ox.ac.uk/pascal/VOC/.
在下图所示区域找到历年VOC挑战赛链接,比如选择VOC2012.
VOC官网页面 在VOC2012页面,找到下图所示区域,点击下载即可。
VOC2012数据集下载页面 VOC2007同理进行下载即可。
4. 数据集说明
将下载得到的压缩包解压,可以得到如图3-9所示的一系列文件夹,由于VOC数据集不仅被拿来做目标检测,也可以拿来做分割等任务,因此除了目标检测所需的文件之外,还包含分割任务所需的文件,比如SegmentationClass,SegmentationObject,这里,我们主要对目标检测任务涉及到的文件进行介绍。
JPEGImages:这个文件夹中存放所有的图片,包括训练验证测试用到的所有图片。
ImageSets:这个文件夹中包含三个子文件夹,Layout、Main、Segmentation;Layout文件夹中存放的是train,valid,test和train+valid数据集的文件名
Segmentation:文件夹中存放的是分割所用train,valid,test和train+valid数据集的文件名
Main:文件夹中存放的是各个类别所在图片的文件名,比如cow_val,表示valid数据集中,包含有cow类别目标的图片名称。
Annotations:Annotation文件夹中存放着每张图片相关的标注信息,以xml格式的文件存储,可以通过记事本或者浏览器打开,我们以000001.jpg这张图片为例说明标注文件中各个属性的含义。
猛一看去,内容又多又复杂,其实仔细研究一下,只有红框区域内的内容是我们真正需要关注的。
filename:图片名称
size:图片宽高
depth表示图片通道数
object:表示目标,包含下面两部分内容。
首先是目标类别name为dog,pose表示目标姿势为left,truncated表示是否是一个被截断的目标,1表示是,0表示不是,在这个例子中,只露出狗头部分,所以truncated为1。difficult为0表示此目标不是一个难以识别的目标。
然后就是目标的bbox信息,可以看到,这里是以[xmin,ymin,xmax,ymax]格式进行标注的,分别表示dog目标的左上角和右下角坐标。
一张图片中有多少需要识别的目标,其xml文件中就有多少个object。上面的例子中有两个object,分别对应人和狗。
二、VOC数据集的dataloader的构建
1. 数据集准备
根据上面的介绍可以看出,VOC数据集的存储格式还是比较复杂的,为了后面训练中的读取代码更加简洁,这里我们准备了一个预处理脚本create_data_lists.py。
该脚本的作用是进行一系列的数据准备工作,主要是提前将记录标注信息的xml文件(Annotations)进行解析,并将信息整理到json文件之中,这样在运行训练脚本时,只需简单的从json文件中读取已经按想要的格式存储好的标签信息即可。
注: 这样的预处理并不是必须的,和算法或数据集本身均无关系,只是取决于开发者的代码习惯,不同检测框架的处理方法也是不一致的。
可以看到,create_data_lists.py脚本仅有几行代码,其内部调用了utils.py中的create_data_lists方法:
"""python
create_data_lists
"""
from utils import create_data_lists
if __name__ == '__main__':
# voc07_path,voc12_path为我们训练测试所需要用到的数据集,output_folder为我们生成构建dataloader所需文件的路径
# 参数中涉及的路径以个人实际路径为准,建议将数据集放到dataset目录下,和教