拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于CNN的脑电信号上肢运动意图识别:从EEG预处理到模型复现

基于CNN的脑电信号上肢运动意图识别:从EEG预处理到模型复现

简介:基于卷积神经网络的脑电信号上肢运动意图识别论文PDF,面向脑机交互、深度学习及生物信号处理研究者。该研究针对传统模式识别中手动提取特征容易导致信息损失的问题,利用CNN自动学习脑电特征,并与BP神经网络两种特征提取方法进行对比实验。资源共1个PDF文件,大小约4.36MB,为浙江大学2017年发表于《浙江大学学报(工学版)》的完整论文,内容包含研究背景、CNN模型构建、左右手二分类和单手三分类实验设计及结果分析,实验显示CNN相比BP网络识别精度分别提升约4%和8%,增强了动作预测的可靠性。读者可据此掌握CNN在脑电信号意图识别中的落地流程,加深对脑机交互控制与中枢神经信号手部动作关系的理解,适用于机器学习、数据建模及运动意图识别等方向。目前已有206人学习,适合相关领域研究人员、学生及工程师参考。

1. 基于卷积神经网络的脑电信号上肢运动意图识别:不是看热闹的论文

把“基于卷积神经网络的脑电信号上肢运动意图识别”这个标题拆开看,说白了是一件事:EEG信号太弱、太容易混入伪迹,传统做法要先手动抽特征再分类,这一抽,信息就损失一块。这篇2017年发表在《浙江大学学报(工学版)》上的论文,直接拿卷积神经网络对着脑电矩阵做分类,把传统“手动特征+BP神经网络”的识别精度在左右手2分类上拉高了约4%,在单手3分类上拉高了8%。我读它不是因为算法多潮,而是因为它把实验范式、21个通道选位、21×80输入矩阵、两层卷积核参数全写透了,完全可以照着搭一套自己的上肢运动意图识别流程。下面按复现顺序拆解。

2. 实验设计与EEG预处理:21通道取舍与128ms滑动窗里的ERD计算

2.1 设备与电极选位:64导系统为什么只算21导

整篇论文的采集平台是荷兰BioSemi公司的ActiveTwo 64通道脑电系统,采样率1024Hz,右耳垂做参考电极,接地电极由CMS和DRL两个独立电极替代。实验招募了5位神经健康的志愿者,平均年龄26.3±7.2岁,实验前24小时内没有剧烈运动,开始实测之前对所有运动流程做了完整训练,并签署知情同意书。采是用64导采的,最终只选了21个通道参与分析。这21个通道按国际10-20标准电极安放法布置,覆盖运动感知功能区的核心区域:

区域电极名称数量
额区FC5、FC3、FC1、FCz、FC2、FC4、FC67
中央区C5、C3、C1、Cz、C2、C4、C67
中央顶区CP5、CP3、CP1、CPz、CP2、CP4、CP67

选位逻辑很清楚:运动想象的ERD/ERS现象主要出现在初级感觉运动皮层附近,额区、中央区、中央顶区正是这个功能区投影到头皮的位置。单侧手部运动或想象运动时,对侧运动皮层出现α和β节律的幅度下降,也就是事件相关去同步;通道离运动皮层太远,这类特征会被其他脑区的自发活动淹没。

对复现者来说,通道数不是越多越好,关键是覆盖对侧运动皮层。如果手里只有32通道甚至8通道的便携脑电帽,优先保留C3、C4、Cz及周围的FC、CP电极,远颞区和枕区的通道在这个任务里贡献有限,砍掉不影响大局。另外,CMS/DRL的主动电极接地方式要注意——它替代的是传统接地电极,采集时不能省,否则共模抑制会明显下降,工频干扰直接灌进信号里。

2.2 单次试验10秒时间轴:真正进模型的只是2.5秒

实验分成两部分:左右手动作2分类和右手动作3分类。左右手实验分别做左手、右手的屈肘运动;单手实验做三种上肢运动——屈肘、屈腕和腕外旋。每种动作各执行50次,每位受试者完成250次试验。动作为什么选这三个?论文引用了一个观察:物理行为最相似的2类任务之间错误分类率最高,比如屈腕与腕内旋、伸腕与腕外旋,所以特意选了行为差异较大的肘关节和腕关节运动。

