EEG + 眼动跟踪融合认知状态监测:Frontiers 系统综述解读与 IMS 落地分析

发布时间: 2026-09-05
分类: 论文解读 / 认知分心 / 生物信号
标签: EEG, eye-tracking, sensor fusion, cognitive state, systematic review, Frontiers 2025


论文信息

项目 内容
标题 Combining EEG and eye-tracking for cognitive and physiological states monitoring: a systematic review
期刊 Frontiers in Neuroergonomics, Volume 6, 2025
DOI 10.3389/fnrgo.2025.1736672
类型 系统综述 (Systematic Review)
发表日期 2026-01-29(在线发布)

1. 研究背景

1.1 为什么需要 EEG + 眼动融合?

单模态 优势 局限
EEG 单独 直接测量神经活动,毫秒级时间分辨率 侵入性强、信号噪声大、个体差异大
眼动单独 非侵入、低成本、实时 只能反映外显行为,无法直接获取认知状态
EEG + 眼动 互补:神经+行为、内隐+外显 传感器同步、融合策略复杂

1.2 核心科学问题

EEG 和眼动跟踪融合是否能显著提升认知和生理状态监测的分类性能?哪些融合策略最有效?


2. 综述核心发现

2.1 融合 vs 单模态性能

综述总结了各研究中 EEG-only、ET-only 和 EEG+ET 融合方法的性能:

状态类型 EEG-only 准确率 ET-only 准确率 EEG+ET 准确率 提升幅度
认知负荷 70-80% 65-75% 83-87% +7-15%
疲劳/困倦 75-85% 70-80% 85-92% +5-10%
注意力/分心 65-75% 70-80% 80-87% +7-12%
情绪状态 60-70% 55-65% 72-80% +8-15%

关键结论:传感器融合在所有条件下都一致性地提升了分类性能,跨被试和跨性别分别达到 83% 和 87% 准确率。

2.2 融合策略分类

2.3 各策略性能对比

融合策略 平均准确率 计算成本 实时性 推荐场景
特征拼接 80% 低 好 快速原型
PCA 降维融合 82% 低 好 嵌入式部署
加权决策融合 78% 最低 最好 实时系统
神经网络联合训练 85% 中 中 离线分析
多模态 Transformer 87% 高 较差 研究场景
注意力融合 86% 高 较差 高精度需求

2.4 眼动优于 EEG 的场景

综述发现一个重要结论:在某些场景下,单眼动跟踪优于单 EEG:

场景 ET > EEG 的原因
视觉分心 眼动直接反映视觉注意力分配
疲劳检测 PERCLOS 等眼动指标成熟可靠
实时部署 眼动非侵入、采样率高

但在以下场景 EEG 优于眼动:

  • 认知负荷评估(内隐状态)
  • 情绪/压力检测
  • 意图预测(早于行为表现)

3. 关键技术细节

3.1 EEG 频段与认知状态对应关系

频段 频率范围 认知状态关联 驾驶相关性
Delta (δ) 0.5-4 Hz 深睡眠 重度疲劳
Theta (θ) 4-8 Hz 浅睡/冥想 疲劳/走神
Alpha (α) 8-13 Hz 放松/闭眼 注意力下降
Beta (β) 13-30 Hz 活跃思考 正常驾驶
Gamma (γ) 30-100 Hz 高级认知 高负荷驾驶

3.2 眼动指标体系

指标 定义 认知关联
注视持续时间 单次注视的时长 注意力集中度
扫视频率 单位时间扫视次数 警觉性
注视点分布 注视点空间分布熵 注意力分散度
瞳孔直径 瞳孔大小变化 认知负荷
眨眼频率 单位时间眨眼次数 疲劳程度
PERCLOS 闭眼时间占比 疲劳金标准

3.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
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
import numpy as np
import torch
import torch.nn as nn
from typing import Tuple

class EEGEyeFusionModel(nn.Module):
"""
EEG + 眼动跟踪多模态融合模型

基于综述发现的最佳实践:
- 特征级融合 + 注意力机制
- EEG: 频域特征 (5频段功率)
- ET: 行为特征 (注视+眨眼+瞳孔)

论文综述表明注意力融合策略达到最高准确率
"""

def __init__(
self,
eeg_channels: int = 14, # EEG 通道数
eeg_bands: int = 5, # 频段数 (δ,θ,α,β,γ)
et_features: int = 6, # 眼动特征数
hidden_dim: int = 128,
num_classes: int = 3, # 正常/疲劳/分心
dropout: float = 0.3
):
super().__init__()

# EEG 特征编码器
self.eeg_encoder = nn.Sequential(
nn.Linear(eeg_channels * eeg_bands, hidden_dim),
nn.BatchNorm1d(hidden_dim),
nn.ReLU(),
nn.Dropout(dropout),
nn.Linear(hidden_dim, hidden_dim),
nn.BatchNorm1d(hidden_dim),
nn.ReLU(),
nn.Dropout(dropout)
)

