1、介绍:
文章:<A multiscale convolutional neural network based on time-frequency
features for decoding rat exercise fatigue LFP >,本文由上海大学于2024.4.8日发表于<Biomedical Signal Processing and Control >,IF:5.1\JCR:Q1
作者:Guofu Zhang , Banghua Yang *, Xin Dong , Jun Ma ,Peng Zan , Xinxing Xia
单位:School of Mechatronic Engineering and Automation, Shanghai University, Shanghai, China b School of Medicine, Shanghai University, Shanghai, China
杨老师及其团队还是强,几乎成了这个一区文章的常客了,在脑机接口领域没有专门的顶刊,这个期刊可以说是BCI的顶刊了,无论是权威性还是含金量都是很高的,之前讲过的这个期刊文章是EEGNex,我拿了两篇博客来讲这个模型,本次我也是边看此文边写本篇博客,看看本创新模型会给我们带来哪些启发呢。
2、实验方法:
看论文我看的多了,一般直接看模型再看其他,比如数据、结论等,在这把实验方法简要介绍一下:
1、设计大鼠运动疲劳的实验范式
2、将LFP(局部场电位)记录电极植入大鼠大脑的M1和M2区域,获得运动疲劳前后静息状态下的LFP
3、对LFP数据进行预处理、功率谱和统计分析
4、根据LFP数据特征设计MSConvNet模型,对运动疲劳前后的LFP进行分类
5、使用一些指标和可视化方法来证明此模型的有效性
3、MSConvNet :
这里,做大鼠实验的可以学习一下本实验在做大鼠疲劳是如何做的,需要关注的是:
1、大鼠麻醉气体、麻醉时间、深度麻醉时间
2、电极植入手术钻头长度、气体麻醉浓度的保持范围
3、手术过程中减少大鼠出血的方法
4、左侧M1、M2;右侧M1、M2精确的电极植入距离(mm)
5、电极固定方法、术后预防炎症方法
6、术后恢复时间(天)
7、LFP记录时间(minutes)
数据处理方法:
1、0.5–100 Hz带通滤波+50 Hz陷波滤波,排除工频干扰
2、通过视屏筛选保留600个LFP样本数据
3、对LFP五个频带(Delta、Theta、Alpha、Beta、Gamma)分别提取PSD特征用于模型计算
模型搭建:
前提:鉴于之前的研究:大鼠运动疲劳后,ECoG的Theta、Alpha和Beta波段的功率谱降低,在频域上表现出显著特征。有鉴于此,为了使模型学习更多的时间特征和频率特征,本文提出了一种多尺度CNN,MSConvNet,用于通过设置不同长度的滤波器来提取疲劳前和疲劳后LFP的时间和多频带特征。
MSConvNet
本模型一共三个Module,分别是:
1、Temporal Feature Module(时间特征模块)
2、Narrow Frequency Feature Module(窄频特征模块)
3、Wide Frequency Feature Module(宽频特征模块)
看到这里,跟着我学习的同学会想到EEGNet,对的,本模型也是在已有的EEGNet等sota模型上总结出的一些规律进行设计的,按照Block进行设计搭建,但是上述每个Module中还包含4个小的block,所以本模型总共12个block,下面跟随我的步伐咱们对每个模块细细的解读。
1、Temporal Feature Module
咱们来看第一个大的Block,它里面有4个小的ConvPoolBlock,其中:
ConvPoolBlock1:
Conv2d:kernel_size=1*10,filter=25,padding='same'
Conv2d:kernel_size=4*1,filter=25,padding='valid'
BN+ELU
MaxPooling:kernel_size=1*3,stride=1*3
Dropout:p=0.25
这里我直接说我们可以得到哪些经验,看了这么多论文模型,其实都差不多的规律(好好看,好好学,都是重点,别怪我没提醒你哦):
1、先时间卷积后空间卷积,效果最好
2、凡是时间卷积核padding都是same,空间卷积都是valid,两者stride都是1
3、时间卷积核要小,但其设计也需要参考采样率以及采集的时间点,比如这里是1*10的卷积核,采样率是1000Hz,那就是在10ms的时间尺度上提取时间特征。
4、该模型时间空间卷积堆叠再激活,中间没其他东西
5、卷积+BN+激活函数这顺序不能乱
6、丢弃层放在BN和激活之后,一般放在池化之后,不跨被试丢弃率p=0.25,跨被试p=0.5
7、池化的k和s也需要根据采样率设计
8、这个皮层电图(ECoG)数据它的输入这里显示的是1,4,1000,其实完整的是(batch_size,1,C,T)也是原本的3维数据扩了一维度1,作为模型新的输入通道,这种数据以及完全侵入式的Spikes的数据,只要是输入到卷积模型中,都是这种4维输入!!!
ConvPoolBlock2:
Conv2d:k=1*10,f=50
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
ConvPoolBlock3:
Conv2d:k=1*10,f=100
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
ConvPoolBlock4:
Conv2d:k=1*10,f=32
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
总结:
时间特征提取模块,一共4个小的block,每个block都有一层二维时间卷积来提取不同的时间尺度特征,最重要的是ConvPoolBlock1,里面还有一层空间卷积,可以学习全局空间信息。
2、Narrow Frequency Feature Module
攒劲的节目来了,让咱们看第二个大的Block,它里面也有4个小的ConvPoolBlock,其中:
ConvPoolBlock1:
Conv2d:kernel_size=1*500,filter=25,padding='same'
Conv2d:kernel_size=4*1,filter=25,padding='valid'
BN+ELU
MaxPooling:kernel_size=1*3,stride=1*3
Dropout:p=0.25
窜劲儿的知识点有:
时间卷积核=1*500,是采样率的一半,大的卷积核可提取LFP数据的频率特征。也可以捕获2 Hz及以上的频率信息。
ConvPoolBlock2:
Conv2d:k=1*166,f=50
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
ConvPoolBlock3:
Conv2d:k=1*55,f=100
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
ConvPoolBlock4:
Conv2d:k=1*18,f=32
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
3、Wide Frequency Feature Module
ConvPoolBlock1:
Conv2d:kernel_size=1*250,filter=25,padding='same'
Conv2d:kernel_size=4*1,filter=25,padding='valid'
BN+ELU
MaxPooling:kernel_size=1*3,stride=1*3
Dropout:p=0.25
ConvPoolBlock2:
Conv2d:k=1*83,f=50
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
ConvPoolBlock3:
Conv2d:k=1*27,f=100
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
ConvPoolBlock4:
Conv2d:k=1*9,f=32
BN+ELU
MaxPooling2d:k=1*3,S=1*3
Dropout:p=0.25
总结:
这个窄频和宽频block的设计不同之处是卷积核的设计宽是窄的1/2,ConvPoolBlock1的第一卷积也是卷积核大小为(1*250)的时间卷积,对应于4Hz的频率分辨率。这种设置是由大脑节律(德尔塔、西塔、阿尔法、贝塔和伽马)的划分驱动的,有文献表明,大鼠在运动疲劳前后的ECoG频带存在显著差异。此外,FBCNet和FBCSP也使用4H划分的频带组来提取特征,结果良好。ConvPoolBlock1-4的卷积核长度定义为:
4、训练:
Adam优化器,LR=0.001,最小化分类交叉熵损失函数,batch_size=2(共600样本),2分类(0:疲劳前;1:疲劳后),5折交叉验证,一折100个epochs,在Pytorch1.9.1中的NVIDIA GTX1660Ti GPU和CUDA10.2上训练。