1. 引言
疲劳驾驶作为交通事故的一个重要发生因素,时刻威胁着交通参与者们的生命财产安全[1] [2]。疲劳驾驶检测技术利用各种检测方法对驾驶员的当前状态进行检测,时刻监控驾驶员的精神活跃状态,并通过反馈装置提醒驾驶员合理地安排驾驶和休息时间。
随着计算设备算力的提高,深度学习方法逐渐以其优秀的性能和直接从数据中学习特征分布的能力受到广大研究者的喜爱。因此其也被广泛应用在基于EEG的疲劳驾驶行为识别算法中,并得到了广泛的应用。虽然许多研究者使用深度学习方法取得了很多的成就,但是目前的应用中仍然存在着一些不足。深度学习算法能够很好地从数据中抽离出目标特征,即使是直接使用未经预处理的原始数据也能实现很好的效果。然而在一些传统方法中Chai R等人[3]提取PSD特征输入到其的sparse-DBN网络中,Gao D [4]等人提取微分熵输入到Transformer编码器中,Paulo等人[5]利用递归图和格拉姆角场将脑电信号转化为图片输入到CNN中等,都使用了手动的方式对脑电信号进行处理。同时,预处理步骤在脑电信号处理中十分普遍,研究者们普遍相信使用高通滤波、陷波滤波以及ICA等方法可以有效提升脑电信号质量,进而更利于模型对脑电信号进行处理。但是Delorme A [6]设计实验,采用多个公开的预处理程序,将原始数据和预处理后的数据进行对比,并报告了一个比较不同的结果,即应用预处理并不一定能够有效提升信号质量,EEG最好不要处理。无论手动的特征提取器还是预处理,本质上都是预先设置好数据的处理参数对数据进行处理,而深度学习作为数据驱动的算法,其在很多其他领域能够很好地对原始数据进行处理并捕捉对应的特征,并且实现的效果要好于人工设置的手动特征提取器。而在脑电图信号的预处理过程中,往往需要相关的医学背景人士设计部分处理规则,这就导致脑电预处理过程变得繁琐。因此,利用深度学习方法直接实现一个端到端的疲劳驾驶检测系统完全是可以期待的。
脑电信号通常通过脑电帽等设备进行采集[7],脑电帽在头皮上依照10~20系统[8]设置电极,能够采集到多通道的脑电信号数据。不同的脑电信号通道反映了大脑不同部位产生的不同电信号,这也是EEG信号被称为脑电图的原因。正是这种图的特性使得EEG信号具备多样的空间信息。而脑电信号又是反映采集过程中大脑皮层的电信号活动的数据,具备多样的时间信息。而目前的多数算法都只是片面地考虑脑电信号的一个方面,而采用单一的模型结构去处理EEG信号,这可能导致模型对于特征的提取能力下降而影响算法的鲁棒性。
因此本文提出一种基于CNN和LSTM网络的EEG疲劳驾驶行为检测算法KCL-STN (KAN-CNN-LSTM Spatio-Temporal Information Network),该算法利用卷积神经网络模块提取脑电信号的空间信息,然后将其传递到由LSTM网络构成的时间信息提取模块中提取并融合脑电信号的时空信息,能够同时提取脑电信号的时间空间特征,并将之输入一个KAN线性层进行整合并实现疲劳驾驶行为的判断分类。
2. 方法
本节将介绍KCL-STN的网络架构设计。KCL-STN的网络架构如图1所示,整体结构分为空间信息提取模块和时间信息提取模块两个部分。
Figure 1. Schematic diagram of KCL-STN
图1. KCL-STN结构示意图
其中空间信息提取模块由三个卷积模块组成,每个卷积模块中包含三个3*1的卷积层进行特征提取和一个最大池化层进行降维,每个卷积层后都应用一个批量归一化层和一个ReLU激活函数层,在每个卷积模块的最后一层应用一个dropout层防止训练过程中可能出现的过拟合现象。假设第l层卷积的输入为Xl则其数学公式如下所示
(1)
其中,
和
分别为每层的卷积核和偏置值,
为激活函数。
在每个卷积模块的第一层都将通道维度提升两倍,从而使得模型能够表示更复杂的脑电空间信息,同时通过多次的卷积使得模块能够捕捉到多通道脑电信号的局部空间模式,使得模块学习到EEG信号的空间特性。
时间信息提取模型由多个LSTM层堆叠而成,先利用第一层LSTM层提升隐藏层维度,使得模型能够容纳更多的信息,然后通过一个由三层同样设置的LSTM层堆叠的LSTM模块充分提取EEG信号的时间信息并整合空间信息,然后将隐藏层作为输出输入到一个KAN线性层中进行疲劳行为分类。
网络架构的具体细节见表1,其中包含了模型每一层的具体设计参数以及激活函数的类型等数据。模型的输入尺寸为C*T其中C、T分别为输入数据中的脑电信号的通道数量以及脑电数据的长度。在这里,因为数据集的采集通道为30,因此C的取值是30,输入的张量尺寸为30*T。模型中每个卷积层都将填充和步幅设置为1,卷积核的大小是3*1。这样的设置使得每次通过一维卷积之后特征的维度都不会产生变化。在经过三个卷积层之后特征被输入到一个步幅为2的最大池化层中,这样的设置能够使模型的维度减半。
Table 1. Structural details table of KCL-STN
表1. KCL-STN结构细节表
L |
Layer Type |
Padding |
Stride |
Kernel Size |
Output Shape |
Activation Function |
1 |
Conv1d |
1 |
1 |
3 * 1 |
30, T |
ReLU |
2 |
Conv1d |
1 |
1 |
3 * 1 |
30, T |
ReLU |
3 |
Conv1d |
1 |
1 |
3 * 1 |
30, T |
ReLU |
4 |
MaxPool1d |
0 |
2 |
2 * 1 |
30, T/2 |
|
5 |
Conv1d |
1 |
1 |
3 * 1 |
64, T/2 |
ReLU |
6 |
Conv1d |
1 |
1 |
3 * 1 |
64, T/2 |
ReLU |
7 |
Conv1d |
1 |
1 |
3 * 1 |
64, T/2 |
ReLU |
8 |
MaxPool1d |
0 |
2 |
2 * 1 |
64, T/4 |
|
9 |
Conv1d |
1 |
1 |
3 * 1 |
128, T/4 |
ReLU |
10 |
Conv1d |
1 |
1 |
3 * 1 |
128, T/4 |
ReLU |
11 |
Conv1d |
1 |
1 |
3 * 1 |
128, T/4 |
ReLU |
12 |
MaxPool1d |
0 |
2 |
2 * 1 |
128, T/8 |
|
13 |
LSTM |
|
|
|
128, T/8 |
|
14 |
LSTM |
|
|
|
128, T/4 |
|
15 |
LSTM |
|
|
|
128, T/4 |
|
16 |
LSTM |
|
|
|
128, T/4 |
|
17 |
Flatten |
|
|
|
3, T/4 |
|
18 |
KANLinear |
|
|
|
2, |
|
3. 实验
3.1. 数据集介绍
本章实验采用的是Cao Z等人采集数据集[9],该数据集采集了27位受试者在一系列枯燥的90分钟驾驶任务中的脑电数据,并根据受试者对于随机出现的车道偏移现象的反应时间将记录下的脑电信号标记为疲劳或者警觉状态。该数据集利用脑电帽从头皮以500 Hz的频率采集32通道的脑电信号,但是在这32个脑电通道中A1和A2是校准电极,因此本章用作输入的脑电通道共有30个。数据集完整地记录下了持续90分钟的模拟驾驶实验,但是只有在进行车道偏离反应测试的时候才有反应时间作为判断疲劳驾驶参考。在本章中,本文选择1s为窗口作为模型输入的脑电信号长度。由于记录频率为500 Hz因此模型的输入大小为30 * 500。
按照数据集作者提供的标记方法[10],本文依据全局RT和局部RT对车道偏离事件发生的前3 s的脑电信号进行标记得到如表2所示的数据分布:
Table 2. Data distribution in the dataset
表2. 数据集数据分布情况
|
数量 |
警觉 |
8466 |
疲劳 |
3299 |
总数 |
11765 |
可以看出该数据集上疲劳和警觉的数据分布并不平衡,这是因为并没有办法实现疲劳的诱导,在90分钟的实验中警觉的情况更多是非常正常的事情。为了保证本文的模型能够学习到疲劳驾驶相关的脑电特征而不是数据集的数据分布,本文对数据集进行了一次平衡,通过随机函数使得警觉和疲劳的样本数量相近。具体来说,本文先统计输入的警觉与疲劳状态的数量,并计算一个概率p,该概率为更少的数据与更多的数据间的比值,然后本文在更多的数据中,以p为概率进行采样获得平衡后的样本,以保证二者之间的占比相同。
经过上述方法处理后的数据集数据分布情况见表3。
Table 3. Data distribution in the dataset (after processing)
表3. 数据集数据分布情况(处理后)
|
数量 |
占比 |
警觉 |
3278 |
49.84% |
疲劳 |
3299 |
50.16% |
总数 |
6,577 |
100% |
本文按照6:2:2的比例将随机将数据分为训练集、验证集和测试集,训练集用作模型的训练,验证集作为模型分类精度的验证,通过验证集反馈重新对模型的各种参数以及结构进行微调,最后通过测试集对模型的表现进行测试。
数据对于深度学习的性能表现至关重要,而脑电信号由于采集上的困难性导致可以用于训练的标签数据比较稀少。我们针对脑电信号提出了一个滑动窗口算法,算法示意图如图2所示。该算法维护一个固定长度的窗口W,在本章的实验中W的长度被设置为1秒,由于采样率为500 Hz因此W的实际长度为500。在通常的采样中,本文每次都会使采样窗口移动500以采样下一段的脑电数据。而在本文的滑动窗口方法中通过设置滑动参数L,使得每次从脑电数据中采样模型输入样本时只移动L的长度,这样就能够重叠的获得样本,大大的增加了脑电信号的样本数量。同时,重叠的样本也能够使得模型能够从不同的角度去读取这段脑电数据,增强了训练样本的多样性。
Figure 2. Example of EEG data augmentation method
图2. 脑电数据增强算法原理示例
3.2. 实验设计
本文进行实验所使用的计算机规格如下:CPU使用Core i7,32 GB的内存以及RTX3080显卡。使用pytorch框架运行KCL-STN算法代码,本文选择1 s作为采样窗口的长度,因此输入数据的尺寸为30 * 500,本章采用数据集中提供的未经预处理的原始脑电数据作为输入数据。同时设置滑动窗口参数L为100,批量大小(Batch size)为32,训练50个epoch。使用Adam优化器对损失进行优化,学习率设置为0.00001,损失函数选用交叉熵损失函数(Cross Entropy Loss)。
其中交叉熵损失函数是一种深度学习进行二分类预测时常用的损失函数,其表示真实概率分布与预测概率分布之间的差异。交叉熵损失函数的数学公式如下:
(2)
其中,y表示样本的真实标签而
表示模型预测出来的标签。式(2)为二分类的交叉熵损失函数的计算方式。
另外,本章的实验还另外还采用了OneCycleLR作为学习率调度策略,以优化训练过程。OneCycleLR由Smith L等人[11]提出,他们在论文中描述了一种被称为超收敛(super-convergence)神经网络快速收敛的现象,具体来说,对于确定的超参数,使用非常大的学习率时有时会使得模型的训练速度提升一个数量级。并基于这个现象提出了OneCycleLR的学习率调度策略,该策略使学习率从较低的初始值上升到设定的最大值然后再逐步降低到更低的学习率数值,这个上升下降的循环过程在整个训练过程中只进行一次。该策略使得神经网络能够触发超收敛现象从而加速收敛过程并达到更好的预测精度。
在本章的实验中,本文采用准确率(Accuracy)、召回率(Recall)和精确率(Precision)作为评价指标,其中以准确率作为对比的主要指标其计算方式分别如下所示:
(3)
(4)
(5)
其中,TP真阳性、TN真阴性、FP伪阳性和FN伪阴性分别代表预测类别为阳性的阳性类别数目,预测类型为阴性的阴性类别数据,预测类别阳性的阴性类别数目和预测类型为阴性的阳性类别数目。
4. 实验结果和讨论
4.1. 实验结果
按照上一节所介绍的实验超参数设置,本文对KCL-STN网络进行了训练,训练过程中的损失及准确度如图3和图4所示。可以看出训练的损失在0~5个epoch间快速收敛,然后趋于稳定,符合OneCycleLR调度策略的基本思想。训练精度方面,训练集和测试集在开始的10个epoch中提升幅度较为一致,然后在10 epoch之后测试集分类精度提升幅度放缓,而训练集的分类精度继续增加,在50个epoch时训练集精度比测试集精度高了接近5%,出现轻微的过拟合现象,这是由于脑电数据集标签数据缺乏导致的。由这两张图可以看出,本文提出的KCL-STN能够从数据中学习到本文所需要的特征表示。
Figure 3. Training loss over epochs
图3. 训练损失随epoch变化图
Figure 4. ACC over epochs
图4. 训练准确率随epoch变化图
本章节还将对比本文提出的方法与其他现有方法之间的优劣,由于数据集对于最后模型的表现影响十分巨大,为了公平地进行对比,本节采用的对照模型也将运行在第三章所介绍的数据集[9]上。本节将引入EEGNet [12]、EEGTransformer [4]、InterpretableCNN [13]和ESTCNN [14]作为本章实验的对比模型。
其中EEGNet是一款基于CNN架构的脑电信号处理通用模型,其由多个2D卷积层组成,用以提取脑电信号中的各类特征。EEGNet最早作为脑机接口而开发,然而作者在多种不同的脑机接口下游任务中证明了该架构的性能,表明该网络具有很好的泛化性能。EEGTransformer从原始脑电信号中提取微分熵特征然后将其输入到Transformer编码器之中进行特征提取,然后将提取的特征输入到一个MLP层进行分类。InterpretableCNN将原始的脑电信号通过pointwise Convo-lution层和depthwise Convolution层提取脑电信号的特征,然后通过激活函数和一个全连接层进行脑电信号的分类。ESTCNN试图通过一系列堆叠起来的卷积层来提取脑电信号的时间信息,然后将其展开利用多个全连接层提取其中的空间信息并进行分类。本文在2.4节中介绍的数据集上对使用训练集对上述模型进行训练并使用测试集测试它们的表现,其中EEGNet、ESTCNN以及KCL-STN使用未经预处理的原始脑电数据进行训练,而EEGTransformer和InterpretableCNN需要使用处理过的脑电数据进行训练。实验结果如表4所示
Table 4. Result of comparative experimental
表4. 对比实验结果
方法 |
Accuracy |
Recall |
Precision |
EEGNet [12] |
82.52% |
83.96% |
83.30% |
EEGTransformer [4] |
78.02% |
72.22% |
78.56% |
InterpretableCNN [13] |
77.70% |
75.30% |
74.66% |
ESTCNN [14] |
77.79% |
75.01% |
79.12% |
KCL-STN (ours) |
86.05% |
86.12% |
86.10% |
从表中可以看出相较于其他对比算法,本文提出的KCL-STN网络在所对比的三个性能指标之中都存在明显提升,分别为86.05%、86.12%、86.10%。相较于其他需要经过预处理以及手动特征选择方案的算法,直接输入原始数据的EEGNet以及本文提出的KCL-STN较之其他的模型在评价指标上具有明显优势,而ESTCNN也在综合表现上与剩下两个模型效果相当。这体现了直接使用原始数据实现端到端的脑电疲劳驾驶检测系统是可行的方案,甚至于在表现上可能能够实现超越手动特征的预测准确度。
脑电信号是一种依赖于个体的生物电信号,因此对于不同的个体往往也会产生不太相同的脑电信号,这一情况为脑电检测提出了泛化性能的挑战。为了验证本章提出的方法在不同的受试者上检测准确度表现,证明KCL-STN网络的泛化性能,本文还针对每一位受试者的疲劳-清醒数据进行了单独的训练,结果如图5所示。
值得注意的是,尽管数据集中有27位被试者参与实验但是有部分受试者在整个实验过程中并没有表现出明显的困倦反应,因此数据集缺乏部分受试者的疲劳数据,这里只挑选出拥有明显疲劳数据的受试者数据进行训练。从图中可以看出,KCL-STN模型对于各受试者的整体精度表现不错,对于大部分的受试者来说,分类检测精度都能达到80%以上,仅对s22以及s41两位被试者的表现低于80%,分别为77 %和75%。模型整体预测精度表现平稳,说明本文提出的模型能够有效的学习到不同的受试者中不变的特征表达,从而使得模型在多名不同的受试者之间也具备良好的表现,证明了模型的泛化性能和鲁棒性能。
Figure 5. Overall performance of the KCL-STN
图5. KCL-STN各被试表现总览
4.2. 消融实验
为了验证本章提出的方法的有效性,本文还针对KANLinear层及滑动窗口数据增强方法进行了消融实验,以确定这两个方法在模型表现中发挥的作用。本文将原本模型中最后用以分类的KANLinear层替换为一个全连接层,这个模型记为CL-STN,并对该模型进行了实验,实验结果如表5所示。
Table 5. Result of ablation in KANLinear
表5. KANLinear消融实验结果
方法 |
Accuracy |
Recall |
Precision |
CL-STN |
84.67% |
83.57% |
85.54% |
KCL-STN |
86.05% |
86.12% |
86.10% |
从该结果可以看出,应用了KANLinear层的KCL-STN模型在精度上比使用全连接层的CL-STN模型提升了1.38%。KANLinear层相较于传统的全连接层能够学习到更多的特征,该结论与文献[15]一致。
同时,本文去除数据增强方法,直接使用未进行增强的数据作为KCL-STN模型的输入,针对其训练过程画出了图6。由图中训练集准确率的走势可以看出在20个epoch之后训练集的准确率依然逐步升高并最终接近100%,而测试集准确率却在震荡中缓慢降低,最终的准确率停留在80%附近。显示出在不应用滑动窗口数据增强方法的情况下模型的训练产生了过拟合现象,而对比应用了滑动窗口数据增强方法时模型的表现图4,模型的过拟合现象显著缓解,但仍存在一定的过拟合现象。这表明本文提出的脑电滑动窗口数据增强方法能够很好的提升数据质量,缓解过拟合现象对模型精度的影响,但是数据集上标签数据的缺乏还是对模型的质量产生影响。
Figure 6. ACC over epochs without data augmentation
图6. 无数据增强情况下训练准确率随epoch变化图
5. 结论
本文提出了KCL-STN模型从空间信息和时间信息的角度对原始脑电信号端到端的提取疲劳驾驶相关特征,同时提出了一个对脑电信号进行数据增强的方法——脑电信号滑动窗口算法。本文设计实验对疲劳–警觉分类准确率进行检测,实验结果表明本章提出的算法在诸多同类算法中达到了最优的分类准确度(ACC),在本文进行的50轮训练中,KCL-STN算法达到了86.05%的分类准确度。
同时,本章讨论了脑电信号的跨被试检测问题,并对本章提出的模型的跨被试检测性能进行了测试。测试结果表明,模型对于每位被试者的检测精度整体表现良好,仅对少数受试者的表现不佳,这证明本章中提出的算法具备良好的泛化性和鲁棒性。最后,对于本文提出的算法进行了消融实验验证,消融实验结果表明使用KAN线性层替换全连接层使得本章的算法分类准确度提升了1.38%,而本文提出的脑电信号滑动窗口算法成功地实现了脑电信号的数据增强,从数据的层面提升了算法训练的稳定性,降低了过拟合发生的概率。以上对比试验和消融实验研究证明了本文提出的方法的有效性。