基于深度学习的SSVEP分类算法简介

基于深度学习的SSVEP分类算法简介

  • 1、目标与范畴
  • 2、深度学习的算法介绍
  • 3、参考文献

1、目标与范畴

稳态视觉诱发电位(SSVEP)是指当受试者持续注视固定频率的闪光或翻转刺激时,在大脑枕-额叶区域诱发的与刺激频率相关的电生理信号。与P300、运动想像(MI)和其他脑电图信号相比,SSVEP具有更高的信噪比,可以产生更高的ITR,使其成为长期以来最有前途的脑电图范式之一。然而,传统的信号处理算法在解码SSVEP信号时依赖于手动特征提取,在各种极端情况下(数据长度短、刺激数目多、校准数据量小)性能较差,无法满足行业的实际需求。深度学习技术作为人工智能的主要研究分支之一,已被应用于计算机视觉、自然语言处理、推荐系统等各个领域的研究。由于其强大的特征表达能力和极高的灵活性,它颠覆了这些领域的算法设计思想,并取得了显著的成果。

近年来,随着深度学习技术在脑机接口领域的各个方面都具有不错的应用前景,并取得了十分可观的实验效果,从而逐渐受到脑机接口领域研究人员的青睐。SSVEP-BCI系统的研究者们也把握了这个时代机遇,开始尝试探索使用深度学习技术研发SSVEP频率识别算法。因此,本文致力于追踪与介绍前沿研究者们提出的基于深度学习的SSVEP信号识别方法,并提供复现他们模型的Python实现代码。复现的方法包括EEGNet1-2、C-CNN3、FBtCNN4、ConvCA5、SSVEPNet6和SSVEPformer7。代码里使用了Nankanish Masaki在Github上提供的12分类公共数据集8评估模型性能。

2、深度学习的算法介绍

  • EEGNet: EEGNet是一种专门为处理脑电信号数据而设计的卷积神经网络模型,它接收时域脑电数据作为网络输入。EEGNet由4层组成。第一层是卷积层,用于模拟对每个通道数据进行的带通滤波操作。第二层是空间滤波层,通过深度卷积对每个通道的数据进行加权。第三层是用于提取类别信息的独立卷积层。第四层是用于分类的完全连接层。自提出以来,EEGNet已被用于各种脑电任务,如运动图像、P300、SSVEP等 1-2
    在这里插入图片描述

  • CCNN: CCNN也是一个卷积神经网络模型。不同的是,C-CNN使用富含振幅和相位信息的频域数据作为网络输入。值得注意的是,为了获得网络的输入,CCNN使用了基于填充的FFT算法,该算法可以获得任何数据长度的220个数据点,包括110个实部数据和110个虚部数据。CCNN网络结构由两个卷积层和一个完全连接层组成。第一卷积层是空间滤波层,第二卷积层是时间滤波层,全连接层用于分类。CCNN的出现表明光谱数据有利于SSVEP的分类3
    在这里插入图片描述

  • FBtCNN: 对于SSVEP频率识别过程中,在频域输入的范式下,短期窗口下的特征可能不明显,每个通道的时间差异可能被忽略。考虑到谐波信息中嵌入了大量关于频率识别的有效信息,研究人员提出了一种基于滤波器组技术的CNN架构,称为FBtCNN。FBtCNN使用时域信号作为网络输入,并使用滤波器组融合来自不同频带的特征信息,以提高网络的分类性能4
    在这里插入图片描述

  • ConvCA: 从不同电极通道收集的SSVEP信号彼此具有非线性关系,因此来自多个通道的EEG信号的线性组合可能不是对SSVEP进行分类的最准确的解决方案。为了进一步提高SSVEP-BCI的性能,研究人员提出了一种基于CNN的非线性相关分析网络,称为ConvCA。ConvCA有两个分支,一个是将多通道脑电图信号降级为单通道脑电图信号的信号网络,另一个是把多通道参考信号解释为单通道参考信号的参考网络。ConvCA通过分析信号网络输出和参考网络输出之间的相关性来完成SSVEP的分类过程5
    在这里插入图片描述

  • SSVEPNet: SSVEPNet是卷积神经网络和长短期记忆网络的混合网络模型,接受时域数据作为网络输入。SSVEPNet由三部分组成:卷积神经网络、长短期记忆网络和全连接网络。其中,CNN用于提取脑电的时空特征,双向LSTM用于基于时空特征之间的依赖性进行编码,由三个全连接层组成的全连接网络用于最终分类。此外,为了抑制网络训练过程中可能出现的过拟合,在网络实现过程中结合了频谱归一化标签平滑技术,进一步提高了模型的泛化能力。即使只有少量的校准数据,SSVEPNet仍然可以实现非常好的分类性能,并且这一特性已经在4类、12类和40类数据集上得到了验证6
    在这里插入图片描述

  • SSVEPformer: 基于注意力机制的Transformer已被应用至计算机视觉、自然语言处理等多个领域,并取得了举世瞩目的成果。近年来,Transformer也逐渐被引入至脑电信号的解码分析中来,揭示了Transformer应用至SSVEP-BCI系统的潜在可能性。正愁于当前SSVEP解码算法依赖于大量的被试校准数据,研究者们提出了基于Transformer的SSVEP分类网络SSVEPformer以实现零校准高性能网络。SSVEPformer与C-CNN的网络输入一致,使用频域信号作为输入,并结合CNN与MLP网络完成Transformer的特征编码与注意力学习过程。SSVEPformer可以在跨被试实验中取得十分可观的分类性能,显著优于其它分类网络。此外,结合滤波器组技术,研究者们提出了改进版网络FB-SSVEPformer,以进一步地提升网络性能。

