system: [SYSTEM]

user: 4. 实验结果 4.1. 实验环境 本节实验软件为Python3.6计算机编程语言，框架Tensorflow2.2.0及Keras2.2.4环境，硬件为64位Windows操作系统，Intel(R)Core(TM)i7-9700 CPU和16GB RAM，独立显卡AMD Radeon Pro WX3100。 4.2. 实验数据 本文实验用到的数据集由模型Yolov4与DropBlock结合算法检测到的学生头部结果图片制成，抬头低头图片数量各为1065张，总计2130张，命名为ClassUD。数据增强以后的数据集命名为ClassUD-A，每一种增强方法对每一种状态的数据都进行一次操作，抬头与低头状态的数据集扩增到了4260张，总计8520张图片。数据分布如表2。本文分类所需的数据皆是模仿监控视角的位置与高度拍摄所得，范围为一个教室的3至4排左右，且240张图片由40分钟视频以10秒一张图片的截取方式获得，对每张图片出现的学生头部进行裁剪且对不同的学生头部进行编号，此编号就代表这位学生，制成的数据集命名为ClassTest，依此类推，每一个编号的图片数应为240张，有些编号少于240张是由于在某些帧中头部存在被遮挡的情况，数据分布如表3所示。 Table 2 Training experiment data distributio 数据集 抬头训练集 低头训练集 ClassUD 1065 1065 ClassUD-A 4260 4260 表2. 训练实验数据分布 Table 3 Test data distributio 编号 数据集 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ClassTest 240 240 219 240 215 240 240 240 226 240 52 240 240 234 表3. 测试实验数据分布 4.3. 实验对比 4.3.1. 数据增强实验 本节中的实验分别在五个深度学习分类模型上进行，迭代次数为80次，批量输入尺寸为32。第一个实验用Vgg16模型进行训练及测试，第二个实验用Googlenet模型进行训练及测试，第三个实验是在Resnet50模型下进行训练及测试，第四个实验在Mobilenev2模型下进行训练及测试。第五个实验用Alexnet模型进行训练及测试，所有实验均在数据集ClassUD及ClassUD-A上进行。学习率是深度学习中的一个重要的超参，如何设置学习率是训练出好模型的关键要素之一。为了在五个模型上对同一数据集做实验对比分析，需要在同一实验条件下进行实验，所以对于模型的学习率，根据经验分别设置了0.001及0.0001两个不同的值。 当学习率为0.001时，在数据集ClassUD及ClassUD-A上的实验结果如表4及图7所示。 Table 4 Experimental results when the learning rate is 0.00 方法 数据集 Vgg16 Googlenet Resnet50 Mobilenetv2 Alexnet ClassUD 训练时间(/小时) 11.50 2.4 1.23 4.33 0.42 平均训练精度(%) 49.32 91.88 81.92 98.33 77.65 平均验证精度(%) 50.03 81.28 77.96 91.33 70.83 ClassUD-A 训练时间(/小时) 49.22 10.06 5.29 18.57 1.41 平均训练精度(%) 49.54 96.38 79.05 99.03 96.38 平均验证精度(%) 50.02 95.85 81.82 98.77 95.72 表4. 学习率为0.001时实验结果 由表4及图7可知，当学习率为0.001时，在数据集ClassUD上，训练耗时最少的模型为Alexnet，约为0.42小时，耗时最多的模型为Vgg16，约为11.50小时，训练与验证精度最高的模型为Mobilenetv2，分别为98.33%与91.33%，训练与验证精度最低的模型为Vgg16，约为49.32%与50.03%。在数据集ClassUD-A上，训练耗时最少的依然是Alexnet模型，约为1.41个小时，耗时最多的依然是模型Vgg16，约为49.22个小时，训练与验证精度最高的模型为Mobilnetv2，分别为99.03%及98.77%，训练及验证精度最低的模型为Vgg16，约为49.54%及50.02%。 图7. 五个模型的训练及验证图 数据增强后，对于Alexnet、Mobilenetv2及Googlenet模型来说，训练及验证精度都得到了不同程度上的提升；而对于Vgg16模型来说，数据增强几乎没有什么效果；对于Resnet50模型，训练精度反而还下降了；但是训练时间也同时在成倍的增长。Vgg16及Resnet50首先不是我们考虑的模型，其实按照训练时间来说，选择Alexnet模型最为合适，但是它较依赖于数据集的大小，而对于Googlenet及Mobilenetv2模型在ClassUD上表现得比较好，在ClassUD-A上更好，网络相对稳定且在不断的学习。 当学习率为0.0001时，在数据集ClassUD及ClassUD-A上的实验结果如表5及图8。 由表5及图8可知，当学习率为0.0001时，在数据集ClassUD上，训练耗时最少的模型为Alexnet，约为0.42小时，耗时最多的模型为Vgg16，约为11.49小时，训练与验证精度最高的模型为Mobilenetv2，分别为98.92%与87.76%，训练与验证精度最低的模型为Resnet50，约为82.41%与79.13%。在数据集ClassUD-A上，训练耗时最少的依然是Alexnet模型，约为1.47个小时，耗时最多的是模型Vgg16，约为49.22个小时，训练与验证精度最高的模型为Mobilnetv2，分别为99.37%及98.82%，训练及验证精度最低的模型为Resnet50，约为81.94%及85.61%。 Table 5 Experimental results when the learning rate is 0.000 方法 数据集 Vgg16 Googlenet Resnet50 Mobilenetv2 Alexnet ClassUD 训练时间(/小时) 11.49 2.6 1.29 4.45 0.42 平均训练精度(%) 94.23 93.95 82.41 98.92 95.13 平均验证精度(%) 83.28 85.91 79.13 87.76 85.76 ClassUD-A 训练时间(/小时) 49.22 10.4 5.30 18.72 1.47 平均训练精度(%) 98.16 97.68 81.94 99.37 98.30 平均验证精度(%) 98.17 97.07 85.61 98.82 97.72 表5. 学习率为0.0001时实验结果 图8. 五个模型的训练及验证图 数据增强以后，对于Alexnet、MobilenetV2、Googlenet及Vgg16模型来说，训练及验证精度都得到了不同程度上的提升；对于Resnet50模型，训练精度反而下降了一点；训练时间也同时在成倍的增长。Resnet50首先不是我们考虑的模型，同时Vgg16的训练时间太长，也不是我们考虑的模型。而Alexnet、Googlenet及Mobilenetv2模型不管是在ClassUD上还是在ClassUD-A上都表现得比较好，网络相对稳定且在不断的学习。 通过两个不同学习率及不同数据集下的实验，得出在数据集ClassUD-A上的实验效果比数据集ClassUD效果更好，在学习率为0.0001时比学习率为0.001时效果更好，所以之后的实验将在数据集ClassUD-A及学习率为0.0001的条件下进行。 4.3.2. Swish激活函数实验 分别进行三个实验，把Alexnet、Googlenet及Mobilenetv2网络模型的激活函数替换为Swish后，称这些网络为Alexnet_S、Googlenet_S及Mobilnetv2_S，并在数据集ClassUD-A上进行了Alexnet、Alexnet_S、Googlenet、Googlenet_S、Mobilenetv2及Mobilenetv2_S实验的对比。实验结果见表6及图9。 Table 6 Experimental results of different model 方法 数据集 ClassUD-A Alexnet 训练时间(/小时) 平均训练精度(%) 平均验证精度(%) 1.47 98.30 97.72 Alexnet_S 训练时间(/小时) 平均训练精度(%) 平均验证精度(%) 1.65 97.86 97.32 Googlenet 训练时间(/小时) 平均训练精度(%) 平均验证精度(%) 10.4 97.68 97.07 Googlenet_S 训练时间(/小时) 平均训练精度(%) 平均验证精度(%) 11.12 96.55 95.47 Mobilenetv2 训练时间(/小时) 平均训练精度(%) 平均验证精度(%) 18.72 99.37 98.82 Mobilenetv2_S 训练时间(/小时) 平均训练精度(%) 平均验证精度(%) 18.83 99.55 99.00 表6. 不同模型的实验结果 图9. 三个模型的训练及验证图 从表6及图9可知，在数据集ClassUD-A上，我们更改模型的激活函数为Swish后，在训练时间上，Alexnet_S比Alexnet多花了0.18 h、Googlenet_S比Googlenet多花了0.72 h、Mobilenetv2_S比Mobilenetv2多花了0.11 h；在平均训练精度上，Alexnet_S比Alexnet减少了0.44%，Googlenet_S比Googlenet减少了1.13%，Mobilenetv2_S比Mobilenetv2提高了0.18%；在平均验证精度上，Alexnet_S比Alexnet增加了0.01%，Googlenet_S比Googlenet减少了1.47%，Mobilenetv2_S比Mobilenetv2提高了0.18%。综合上述分析，在Alexnet_S、Googlenet_S及Mobilenetv2_S模型中，Mobilenetv2_S是训练时间增时最少，也是平均精度增加最多，更是训练精度及验证精度最高的模型。所以对于学生头部状态的判别选用Mobilenetv2_S模型进行实验。 4.3.3. 头部状态分类判别实验 在进行分类判别之前，对学生头部状态数据集ClassTest进行了人工观察，观察结果见表7，进而用Mobilenetv2_S模型对学生头部状态数据集ClassTest进行分类判别，结果见表8。而人工观察与算法分类判别结果的平均值误差对比见表9。规定抬头状态比例达到60%及以上的学生为认真学习状态，低头状态比例达到60%以上的学生为非认真学习状态，若两种状态比例相近且不属于上面两类，判断学生为注意力不集中状态。 Table 7 Manual observation result 学生 观察结果 数据集 ClassTest 抬头(%) 低头(%) 1 240 85.83 14.17 2 240 80.83 19.17 3 219 33.33 66.67 4 240 62.92 37.08 5 215 40.93 59.07 6 240 28.75 71.25 7 240 67.50 32.50 8 240 72.92 27.08 9 226 73.45 26.55 10 240 94.58 5.42 11 52 80.77 19.23 12 240 68.33 31.67 13 240 71.67 28.33 14 234 84.19 15.81 表7. 人工观察结果 Table 8 Test data experimental result 学生 分类精度 数据集 ClassTest 精度(%) 抬头(%) 低头(%) 1 240 97.50 86.67 13.33 2 240 97.92 83.75 16.25 3 219 87.67 26.48 73.52 4 240 96.67 65.42 34.58 5 215 95.81 45.12 54.89 6 240 89.58 32.08 67.92 7 240 95.83 70.83 29.17 8 240 96.25 69.58 30.42 9 226 88.94 60.17 39.82 10 240 88.75 84.17 15.83 11 52 92.31 73.08 26.92 12 240 95.42 71.67 28.33 13 240 100 71.67 28.33 14 234 99.14 83.33 16.67 表8. 测试数据实验结果 Table 9 Comparison of the results of the student’s head state error of the two different method 方法平均值 状态 人工观察 算法分类 误差 抬头(%) 67.57 66.00 1.57 低头(%) 32.43 33.99 1.56 表9. 两种不同方法的学生头部状态结果误差对比 从表7来看，学生1、2、4、7、8、9、10、11、12、13、14在时常40分钟的课堂里为认真学习状态，而学生3、6为非认真学习状态，学生5的抬头比例及低头比例相近，我们认为此学生在课堂里为注意力不集中状态。 从表8分类精度来看，对于14个学生目标，有10个学生头部的分类精度均在92.31%至100%之间，4个学生头部的分类精度均在87.67%至89.58%之间，基本达到检测要求，其中4个低于90%分类精度的原因是学生头部存在部分遮挡，导致检测结果不佳，从检测抬头低头比例来看，学生1、2、4、7、8、9、10、11、12、13、14在课堂中为认真学习状态，而学生3、6为非认真学习状态，学生5为注意力不集中状态。 从表9可知，我们的算法检测结果平均值与人工观察结果平均值相差不大，学生学习状态也大致相同。 综合以上分析，提出的Mobilenetv2_S算法适用于自建数据集并取得了良好的分类效果。