时间段阶段被试要求
0~2s休息思想尽量放松,不作过多思考
第3s起2s准备想象根据语音提示进入准备状态
5~8s运动想象集中注意力想象即将执行的动作
8~10s运动执行匀速转动关节至任意角度

实验用E-Prime软件控制语音和视觉提示。复现时数据记录一定要同步打事件标记——后面那2.5秒的输入窗口就是靠运动起始点对齐切出来的。数据截取范围是运动前2s至运动后0.5s,共2.5秒;运动执行阶段只留0.5s,是考虑到被试存在反应延迟。如果直接拿第5s到第8s的运动想象段来训练,丢掉的是运动执行前最关键的“意图形成”信息。运动想象和运动执行都能在皮层产生相似波形,但意图识别研究的重点在想象段;执行段的脑电混入感觉反馈和肌电成分,反而会干扰分类。

2.3 预处理链路:低通、陷波、CAR、带通

原始EEG经历三道预处理:96Hz低通滤波去掉高频分量,50Hz陷波去掉线路频率,空间滤波提升信噪比。空间滤波选的是共平均参考(CAR),即每个电极的电位减去所有21个电极电位的平均值。CAR在几种常见空间滤波方案中信噪比表现最好,尤其适合电极数量较多的采集配置。计算可以写成:

V_CAR[i] = V_RAW[i] - (1/N) × Σ V_RAW[j]

其中N=21。CAR的操作含义是:假设所有电极共享一个全局噪声源,平均电位近似代表这个噪声,减去它等于把全体电极共同噪声从单通道里抠掉。实测中这套滤波对工频干扰和皮肤电位漂移的压制都很明显。

空间滤波之后还要对信号做带通滤波,隔离α/β频率分量。论文用的是Matlab滤波器工具箱里的10阶Butterworth带通滤波器,频率范围8-30Hz。为什么选这个范围?α频带8-13Hz、β频带13-30Hz,这两个频带的ERD/ERS被证实直接反映肢体运动。低于8Hz的慢波多为漂移和眼电,高于30Hz的成分里肌电占比上升,都不适合做运动意图分类。

两个容易踩的参数坑提前说:第一,50Hz陷波带宽不能太宽,常规做法只陷49-51Hz,如果陷得范围太大,20Hz以上信号相位会被拖累;第二,10阶Butterworth的相位延迟在离线分析里可以容忍,但要做在线脑机接口时建议改用零相位滤波,不然实时处理会产生明显的群延迟,动作预测窗口就废了。

2.4 ERD量化:128ms窗口算出来的百分比

ERD的物理含义是运动想象引起的脑电节律幅度抑制。论文对滤波后的EEG数据加一个长度128ms、间隔1个采样点的滑动时间窗,逐个数据点求当前时间窗相对参考时段的平均功率变化,得到能量百分比的ERD时程变化。参考时段的平均功率设为R,当前窗功率设为A,则ERD=(R-A)/R×100%。

这个量是负向的:ERD绝对值越大,说明节律抑制越强,运动意图越明显。128ms的窗口长度恰好在α/β的2个周期以上,既能平滑波动又不会把细节抹掉;1个采样点的滑动步长让曲线保持高分辨率。实际计算时按实验序号逐段求值,最后对所有重复试验做叠加平均,消除自发电位等随机成分。

这一节对复现很关键,因为C3、C4通道的ERD时程曲线和脑地形图是论文验证数据质量的第一道凭证。右手运动想象,对侧的C3通道该出现明显能量下降,对照侧C4变化小得多;左手运动想象则镜像反转。复现时如果你的预处理数据画不出这个对侧性,后面分类结果再好看也要怀疑数据本身有偏差。

3. 把脑电矩阵喂给CNN:21×80输入与两层卷积核的网络设计

3.1 为什么要换掉“手动特征+分类器”的模式

传统生物信号模式识别模型的流程是预处理→手动特征提取→分类器。手动特征提取最大的软肋是信息损失:脑电里大量成分没有明确生理意义,你不知道该提取哪几个统计量才算完备,降维和筛选过程中一部分对分类有用的信息就被丢掉了。CNN用卷积层加反向传播自动学特征,把特征提取和分类收敛到同一个训练过程里,相当于用数据驱动替代了专家经验。

