统一EEG跨被试驾驶员状态识别:防数据泄露的L3安全停止触发机制

论文信息

项目 内容
标题 Unified EEG Feature Extraction for Cross-Subject Driver State Recognition and a Leakage-Free Safe-Stop Trigger Mechanism
作者 Saud Ammar, Mohamed Karray, Mounim Ksantini (University of Sharjah, UAE)
期刊 Electronics, 15(19), 4432
发表 2026年9月26日
DOI 10.3390/electronics15194432
关键词 EEG, Cross-Subject, Driver State Recognition, Safe-Stop, L3 Automation, Data Leakage

核心创新

首个同时解决EEG跨被试泛化和数据泄露防护的L3自动驾驶安全停止机制。关键贡献:

  1. 统一EEG特征提取框架:跨被试驾驶员状态识别,无需个体校准
  2. 防泄露机制(Leakage-Free):严格分离训练/测试数据,避免过度乐观的性能估计
  3. L3安全停止触发:当驾驶员警觉性低于阈值时,触发自动驾驶系统执行安全停车

技术背景

L3自动驾驶的接管难题

EEG跨被试挑战

挑战 详情 影响
个体差异 不同人EEG模式差异巨大 模型无法直接跨人使用
数据泄露 训练/测试混合导致虚高性能 实际部署性能大幅下降
实时性 L3要求毫秒级响应 需要轻量模型
校准时间 传统方案需15分钟个人校准 不可接受

方法详解

1. 统一EEG特征提取

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
import torch
import torch.nn as nn
import numpy as np
from scipy import signal as sig

class UnifiedEEGFeatureExtractor(nn.Module):
"""
统一EEG特征提取器

目标:提取跨被试通用的EEG特征
关键:使用域自适应技术,减少个体差异

参考: Ammar et al., Electronics 2026
"""

def __init__(self, num_channels=14, fs=128, num_classes=3):
super().__init__()
self.num_channels = num_channels
self.fs = fs

# 1. 时空特征提取
self.spatial_filter = nn.Conv2d(1, 32, (num_channels, 1))
self.temporal_filter = nn.Conv2d(32, 64, (1, 25), padding=(0, 12))

# 2. 域自适应层(减少跨被试差异)
self.domain_adapt = nn.Sequential(
nn.Linear(64 * 128, 256),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(256, 128),
nn.ReLU()
)

# 3. 分类器
self.classifier = nn.Sequential(
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, num_classes) # alert/drowsy/distracted
)

def forward(self, x):
"""
Args:
x: (B, 1, 14, 128) - 14通道, 1秒@128Hz

Returns:
logits: (B, 3)
"""
x = self.spatial_filter(x) # (B, 32, 1, T)
x = torch.relu(x)
x = self.temporal_filter(x) # (B, 64, 1, T)
x = torch.relu(x)
x = x.flatten(1) # (B, 64*T)
x = self.domain_adapt(x) # (B, 128)
return self.classifier(x) # (B, 3)


class LeakageFreePipeline:
"""
防数据泄露的实验Pipeline

论文核心贡献之一:严格的数据隔离协议
"""

def __init__(self):
self.train_subjects = []
self.test_subjects = []

def leave_one_subject_out(self, all_subjects):
"""
留一被试交叉验证(LOSOCV)

关键:训练集中完全不包含测试被试的任何数据
包括:不同时段、不同会话的数据
"""
results = []
for test_subj in all_subjects:
train_subs = [s for s in all_subjects if s != test_subj]

# 严格隔离
train_data = self.load_data(train_subs)
test_data = self.load_data([test_subj])

# 训练
model = UnifiedEEGFeatureExtractor()
self.train(model, train_data)

# 测试
acc = self.evaluate(model, test_data)
results.append((test_subj, acc))

return results

def check_leakage(self, train_data, test_data):
"""检查数据泄露"""
# 1. 确保无被试重叠
train_subj = set(train_data['subject'])
test_subj = set(test_data['subject'])
assert len(train_subj & test_subj) == 0, "数据泄露:训练/测试有被试重叠"

# 2. 确保无时间泄露
# 测试数据时间戳必须完全独立

# 3. 确保无特征泄露
# 不能使用测试集统计量做归一化
return True

2. 安全停止触发机制

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
class SafeStopTrigger:
"""
L3安全停止触发机制

基于EEG驾驶员警觉性评估
当警觉性低于阈值时触发MRC(最小风险策略)
"""

VIGILANCE_THRESHOLD = 0.65
CONFIRMATION_WINDOW = 5 # 连续5秒低于阈值才触发
TAKEOVER_REQUEST_TIME = 4 # TOR后给4秒响应时间

def __init__(self, eeg_model):
self.model = eeg_model
self.vigilance_history = []
self.state = "L3_ACTIVE"

def monitor_vigilance(self, eeg_stream, fs=128):
"""
实时监控驾驶员警觉性

状态机:
L3_ACTIVE → TOR_ISSUED → DRIVER_RESPONDED → L2_HANDOVER
→ TOR_ISSUED → NO_RESPONSE → MRC_SAFE_STOP
"""
window = eeg_stream # 1秒窗口

with torch.no_grad():
x = torch.FloatTensor(window).unsqueeze(0).unsqueeze(0)
logits = self.model(x)
probs = torch.softmax(logits, dim=1)

vigilance = probs[0, 0].item() # alert概率
self.vigilance_history.append(vigilance)

# 保持最近5秒
if len(self.vigilance_history) > self.CONFIRMATION_WINDOW:
self.vigilance_history.pop(0)

