数据准备(Data Preparation)

作者:欧新宇(Xinyu OU)

本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz, nVidia GeForce GTX 1080 Ti 本教案所涉及的数据集仅用于教学和交流使用,请勿用作商用。

最后更新:2021年3月6日


数据准备是深度学习训练、测试等工作的前提,它是保证深度学习有效的必要工作。特别是对于自建数据集来说,数据清洗数据分类数据列表的生成都是必备可少的工作。数据准备是一项工程性非常强的工作,每一个数据集都需要针对性地撰写代码。

为了简化工作,本课程涉及的所有数据集都做好了前期的清洗和分类工作,只需要按照分类任务的特点生成数据列表即可。下面以两个不同的数据集为例,进行数据集分割,并生成样本列表。具体包括:手势识别数据集、十二生肖分类数据集。所有的数据集都按照工程习惯生成四个数据集,具体包括:

【特别提示】

  1. 一般来说,训练集和验证集都是训练模型时的训练数据,其中训练集用于模型训练,验证集用于超参数评估。为了更好地完成超参数的选择,通常会将原始的训练集分割成训练集验证集;并进行模型训练,在完成超参数选择后,再将训练集验证集合并在一起后,进行统一训练。
  2. 测试集在很多情况下是没有标注的,并且测试集也不应该被用来参与模型参数的选择,只能在模型训练好,进行一次性的结果输出或性能评估。

一、 蝴蝶分类数据集Butterfly

蝴蝶分类数据集包含7个类,619张图片。所有数据都放在Data文件夹,并按照7个类别分别存入子文件夹;但该数据集没有官方的数据分割建议,因此需要手动进行分割。数据列表生成时将按照7:1:2的比例进行分割。

二、 十二生肖分类数据集Zodiac

十二生肖分类数据集包含12个类,8508张图片。数据集已经事先实现了训练(train)、验证(valid)和测试(test)的分割。因此,在进行数据列表生成的时候,不需要手动进行分割,但要注意确保三种类型数据标签和类别的统一。在范例代码中,我们使用训练集生成标签列表,并将标签列表应用到验证集和测试集列表的生成过程中。

1. 数据标注列表生成

2. 数据清洗

数据清洗一般有两种方法:

  1. 直接将非法文件或者坏文件删除。该方法比较简单,但是会对官方数据集造成改变;
  2. 清理出非法文件和坏文件的列表,然后在生成数据的过程中自动过滤,该方法稍微复杂一些,需要事先对数据进行筛选,但是可以保留原始数据集不变。

下面的代码,将做两种设置:

  1. 删除MacOS自动生成的文件'.DS_Store'
  2. 对图像坏样本,进行索引,并保存到bad.txt中