对比一下就能看出差别:传统法里,小波变换、CSP都是固定算法,分类器训练只发生在BP那一步;CNN里每个卷积核都在训练中自动调节,虽然训练成本更高,但换来的是4%和8%的精度增益以及更可靠的动作预测。对这个场景来说,CNN的权值共享结构也比较贴合脑电——每个通道在空间上的含义相对固定,同一个卷积核扫过不同电极位置时,学到的模式是可以迁移的。

想系统补卷积神经网络基础的话,这篇论文的2.2节其实可以当速查卡用,它比一般教科书简洁,直接把局部连接、权值共享、卷积层、降采样层每个算子的数学表达式列全了。

3.2 输入矩阵怎么摆:21×80不是随便给的

输入矩阵形式是N×T,N是电极通道数21,T是每个通道的时间采样点分段数。具体计算:采样段2.5s乘以1024Hz采样率,一共2560个采样点;数据段窗口长度定为32点,2560÷32=80,因此输入矩阵为21×80。

这里“窗口长度32”扮演的角色是分组单元而非卷积核。对原始2560个采样点按32点一组做聚合,等效于一次降采样,让后续卷积有合理的时间尺度。如果直接把21×2560的矩阵喂进去,第一层计算量会膨胀几十倍,参数也指数级增长,小样本下很难收敛。复现时如果改了采样率,先按比例调整窗口长度,别让T的值离谱。

输入参数数值说明
采样率1024HzBioSemi系统
截取段时长2.5s运动前2s至运动后0.5s
总采样点数25602.5×1024
数据段窗口长度32点时间分组单位
时间帧数T802560÷32
通道数N2110-20系统
输入矩阵21×80通道行×时间帧列

另一点容易被忽略的是标准化。论文说在把数据导入CNN之前,将每位受试者的EEG信号标准化。这一步很重要:不同通道的阻抗残差不一样,幅值差异可达十几倍,若不做标准化,第一层卷积核学出来的权重会被大尺度通道主导,真正携带ERD信息但幅值较小的通道反而被忽略。标准化的统计量按通道独立计算,保留各通道在时间上的相对起伏,同时抹掉通道间的幅值量级差异。

3.3 网络结构对照表:两层卷积的模型其实很克制

论文构建的网络一共5层:输入层、卷积层1、卷积层2(含降采样)、全连接层、输出层。参数对照如下:

结构卷积核滤波器数输出特征图尺寸说明
输入层--21×80逐受试者标准化
卷积层121×177张1×80通道维空间卷积
降采样最大值池化-每张减半尺度2,无可学习参数
卷积层21×8535张1×10时间维短窗卷积
降采样最大值池化-每张减半输出特征图长度减半
全连接层--120神经元全连接上一层
输出层RBF单元-2或3个每类对应一个RBF单元

第一层卷积核21×1很关键:它把21个通道的位置关系压进一个标量,输出特征图里的第n个点对应第n个时间帧的空间模式;卷积核在时间维移动时,相当于在80个帧之间建立联系。第二层1×8则是在时间维上做短窗口卷积,8个时间点对应大约1/4秒的波形长度,能捕捉ERD的短时起伏。论文特意说明用的是1D卷积,这样卷积后特征里不会混入空间和时间两类信息,降低网络复杂度,也避免两种特征互相干扰。

降采样采用最大值采样,每隔2个点取最大值,输出特征图长度减半。池化神经元不承担学习功能,没有可学习的权重和阈值,它提供的是平移和缩放不变性。要理解这里为什么敢用最大池化而不是平均池化:ERD特征是一种幅值抑制现象,最大值采样能更敏锐地保留“节律振荡仍然活跃的时段”,对后续分类更有效。

激活函数全部采用拉伸的双曲正切:f(a)=A·tanh(S·a),参数A=1.7159、S=2/3。这两个值值得记下来:A把输出范围压到±1.7159之间,S让激活在接近0的区域斜率近似线性,反向传播时梯度不容易饱和。如果换成ReLU,在这个小样本任务里容易出现部分神经元死亡,尤其是数据分布随受试者变化较快的时候。

