EEG-FADE:可解释可泛化的EEG驾驶疲劳检测引擎——基于θ/β比值阈值标定

论文信息

项目 内容
标题 EEG-FADE: A generalizable and explainable framework for EEG-based driver fatigue detection
期刊 ScienceDirect (Biomedical Signal Processing and Control)
发表 2026年6月4日
链接 https://www.sciencedirect.com/science/article/pii/S2666827026000770
核心方法 Ratio-Based Thresholding (RBT) + AutoML + BiLSTM + GNN-SE
特征数 480维(频谱+时序+复杂度)

核心创新

  1. 比值阈值标定(RBT):基于θ/β比值动态生成疲劳标签,校准到个体基线EEG,解决主观标签不可靠问题
  2. 480维特征集:频谱+时序+复杂度三类特征全面覆盖
  3. 三条并行管道评估:AutoGluon自动机器学习、BiLSTM时序建模、GNN-SE图神经网络+注意力
  4. 可解释性:Cohen’s d效应量分析验证θ/β比值的疲劳敏感性

问题定义

现有EEG疲劳检测三大局限

局限 描述 EEG-FADE解决方案
标签弱 PERCLOS等行为标签与神经状态不同步 RBT:从EEG本身生成标签
泛化差 个体差异导致跨被试准确率骤降 个体基线校准
不可解释 深度学习黑盒 Cohen’s d效应量+特征重要性

θ/β比值的生理学基础

频段 频率 清醒状态 疲劳状态
Theta (θ) 4-8 Hz 低功率 ↑增强
Beta (β) 13-30 Hz 高功率(专注) ↓减弱
θ/β比值 - ↑升高
效应量Cohen’s d - - 0.44(中等效应)

方法详解

1. RBT比值阈值标定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import numpy as np
from scipy.signal import welch

class RatioBasedThresholding:
"""
比值阈值标定(RBT)

论文核心方法:
1. 计算清醒基线θ/β比值
2. 动态计算当前θ/β比值
3. 基于基线偏差生成疲劳标签
"""

def __init__(self, fs: int = 200,
theta_band=(4, 8),
beta_band=(13, 30)):
self.fs = fs
self.theta_band = theta_band
self.beta_band = beta_band

def compute_theta_beta_ratio(self, eeg: np.ndarray) -> float:
"""
计算θ/β功率比值

Args:
eeg: [n_channels, n_samples] EEG信号

Returns:
ratio: θ/β功率比值
"""
# 平均参考
eeg = eeg - eeg.mean(axis=0)

# Welch功率谱
freqs, psd = welch(eeg, fs=self.fs, nperseg=512)

# θ和β频段功率
theta_mask = (freqs >= self.theta_band[0]) & \
(freqs < self.theta_band[1])
beta_mask = (freqs >= self.beta_band[0]) & \
(freqs < self.beta_band[1])

theta_power = np.sum(psd[:, theta_mask], axis=1).mean()
beta_power = np.sum(psd[:, beta_mask], axis=1).mean()

return theta_power / (beta_power + 1e-8)

def calibrate_baseline(self, alert_eeg: np.ndarray,
window_sec: int = 10) -> float:
"""
从清醒状态EEG标定个体基线

Args:
alert_eeg: 清醒状态EEG数据
window_sec: 窗口长度

Returns:
baseline_ratio: 基线θ/β比值
"""
window_samples = window_sec * self.fs
n_windows = len(alert_eeg[0]) // window_samples

ratios = []
for i in range(n_windows):
window = alert_eeg[:, i*window_samples:(i+1)*window_samples]
ratios.append(self.compute_theta_beta_ratio(window))

baseline = np.mean(ratios)
baseline_std = np.std(ratios)

return baseline, baseline_std

def generate_labels(self, eeg: np.ndarray,
baseline: float,
baseline_std: float,
threshold_std: float = 1.5) -> np.ndarray:
"""
基于RBT生成疲劳标签

Args:
eeg: [n_channels, n_samples]
baseline: 基线θ/β比值
baseline_std: 基线标准差
threshold_std: 阈值标准差倍数

Returns:
labels: [n_windows] 0=清醒, 1=疲劳
"""
window_samples = 10 * self.fs # 10秒窗口
n_windows = len(eeg[0]) // window_samples

labels = np.zeros(n_windows)
ratios = []

