【课后作业03】数据准备(Data Preparation) 作业布置

作者:欧新宇(Xinyu OU)

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

最后更新:2021-10-25


【实验目的】

  1. 学会对下载的数据集进行基本的分析和了解
  2. 能够按照规范的结构对自建数据集进行整理和规范
  3. 能够使用Python编写代码,实现对规范结构数据集进行列表生成,并按照训练集、验证集、训练验证集和测试集进行划分
  4. 对非规范数据能够进行规范化处理, 或按照规范标准对数据集进行划分
  5. 对不干净的数据,能够编写Python代码进行数据清洗

【实验内容】

垃圾分类数据集Garbage进行划分,并生成数据列表。该数据集包含40个类,14802张图片。数据集已经事先实现了训练(train)测试(test)的分割,其中测试集没有类别标签。数据集没有给出验证集的划分建议,因此在进行数据列表生成的时候,需要将官方给出的训练集看作是trainval进行二次划分,即将原来的 train文件夹划分为训练集train和验证集val。使用train和val训练完成后,按照超参数的设定情况,再次对整个训练验证集trainval进行训练,完成后直接输出测试集结果到台进行评估。

Q1:补全下列代码,实现输出参数的初始化(20分)

【要求】

Q2:补全下列代码,实现数据集的划分(60分)

【要求】
Q2-1: 完成生成测试列表的代码 ([Your codes 3]) (30分)

由于测试集的输出结果需要输送到AIStudio进行准确度评估,因此需要对测试集样本严格按照数字从小到大的顺序进行排序。然而,python文件读取时排序方法是按照文本进行排序的,即:"test1, test10, test11, test12, ..., test2, test20, ...",而正确的排序应该是"test1, test2, test3, ..., test10, test11, test12, ..., test20, test21, ...",即自然顺序。 提示:可以先获取测试文件的`数字`部分,然后对其进行排序,再组合文件名输出到测试文件列表`test.txt`中

Q2-2: 完成生成训练集、验证集和训练验证集列表的代码, 要求选择10%的原始训练数据用于生成val验证子集,剩下的90%生成train训练子集 ([Your codes 4])(30分)

Q3:补全下列代码,实现数据集信息的保存和统计信息的输出(20分)

【要求】

Q3-1: 完成生成数据集信息的json文件 ([Your codes 5])。(10分)

注意,类别字典在数据集中已经由garbage_dict文件给出,且无法从文件夹命名中获取,因此在写入数据集信息的 label_dict字段时,需要从 garbage_dict.json文件中读取。

Q3-2:在屏幕上输出统计信息 ([Your codes 6]),格式如下: (10分)

图像列表已生成, 其中训练验证集样本14402,训练集样本12944个, 验证集样本1458个, 测试集样本400个, 共计14802个。