3.4 训练与交叉验证:归一化参数只能从训练集里出

训练采用5折交叉验证法,将样本随机分成5组,轮流4组作为训练集、1组作为测试集,取5次结果的平均值作为识别率。论文还显式提到“先将训练集和测试集均进行归一化处理,再送入网络运行”。

这里藏着一个关键纪律:归一化统计参数只允许从训练集算出来,测试集复用训练集的均值和方差。如果交叉验证代码里把归一化和数据切分写反了——先全量归一化再切折——测试时数据分布信息已经泄漏到训练侧,得到的精度不是模型真实水平,是乐观偏差后的假精度。很多初次复现的人看到模型在训练集上99%、测试集也99%,高兴半天,后来发现归一化泄漏,重跑直接掉十个百分点。按折来做归一化,是必须的。

样本量上看,每人每动作50次左右,5折下每折约40个训练样本。这样的数据量对现在动辄几十层的深度学习模型完全不够用;论文选5层结构、120个全连接神经元、RBF输出,是克制而合理的选择。想在当前GPU环境下复现并放大结果,方向应该是进一步减少参数量或增加数据增广,而不是把网络变深。

4. 和“手动特征+BP”硬碰硬:4%和8%的精度差是怎么验证的

4.1 两类传统特征提取方案:CSP专门打二分类,DWT才进多分类

为了给CNN找参照,论文选了当时最常用的两套特征提取方法。公共空间模式(CSP)被公认为是提取ERD信号的有效方法之一,它通过同时对角化两类任务的协方差矩阵,找到一组空间滤波方向,使两类信号在该方向上的方差差异最大,由此得到区分特征。CSP在两类问题里效果不错,但核心约束就是“两类别”:左右手2分类很合适,到单手3分类、多自由度关节运动时,就需要扩展成多类CSP或引入决策树,复杂度直线上升。所以论文里CSP只参与左右手2分类对比。

离散小波变换(DWT)的适用范围更宽。它用“母小波”函数构造基函数,与只用正弦函数的傅里叶变换不同,DWT在时域和频域都有定位能力,适合EEG这种微弱非平稳信号。论文选DB10小波基,通过Mallat快速算法把256点信号分解到第3层。分解后得到D1(32-64Hz)、D2(16-32Hz)、D3(8-16Hz)、A3(0-8Hz),只取出位于α和β波段的D2和D3做分析。每个通道取两个子频带的能量均值、方差、相关系数作为统计特征,标准化后输入BP神经网络。单手3分类实验里,特征维度就是21通道×2频带×3统计量=126维。

有一个细节提醒一下:原文公式里的符号偶尔有笔误,小波变换表达式在正文里写成离散形式,复现时以Mallat算法标准形式为准,不要按连续小波变换去实现。靠结果反推,用DWT时你只需要关心D2和D3的统计量是否和运动想象对应的α/β频率吻合。

4.2 BP神经网络的分类器配置

BP神经网络按误差逆传播算法训练多层前馈网络。输入层设16个节点,代表从EEG时间序列里选取的特征;隐藏层节点数设为20,用Levenberg-Marquardt算法训练;输出层对应动作种类设2个或3个节点。两个任务的训练集和测试集划分方式及交叉验证方法,与CNN完全相同。

这里的一致性不是走过场。对比实验最怕两边数据口径不同:CNN输入21×80原始片段,BP那边输入16维特征,如果训练集划分也不同,最后差出来的精度就没有意义。论文在两种方法上套同一套5折交叉验证,保证每折里看到的样本一样,CNN比BP涨出来的4%、8%才站得住。自己复现时,建议先用同一个数据切分脚本导出两种方法的输入,再分别训练。这是“公平对比”的底线。

16个输入节点这个数字也侧面暴露了传统方法的局限:16维特征是从126维统计量里再压缩而来的,压缩过程必然进一步丢细节。CNN那边输入是21×80共1680个数值,信息量天然比16维大一个量级,哪怕卷积层做得朴素,起点也高。

4.3 评价指标三件套:总体精度、混淆矩阵、Kappa值

