石锦璇,王 昆
(山西大学 物理电子工程学院,山西 太原 030006)
近年来,随着我国汽车保有量急剧增长,交通事故也频频发生。其中,疲劳驾驶是引发交通事故的主要原因之一,严重威胁着道路交通安全。研究表明,疲劳驾驶状态下发生事故或接近发生事故的风险是清醒驾驶状态下的4~6倍[1-2]。因此,开发车载疲劳预警系统,准确快速检测驾驶员疲劳状态成为研究的热点。
与传统的主观评价方法相比,利用生理电信号来评价驾驶员驾驶疲劳状态能做到客观准确,是一种较有前景的疲劳状态研究方法。在众多的生理信息指标中,脑电信号(EEG)一直被誉为疲劳监测方法的“金标准”。它与精神和身体活动密切相关。车辆驾驶涉及运动、推理、视觉和听觉处理、决策、感知和识别等各种功能。所有与驾驶相关的身心活动都反映在脑电图信号中[3]。近年来,深度学习在许多具有挑战性的分类任务中取得了成功,深度学习已成为脑电信号处理领域的一个热点。例如,Ogino等[4]比较了功率谱密度(PSD)、自回归(AR)建模和多尺度熵(MSE)3种方法对前额叶单通道脑电信号进行特征提取。利用PSD特征和逐步线性判别分析(SWLDA)进行特征选择,利用支持向量机(SVM)进行分类,获得了72.7%的分类准确率。Venkat和Chinara[5]提出了一种利用小波数据包变换(WPT)提取时域特征的单通道脑电信号疲劳检测模型。Foong等[6]进一步证实脑电图的功率带可以用来估计驾驶员疲劳状态,并在所试驾驶员的脑电图中都观察到了β波(12 Hz~35 Hz)功率带在疲劳前后的明显变化。张淞杰等[7]采用将经验模态分解与能量谱算法相结合的特征提取方法,分析模拟驾驶时采集的EEG信号,并在粒子群算法优化的多层感知超限学习机分类器中实现对驾驶员疲劳状态的检测。Lin等[8]提出了一种4维卷积神经网络(4DCNN)算法,将脑电图信号的所有信息与人类状态和行为表现的变化联系起来。4DCNN具有更好的预测性能。结果显示,与3DCNN相比,4DCNN的均方误差提高了3.82%,相关系数提高了11.98%。
目前,对于驾驶员脑电信号疲劳检测大都使用单通道脑电信号作为识别依据,然后进行特征提取、分类检测等过程。然而,这种方式虽然数据复杂度低,计算简便,但在识别过程中提取的特征不充分,没有考虑到多个通道脑电信号间的特征,从而导致识别准确率不高,而多通道脑电信号的维度较高,计算复杂。因此,本文提出了基于栈式自编码的脑电信号疲劳检测模型,对多通道脑电信号的疲劳特征进行提取,同时能减少输入数据的特征维度,提高计算效率。实验结果表明,该模型能够有效识别驾驶员疲劳状态,对驾驶员疲劳检测系统的开发具有重要意义。
本文使用的是上海交通大学提供的SEED-VIG数据集[9],共21个受试者(平均年龄23.3岁,其中女性12人)参与23次模拟驾驶实验,每次实验持续时间约为2 h,在实验过程中,以1 000 Hz采样率收集17个通道的脑电信号,通道位置如图1 所示。
图1 脑电信号采集通道电极分布图(CPZ为参考电极)
此外,在实验过程中,通过SMI眼睛跟踪眼镜,用PERCLOS标号(单位时间内眼睛闭合时间所占的百分率)来标记疲劳等级,每8 s计算一次,每次实验共885次标记。PERCLOS表示受试者当前的警惕度,介于(0,1)之间,值越小表示警惕度越高。将PERCLOS指数按阈值0.35和0.7分为3类:清醒、疲劳、嗜睡,分别标记0,1,2。SEED-VIG数据集各标签样本数量如表1 所示。
表1 数据集标签样本数量统计
预处理包括脑电信号降采样和去噪处理。原始信号的采样频率为1 000 Hz,为了减小数据的复杂度,将信号降采样到200 Hz。然后通过一个1 Hz~50 Hz的带通滤波器,目的是对脑电信号进行降噪和去伪迹处理。将得到的50 Hz频带进行划分,有两种划分方法,一种是传统的5频段划分:δ(1 Hz~4 Hz),θ(4 Hz~8Hz),α(8 Hz~14 Hz),β(14 Hz~31 Hz),γ(31 Hz~50 Hz),另一种是在整个频带中使用2 Hz的频率分辨率,共25个频段。
脑电信号是一种非平稳的随机信号,在研究中经常使用功率谱密度(PSD)和熵来分析脑电信号的频域特性。傅里叶变换只能单独从时域或频域表示信号,不能处理时变信号。而短时傅里叶变换(STFT)的出现克服了傅里叶变换不能处理时变信号的缺陷。本研究通过STFT计算各个频带的功率谱密度和微分熵(DE)特征。
STFT的主要思想是对信号加窗,分段做傅里叶变化,减少频谱泄露,加窗之后的信号被分割为一组短长度子序列,子序列可以近似地看为平稳序列。窗函数在整个时间轴上移动可以得到任意位置附近的时间段频谱,实现时间局域化。STFT的定义为
(1)
汉宁窗可以看成是升余弦窗的一个特例,适用于非周期性的连续信号。汉宁窗函数的具体定义为
(2)
本文绘制了几种常见窗函数的振幅响应以进行比较,如图2 所示。
图2 几种窗函数频率响应特性曲线
从图2 中可以看出,矩形窗口较窄的主窗口更有利于识别指定的频率,但侧频增益较高,频谱泄漏严重。此外,从频域响应来看,汉明窗能够减少附近的旁瓣泄露,但稍远一点的旁瓣泄露比汉宁窗严重。汉宁窗口的主要优点是可以使旁瓣互相抵消,消去高频干扰和漏能,且本文提取的主要特征与频带能量有关,因此选择汉宁窗。
功率谱密度是一个以频率为自变量的映射,反映了在频率成分上信号有多少功率。在对信号进行加窗后采用Welch法[10]计算每一通道EEG信号的功率谱密度。
微分熵用于测量连续随机变量的复杂度,是连续随机变量的熵。与传统的功率谱密度特征相比,其性能更优越[11]。其计算公式可表示为
(3)
式中:X是一个随机变量;f(X)是X的概率密度函数。对于服从高斯分布N(μ,σ2)的时间序列X,其微分熵可以定义为
(4)
由于头皮脑电电极是与受试者的头部皮肤接触传导电信号,而脑电信号又十分微弱,很容易受到其它因素干扰,提取出来的脑电特征会包含一些异常值。所以,对其进行特征平滑,不仅可以减小不相关特征造成的影响,而且特征表现的更加稳定。本文采用线性动力系统(LDS)平滑[12]的方法,利用疲劳变化的时间依赖性实现对数据的平滑和降噪处理。
将5频带和25频带脑电信号分别通过以上方法进行特征提取,得到脑电信号通道、带宽及特征维度如表2 所示。
表2 疲劳脑电特征维度
栈式自编码(SAE)神经网络是一种无监督的人工神经网络,其主要工作是学习输入数据的低维表示方式,最终目的是让输出近似等于输入[13]。从结构上看,它是由多个稀疏自编码器堆叠而成,分为编码器和解码器两部分。训练方法与普通单层自编码不同,采用逐层贪婪训练获得初始权重和阈值,然后采用反向传播算法进行调节优化。此外,在训练过程中还需要加入稀疏性约束,不仅可以减少计算量,而且可以降低模型的过拟合风险,提高模型的泛化能力,其结构如图3 所示。
图3 栈式自编码结构示意图
在编码过程中,原始输入信号为x,通过编码器得到隐藏层h,通常隐藏层维度要比输入层小,以达到降维的目的。其中,编码器函数定义为
h=encoder(x)=f(W·x+b),
(5)
(6)
式中:W′是连接隐藏层和输出层的权重矩阵;b′为偏置向量。在模型的训练过程中,让输出信号尽可能等于输入信号,即目标函数为
(7)
在预训练完SAE模型之后,需要对样本进行有监督的训练,以获得模型准确率。将训练好的SAE模型复用编码器网络参数作为神经网络初始值,之后通过反向传播进行微调至收敛。具体结构如图4 所示。
图4 使用栈式自编码进行有监督训练
为验证本文基于SAE神经网络疲劳检测模型,搭建了基于Tensorflow-GPU2.2.0的Keras2.3.1深度学习框架,操作系统为Windows10,使用AMD Ryzen7 4800H处理器,内存大小为16 G,同时使用NVIDIA RTX2060显卡来加快GPU运行速度。
SAE神经网络的输入层为SEED-VIG数据集脑电疲劳特征向量,输出层节点数为3,即3种疲劳状态。通过实验选择3个隐藏层,每个隐藏层节点个数通过循环训练对比来确定,第1隐藏层节点数为150,第2隐藏层节点数为75,第3隐藏层节点数为25,然后由全连接层连接到输出节点。数据集中取20%作为测试样本,其余为训练样本,采用5折交叉验证作为最终结果。通过实验得到最终准确率为88.61%,准确率曲线和损失函数曲线如图5 和图6 所示。
图5 栈式自编码模型准确率迭代曲线
图6 栈式自编码模型损失函数迭代曲线
此外,引入均方误差(RMSE)和皮尔逊相关系数(PCC)两个统计学参数作为评价指标,结果更具可靠性,计算公式为
(8)
(9)
为验证本文分类方法对脑电信号疲劳检测的有效性,在相同环境下搭建了支持向量机(SVM)、多层感知机(MLP)和随机森林分类器(RF)3个传统机器学习模型作为对比实验。此外,根据他人研究结果,选择对比了极限学习机(ELM)[14]、连续条件神经场(CCRF)和连续条件随机场(CCNF)[9]神经网络算法。在相同数据集条件下,各种模式识别方法对疲劳检测的结果如表3 所示。
表3 不同疲劳检测框架结果对比
从表3 可以看出,相较于传统疲劳检测方法,基于ELM的算法模型提升了识别性能,具有时间依赖性的方法CCRF和CCNF神经网络的性能提升了很多,但均低于所提出的栈式自编码疲劳检测模型,这也表明了该算法应用于驾驶员疲劳检测的有效性。
本文从脑电频段划分和特征提取两方面比较不同疲劳特征对识别结果的影响,并获得最佳特征组合,研究结果如表4 所示。
表4 不同疲劳特征对识别结果影响
表4 结果显示,具有2 Hz频带分辨率的脑电特征比具有5个频段的脑电特征表现出了更好的性能,使用脑电信号的微分熵特征比脑电信号的功率谱密度特征表现出了更好的性能。由此可以得出,在采用2 Hz频带划分的基础上,提取脑电信号的微分熵特征可以更好地表达疲劳状态,这也验证了前期研究者的结论[15-16]。
本文针对传统驾驶员脑电信号疲劳状态检测模型准确率低、计算维度复杂等问题,提出了一种基于栈式自编码的深度学习方法,检测驾驶员疲劳状态。在SEED-VIG数据集的基础上测试了该模型的准确率,与其他方法比较,验证了该模型的有效性。通过实验表明,不同的脑电频带划分和特征提取对实验结果的影响较大。该研究也对开发驾驶员疲劳检测系统及脑机接口系统具有重要意义。