本教程是基于deap数据集的,涵盖了预测脑电信号的大多数传统机器学习算法和深度学习算法。
因为有很多关于DEAP数据集的研究,但它们很难比较。因此,作为一个EEG研究者,几乎不可能知道我应该做出什么样的架构决策。这是由于这样的事实:一些文章要么没有提供代码库因此无法复制,或者没有明确指定使用的hyperparameters,或仅仅由于显而易见的事实,即使是两篇论文使用相同的模型不能直接比较,因为不同的硬件和使用的hyperparameters。
我的目的是,我的硕士和博士学生可以使用它作为他们脑电研究的入门工具包。这些算法不一定能很好地用于EEG情绪识别,但为了完整起见,我将它们全部包括在内。
因此,我想对典型的脑电图模型进行受控比较,以清楚地了解什么有用,什么没用。
注意:在使用教程之前,请创建一个文件夹“data”,并下载预处理的DEAP数据集,并将s01.dat,…,s32.dat放在这个“data”文件夹中。数据文件夹将位于与教程相同的目录中。
本教程通过使用基准DEAP数据集中的情感识别作为案例研究,解释了基本的EEG分析以及常见的深度学习模型。
该库通过使用来自基准DEAP数据集的情感识别作为案例研究,比较了传统机器学习算法和深度学习算法的不同建模方法。
Python libraries:
- Python MNE
- PyTorch
- NumPy
- Sckit-Learn
- SciPy
Docker Prerequisite (Akraradet & Raknatee)
- Docker
- Docker-Compose
How to use
docker是为了使用与docker扩展的Visual Studio代码。这样我们就可以将“可视代码”附加到docker环境中。
一旦你“撰写”了服务,去docker标签,找到“eeg-emotion”。右键单击并选择“附加Visual Studio代码”。打开’ /root/projects/ ',并享受编码的乐趣。
docker-compose有两种类型。只支持CPU和GPU
- CPU
docker-compose -f docker-compose-cpu.yml up --build -d
- GPU
docker-compose -f docker-compose-gpu.yml up --build -d
Tutorials:
- (01.) Understanding the DEAP dataset
- Common EEG feature engineering + machine learning
- (02.) spectrum + SVM (61%)
- (03.) asymmetry + SVM - Akraradet
- (04.) connectivity + SVM - Akraradet
- (05.) common spatial pattern + SVM - Akraradet
- (06.) phase coherence + SVM - Akraradet
- Baseline deep learning models (50 epochs)
- (07.) LSTM (71% acc)
- (08.) CNN1D + LSTM (92% acc)
- (09.) Spectogram + CNN2D
- CNN 2 layers - (87% acc)
- CNN 4 layers - (96% acc)
- Advanced (50 epochs)
- (10.) CNN1D + LSTM + General Attention
- Dot Product Attention (94% acc)
- Multiplicative Attention ( ) Fabby
- Additive Attention ( ) Babby
- Hierarchical Attention ( ) Fabby
- (11.) CNN1D + LSTM + Self Attention
- Using mean to combine (90% acc)
- Using sum to combine (91% acc)
- Using last state to combine (90% acc)
- (12.) CNN1D + LSTM + MultiHead Self Attention
- Using mean to combine (92% acc)
- Using sum to combine (92% acc)
- Using last state to combine (94% acc)
- (13.) ChannelNet ( ) Beau
- (14.) EEGNet ( ) Chaky
- (15.) Spatial–Temporal Self-Attention CNN ( ) New + Babby + Beau
- (10.) CNN1D + LSTM + General Attention
一些可能的结论:
- 仅LSTM较差(71%)。这是预期的,因为每个单独的样本只是一个单独的数据点。由于信号大多很长(1分钟内8064个样本),因此LSTM几乎不可能理解样本1(第一秒)和样本8064(最后60秒)之间的关系。
- 很明显,在LSTM之前应用CNN1D会产生巨大的改善(92%),这意味着CNN1D在平滑和卷积信号为LSTM更有意义的表示方面是有用的,从而解决了LSTM的长期依赖问题。
- 很明显,使用光谱图(96%)可以很好地捕捉时间和频率信息,因此CNN2D四层显示的精度更高。关于谱图的另一点是,它的参数相对较少,这进一步激发了它的使用。
需要注意的是,对于光谱图,我们尝试了不同的窗口大小和重叠大小。我们发现它的影响是非常小的,因此我们决定报道最好的准确性。我们选择窗口大小为采样率,重叠大小为采样率的一半。 - 对于CNN1D和CNN2D, maxpooling被证明是非常有用的,它缩小了样本的大小,从而加快了训练过程,同时也作为特征选择。无论如何,我们发现一个小小的警告,过多的maxpooling可能导致较差的结果,这可能是由于过多的向下采样,因此找到最优的maxpooling层是有用的。
- 很明显,在CNN1D + LSTM的基础上增加注意力会带来轻微的好处,增加大约2%的额外准确度(92 + 2%),就像在多头自我注意中看到的那样。但这种好处是不确定的,正如我们在单头自我关注中看到的那样。这表明,增加注意力应该是精心设计的。此外,增加的精度需要用大量增加的参数来证明。
- 多头注意力(94%)明显比单头注意力(91%)更好,这与《变形金刚》论文的建议一致。
- 值得尝试不同的约简方法(sum、mean、last),但结果可能并不直接。这可能是优先级较低的超参数之一。