一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于深度学习和机器学习的多特征融合的疲劳检测方法与流程

2022-02-19 11:24:34 来源:中国专利 TAG:


1.本发明属于计算机视觉的表情识别和疲劳检测领域,具体涉及一种将注意力机制引入表情识别的方法,特别涉及一种基于深度学习和机器学习的多特征融合的疲劳检测方法。


背景技术:

2.疲劳状态是我们在生活中很常见的一种状态,人处于疲劳状态时会出现注意力不集中,工作效率低下等表现,会对我们的工作生活产生很大的影响。对于长期需要久坐的办公人员,疲劳检测系统可以实时的检测他们的情绪精神状态,并给出相应的建议。有些时候,疲劳还容易导致重大事故发生,例如驾驶员疲劳驾驶,就很容易出现重大交通事故,因此针对驾驶员、办公人员等职业,在其工作时进行疲劳检测就显得很有必要了。
3.交通驾驶是疲劳检测系统最常见的应用场景,疲劳检测系统是利用驾驶员的面部特征、眼部信号、脑电信号等推断驾驶员的疲劳状态,并进行报警提示和采取相应措施的系统,可以对驾乘者给予主动智能的安全保障。基于硬件的疲劳检测可以使用脑电信号监测设备或者眼动检测仪器对驾驶员进行疲劳监测是最为准确的方法,但是这些设备通常贵重、笨重、不便携,驾驶员不可能长期戴着这些设备驾驶汽车,因此需要有一种既不影响驾驶员驾驶,又能很好的对驾驶员疲劳状态进行监测的设备,这些设备还要具有价格低廉、易于获取的特点。这就有了基于图像处理的疲劳检测算法。
4.基于图像的疲劳检测是图像处理领域的一个研究方向,在这个领域出现了很多算法。有基于人工提取脸部和眼部特征的算法,也有基于深度学习的算法。基于人工提取脸部和眼部特征的算法,最常见的算法是提取脸部和眼部的关键特征点,检测眼部和嘴部的宽高比,来判断眨眼频率和打哈欠频率,再将它们与预先设定的对应的阈值比较来判断是否处于疲劳状态。还有基于脸部特征点,来判断人脸的特征点空间位置关系,和先验的疲劳人脸特征点排布方式图比较,来判断是否处于疲劳状态。基于深度学习的疲劳检测算法虽然不需要人工提取特征,但是原理上和传统算法差不多,有使用卷积神经网络和递归神经网络lstm结合检测人眼是否闭合的算法,但是这些方法并没有考虑多种指标,可靠性并不高。


技术实现要素:

5.本发明的目的在于克服现有技术的不足,提供一种基于注意力特征图引导的表情识别模型,使用深度学习网络,使用迁移学习模拟人类注意力机制引导深度学习网络模型将注意力集中于人脸上特征最丰富的眼睛和嘴巴区域,提高表情识别的识别精度的基于深度学习和机器学习的多特征融合的疲劳检测方法。
6.本发明的目的是通过以下技术方案来实现的:基于深度学习和机器学习的多特征融合的疲劳检测方法,包括以下步骤:
7.s1、数据获取:通过摄像头和搭建的图像采集软件获取用户的疲劳人脸图像,通过dlib库内置的人脸检测器将只包含人脸的区域切割出来,并保存;
8.s2、构建表情识别数据集:将只包含人脸区域的疲劳人脸图像经过预处理添加到fer2013表情识别数据集中,构建一个包含开心、惊讶、害怕、伤心、生气、厌恶、正常和新增的疲劳,一共八类表情状态的表情识别数据集;
9.s3、提取注意力特征图,包括以下子步骤:
10.s31、将构建好的表情识别数据集输入在imagenet上预先训练好的50层的深度残差网络中,然后提取深度残差网络第76层输出的特征图feature map;
11.s32、将提取到的特征图feature map的图像尺寸调整为与表情识别数据集中的表情图像一致;
12.s33、对尺寸调整后的特征图进行归一化,将特征图的权重值归一化到[0,1],得到需要的注意力特征图;
[0013]
s34、将注意力特征图添加到表情识别数据集中,形成包含8种表情状态的人脸图片以及各个表情对应的注意力特征图的数据集;
[0014]
s4、训练表情识别模型:将s3得到的数据集输入19层的卷积神经网络vgg19中进行训练,得到一个经过注意力引导训练的表情识别模型;
[0015]
s5、提取传统疲劳特征:针对步骤s1中得到的只包含人脸区域的图像,通过人为判定对不同疲劳等级的人脸图像进行分级,并为每个图像手动标注疲劳等级标签;同时,利用人脸关键点检测算法和眼球跟踪算法计算并记录下不同疲劳等级下的对应的传统疲劳特征数据;
[0016]
s6、提取深度学习置信度:将s2中表情识别数据集中的疲劳人脸图像输入s4训练的表情识别模型中,得到输出的八种表情对应的置信度,将八种置信度数据记录下来;
[0017]
s7、融合多特征训练机器学习分类器:将八种表情的置信度作为特征,与传统疲劳特征数据融合后输入随机森林分类器中,并将s5中标注的疲劳等级标签输入随机森林分类器中进行训练,得到能够对疲劳等级进行识别的分类器。
[0018]
进一步地,所述步骤s1包括以下子步骤:
[0019]
s11、邀请不同用户进行图像采集,使用制作好的图像采集软件,要求用户面对摄像头模拟出不同程度的疲劳状态表情,图像采集软件操作员根据主观判定采集下摄像头拍摄的不同用户不同疲劳状态下的疲劳人脸图像;
[0020]
s12、使用dlib库的get_frontal_face_detector()函数获取dlib库内置的人脸检测器模型,对摄像头获取到的疲劳人脸图像进行人脸定位;
[0021]
s13、使用dlib库的shape_predictor()函数调用dlib库内置的训练好的人脸关键点检测模型shape_predictor_68_face_landmarks.dat对s12得到的人脸进行检测,获得68个人脸关键点的坐标。
[0022]
进一步地,所述步骤s3包括以下子步骤:
[0023]
s31、将新的表情识别数据集fer2013_fatigue的图像输入在imagenet公共数据集上预训练好的50层的resnet50深度残差卷积神经网络resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5中,然后提取该网络模型的第76层输出的特征图feature map;
[0024]
s32、把提取到的特征图feature map的尺寸也调整为与fer2013表情识别数据集中的图像一致,然后把resize过后的特征图添加到表情识别数据集fer2013_fatigue中,构
建新的数据集fer2013_fatigue_attention。
[0025]
进一步地,所述步骤s5中,利用人脸关键点检测算法和眼球跟踪算法计算并记录下不同疲劳等级下的对应的传统疲劳特征数据包括以下子步骤:
[0026]
s51、进行眼球跟踪,具体方法为:
[0027]
s511、使用dlib库的人脸关键点检测模型对眼睛的眼眶边缘关键点进行定位,在两只眼睛的边框位置圈定一个轮廓contour;
[0028]
s512、使用一张像素值全为0的全黑的图像作用于s141中对眼睛边框关键点进行定位的图像,获得人脸眼睛部位的掩膜mask,这个mask在s141中圈定的轮廓内像素值为0,在轮廓外像素值为1,由此获得两只眼睛位置的掩膜eye mask;
[0029]
s513、将获得的眼睛的掩膜eye mask与输入的图像做bitwise not运算提取眼睛作为roi;
[0030]
s514、使用双边滤波器对提取的眼部roi进行双边滤波;
[0031]
s515、使用传统形态学图像处理方法对滤波之后的图像进行腐蚀操作;
[0032]
s516、对腐蚀操作后的图像进行阈值处理,从眼睛中分离出瞳孔,找到瞳孔的中心坐标,实现眼球跟踪;
[0033]
s517、获取到瞳孔的中心坐标之后,计算两帧之间该坐标的变化情况,如果两帧之间该坐标移动的欧氏距离小于一个阈值,则认定眼睛处于凝视状态,将两帧之间该坐标移动的欧氏距离作为扫视幅度,同时记录凝视时间;
[0034]
s52、由dlib库内置的人脸关键点检测器获取人脸68个关键点,其中第36个点到第42个点为左眼的关键点,第42个点到第48个点为右眼的关键点,第48个点到第68个点为嘴巴的关键点;通过这些关键点计算双眼和嘴巴的宽高比:
[0035]
左眼的宽高比:
[0036]
右眼的宽高比:
[0037]
嘴巴的宽高比:
[0038]
其中euclidean(,)表示计算两个括号内两个点之间的欧几里得距离;lmsets[ ]表示中括号内关键点的坐标,lmsets[ ]是一个矩阵,表示为(a,b),其中a为该点的横坐标,b为纵坐标;
[0039]
当lear和rear小于预设阈值ear_threshold时,认定用户处于闭眼状态,记录用户眼睛闭合持续时间;当mar大于预设阈值mar_threshold时,认定用户处于嘴巴张开的状态,且当嘴巴张开的状态持续8帧以上时,认定用户处于打哈欠状态,记录用户打哈欠持续时间;
[0040]
erclos在疲劳检测中是一个很重要的指标:
[0041]
[0042]
在perclos指标中,在一段时间内对检测者的眼睛计算宽高比,如果眼睛的闭合程度超过一定的比例的时间与检测的总时间的比值大于一个阈值,认为被检测者处于疲劳状态;
[0043][0044][0045]
一共获得眼睛闭合持续时间、打哈欠持续时间、perclos、眨眼频率、打哈欠频率、凝视时间和扫视幅度7个传统的特征。
[0046]
本发明的有益效果是:
[0047]
1、本发明可以利用摄像头和人脸检测算法采集人脸数据,解决了基于深度学习疲劳检测算法疲劳人脸数据往往比较有限,疲劳人脸图像难以获得,导致数据集不平衡的问题。
[0048]
2、本发明允许用户对自己的面部疲劳表情图像和面部、眼动疲劳特征数据进行采集,算法可以针对每一个不同使用者专门训练,提高可靠性。
[0049]
3、本发明受人类注意力机制的启发,提出一种基于注意力特征图引导的表情识别模型,使用教师

