NTSM:神经生理学引导三流选择性状态空间模型——EEG-EOG实时疲劳检测8倍加速

论文信息

项目 内容
标题 NTSM: Neurophysiology-Guided Tri-Stream Selective State Space Model for Real-Time Driver Fatigue Detection with EEG-EOG Signals
PubMed https://pubmed.ncbi.nlm.nih.gov/42647705/
发表 2026年8月
核心方法 三流选择性状态空间模型(Tri-Stream SSM)
输入 EEG + EOG
数据集 SEED-VIG + MPDDF(跨数据集验证)
加速 8.19× over Transformer E2CF

核心创新

  1. 三流架构:EEG频谱流+EEG空间流+EOG时序流,各流独立SSM
  2. 神经生理学先验:顶枕区激活=清醒,额颞慢波=疲劳
  3. 选择性状态空间模型:Mamba风格SSM替代Transformer,8.19×加速
  4. 跨数据集泛化:SEED-VIG训练→MPDDF测试92.95%准确率

方法详解

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
import torch
import torch.nn as nn

class SelectiveSSM(nn.Module):
"""选择性状态空间模型(Mamba风格简化版)"""

def __init__(self, d_model: int, d_state: int = 16):
super().__init__()
self.d_model = d_model
self.d_state = d_state

# 输入投影
self.proj_in = nn.Linear(d_model, d_model * 2)

# SSM参数(可学习A, B, C, Δ)
self.A = nn.Parameter(torch.randn(d_state, d_model) * 0.01)
self.B = nn.Parameter(torch.randn(d_state, d_model) * 0.01)
self.C = nn.Parameter(torch.randn(d_model, d_state) * 0.01)
self.dt = nn.Parameter(torch.ones(d_model) * 0.1)

self.proj_out = nn.Linear(d_model, d_model)

def forward(self, x):
"""x: [B, T, D]"""
x = self.proj_in(x)
a, b = x.chunk(2, dim=-1)
x = a * torch.sigmoid(b) # Selective gate

# 离散化SSM
dt = torch.softplus(self.dt)
A_bar = torch.exp(-dt.unsqueeze(0) * self.A) # [D_state, D_model]

# 简化前向扫描
h = torch.zeros(x.shape[0], self.d_state, self.d_model, device=x.device)
outputs = []
for t in range(x.shape[1]):
B_t = self.B * x[:, t:t+1, :].mean(dim=1, keepdim=True).transpose(0, 1)
h = A_bar * h + B_t
y = torch.einsum('bd,ds->bs', h.mean(dim=1), self.C)
outputs.append(y.unsqueeze(1))

out = torch.cat(outputs, dim=1)
return self.proj_out(out + x)


class TriStreamNTSM(nn.Module):
"""NTSM: 三流选择性状态空间模型"""

def __init__(self, n_classes=3):
super().__init__()
# 流1: EEG频谱
self.spectral_ssm = SelectiveSSM(64)
self.spectral_proj = nn.Linear(5, 64) # 5频段→64

# 流2: EEG空间
self.spatial_ssm = SelectiveSSM(64)
self.spatial_proj = nn.Linear(17, 64) # 17通道→64

# 流3: EOG时序
self.eog_ssm = SelectiveSSM(32)
self.eog_proj = nn.Linear(6, 32) # 6个EOG特征

# 融合+分类
self.fusion = nn.Sequential(
nn.Linear(64 + 64 + 32, 128),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(128, n_classes)
)

def forward(self, eeg_spectral, eeg_spatial, eog_features):
# 三流各自SSM
s = self.spectral_proj(eeg_spectral) # [B, T, 64]
s = self.spectral_ssm(s)

p = self.spatial_proj(eeg_spatial)
p = self.spatial_ssm(p)

e = self.eog_proj(eog_features)
e = self.eog_ssm(e)

# 池化
s = s.mean(dim=1)
p = p.mean(dim=1)
e = e.mean(dim=1)

# 融合
fused = torch.cat([s, p, e], dim=-1)
return self.fusion(fused)


# 测试
if __name__ == "__main__":
model = TriStreamNTSM(n_classes=3)

# 模拟输入
spec = torch.randn(4, 100, 5) # 5频段×100时间步
spat = torch.randn(4, 100, 17) # 17通道×100时间步
eog = torch.randn(4, 100, 6) # 6 EOG特征

out = model(spec, spat, eog)
print(f"NTSM输出: {out.shape}")
print(f"参数: {sum(p.numel() for p in model.parameters()):,}")

实验结果

指标 NTSM E2CF (Transformer) 提升
COR (Pearson) 0.8738 0.8321 +5.0%
RMSE 0.1294 0.1452 -10.9%
推理速度 8.19× 8.19×
跨数据集准确率 92.95% 85.2% +7.75%

神经生理学验证

脑区 清醒 疲劳 一致性
顶枕区 高激活 低激活
额叶 β主导 θ/δ主导
颞叶 正常 慢波增加

IMS开发启示

价值 描述
8.19×加速 SSM替代Transformer,边缘部署友好
三流解耦 频谱+空间+EOG独立建模,可解释
跨数据集泛化92.95% SEED-VIG→MPDDF验证
神经先验 模型决策与脑科学一致

总结

  1. 三流SSM 8.19×加速:Mamba风格选择性SSM替代Transformer
  2. 跨数据集92.95%:SEED-VIG→MPDDF泛化验证
  3. 神经生理学一致:顶枕激活=清醒,额颞慢波=疲劳
  4. 与DeltaGateNet互补:NTSM云端精细分析+DeltaGateNet边缘实时

https://dapalm.com/2026/09/22/2026-09-22-13-ntsm-tri-stream-ssm-eeg-eog-fatigue-ims/
作者
Mars
发布于
2026年9月22日
许可协议