论文对分类结果的评价没有只看一个总精度。先统计所有实验结果的混淆矩阵,矩阵每个非对角元素都代表着一类动作被错判成另一类的个数;再计算总体分类精度,即正确分类数与总数的比值;最后算Kappa统计量,用来衡量分类与完全随机分类相比减少了多少错误。Kappa值能反映多个受试者执行同一动作时结果的一致性,避免个别受试者数据分布异常造成误判。

对左右手2分类,混淆矩阵只有两类,结构简单;真正难的是单手3分类,3个动作激活大致相同的皮层区域,混淆矩阵里你才能看出哪两个动作最容易互错。ERD特征接近的两个动作,比如屈腕和腕外旋,错分率往往最高,总精度会被它们拖低。只报总精度,你就不知道模型卡在哪。

论文结果给的两个数字很朴素:CNN在左右手2分类中提高识别精度约4%,在单手3分类中约8%。4%和8%都不是天上掉下来的性能飞跃,但说明了识别精度离极限还有距离,CNN拿走的正是手动提取特征时丢掉的那部分信息。解读这两个数字时要克制:论文样本量小、被试只有5人,统计显著性有限,把它当作从CSP/DWT方案升级到CNN的参考理由,别过度外推。

4.4 生理层面的验证:C3/C4的ERD与Morlet小波时频图

论文还做了一层可视化的生理验证。提取C3、C4通道的ERD信息——这两个位置对应手部感知运动功能区,是所有通道里采集手部运动EEG的最佳位置。对所有试验的C3和C4通道信号计算ERD后叠加平均,发现受试者想象右手运动时,对侧C3电极信号能量明显减少,ERD出现在-2到-0.5s区间;想象左手时C4电极出现同样现象。这正好对应单侧肢体运动的对侧ERD规律。

时频分析用Morlet小波变换构建了3个动作的时频图,目的是确认3类动作在频域上确实存在可分信息。结果显示,运动想象阶段屈肘动作的能量最大处集中在10Hz附近;两个腕部动作在运动想象时引发的20-28Hz成分更明显,在一定时间范围内移到了相对高频区域。这说明虽然3个动作激活区域大致相同,但它们携带不同频域特征,分类是有物理依据的。

给复现者的意义很直接:跑通CNN之后,用同样的方式生成C3/C4的ERD时序图和Morlet时频图。如果对侧ERD消失,或者3个动作的时频重心全部重叠在同一频段,大概率是数据采集或预处理环节出了偏差。这时候先别急着优化模型,回去查数据。

5. 复现避坑指南:五个直接让精度缩水的典型问题

5.1 时间窗截偏了,精度直接掉两个点

现象:训练损失下降很漂亮,但验证集结果一直不稳,时好时坏,总体精度总比论文里的结果低几个百分点。

原因:大概率是事件标记没有对齐运动起始点。数据截取范围是运动前2s到运动后0.5s,如果你的标记按语音提示或采集设备自己的硬触发设定,前后偏差半秒,落在截取窗口里的就不再是纯粹的意图阶段,混入了休息段或者运动执行段的肌电。

解决:重放原始数据,人工逐一检查每个试次的标记时间与运动起始点是否一致;有条件的话,用肌电通道或加速度计辅助定位运动起始时刻,以它为原点重新截取[-2.0s, 0.5s]。我一般会把每个试次的截取起点绘图输出,一眼就能看出标记漂移的程度。这件事不做完,后面所有的训练和调参都是在错误数据上打转。

5.2 50Hz陷波把自己也陷了

现象:预处理后24Hz附近信号的幅值明显减小,原本该在20-28Hz出现的手腕动作特征不见了,分类精度怎么调都上不去。

原因:陷波器带宽设得太宽,常见是把49-51Hz之外的频率也一起衰减了,或者用了一个低阶IIR陷波器,频响在20-30Hz区域就开始提前衰减。10阶Butterworth带通滤波器本身也有过渡带,两个滤波器叠加后高频成分被压制得更厉害。

解决:陷波器用窄带,中心频率50Hz处只衰减±1Hz以内;预处理结束之后把8-30Hz带通的频响曲线打印出来,看24Hz附近有没有异常下跌。若确实下跌,换更高质量的陷波器,或者直接用窄带IIR陷波做50Hz单点清理,不要用宽阻带。

