【课后作业03】数据准备(Data Preparation) 习题答案

作者:欧新宇(Xinyu OU)

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

最后更新:2021-08-06


【实验目的】

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

【实验要求】

  1. 所有作业均在AIStudio上进行提交,提交时包含源代码和运行结果
  2. 手势识别数据集Gestures按照训练集:测试集=8:2的比例进行划分,并输出统计信息(Q1,Q2,Q3)(40分)
  3. 垃圾分类数据集Garbage进行划分,要求test列表按照AIStudio的输出要求进行排序(Q4)(60分)

【实验内容】

【任务一】手势识别数据集Gestures(40分)

Gestures数据集是土耳其Ankara Ayrancı Anadolu高中搜集的学生手势数据集,该数据集包含0-9共10个类别的手势,2062个样本,每个样本都是彩色图片。在Gestures文件夹中,包含Datainfer两个子文件夹,其中Data文件夹包含训练测试的所有样本,并按照10个类别分别存入了子文件夹,infer是用于推理的10个样本。该数据集没有官方的数据分割建议,因此需要手动进行分割。

Q1:补全下列代码,实现输出参数的初始化 ([Your codes 1])。(10分)

要求:

Q2:补全下列代码,实现将数据集按照8:2的比例划分为训练集train和测试集test ([Your codes 2])(20分)

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

要求:
1.将数据集名称、训练、验证、测试及训练验证集的样本数量,以及类别数量写入json文件中 ([Your codes 3])
2.在屏幕输出如下统计信息。([Your codes 4])

图像列表已生成, 其中训练验证集样本1642,训练集样本1432个, 验证集样本210个, 测试集样本420个, 共计2062个。

【任务二】垃圾分类数据集Garbage(60分)

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

Q4: 完成垃圾分类的全部代码(60分)

【要求】
Q4-1: 完成输出参数的初始化, 包括训练、验证、测试和训练验证集的数量,类别数量和数据集信息文件dataset_info的初始化 ([Your codes 5])(5分)
Q4-2: 定义生成文件的路径,包括四个列表文件和数据集信息文件,此外还包括需要读入的类别字典garbage_dict,用于保存到数据集信息文件dataset_info中 ([Your codes 6])(5分)
Q4-3: 完成生成测试列表的代码 ([Your codes 7]) (20分)
Q4-4: 完成生成训练集、验证集和训练验证集列表的代码, 要求选择10%的原始训练数据用于生成val验证子集,剩下的90%生成train训练子集 ([Your codes 8])(20分)
Q4-5: 完成生成数据集信息的json文件 ([Your codes 9])(5分)
Q4-6:在屏幕上输出统计信息 ([Your codes 10]),格式如下: (5分)

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

【特别注意】
Q4-3: 因为测试集的输出结果需要输送到AIStudio进行准确度评估,因此需要对测试集样本严格按照数字从小到大的顺序进行排序。然而,python文件读取时排序方法是按照文本进行排序的,即:"test1,test10,test11,test12,...test2,test20,...",而正确的排序应该是"test1,test2,test3,...test10,test11,test12,...test20,test21...",即自然顺序 。
提示:可以先获取测试文件的`数字`部分,然后对其进行排序,再组合文件名输出到测试文件列表`test.txt`中
Q4-5: 类别字典在数据集中已经由garbage_dict文件给出,且无法从文件夹命名中获取,因此在写入数据集信息的label_dict字段时,需要从garbage_dict.json文件中读取。