陈 藩, 施一萍, 胡佳玲, 谢思雅, 刘 瑾
(上海工程技术大学 电子电气工程学院,上海 201620)
在课堂学习中,学生的学习状态对学生的成绩有着重要影响。因此分析学生课堂学习是否疲劳能很好的帮助老师了解学生注意力情况,为教学评级、教学质量分析以及教学改进提供重要参考。传统的疲劳检测是在眼睛、嘴唇两个面部特征的基础上利用规则分类[1]的方式进行疲劳判断,但这种方法准确率不高。也有一些学者[2~4]提出了Adaboost滤波器法以及级联回归法来进行疲劳识别,但实时性不强[5]。对此,本文提出一种基于改进多任务级联卷积神经网络(multi-task cascaded convolutional neural networks,MTCNN)[6]的疲劳检测算法来实现学生疲劳状态的检测。在MTCNN的基础上级联眼部定位网络通过多任务约束学习实现眼部精准定位,再对眼、嘴状态进行识别[7],实现学生课堂疲劳状态检测,提高了检测方法的准确率与实时性。
MTCNN是一种联合人脸边界框和关键点的检测的算法,它是目前在人脸以及关键点检测定位中的最佳方法之一,主要流程如图1所示。
MTCNN首先将图像进行不同尺度的变换,构造图像金字塔,如图1所示,然后分别输入到3个级联网络结构:P-Net,R-Net,0-Net。
图1 MTCNN算法流程
对于MTCNN而言,主要完成3个任务。
1)人脸分类:此任务通过交叉熵损失函数来实现,其中,Pi为人脸的概率,yi为真实类别的标签,若为人脸,则为值1,若不是则值为0。公式如下所示
(1)
(2)
3)面部关键点定位:由于人脸关键点检测类似于边界框回归任务,可通过最小化欧氏距离回归获得人脸关键点坐标,公式如下所示
(3)
根据对MTCNN分析可知,它的主要任务是人脸检测。P-Net 和R-Net主要是为了完成人脸候选窗的提取和筛选,并通过将它和人脸特征点信息相结合来提高网络提取信息的有效性,只有O-Net才能确定人脸特征点位置。然而当人脸被遮挡或者头部姿势变化很大时,O-Net网络很难实现人脸关键点的精确定位。因此,为了提高眼睛定位的准确性,本文对MTCNN网络进行了改进,通过再级联一个眼睛定位网络,从而使得人眼定位更加精确。
考虑到人眼定位并不是一个独立的问题,它会受到诸如头部姿势、遮挡、年龄、性别等众多因素的影响,因此,有效地发现和利用这些因素之间的内在相关性将有助于更准确的定位人眼。通过将头部姿势和是否佩戴眼镜分别作为辅助任务一和辅助任务二,以任务约束学习的方式来优化眼睛定位主要任务。眼睛定位(eye positioning,EP)网络的结构如图2所示。其中,第一个卷积层采用了5×5大小的卷积核,第二个以及第三个卷积层采用了3×3大小的卷积核,第四个卷积层采用了2×2大小的卷积核。池化层采用2×2的最大值池化。最后进行眼睛定位主任务和头部姿势变化、是否佩戴眼睛辅助任务。其中,所有卷积步长为1,池化层步长为2。
图2 眼睛定位(EP)网络
由于该网络需要用于实现多任务学习,因此,每个卷积层都包含着产生多个特征映射的过滤器组。传统的多任务学习主要是通过共同学习来提高多个相关任务的泛化能力。比如总共有T个任务,那么它的损失函数为所有不同任务的损失函数的和,可表示为
(4)
(5)
式中r为主要任务,a为辅助任务,为了简化起见,将正则化项给省略。
在眼、嘴部状态识别过程中,由于待分类的眼部及嘴部目标区域图像尺寸较小,而且经过定位网络有效的眼部图像,图像特征得到了简化。考虑到疲劳检测的有效性和实时性。所以选取输入尺寸小,结构简单的网络模型进行训练,眼嘴部状态识别(state recognition,SR)网络,如图3。
图3 眼、嘴状态识别网络(SR)
其中,卷积层均采用了5×5,步长为1的卷积核,池化层采用2×2,步长为2的最大值池化。识别效果如图4。
图4 眼睛与嘴部状态
在神经网络中,常用的激活函数如ReLU在训练过程中会因为梯度消失而造成无法收敛。因为ReLU在x<0时梯度为0,这样就导致负的梯度在这个区间被置零,这样这个神经元就再也不会被任何数据激活。为了解决这一问题,本文采用Leaky ReLU作为激活函数,当x<0时,它的值不再是0,而是一个较小斜率(如0.01等)的函数。即f(x)=1(x<0)(ax)+1(x≥0)(x),其中a是一个很小的常数。这样不仅能够修正数据分布,同时又能留了一些负轴的值。这样避免神经元失活而造成数据丢失。
根据人的面部特征[8,9]判断疲劳状态时,卡内基梅隆研究所提出的PERCLOS方法是一种较为常用的检测方法。它是指在所选取的时间范围内,人眼处于闭合状态所占时间的百分比。其计算公式如下
(6)
根据经验可以知道,当计算值大于等于0.4时,就表示学生处于疲劳状态,否则即为正常状态。另外,人在疲劳的状态下,不但会不停的眨眼睛还会打哈欠。所以本文也将打哈欠考虑在疲劳判别的过程中。根据研究表明,人打哈欠的时长一般为3~5 s。因此本文选取3 s作为是否打哈欠的判断标准,以此协助眼部判定从而更为准确的判断学生是否疲劳。
在本文样本收集过程中,为了解决睁闭眼、张闭嘴样本不均衡的问题,通过对ZJU[10]眨眼视频数据集采集包括睁闭眼两种状态共计约9 000张图片,其中1 000张图片(正负样本各500张)用于后续的模型测试,其余的样本则用于训练。
嘴部数据集则是通过YawDD[11]疲劳驾驶视频数据集和其他视频数据集所采集的嘴部样本。为了提升嘴部样本数量,本文通过对样本进行垂直旋转和水平翻转得到样本数量共计2 000张,其中200张(正负样本各100张)用于模型的测试,其余的样本则用于模型训练,部分样本如图5。
图5 部分数据样本
Windows10操作系统,Intel®CoreTMi5—8300H,8 GB内存,Python3.5编程语言,Tensorflow1.7框架,显卡型号GeForce GTX1060。
本文将所提出的检测方法与参考文献[12,13]所提出的进行对比。由于眼部存在戴眼镜,手扶着头等干扰因素,因此更能检验本文算法的性能。
由实验结果如表1所示,可知,本文提出的方法无论是在准确率还是在时间开销上都要比参考文献[12,13]所提出的方法要好。并且本文通过简化图像特征,使得利用结构简单的网络实现眼、嘴部状态分类成为可能。
表1 眼、嘴部状态分类测试结果
4.3.1 算法测试效果
本文采集了5位测试者在教室的学习状态短视频,包含了不同性别以及是否配戴眼镜的情况。并且让测试者做出不同的疲劳行为,结果如表2所示。
表2 眨眼、哈欠行为测试结果
由测试结果可以看出,本文的疲劳检测算法在实际环境中展现出了较高的准确率。
4.3.2 实时测试效果
为了清晰地展示运行效果,依据PERCLOS疲劳判断标准,本文用实时视频来进行测试。测试效果如图6所示。
图6 疲劳检测系统示意
由图6可知,本文提出疲劳检测方式的实时性也极高,能够及时地帮助老师发现疲劳学生,并且加以提醒,提高课堂教学环境。
本文提出了一种基于卷积神经网络(CNN)的学生课堂疲劳检测算法。在MTCNN的基础上级联了新的神经网络并结合任务约束学习的方式实现眼部的精准定位,同时结合嘴部疲劳状态实现多特征融合的疲劳检测方法,并且采用了全新的激活函数,避免了神经元失活的影响。实验结果表明:本文提出的方法不仅有着较高的准确率而且实时性良好。但教室是个很复杂的环境,要能更加准确及时地判定每位同学的状态还需要进一步研究,从而实现真正意义上的智慧课堂与智慧教育。