for i in range(n_windows):
window = eeg[:, i*window_samples:(i+1)*window_samples]
ratio = self.compute_theta_beta_ratio(window)
ratios.append(ratio)

# RBT判定:超过基线+1.5σ为疲劳
if ratio > baseline + threshold_std * baseline_std:
labels[i] = 1

return labels, ratios


# 测试
if __name__ == "__main__":
rbt = RatioBasedThresholding(fs=200)

# 模拟清醒EEG(低θ高β)
np.random.seed(42)
alert_eeg = np.random.randn(4, 200 * 60) # 4通道60秒
alert_eeg += 2.0 * np.sin(2 * np.pi * 20 *
np.arange(200*60) / 200) # 20Hz β

# 标定基线
baseline, baseline_std = rbt.calibrate_baseline(alert_eeg)
print(f"基线θ/β比值: {baseline:.4f} ± {baseline_std:.4f}")

# 模拟疲劳EEG(高θ低β)
fatigue_eeg = np.random.randn(4, 200 * 60)
fatigue_eeg += 3.0 * np.sin(2 * np.pi * 6 *
np.arange(200*60) / 200) # 6Hz θ

# 生成标签
labels, ratios = rbt.generate_labels(
fatigue_eeg, baseline, baseline_std
)
print(f"疲劳窗口比例: {labels.mean():.1%}")
print(f"平均θ/β比值: {np.mean(ratios):.4f}")
print(f"基线+1.5σ阈值: {baseline + 1.5 * baseline_std:.4f}")

2. 480维特征提取

特征类别 子特征数 具体特征
频谱特征 200 5频段(δ/θ/α/β/γ)× 4通道 × 10个指标
时序特征 160 Hjorth参数3×4ch + 统计量5×4ch + AR系数10×4ch + 样本熵等
复杂度特征 120 近似熵/样本熵/模糊熵 × 多尺度 × 通道

3. 三条并行管道

管道 架构 准确率 优势
AutoML AutoGluon集成 88.3% 自动特征选择
BiLSTM 双向LSTM 91.5% 时序建模
GNN-SE 图神经网络+注意力 93.2% 空间+频谱联合

实验结果

跨被试泛化性能

方法 被试内准确率 被试间准确率 泛化差距
SVM+手工特征 82.3% 58.5% 23.8%
CNN 86.1% 62.3% 23.8%
BiLSTM 89.5% 68.2% 21.3%
EEG-FADE (GNN-SE) 93.2% 75.8% 17.4%

RBT vs 传统标签

标签方法 标签来源 被试间准确率 可解释性
PERCLOS 眼动行为 62.3%
KSS自评 主观 58.5% 极低
RBT EEG θ/β比值 75.8%

IMS开发启示

1. 与DeltaGateNet的协同

组件 DeltaGateNet EEG-FADE 协同价值
标签生成 需外部标签 ✅ RBT自生成 解决数据标注瓶颈
时序建模 ✅ 双向Delta BiLSTM 互验
轻量化 ✅ 45K参数 需优化 DeltaGateNet更适合可穿戴
可解释性 中等 ✅ 高 RBT+效应量

2. 自动标签生产管道

步骤 输入 产出 工具
1 原始EEG 基线标定 RBT calibrate
2 连续EEG 自动标签 RBT generate_labels
3 标签+EEG 训练模型 DeltaGateNet
4 新驾驶员EEG 个性化标签 基线校准

3. 部署方案

方案 硬件 标签 模型 实时性
离线训练 全帽EEG 32ch RBT GNN-SE
在线推理 耳道EEG 1-4ch - DeltaGateNet ✅ 2ms
个性化 驾驶员5min清醒EEG RBT基线 更新阈值

总结

EEG-FADE解决了EEG疲劳检测的标签可靠性问题:

  1. RBT自动生成标签:从EEG本身生成疲劳标签,超越PERCLOS和主观自评
  2. 480维特征+GNN-SE达到93.2%准确率:频谱+时序+复杂度全面覆盖
  3. 可解释性:Cohen’s d=0.44验证θ/β比值的疲劳敏感性
  4. 与DeltaGateNet协同:RBT生成标签→DeltaGateNet训练→耳道EEG部署

https://dapalm.com/2026/09/21/2026-09-21-25-eeg-fade-rbt-theta-beta-fatigue-explainable-ims/
作者
Mars
发布于
2026年9月21日
许可协议