为了判断分析并反馈孩童是否昏睡状态,以预防因分心后排而导致的交通事故,本团队根据基于回归树对齐算法中获取的数据,建立了疲劳度评分机制。
本评分机制采用人脸关键点智能标注模型检测人脸,通过人脸识别68特征点检测、分别获取左右眼以及嘴部的面部标志的索引,通过对视频流进行灰度化处理,检测出人眼的位置信息通过影像中人脸相应关键点位的前后变化及相对位置变化进行分析,可以得出孩童眨眼频率、打哈欠、瞌睡点头等显示疲劳程度的行为标志。从而对孩童的疲劳度进行打分。
通过疲劳度评分机制,可以精确地分析并返回孩童是否昏睡以及睡眠状态等信息,使分级预警以及处理系统更加完善,构成完整的反馈机制,从而帮助驾驶员安心驾驶。
眼睛开合度
对于眼睛开合度,团队通过基于dlib人脸识别68特征点检测、分别获取左右眼面部标志的索引,通过opencv对视频流进行灰度化处理,检测出人眼的位置信息,依此对开合度进行计算。
图12:眼睛长宽比选取点位
在人脸姿态估计模型中,系统采用计算眼睛长宽比实时变化状况的方式以计算眨眼频率,从而判断得出孩童的疲劳度状态,其中模型识别所采用的计算眼睛长宽比点位如图12所示。
模型根据图12参考点位以及人脸关键点智能标注模型所获得的人脸左右眼点位集,采用公式1.24计算实时眼睛长宽比:
计算得出的EAR小于等于0.2时,则模型将此时的孩童视为闭眼状态。根据公式1.1分别计算出左右眼的实时长宽比,系统将两个比值相加求得平均值,通过模型实时比对孩童眼睛长宽比前后的变化及整体位置变化以判断孩童是否处于昏睡状态。
嘴部开合度
对于嘴部开合度,团队通过基于dlib人脸识别68特征点检测、分别获取左右眼面部标志的索引,通过opencv对视频流进行灰度化处理,检测出嘴部的位置信息,依此对开合度进行计算。
在人脸姿态估计模型中,系统采用计算眼睛长宽比实时变化状况的方式以计算眨眼频率,从而判断得出孩童的疲劳度状态,其中模型识别所采用的计算嘴部
长宽比点位如图13所示。
图13:嘴部长宽比选取点位
模型根据图9参考点位以及人脸关键点智能标注模型所获得的人脸上下唇点位集,采用公式1.25计算实时嘴部长宽比:
当计算得出的MAR大于0.5时,模型则将此时的孩童视为张嘴状态。根据公式1.2所计算得出的嘴部实时长宽比,系统通过模型实时比对孩童嘴部长宽比前后的变化及整体位置变化以判断孩童是否处于打哈欠状态。
3.3.3如何较为精准的获取婴儿状态?
本团队查询相关资料发现,人脸表情是一种最直接、最有效的情感表达方式。也是人类日常交流中最主要的信息传递方式。因此,本团队研发了表情识别模块,以更有效地评估孩童乘坐状态。
本团队采用浅层稠密网络视频监控人脸识别算法,进行人体跟踪和表情识别。该算法能有效追踪人体并识别表情特征,通过基于风格迁移的中性表情生成和CNN面部特征提取,实现准确的表情识别。该算法简单高效,提高了人脸识别的准确性和效率,为实时监控和表情识别领域提供了技术支持。
基于浅层稠密网络视频监控的人脸识别算法
视频监控是通过视频摄影设备来获取移动目标信息的图像处理技术,在视频监控中,获取人脸信息的关键技术包括人脸图像识别以及人体跟踪。人体跟踪是实现运动目标特征提取的重要步骤。为了提升系统视频监控人脸识别的效率,本团队采用了一种特定的人体跟踪方法,其跟踪流程如图 14所示。
图14:视频监控人体跟踪流程
在图 14,视频监控人体跟踪过程首先读取监控视频中的人体帧数,并提取其中的一帧图像。针对识别到的视频帧数,采用运动历史图像来计算当前帧与上一帧之间的距离,比较计算距离与设定值之间的差异。当计算距离大于设定值,则采用运动历史图像再次计算两帧之间的距离,当计算距离小于设定值,则认为完成跟踪。在人体跟踪识别中,研究中为了对运动目标进行跟踪识别,采用了运动历史图像来进行模块跟踪,以H为运动历史图像中的像素点强度,其计算方式如式(1)所示:
(1)
式(1)中,τ 表示视频场景中的两帧之间的持续时间;t表示目标像素点时刻;δ表示衰退参数;ψ(x,y,t)表示帧间差分法。此外在跟踪过程中,像素点的权值大小会影响目标检测的稳定性和可靠性,权重计算如式(2)所示:
(2)
式(2)中,C 表示归一化系数;qn 表示颜色分布概率;h 表示区域半径;m 表示像素点总数。其中归一化系数表示如式(3)所示:
(3)
其次采用相似性来度量运动目标模板之间的匹配程度,如式(4)所示:
(4)
式(4)中,qn(x)、qn(y) 分别表示图像 x 轴 y 轴上的颜色分布概率。
然而,值得注意的是,在视频监控中,受到社会环境以及自然环境的影响,监控视频存在显著的干扰噪声,因此为了准确实现监控视频中的人体跟踪,需要对视频图像进行预处理。对于监控视频中的图像去噪,团队采用图像滤波的方式来提取图像中的目标特征,采用中值滤波法来抑制图像中的噪声。中值滤波的基本原理是将图像中的值以其所在区域的中值代替,一维中值滤波如式(5)所示:
(5)
式(5)中,(f0, f1, …, fk)表示一维序列中的序列值;k 表示序列长度。在滤波处理后需要对图像进行增强处理,在图像增强中,团队采用过拉普拉斯锐化的方式来实现。拉普拉斯计算方式如式(6)所示:
(6)
式(6)中,(x,y)表示图像中某点的坐标。此外由于在实际的监控视频中,当光照充足时,被检测目标在运动过程中会产生较为明显的阴影,阴影的存在会在检测时被判断为前景部分,导致前景检测无法达到较好的效果,为此团队采用了一种阴影消除算法。首先将视频图像中的亮度进行建模,如式(7)所示:
(7)
式(7)中,Ek (m, n) 表示 (m, n) 处像素点的辐射度,ρk (m, n) 表示人体对光的反射系数。在亮度建模基础上,采用 HSV 来进行阴影消除,阴影检测的判别函数见式(8):
(8)
式(8)中,
、
、
表示第 k 帧图像像素点在 HSV 空间中的分量;
、
、
表示第 k 帧背景像素点在 HSV 空 间中的分量;∂、β 表示判断参数;Ts 、TB 表示阈值; 当判别函数的值为 1 时,则位置(x,y)定义为阴影, 其余为目标。
在此基础上,本团队使用一种基于浅层稠密网络的人脸识别算法。在浅层稠密网络中,首先将视频监控中的人体跟踪图像作为输入,利用第一层卷积神经网络来初步处理人体特征,以此获取到图像中的稠密区块。针对初步处理得到特征图像输送至稠密区块 1, 同时将第二层卷积神经网络作为过渡层 1,采用过渡层 1 来对图像进行卷积操作和池化操作,以此获取更为清晰的人体特征。此后将进一步得到的人体特征作为特征图输送至稠密区块 2,利用第三层卷积神经网络来实现人体图像中的人脸识别,将处理结果输送至第四层卷积神经网络中,并进行池化操作。最后通过线性转化的方式将上一阶段池化处理得到的人脸特征进行二维转化,得到可以作为输出的人脸识别结果。
图15:浅层稠密网络模型的基本结构
在浅层稠密网络的人脸识别中,对于人脸特征的提取至关重要,为此系统需提升人脸识别算法的精确率,本团队使用了一种特征融合的方式,如图 12所示。
图16:面向人脸识别的特征融合流程
图 16中显示,在人脸特征融合中,将图像数据分割成多样本,从多样本中获取不同人脸表情特征,同时将多样本数据与原始数据相融合,构建原始版本的融合数据集。其次在多样本的人脸表情特征分类中,提取出不同表情特征,并将不同的表情特征进行融合,同时构建特征融合数据集。然后利用分类器来进行表情特征分类,以上一阶段特征提取为基础,利用分类器进行人脸表情分类,在分类器的输出端,将结果分为分类融合数据集以及人脸识别结构。最后对原始融合数据集、特征融合数据集、分类数据集以及人脸识别结果进行多方决策,通过决策得到最终的人脸特征识别结果。
基于风格迁移的中性表情生成
本团队使用 Cycle-GAN 训练不同表情的生成器,将任意给定表情图像迁移到对应中性表情图像,生成器和表情一一对应。给定含有各种随机表情的人脸图像,表情识别模型通过中性表情生成器将含有表情的图像迁移到中性表情图像。在这一过程中,生成的中性表情图像不会改变原图像的身份信息,同时生成器会学习到不同表情的成分,即将不同表情的表情成分“存储”在对应的生成器中。如图17所示:
图17表情风格迁移示意图
图18 :Cycle-GAN 的网络结构
Cycle-GAN 模型结构如图18 所示,包含两个生成器和两个判别器,分别GAB、GBA、DA、DB。Cycle-GAN 可以通过学习源域(Source Domain)A 与目标域(Target Domain)B 之间的映射关系,从而完成图像到图像的风格迁移。生成器GAB学习从源域到目标域的映射f1:A→B,生成器 GBA学习从目标域到源域的映射f2:B→A。判别器 DA、DB分别用来判断各自输入的图像是否为源域 A、目标域 B 的真实图像。
Cycle-GAN 的损失函数由两部分组成:(1)生成对抗损失(Generative Adversarial Loss):
(1)
式(1)为 A→B 的生成对抗损失函数,a、b 分别为来自源域 A、目标域 B 的图像。生成器GAB尽可能生成与目标域B逼近的图像GAB(a),判别器DB则判断输入图像是否为实的目标域 B 图像。
(2)
式(2)为 B→A 的生成对抗损失函数。生成器 GBA尽可能生成与源域A逼近的图像GBA(b),判别器DA则判断输入图像是否为真实的源域 A 图像。
(2)循环一致损失(Cycle Consistency Loss):
只有生成对抗损失是无法训练模型的,因为根据上述损失函数,生成器GAB可以将所有的源域A图像都映射为目标域 B 的同一幅图像。例如可以将所有高兴表情转换为中性表情,但是这些中性表情都是同一个人。同理,生成器GBA也有同样的问题。所以在Cycle-GAN 中引入了循环一致损失函数Lcyc,公式如下:
(3)
生成器 GAB和GBA分别学习f1和f2两个映射的同时,要求GAB(GBA(b))≈b以及GBA(GAB(a))≈a。即目标域 B 的图像 b,经过f2映射得到图像GBA(b),再经过f1映射得到的图像GAB(GBA(b)),两者之间要尽可能相似。同样,对于源域A的图像a,经过 f1映射得到图像GAB(a),再经过f2映射得到的图像GBA(GAB(a)),两者之间要尽可能相似。这样就保证了在两个域之间的图像转换不会映射为同一幅图像。
最终网络的所有损失加起来为:
(4)
式(4)中 λ1、λ2、λ3 分别为调节生成损失、对抗损失和循环一致损失所占权重的超参数。在所有的损失函数中,对于生成器来说需要最小化损失函数,对于判别器来说需要最大化损失函数。
面部表情的识别可以通过比较表情图像和对应的中性表情图像之间的不同完成。Cycle-GAN 可以学习源域与目标域之间的映射关系,将不同的表情作为源域 X:
,xi为不同的表情标签(例如开心、难过、吃惊等),N 为数据集中的不同表情标签数,中性表情作为目标域 y,各自训练不同的生成器 Gxiy。生成器Gxiy学习不同表情到中性表情的映射关系,即在Gxiy“存储”了不同的表情成分。
Cycle-GAN 包含两个生成器和两个判别器,训练模型时,每次只将一类表情图像作为源域输入到生成器Gxiy中,中性表情图像作为目标域输入到生成器Gyxi中。将两个生成器生成的两幅图像输入到两个判别器中,得到两个表示图像真实度的数值。再通过模型定义的生成对抗损失和循环一致损失控制生成器生成更加真实且风格更加接近目标域的图像,最终完成图像的风格迁移。如此训练多次(次数由数据集表情类别数而定),每次用数据集中不同的表情作为源域,目标域则