学生式的深度学习网络,使用迁移学习模拟人类注意力机制引导深度学习网络模型将注意力集中于人脸上特征最丰富的眼睛和嘴巴区域,提高表情识别的识别精度。
[0050]
4、本发明首次提出将表情识别引入疲劳检测中,现有的疲劳检测算法,无论是传统的算法还是深度学习算法,都是只专注于疲劳情绪模式的判定和识别,而忽略了其他情绪模式对疲劳检测的影响。本发明使用机器学习算法随机森林挖掘其他七种情绪模式与疲劳情绪模式之间的关系,考虑了七种情绪对疲劳状态判定的影响,还考虑了面部表情和眼动指标,使用机器学习算法将多种疲劳检测指标进行融合,提高了算法的鲁棒性。
[0051]
5、现有的基于人工提取特征的疲劳检测算法一般是将相应的判断疲劳的指标与对应的阈值进行比较最后得出是否疲劳的判定,他们判断疲劳状态的阈值(perclos阈值、眨眼阈值、哈欠阈值、凝视阈值等)通常是固定不变的,是通过多人实验最后确定的,虽然他们的阈值是通过多人实验归纳出来的,具有一定的泛化性,但是由于每个人的特征都不一样,统一的阈值并不能可靠的对不同的人进行疲劳判断。本发明使用机器学习算法学习疲劳特征,直接对疲劳状态进行识别,解决了传统疲劳检测方法需要确定判定疲劳状态阈值的缺点。
附图说明
[0052]
图1为本发明的基于深度学习和机器学习的多特征融合的疲劳检测方法的流程图;
[0053]
图2为本发明的为本发明制作的图像采集软件以及整个疲劳检测系统的软件界面;
[0054]
图3为网络采集的疲劳人脸图像;
[0055]
图4为从预训练的resnet50的第76层提取到的人脸注意力热图;
[0056]
图5为单独使用vgg19网络训练的表情识别模型的准确率和混淆矩阵;
[0057]
图6为基于迁移注意力训练的vgg19模型的表情识别模型的准确率和混淆矩阵;
[0058]
图7为基于迁移注意力训练的vgg19模型示意图;
[0059]
图8为眼球跟踪算法示意图;
[0060]
图9为使用dlib库提取的68个人脸关键点示意图;
[0061]
图10为各个机器学习模型的对四种疲劳状态的识别准确率。
具体实施方式
[0062]
下面结合附图进一步说明本发明的技术方案。
[0063]
如图1所示,本发明的一种基于深度学习和机器学习的多特征融合的疲劳检测方法,包括以下步骤:
[0064]
s1、数据获取:通过摄像头和搭建的图像采集软件获取用户的疲劳人脸图像,通过dlib库内置的人脸检测器将只包含人脸的区域切割出来,并保存;包括以下子步骤:
[0065]
s11、邀请不同用户进行图像采集,使用制作好的图像采集软件,图像采集软件需要具有保存摄像头拍摄到的图像的功能,添加四个按钮,每个按钮分别对应保存不疲劳、轻度疲劳、中度疲劳和重度疲劳四类图像;要求用户面对摄像头模拟出不同程度的疲劳状态表情,图像采集软件操作员根据主观判定采集下摄像头拍摄的不同用户不同疲劳状态下的疲劳人脸图像;
[0066]
为了增加数据集的多样性,使得深度学习模型有更加多的数据来训练。还可以从互联网上获取疲劳人脸图像,然后通过人工判定的方式对获取的疲劳人脸图像进行不疲劳、轻度疲劳、中度疲劳和重度疲劳的等级分类。
[0067]
s12、如图2所示,在疲劳检测系统软件的后端加入了人脸检测算法,具体方法为:使用dlib库的get_frontal_face_detector()函数获取dlib库内置的人脸检测器模型,对摄像头获取到的疲劳人脸图像进行人脸定位;使用这个人脸检测器对摄像头获取到的视频流进行人脸检测,如果摄像头中出现人脸,则可以检测到人脸并获取人脸相对于屏幕所在位置的四个坐标点,由这四个坐标点可以确定一个矩形检测框bounding box,这个检测框中就包含摄像头中出现的人脸,如图3所示。通过这个我们就可以无限制的获取人脸表情数据,不仅仅是疲劳人脸图像,其他表情图像也可以获取,这样我们就可以大量地获取不同表情的人脸图像数据,这也解决了现在表情识别数据集普遍存在的各个类别的图像数量不平衡的问题,也解决的疲劳人脸图像难以获取的问题。
[0068]
s13、为了后面提取传统疲劳特征,还需要在疲劳检测系统软件中添加人脸关键点检测算法,具体方法为:使用dlib库的shape_predictor()函数调用dlib库内置的训练好的人脸关键点检测模型shape_predictor_68_face_landmarks.dat对s12得到的人脸进行检测。这个人脸关键点检测器可以检测人脸68个关键点,使用这个关键点检测器我们可以获得这68个关键点的坐标。人脸关键点检测是为了后面的步骤计算perclos、眨眼频率、打哈欠频率、哈欠持续时间等传统的判定疲劳状态的特征指标。
[0069]
s2、构建表情识别数据集:将只包含人脸区域的疲劳人脸图像经过预处理添加到fer2013表情识别数据集中,预处理即将疲劳人脸图像的尺寸调整为与fer2013表情识别数
据集中的图像一致,构建一个包含开心、惊讶、害怕、伤心、生气、厌恶、正常和新增的疲劳,一共八类表情状态的表情识别数据集fer2013_fatigue;即把疲劳也当成一种表情来识别。
[0070]
s3、提取注意力特征图,包括以下子步骤:
[0071]
s31、将构建好的表情识别数据集fer2013_fatigue输入在imagenet上预先训练好的50层的深度残差网络resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5中,然后提取深度残差网络第76层输出的特征图feature map;每一种表情图像的每一张图片都有其对应的特征图。我们将resnet50每一层的特征图都提取出来并利用卷积神经网络特征图可视化的方法将它们都可视化出来并获得特征图权重分布的热图heat map,如图4所示,权重大区域的在热图上颜色深,权重小区域的在热图上颜色浅。经过我们的大量实验发现,相比起其他层输出的特征图feature map,第76层输出的特征图的热图heat map在人脸图像上双眼和嘴巴部位颜色较深,这就意味着resnet50网络将更多的注意力分布到了人的眼睛和嘴巴上。经过大量的心理学眼动实验证明,人类在观看人脸图像并进行人脸识别、表情识别任务的时候,通常将更多的注意力集中到人脸的双眼和嘴巴等部位,在眼动实验中,这些区域的注视点相比起其他区域也要多很多,因为这些区域的特征也比其他区域的要丰富得多,将更多的注意力放到这些区域有利于提高表情识别任务的准确率。如图5所示为单独使用vgg19训练8类表情识别的准确率及混淆矩阵,图6所示为使用了迁移注意力引导训练的模型的表情识别的准确率及混淆矩阵。
[0072]
s32、将提取到的特征图feature map的图像尺寸调整为与表情识别数据集fer2013中的表情图像一致;
[0073]
s33、对尺寸调整后的特征图进行归一化,将特征图的权重值归一化到[0,1],得到需要的注意力特征图;
[0074]
s34、将注意力特征图添加到表情识别数据集fer2013_fatigue中,形成包含8种表情状态的人脸图片以及各个表情对应的注意力特征图的数据集fer2013_fatigue_attention。
[0075]
s4、训练表情识别模型:如图7所示,将每张人脸表情图像与其对应的注意力特征图在通道维度上进行concatenate拼接操作,将注意力特征图作为人脸表情图像的先验注意力引导信息,输入19层的卷积神经网络vgg19中进行训练,引导vgg19网络将注意力集中到眼睛和嘴巴区域,提高表情识别的准确率,得到一个经过注意力引导训练的表情识别模型;通过s4可以获得一个高鲁棒性、高准确率的深度学习表情识别模型。之后我们可以用这个表情识别模型来获得各个表情的置信度。
[0076]
接下来对用户进行离线训练,让将要使用该疲劳检测系统的用户进行离线训练。深度学习模型只能得到各个表情的置信度,由于训练数据集较少,只有图像的静态信息,模型鲁棒性不足,因此需要结合传统特征(这些特征考虑了动态时序信息,例如眨眼、打哈欠频率等,都是一段时间能采集的特征),以此来在有限的数据集之下的得到一个更加稳定可靠精度更高的疲劳检测系统。
[0077]
s5、提取传统疲劳特征:针对步骤s1中得到的只包含人脸区域的图像,通过人为判定对不同疲劳等级的人脸图像进行分级,分为不疲劳、轻度疲劳、中度疲劳和重度疲劳四个等级,并为每个图像手动标注疲劳等级标签;同时,利用人脸关键点检测算法和眼球跟踪算法计算并记录下不同疲劳等级下的对应的传统疲劳特征数据;传统疲劳特征数据包括
perclos、眨眼频率、打哈欠频率、闭眼持续时间、打哈欠持续时间、眼睛长宽比、嘴巴长宽比和凝视时间等。
[0078]
步骤s5中,利用人脸关键点检测算法和眼球跟踪算法计算并记录下不同疲劳等级下的对应的传统疲劳特征数据包括以下子步骤:
[0079]
s51、进行眼球跟踪,如图8所示,具体方法为:
[0080]
s511、使用dlib库的人脸关键点检测模型对眼睛的眼眶边缘关键点进行定位,在两只眼睛的边框位置圈定一个轮廓contour;
[0081]
s512、使用一张像素值全为0的全黑的图像作用于s141中对眼睛边框关键点进行定位的图像,获得人脸眼睛部位的掩膜mask,这个mask在s141中圈定的轮廓内像素值为0,在轮廓外像素值为1,由此获得两只眼睛位置的掩膜eye mask;
[0082]
s513、将获得的眼睛的掩膜eye mask与输入的图像做bitwise not运算提取眼睛作为roi;
[0083]
s514、使用双边滤波器对提取的眼部roi进行双边滤波;
[0084]
s515、使用传统形态学图像处理方法对滤波之后的图像进行腐蚀操作;
[0085]
s516、对腐蚀操作后的图像进行阈值处理,从眼睛中分离出瞳孔,找到瞳孔的中心坐标,实现眼球跟踪;
[0086]
s517、眼球跟踪是为了计算凝视时间、眼球扫视幅度等生理眼动指标,这些眼动指标对判定疲劳状态也有帮助。获取到瞳孔的中心坐标之后,计算两帧之间该坐标的变化情况,如果两帧之间该坐标移动的欧氏距离小于一个阈值,则认定眼睛处于凝视状态,将两帧之间该坐标移动的欧氏距离作为扫视幅度,同时记录凝视时间;
[0087]
s52、由dlib库内置的人脸关键点检测器获取人脸68个关键点,如图9所示,其中第36个点到第42个点为左眼的关键点,第42个点到第48个点为右眼的关键点,第48个点到第68个点为嘴巴的关键点;通过这些关键点计算双眼和嘴巴的宽高比:
[0088]
左眼的宽高比:
[0089]
右眼的宽高比:
[0090]
嘴巴的宽高比:
[0091]
其中euclidean(,)表示计算两个括号内两个点之间的欧几里得距离;lmsets[ ]表示中括号内关键点的坐标,lmsets[ ]是一个矩阵,表示为(a,b),其中a为该点的横坐标,b为纵坐标;
[0092]
当lear和rear小于预设阈值ear_threshold(依据经验,设置为0.25)时,认定用户处于闭眼状态,记录用户眼睛闭合持续时间;当mar大于预设阈值mar_threshold(依据经验,设置为0.55)时,认定用户处于嘴巴张开的状态,且当嘴巴张开的状态持续8帧以上时,认定用户处于打哈欠状态,记录用户打哈欠持续时间;
[0093]
perclos(percentage of eyelid closure over the pupil)在疲劳检测中是一个很重要的指标,通过大量实验证明,perclos是判断一个人是否处于疲劳状态的最可靠的
指标之一:
[0094][0095]
在perclos指标中,在一段时间内对检测者的眼睛计算宽高比,如果眼睛的闭合程度超过一定的比例(如70%或80%)的时间与检测的总时间的比值大于一个阈值,认为被检测者处于疲劳状态;
[0096][0097][0098]
一共获得眼睛闭合持续时间、打哈欠持续时间、perclos、眨眼频率、打哈欠频率、凝视时间和扫视幅度7个传统的特征。
[0099]
s6、提取深度学习置信度:将s2中表情识别数据集中的疲劳人脸图像输入s4训练的表情识别模型中,得到输出的八种表情对应的置信度,将八种置信度数据记录下来;
[0100]
s7、融合多特征训练机器学习分类器:将八种表情的置信度作为特征,与传统疲劳特征数据融合后输入随机森林random forest分类器中,并将s5中标注的疲劳等级标签输入随机森林分类器中进行训练,得到能够对四种疲劳等级进行识别的分类器。如图10所示,经过实验发现随机森林random forest分类器疲劳等级识别分类的准确率最高。因此采用随机森林分类器作为最终的疲劳检测分类器。
[0101]
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献