脑机接口:基于EEG信号的情绪识别算法实践

EEG(脑电图)情绪识别是脑机接口的核心应用之一,通过分析大脑电信号识别喜悦、悲伤、愤怒等情绪状态。以下是完整的技术流程和算法实践指南:


一、技术流程
  1. 数据采集

    • 设备:使用EEG帽(如NeuroScan, Emotiv)采集原始信号
    • 通道:常用64/128通道,采样率≥256Hz
    • 实验范式:
      • 被试者观看情绪诱发视频/图片(如IAPS数据集)
      • 同步记录情绪标签(离散:喜/怒/哀;连续:效价-唤醒度)
  2. 信号预处理

    import numpy as np
    import mne  # EEG处理库
    
    # 1. 降噪
    raw = mne.io.read_raw_edf("eeg_data.edf", preload=True)
    raw.filter(1, 40)  # 带通滤波(1-40Hz)
    raw.notch_filter(50)  # 工频噪声滤除(50/60Hz)
    
    # 2. 伪迹去除
    ica = mne.preprocessing.ICA(n_components=20)
    ica.fit(raw)
    ica.exclude = [0, 1]  # 标记眼电/肌电成分
    raw_clean = ica.apply(raw)
    

  3. 特征提取

    特征类型计算方法情绪关联性
    功率谱密度(PSD)Welch方法计算频带能量δ/θ波与消极情绪相关
    微分熵(DE)$$ DE = \frac{1}{2}\log(2\pi e\sigma^2) $$表征脑电复杂度
    功能连接PLV/相干性计算脑区耦合跨脑区情绪网络
  4. 特征选择

    • 递归特征消除(RFE)
    • 互信息(MI)筛选Top-k特征
    from sklearn.feature_selection import mutual_info_classif
    
    mi_scores = mutual_info_classif(X, y)
    selected_idx = np.argsort(mi_scores)[-30:]  # 选择Top30特征
    


二、核心算法实践
  1. 传统机器学习

    from sklearn.svm import SVC
    from sklearn.model_selection import cross_val_score
    
    # SVM分类器
    model = SVC(kernel='rbf', C=1.0, gamma='scale')
    scores = cross_val_score(model, X_features, y_labels, cv=5)
    print(f"准确率: {np.mean(scores):.2f}±{np.std(scores):.2f}")
    

    • 常用模型:SVM、随机森林、LDA
    • DEAP数据集典型准确率:65-75%
  2. 深度学习模型

    • EEGNet(轻量化CNN):
      from tensorflow.keras.models import Sequential
      from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation
      
      model = Sequential([
          Conv2D(8, (1, 64), input_shape=(64, 256, 1)),  # 通道×时间点
          BatchNormalization(),
          Activation('elu'),
          # 深度可分离卷积(省略详细结构)
      ])
      model.compile(loss='categorical_crossentropy', optimizer='adam')
      

    • Transformer时序建模
      $$ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$
      • 优势:捕捉长时程EEG依赖关系

三、挑战与优化
  1. 个体差异问题

    • 解决方案:迁移学习(Domain Adaptation)
      • 损失函数:$$ \mathcal{L} = \mathcal{L}{cls} + \lambda \mathcal{L}{MMD} $$
      • MMD(最大均值差异)减小源域与目标域分布差异
  2. 实时性优化

    • 滑动窗口分割:窗口长度1-2s,重叠率50%
    • 轻量化模型:MobileNet-EEG参数量<100KB
  3. 多模态融合

    • EEG + 生理信号(心率/皮电)
    • 特征级融合:早期拼接(Early Fusion)
    • 决策级融合:加权投票(Late Fusion)

四、完整代码示例
# 基于PyTorch的LSTM情绪识别
import torch
import torch.nn as nn

class EmotionLSTM(nn.Module):
    def __init__(self, input_dim, hidden_dim):
        super().__init__()
        self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, 4)  # 4类情绪
        
    def forward(self, x):
        x, _ = self.lstm(x)  # x: [batch, seq_len, features]
        x = x[:, -1, :]     # 取最后时间步
        return self.fc(x)

# 训练循环
model = EmotionLSTM(input_dim=64, hidden_dim=128)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)


五、应用场景
  1. 精神疾病诊断:抑郁症情绪模式识别
  2. 智能交互:VR场景中的实时情绪反馈
  3. 神经营销:广告效果脑电评估

关键资源

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