# 判断是否需要触发
if len(self.vigilance_history) == self.CONFIRMATION_WINDOW:
avg_vigilance = np.mean(self.vigilance_history)

if avg_vigilance < self.VIGILANCE_THRESHOLD:
return self.trigger_safe_stop()

return "MONITORING", avg_vigilance

def trigger_safe_stop(self):
"""触发安全停止流程"""
if self.state == "L3_ACTIVE":
self.state = "TOR_ISSUED"
return "TAKEOVER_REQUEST", None

elif self.state == "TOR_ISSUED":
# 检查驾驶员是否响应
if not self.driver_responded():
self.state = "MRC_EXECUTING"
return "MINIMUM_RISK_MANEUVER", None
else:
self.state = "L2_HANDOVER"
return "DRIVER_TAKEOVER", None

return "MONITORING", None

def driver_responded(self):
"""检测驾驶员是否响应TOR"""
# 检查方向盘输入、踏板输入、头部运动
# 简化示意
return False

3. 跨被试域自适应

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
class DomainAdaptiveTraining:
"""
域自适应训练策略

解决EEG跨被试泛化问题
"""

def __init__(self):
self.feature_extractor = UnifiedEEGFeatureExtractor()
self.domain_classifier = nn.Sequential(
nn.Linear(128, 32),
nn.ReLU(),
nn.Linear(32, num_subjects) # 被试身份分类
)

def adversarial_loss(self, features, subject_labels):
"""
对抗损失:让特征无法区分被试身份

目标:特征提取器学习"被试无关"的EEG特征
"""
domain_pred = self.domain_classifier(features)
# 梯度反转层:最大化domain loss
return -nn.CrossEntropyLoss()(domain_pred, subject_labels)

def train_step(self, eeg_data, state_labels, subject_labels):
"""
多任务训练:
1. 状态分类(主任务)
2. 被试身份分类(对抗任务,梯度反转)
"""
features = self.feature_extractor(eeg_data)

# 主任务:驾驶员状态
state_pred = self.classifier(features)
state_loss = nn.CrossEntropyLoss()(state_pred, state_labels)

# 对抗任务:被试身份
domain_loss = self.adversarial_loss(features, subject_labels)

total_loss = state_loss + 0.1 * domain_loss
return total_loss

实验结果

跨被试性能

方法 准确率 F1 说明
统一框架+域自适应 83.2% 81.7% 本文最优
统一框架(无域自适应) 71.5% 69.8% 个体差异大
个体校准(15min) 91.3% 90.1% 上限参考
传统CNN+LOSOCV 68.2% 66.5% 基线
EEGNet+LOSOCV 74.8% 73.1% 对比

防泄露对比

实验设置 准确率 问题
严格LOSOCV(本文) 83.2% 无泄露
随机分割(有泄露) 95.8% 虚高12.6%
被试内分割(有泄露) 97.1% 虚高13.9%
会话间分割 79.3% 部分泄露

安全停止响应时间

场景 检测时间 TOR时间 MRC触发 总延迟
疲劳过渡 5s 4s - 9s
严重分心 5s 4s - 9s
无响应 5s 4s 8s 17s
突发丧失意识 3s 4s 8s 15s

IMS开发启示

1. L3安全停止架构

2. 与Mind2Drive的对比

维度 本论文 Mind2Drive
目标 警觉性评估+安全停止 意图预测
通道 14通道 16通道
跨被试 ✅ 域自适应83.2% ❌ 需个体数据
防泄露 ✅ 严格LOSOCV 未明确
L3关联 ✅ 安全停止触发 ADAS前瞻
实时性 1秒窗口 500ms窗口

3. 落地路线

阶段 目标 技术
P0 视觉DMS+OBD安全停止 已有方案
P1 EEG+视觉融合警觉性 83%准确率
P2 L3安全停止机制验证 本论文方案
P3 量产部署 干电极+域自适应

EU推迟Tesla FSD投票:对DMS/L3的影响

事件背景

时间线 事件
2025.11 Tesla宣布2026年2月获荷兰批准
2026.04.10 RDW批准FSD Supervised在荷兰使用
2026.06 TCMV讨论但未投票
2026.09.01 Tesla称10月6日可能投票
2026.09.25 投票推迟至12月最早

投票状况

立场 国家 人口占比
✅ 支持 荷兰+丹麦+比利时+爱沙尼亚+立陶宛+斯洛文尼亚+捷克 ~12%
❌ 反对 瑞典、法国 ~16%
❓ 未表态 德国、意大利、西班牙等 ~58%
通过门槛 15国+65%人口 未达标

反对理由

  1. 超速问题:FSD在30km/h路段55%场景超速
  2. 驾驶员注意力:城市环境中驾驶员注意力不充分
  3. 冰雪路况:北欧国家关注冰雪路面安全性

对IMS的启示

影响 详情
L3推迟 EU L3法规路径比预期更慢
DMS更重要 即使FSD推迟,DMS需求不减反增
安全论证 需要更强的驾驶员监控证据
中国机会 中国DMS新国标可能先于EU落地

总结

本论文的两个核心贡献对IMS有直接价值:

  1. 跨被试EEG泛化:83.2%准确率无需个体校准,是EEG-DMS量产的关键突破
  2. 防泄露实验协议:揭示了此前研究的性能虚高问题(12-14%),为后续研究树立了标准
  3. L3安全停止触发:为L3自动驾驶提供了基于神经信号的安全兜底机制

EU推迟Tesla FSD投票表明:L3自动驾驶的安全论证仍需更多证据,而DMS是L3安全底座的地位不会改变——反而更加重要。IMS研发应加速EEG跨被试泛化研究,为L3安全停止提供技术储备。