# 眼动特征编码器
self.et_encoder = nn.Sequential(
nn.Linear(et_features, hidden_dim // 2),
nn.BatchNorm1d(hidden_dim // 2),
nn.ReLU(),
nn.Dropout(dropout),
nn.Linear(hidden_dim // 2, hidden_dim),
nn.BatchNorm1d(hidden_dim),
nn.ReLU(),
nn.Dropout(dropout)
)

# 跨模态注意力
self.cross_attn = nn.MultiheadAttention(
embed_dim=hidden_dim,
num_heads=4,
dropout=dropout,
batch_first=True
)

# 融合分类器
self.classifier = nn.Sequential(
nn.Linear(hidden_dim * 2, hidden_dim),
nn.GELU(),
nn.Dropout(dropout),
nn.Linear(hidden_dim, num_classes)
)

def forward(
self,
eeg_features: torch.Tensor, # (B, C, B_bands) 通道×频段功率
et_features: torch.Tensor # (B, T, et_features) 时序眼动特征
) -> torch.Tensor:
"""
前向传播

Args:
eeg_features: EEG 频域特征 (批次, 通道, 频段)
et_features: 眼动时序特征 (批次, 时间步, 特征)

Returns:
logits: (B, num_classes) 状态分类
"""
B = eeg_features.shape[0]

# 1. EEG 编码
eeg_flat = eeg_features.reshape(B, -1)
eeg_embed = self.eeg_encoder(eeg_flat) # (B, D)

# 2. 眼动编码(取时序平均)
et_mean = et_features.mean(dim=1) # (B, et_features)
et_embed = self.et_encoder(et_mean) # (B, D)

# 3. 跨模态注意力
# EEG 作为 query,ET 作为 key/value
eeg_q = eeg_embed.unsqueeze(1) # (B, 1, D)
et_kv = et_embed.unsqueeze(1) # (B, 1, D)

attended, _ = self.cross_attn(eeg_q, et_kv, et_kv)
attended = attended.squeeze(1) # (B, D)

# 4. 融合分类
fused = torch.cat([attended, et_embed], dim=-1) # (B, 2D)
logits = self.classifier(fused)

return logits


class EEGFeatureExtractor:
"""
EEG 频域特征提取

将原始 EEG 信号转换为 5 频段功率特征
"""

def __init__(self, fs: int = 250, channels: int = 14):
self.fs = fs
self.channels = channels
# 频段定义 (Hz)
self.bands = {
'delta': (0.5, 4),
'theta': (4, 8),
'alpha': (8, 13),
'beta': (13, 30),
'gamma': (30, 45)
}

def extract(self, eeg_signal: np.ndarray) -> np.ndarray:
"""
提取频域特征

Args:
eeg_signal: (C, T) 多通道 EEG 信号

Returns:
features: (C, 5) 各通道各频段功率
"""
from scipy.signal import welch

n_channels = eeg_signal.shape[0]
features = np.zeros((n_channels, len(self.bands)))

for ch in range(n_channels):
freqs, psd = welch(eeg_signal[ch], fs=self.fs, nperseg=self.fs*2)

for i, (band_name, (f_low, f_high)) in enumerate(self.bands.items()):
mask = (freqs >= f_low) & (freqs <= f_high)
features[ch, i] = np.sum(psd[mask])

# 对数变换稳定方差
features = np.log10(features + 1e-10)

return features


class EyeTrackingFeatureExtractor:
"""
眼动跟踪特征提取

从原始眼动数据提取行为特征
"""

def __init__(self, fps: int = 60):
self.fps = fps

def extract(self, gaze_data: np.ndarray) -> np.ndarray:
"""
提取眼动特征

Args:
gaze_data: (T, 4) 时序眼动数据 [x, y, pupil, blink]

Returns:
features: (T, 6) 6维眼动特征
"""
T = gaze_data.shape[0]
features = np.zeros((T, 6))

x, y, pupil, blink = gaze_data.T

# 特征1: 注视持续时间(基于速度判定)
velocity = np.sqrt(np.diff(x, prepend=x[0])**2 +
np.diff(y, prepend=y[0])**2)
fixation = (velocity < 0.01).astype(float)
features[:, 0] = fixation

# 特征2: 扫视频率(滑窗内扫视次数)
window = int(self.fps * 2) # 2秒窗口
for i in range(T):
start = max(0, i - window)
features[i, 1] = np.sum(velocity[start:i+1] > 0.05) / (window / self.fps)

# 特征3: 注视点分布熵
for i in range(T):
start = max(0, i - window)
hist, _ = np.histogram2d(x[start:i+1], y[start:i+1], bins=10)
p = hist.flatten() / (hist.sum() + 1e-10)
features[i, 2] = -np.sum(p * np.log2(p + 1e-10))

# 特征4: 瞳孔直径变化
features[:, 3] = pupil

# 特征5: 眨眼频率
for i in range(T):
start = max(0, i - window)
features[i, 4] = np.sum(blink[start:i+1]) / (window / self.fps)

# 特征6: PERCLOS
for i in range(T):
start = max(0, i - int(self.fps * 60)) # 60秒窗口
features[i, 5] = np.mean(blink[start:i+1] > 0.5)

return features


if __name__ == "__main__":
# 模型初始化
model = EEGEyeFusionModel(
eeg_channels=14,
eeg_bands=5,
et_features=6,
num_classes=3,
hidden_dim=128
)

total_params = sum(p.numel() for p in model.parameters())
print(f"融合模型参数量: {total_params:,}")

# 模拟输入
B = 8 # 批次
eeg = torch.randn(B, 14, 5) # 14通道×5频段
et = torch.randn(B, 30, 6) # 30时间步×6特征

# 前向传播
with torch.no_grad():
logits = model(eeg, et)

print(f"EEG 输入: {eeg.shape}")
print(f"ET 输入: {et.shape}")
print(f"输出: {logits.shape}")
print(f"预测: {torch.argmax(logits, dim=1).tolist()}")

# 特征提取器测试
eeg_extractor = EEGFeatureExtractor(fs=250, channels=14)
raw_eeg = np.random.randn(14, 2500) # 10秒@250Hz
eeg_feat = eeg_extractor.extract(raw_eeg)
print(f"\nEEG 特征形状: {eeg_feat.shape}")
print(f"频段功率示例 (通道0): δ={eeg_feat[0,0]:.2f}, "
f"θ={eeg_feat[0,1]:.2f}, α={eeg_feat[0,2]:.2f}, "
f"β={eeg_feat[0,3]:.2f}, γ={eeg_feat[0,4]:.2f}")

et_extractor = EyeTrackingFeatureExtractor(fps=60)
raw_et = np.random.randn(600, 4) # 10秒@60Hz
et_feat = et_extractor.extract(raw_et)
print(f"ET 特征形状: {et_feat.shape}")

print("\n=== 综述关键结论 ===")
print("1. EEG+ET 融合在所有条件下一致提升分类性能")
print("2. 跨被试准确率达 83%,跨性别达 87%")
print("3. 注意力机制融合策略性能最优")
print("4. 单眼动在某些场景优于单EEG(视觉分心/疲劳)")
print("5. EEG在认知负荷/情绪检测方面更有优势")

4. 单通道耳道 EEG:驾驶员分心预测新方案

4.1 研究亮点

bioRxiv 2026年1月发表的论文证明了单通道耳道 EEG 即可预测驾驶员分心:

项目 内容
传感器 单通道耳道 EEG(入耳式)
检测目标 认知分心(工作记忆负载)
检测延迟 毫秒级(与全帽 EEG 一致)
核心优势 可集成到耳机/头枕,完全非侵入

4.2 关键发现

“认知分心通常在眼动指标中表现早于驾驶性能下降” —— Peng et al., 2025

这意味着 EEG 可以在驾驶行为恶化之前检测到认知分心,为干预争取宝贵时间。

4.3 单通道 vs 多通道

配置 通道数 准确率 佩戴便利性 部署可行性
全帽 EEG 32-64 85-90% ❌ 极差 ❌ 不可行
简化帽 EEG 8-14 80-85% ❌ 差 ❌ 不可行
耳道 EEG 1-2 70-75% ✅ 好 ✅ 可行
耳道 EEG + 眼动 1-2 + ET 80-83% ✅ 好 ✅ 可行

5. 对 IMS 开发的落地启示

5.1 技术路线规划

5.2 优先级矩阵

方案 准确率 成本 侵入性 部署难度 优先级
纯眼动 70-75% 低 无 易 ✅ 已有
眼动+面部AU 75-80% 低 无 易 🔴 近期
耳道EEG+眼动 80-83% 中 低 中 🟡 中期
多通道EEG+眼动 85-87% 高 高 难 🟢 远期

5.3 关键建议

建议 依据 优先级
立即增加注视分布熵特征 综述表明眼动熵对认知分心敏感 🔴 高
预留 EEG 接口 单通道耳道 EEG 已证明可行 🟡 中
研究注意力融合策略 综述表明注意力融合最优 🔴 高
建立认知分心数据集 缺乏标注数据是核心瓶颈 🔴 高
对标 EyeCue 方案 IJCAI 2026 论文已达 74% 非侵入 🟡 中

6. 参考资源


EEG + 眼动融合是认知分心检测的终极方案,但需要分阶段推进。 近期以纯眼动为主,预留生理信号接口,等待耳道 EEG 等非侵入式传感器成熟后实现多模态融合,达到 85%+ 的认知分心检测准确率。