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类任务之间错误分类率最高比如屈腕与腕内旋、伸腕与腕外旋所以特意选了行为差异较大的肘关节和腕关节运动。时间段阶段被试要求02s休息思想尽量放松不作过多思考第3s起2s准备想象根据语音提示进入准备状态58s运动想象集中注意力想象即将执行的动作810s运动执行匀速转动关节至任意角度实验用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]其中N21。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. 把脑电矩阵喂给CNN21×80输入与两层卷积核的网络设计3.1 为什么要换掉“手动特征分类器”的模式传统生物信号模式识别模型的流程是预处理→手动特征提取→分类器。手动特征提取最大的软肋是信息损失脑电里大量成分没有明确生理意义你不知道该提取哪几个统计量才算完备降维和筛选过程中一部分对分类有用的信息就被丢掉了。CNN用卷积层加反向传播自动学特征把特征提取和分类收敛到同一个训练过程里相当于用数据驱动替代了专家经验。对比一下就能看出差别传统法里小波变换、CSP都是固定算法分类器训练只发生在BP那一步CNN里每个卷积核都在训练中自动调节虽然训练成本更高但换来的是4%和8%的精度增益以及更可靠的动作预测。对这个场景来说CNN的权值共享结构也比较贴合脑电——每个通道在空间上的含义相对固定同一个卷积核扫过不同电极位置时学到的模式是可以迁移的。想系统补卷积神经网络基础的话这篇论文的2.2节其实可以当速查卡用它比一般教科书简洁直接把局部连接、权值共享、卷积层、降采样层每个算子的数学表达式列全了。3.2 输入矩阵怎么摆21×80不是随便给的输入矩阵形式是N×TN是电极通道数21T是每个通道的时间采样点分段数。具体计算采样段2.5s乘以1024Hz采样率一共2560个采样点数据段窗口长度定为32点2560÷3280因此输入矩阵为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)参数A1.7159、S2/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层。分解后得到D132-64Hz、D216-32Hz、D38-16Hz、A30-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时程图、时频图、事件标记对齐情况三张图挂出来看模型训练反而是最后一步。这个习惯让后面几乎所有的复现工作都少走了大半弯路。希望帮到你。本文还有配套的精品资源点击获取
返回列表