在这里插入图片描述
所有深度学习模型的实现代码: https://github.com/YuDongPan/DL_Classifier

3、参考文献


  1. Lawhern V J, Solon A J, Waytowich N R, et al. EEGNet: a compact convolutional neural network for EEG-based brain–computer interfaces[J]. Journal of neural engineering, 2018, 15(5): 056013. https://iopscience.iop.org/article/10.1088/1741-2552/aace8c/meta ↩︎ ↩︎

  2. Waytowich N, Lawhern V J, Garcia J O, et al. Compact convolutional neural networks for classification of asynchronous steady-state visual evoked potentials[J]. Journal of neural engineering, 2018, 15(6): 066031. https://iopscience.iop.org/article/10.1088/1741-2552/aae5d8/meta ↩︎ ↩︎

  3. Ravi A, Beni N H, Manuel J, et al. Comparing user-dependent and user-independent training of CNN for SSVEP BCI[J]. Journal of neural engineering, 2020, 17(2): 026028. https://iopscience.iop.org/article/10.1088/1741-2552/ab6a67/meta ↩︎ ↩︎

  4. Ding W, Shan J, Fang B, et al. Filter bank convolutional neural network for short time-window steady-state visual evoked potential classification[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2021, 29: 2615-2624. https://ieeexplore.ieee.org/abstract/document/9632600/ ↩︎ ↩︎

  5. Li Y, Xiang J, Kesavadas T. Convolutional correlation analysis for enhancing the performance of SSVEP-based brain-computer interface[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2020, 28(12): 2681-2690. https://ieeexplore.ieee.org/abstract/document/9261605/ ↩︎ ↩︎

  6. Pan Y, Chen J, Zhang Y, et al. An efficient CNN-LSTM network with spectral normalization and label smoothing technologies for SSVEP frequency recognition[J]. Journal of Neural Engineering, 2022, 19(5): 056014. https://iopscience.iop.org/article/10.1088/1741-2552/ac8dc5/meta ↩︎ ↩︎

  7. Chen J, Zhang Y, Pan Y, et al. A Transformer-based deep neural network model for SSVEP classification[J]. Neural Networks, 2023, 164: 521-534. https://www.sciencedirect.com/science/article/abs/pii/S0893608023002319 ↩︎

  8. Nakanishi M, Wang Y, Wang Y T, et al. A comparison study of canonical correlation analysis based methods for detecting steady-state visual evoked potentials[J]. PloS one, 2015, 10(10): e0140703. https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0140703 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/371769.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C/C++ 12】C++98特性

目录 一、命名空间 二、缺省参数 三、函数重载 四、引用 五、内联函数 六、异常处理 一、命名空间 在C/C项目中,存在着大量的变量、函数和类,这些变量、函数和类都存在于全局作用域中,可能会导致命名冲突。 使用命名空间的目的就是对…

Gateway API 实践之(七)FSM Gateway 的负载均衡算法

FSM Gateway 流量管理策略系列: 故障注入黑白名单访问控制限速重试会话保持健康检查负载均衡算法TLS 上游双向 TLS 在微服务和 API 网关架构中,负载均衡是至关重要的,它确保每个服务实例都能平均地处理请求,同时也为高可用性和故…

2024.2.4 模拟实现 RabbitMQ —— 实现核心类

目录 引言 创建 Spring Boot 项目 编写 Exchange 实体类 编写 Queue 实体类 编写 Binding 实体类 编写 Message 实体类 引言 上图为模块设计图 此处实现核心类为了简便,我们引用 Lombok(可点击下方链接了解 Lombok 的使用) IDEA 配置 L…

【npm】修改npm全局安装包的位置路径

问题 全局安装的默认安装路径为:C:\Users\admin\AppData\Roaming\npm,缓存路径为:C:\Users\admin\AppData\Roaming\npm_cache(其中admin为自己的用户名)。 由于默认的安装路径在C盘,太浪费C盘内存啦&#…

C语言之数据在内存中的存储

目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断什么是大小端?为什么有大小端?练习1练习2练习3练习4练习5练习6 3. 浮点数在内存中的存储浮点数存的过程浮点数取得过程练习题解析 1. 整数在内存中的存储 在讲解操作符的时候,我们已经…

算法学习——华为机考题库7(HJ41 - HJ45)

算法学习——华为机考题库7(HJ41 - HJ45) HJ41 称砝码 描述 现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn ; 每种砝码对应的数量为 x1,x2,x3…xn 。现在要用这些砝码去称物体的重量(放在同一侧),问能称…

前端 - 基础 列表标签 - 自定义列表 详解

使用场景 &#xff1a; 常用于对术语或名词进行解释和描述&#xff0c;定义列表的列表前没有任何项目符号。 在 HTML 标签中&#xff0c; < dl > 标签用于定义 描述列表 &#xff08; 或定义列表 &#xff09; 该标签会与 <dt> ( 定义项目/名字 ) 和 <dd…

从0搭建react+ts+redux+axios+antd项目

文章目录 一、安装及初始化二、TypeScript配置三、Webpack配置四、Prettier统一编码风格五、使用less六、Antd 安装及使用七、添加redux及使用八、添加Router及配置九、安装axios十、echarts按需引入 本文介绍了如何用creat-react-app脚手架搭建一个react项目的基本结构&#x…

UE4 C++ 静态加载类和资源

静态加载类和资源&#xff1a;指在编译时加载&#xff0c;并且只能在构造函数中编写代码 .h //增加所需组件的头文件 #include "Components/SceneComponent.h" //场景组件 #include "Components/StaticMeshComponent.h" //静态网格体组件 #include &qu…

VS2019+CAXACAD2023二次开发教程(一、环境搭建)

前言 CAXACAD2023的二次开发相关文件和库都在installpath\CRX\的文件夹下。 CAXACAD2023的默认开发环境是VS2019,如果是用VS2019的环境话,可以直接安装"installpath\CRX\Wizard\CRXWizard_VS2019.exe"这个插件,安装好后就可以一键新建的项目,新建的项目会自动帮…

【漏洞复现】EPON上行A8-C政企网关信息泄露漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品&#xff0c;提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关敏感信息泄露漏洞&#xff0c;攻击者通过敏感信息泄露获取管理员密码。 Nx03 产品主页 fofa-query: "ZXECS" && title"Web…

蓝桥杯每日一题----区间dp

前言 暂时没啥好说的&#xff0c;直接进入正题吧 引入 涂色PAINT 读题发现要求的是使一段区间满足要求的最小操作次数&#xff0c;考虑用动态规划去做。 第一步&#xff1a;考虑缩小规模&#xff0c;这里的规模其实就是区间长度&#xff0c;那么dp数组应该可以表示某个区间&…

certificate has expired错误解决

npm ERR! request to https://registry.npm.taobao.org/nodemon failed, reason: certificate has expired错误解决 npm在安装依赖包时出现以下错误。 作为最后的手段&#xff0c;你可以配置npm忽略SSL证书验证。这不是一个推荐的解决方案&#xff0c;因为它会降低安全性&…

window 镜像---负载篇

前提&#xff1a;需要修改window的powershell执行脚本的策略 步骤&#xff1a;以管理员身份打开powershell&#xff0c;执行 Get-ExecutionPolicy查看当前执行策略&#xff0c;若返回值是Restricted&#xff0c;需执行Set-ExecutionPolicy RemoteSigned powershell 版本信息&am…

计算机网络第6章(应用层)

6.1、应用层概述 我们在浏览器的地址中输入某个网站的域名后&#xff0c;就可以访问该网站的内容&#xff0c;这个就是万维网WWW应用&#xff0c;其相关的应用层协议为超文本传送协议HTTP 用户在浏览器地址栏中输入的是“见名知意”的域名&#xff0c;而TCP/IP的网际层使用IP地…

YouTrack 用户登录提示 JIRA 错误

就算输入正确的用户名和密码&#xff0c;我们也得到了下面的错误信息&#xff1a; youtrack Cannot retrieve JIRA user profile details. 解决办法 出现这个问题是因为 YouTrack 在当前的系统重有 JIRA 的导入关联。 需要把这个导入关联取消掉。 找到后台配置的导入关联&a…

【JMeter】使用技巧

在这此对新版本jmeter的学习温习的过程&#xff0c;发现了一些以前不知道的功能&#xff0c;所以&#xff0c;整理出来与大分享。本文内容如下。 如何使用英文界面的jmeter如何使用镜像服务器Jmeter分布式测试启动Debug 日志记录搜索功能线程之间传递变量 如何使用英文界面的…

SpringBoot实现统一异常处理

文章目录 前言实现步骤定义统一响应对象类定义业务异常枚举接口和实现定义业务异常基类定义全局异常处理切面测试和验证 总结 前言 近日心血来潮想做一个开源项目&#xff0c;目标是做一款可以适配多端、功能完备的模板工程&#xff0c;包含后台管理系统和前台系统&#xff0c…

Docker 搭建mysql 集群(二)

PXC方案 很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点&#xff0c;数据双向同步的&#xff08;在任何节点上都可以同时读写&#xff09; 创建MySQL PXC集群 1 安装PXC镜像 docker pull percona/percona-xtradb-cluster:5.7.21 2 为PXC镜像改名 docker tag pe…

数据分析基础之《pandas(3)—DataFrame运算》

一、算术运算 1、add() 加法运算 2、sub() 减法运算 3、想要得到每天的涨跌幅大小&#xff0c;求出每天close-open价格差 # 算术运算 close data[close] open1 data[open] # 收盘价减去开盘价 data[m_price_change] close.sub(open1) data.head() 二、逻辑运算 1、逻辑…