5.3 卷积核当成图像来设,通道和时间混到一起

现象:把输入矩阵当成图像,仿照图像分类用3×3或5×5的二维卷积核,训练也能收敛,但特征图可视化时发现没有明确的空间含义,分类精度也不如预期。

原因:EEG矩阵的两个维度不是同构的。通道维是空间离散电极位置,时间维是连续波形;二维卷积把这两个维度同样处理,而电极在头皮上的实际拓扑和矩阵里的行列顺序并不完全一致,强行做二维卷积容易引入不存在的空间关联。

解决:坚持论文的做法——第一层卷积核21×1只做通道维空间卷积,第二层1×8只做时间维卷积。后面如果希望两个维度同时建模,先用空间卷积把21个通道压缩到低维特征图,再沿时间维度做循环网络或注意力机制,不要一开始就上二维卷积。

5.4 样本量小,加深网络只能换来过拟合

现象:训练集精度95%以上,测试集只有60-70%,两条损失曲线越拉越开,一增加网络参数,差距反而更大。

原因:每类动作只有50次左右试验,对深度学习来说属于极小样本。此时让网络变深、卷积核变多,只会让模型在训练集上过拟合,把噪声当成特征死记硬背下来。这是这类EEG小样本任务里最容易翻车的点。

解决:先照搬论文结构,5层、120全连接节点、第一层7个滤波器和第二层5个滤波器,不要自行加层。如果确实想扩容,用128ms窗口在时间轴上做重叠切片形成更多训练样本,但切分必须保证训练集和测试集不相交,最好按试验维度做分组而不是按连续块混洗,否则会造成信息泄漏,验证精度虚高。

5.5 Kappa值比精度低,不一定是你模型错了

现象:总体精度和BP相比只差2-3个百分点,但Kappa值反而更低,心里一慌,以为模型出了大问题。

原因:Kappa值对类别分布比总精度更敏感,错分越集中,Kappa被扣得越多。如果模型把某个动作大面积误判成另一个动作,Kappa会比总精度更直观地反映出类别层面的区分力不足。

解决:先看混淆矩阵,定位错分最集中的那对类别;再依据第4章的做法,画出那两类动作的时频图。如果频域重叠明显,意味着问题不是分类器而是特征本身的可分性差。这时候该考虑的是增加特征来源——比如加入更多通道、细分频带、做多尺度时频融合,而不是盲目加大网络。

6. 从这篇论文到你的脑机交互项目:复现完成后的三层验证

第一层验证数据质量。把C3、C4通道的ERD时程曲线画出来,确认左右手运动想象的对侧效应是否成立;再把3个动作的Morlet小波时频图做出来,确认屈肘能量集中在10Hz附近、腕部动作在20-28Hz更明显。这两张图过关,数据链路才算建立。如果ERD方向反了或者时频重心全部叠在一起,问题在采集或预处理,不在模型。

第二层验证CNN复现。将左右手2分类和右手3分类的5折交叉验证结果与论文对比,以4%和8%的增量作为基准。如果CNN不如BP,先别急着改网络结构,回到第一层的图去找数据问题。同时对比混淆矩阵里的错分位置,看是否集中在屈腕和腕外旋这类物理行为相近的动作上,判断特征是否真的可分。

第三层验证在线可用性。论文做的是离线分析,脑机交互的实时场景要求更严苛。在线推理时,滑动窗的ERD更新方式必须和离线计算一致;延迟时间要控制在被试动作响应的阈值以内。我习惯的做法是,用训练好的网络参数做固定时间窗的逐帧推理,每一帧输出类别概率,同时把在线输入特征与离线特征库做余弦相似度校验,确认输入分布没有漂移。如果相似度一路走低,说明电极状态或受试者状态变了,需要重新校准。

我第一次复现这篇论文时,卡在时间窗对齐上整整两天,后来把每个试次的起始点图全打出来,才发现标记漂移了约200ms。从那以后,我每次跑EEG分类实验都强制先做数据质量检查,把ERD时程图、时频图、事件标记对齐情况三张图挂出来看,模型训练反而是最后一步。这个习惯让后面几乎所有的复现工作都少走了大半弯路。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表