非官方中文翻译 本页译自 MNE-Python 官方文档: 查看英文原文 ↗。 文档版权归 MNE Developers 所有(BSD-3-Clause)。

路线图#

本页介绍 MNE-Python 的部分中远期主要目标。这些目标需要投入大量精力,并且/或者需要周详的 API 设计考量。其中一些可能适合作为 Google Summer of Code 项目,另一些则需要更广泛的工作。

待启动#

类型注解#

我们希望尽可能为代码库添加类型注解。主要动机是改善用户编写基于 MNE-Python 的分析代码时的体验(即代码补全建议,这类功能依赖静态分析/类型提示)。关于推进方式的主要讨论见 #12243。目前已取得一些零散进展(例如 #12250),但当前没有人在持续推动,因此其状态为“待启动”而非“进行中”。

文档字符串去重#

多年来,MNE-Python 一直沿用一项借自 SciPy 的技术(称为 doccer),用于提升 API 中反复出现的参数名称与描述的一致性。例如并行任务数、随机种子、绘图色条外观等参数,都会出现在 MNE-Python 的多个函数/方法中。该做法在导入时重新定义函数的 __doc__ 属性,用完整展开的等价文本(存放在一个名为 docdict 的大字典中)填充文档字符串参数列表里的占位符。这带来两个主要缺点:

  1. 在浏览源代码时,许多文档字符串无法阅读(至少无法完整阅读)。

  2. 静态代码分析器无法获取补全后的文档字符串,因此 IDE 中的悬停提示等功能,不如文档字符串就地完整时那样有用。

一种可行的推进方式:

  • 将所有文档字符串在源代码中完整写出。

  • 不再维护 docdict,而是维护一个注册表,记录应当保持一致的“函数+参数”组合集合。

  • 添加测试,检查注册表中的条目确实一致,从而避免在现有代码中引入不一致。

  • 添加测试,解析所有新增函数的文档字符串,查找可能应加入“一致文档字符串”注册表的参数名。

  • 对于应当几乎相同的参数描述(例如除了一处指 Raw 对象、另一处指 Epochs 对象之外其余相同),可以考虑用正则表达式检查参数描述的“一致性”。

主要讨论见 #8218;Scientific Python 生态中其他包维护者之间的更广泛讨论见此链接。

容器化#

用户有时难以在共享资源(如计算集群)上搭建可用的 MNE-Python 环境,原因包括包管理器或图形库版本过旧、权限不足等各种问题。提供健壮且及时更新的 MNE-Python 容器化发行版可以缓解其中部分问题。初步工作可见 MNE-Docker 仓库;应当重启这些工作,按需更新,并纳入常规发布流程,以免镜像过时。

教育培训#

过去,MNE-Python 的现场工作坊/教程/培训多为临时组织,而非集中统筹。工作坊的讲师通常由希望举办培训的机构或团体直接联系,该团体之外的用户往往无法参加(甚至无从得知有这样的机会)。至少,我们希望建立一套流程,记录以 MNE-Python 或 MNE 套件中其他工具为主题的教育活动。理想情况下,我们还能更进一步,发起一系列可广泛宣传的定期教程。此类活动甚至可能为 MNE-Python 带来少量收入,用于支持持续集成等开支。

文档交互性#

随着 jupyterlite 支持落地到 sphinx-gallery,我们应着手让用户能在网站上交互式运行示例。更多细节与讨论见 #13616。

进行中#

多元、公平与包容(DEI)#

MNE-Python 致力于招募并留住多元化的贡献者群体,见 #8221。

一流的 OPM 支持#

MNE-Python 已支持读取部分 OPM 数据格式,如 FIF 和 FIL/QuSpin。还应增加对其他厂商的支持,并补充标准预处理流程,以处理头模配准调整和 OPM 特有的伪迹。参见 #11275、#11276、#11579、#12179。

深部源建模#

现有的源建模与逆问题流程并非专为处理深部源而设计。MGH 已有增强深部源定位的先进算法,应在 MNE-Python 中实现并加以验证。见 #6784。

时频类#

过去,我们代码库中与时频表示(TFR)相关的类并不完整。新的类正在从头构建:

其他相关问题:#6290、#7671、#8026、#8724、#9045;相关 PR:#6609、#6629、#6672、#6673、#8397、#8892。

实时处理的现代化#

LSL 已成为 EEG/MEG 系统数据流传输的事实标准。我们应弃用 MNE-Realtime,转而采用新近推出的 MNE-LSL。随后应借助现代编码最佳实践(如 CI 集成)全面支持 MNE-LSL。

对于神经反馈和 BCI 等闭环应用,MNE-RT 基于 MNE-LSL 和 MNE-Python 构建,用于传感器空间与源空间的特征提取、自适应反馈协议、实时伪迹校正,以及与标准 MNE-Python 绘图流程集成的持续更新实时可视化。

聚类统计 API#

当前的聚类统计代码功能有限。应重新设计,创建一个新的 cluster_based_statistic 或类似函数。

新 API 大致如下:

cluster_stat(obs, design, *, alpha=0.05, cluster_alpha=0.05, ...)

其中:

obs pandas.DataFrame
包含“subject”“condition”和“data”等列。“data”列存放 mne.Evoked、mne.SourceEstimate、mne.time_frequency.Spectrum 等对象。
design str
可能采用 Wilkinson 记法,以对应 patsy.dmatrices()(例如 statsmodels.regression.linear_model.OLS 就使用了这种记法)。从字符串得到设计矩阵,可以通过 Patsy,或更可能通过 Formulaic 实现。

这一通用 API 将支持被试内与被试间混合设计、不同的统计函数/检验等。由于大部分计算开销在于聚类而非统计检验,因此与现有更专用、更受限的函数相比,应能在不带来明显速度损失(例如减速不超过 10%)的情况下实现。

聚类函数将返回一个用户友好的 ClusterStat 对象或类似对象,保留维度、显著性等信息,并便于结果的可视化与解读。

需要编写清晰的教程,以:

  1. 展示如何实现不同的对比(玩具数据)。

  2. 展示真实数据上的一些常见分析(时频、传感器空间、源空间等)。

将编写回归测试,确保在 FieldTrip 同样支持的情形下,输出与 FieldTrip 等价。

更多细节见 #4859;进展见 #12663。

文档更新#

我们的文档有许多小问题,可在标签 #labels/DOC 下找到。

已完成#

三维可视化#

过去我们使用 Mayavi 进行三维可视化,但受其局限与挑战所困。我们改用 PyVista 以获得重大改进,例如:

  1. 恰当的 notebook 支持(通过 ipyvtklink)(已完成;已更新为使用 trame)

  2. 曲面图具有更好的交互性(已完成)

  3. 时频绘图(与基于体数据的时频可视化互补)

  4. 像 mne_analyze 那样集成多种功能,例如同时查看源估计、查看场图、显示头部表面等。这些功能过去分散在不同函数中,现在可以合并在同一张图中。

跟踪曲面绘图待办事项的元问题(meta-issue)是 #7162。

改进 sEEG/ECoG/DBS 支持#

电极定位与可视化等 iEEG 专用流程步骤现已在 MNE-gui-addons 中提供。

开放 EEG/MEG 数据库的访问#

开放 EEG/MEG 数据库现在可以通过 openneuro-py 等标准化工具更方便地访问。

眼动追踪支持#

我们曾资助一名 GSoC 学生改进眼动追踪数据的支持,详情见 GSoC 提案。现已提供 EyeLink 数据读取器以及分析与绘图函数。

儿科与临床 MEG 流程#

MNE-Python 通过 MNE-BIDS-Pipeline 对符合 BIDS 的数据集提供自动化分析。mnefun 流程曾在 I-LABS 广泛用于儿科数据分析,其功能现已为儿科与临床数据处理提供更好的支持。已新增多个处理步骤(如 eSSS)、合理性检查(如 cHPI 质量)和报告(如 SSP 联合图、SNR 图)。

通过改进的 Python 绑定集成 OpenMEEG#

OpenMEEG 是 MEG/EEG 脑成像领域前向建模的最先进求解器。它以数值方法求解偏微分方程(PDE),用 C++ 编写,Python 绑定由 SWIG 生成。本项目的目标是集成 OpenMEEG 到 MNE,使 MNE 能够求解更多前向问题(皮层映射、颅内记录等)。已完成的任务:

  • 清理 Python 绑定(删除无用函数、检查内存管理等)

  • 理解 MNE 如何编码传感器信息(位置、方向、积分点等),并让 OpenMEEG 得以使用。

  • 现代化 CI 系统(例如使用 cibuildwheel)。

  • 在 PyPI 和 conda-forge 上自动部署。

时频可视化#

我们实现了一个查看器,可在 MRI 切片上交互式可视化体源-时间-频率(5 维)图(正交二维查看器)。NutmegTrip(由 Sarang Dalal 编写)在 MATLAB 中结合 FieldTrip 提供类似功能。下面是 NutmegTrip 源-时间-频率模式的运行示例(点击可跳转至 YouTube 链接):

https://i.ytimg.com/vi/xKdjZZphdNc/maxresdefault.jpg

参见 mne_gui_addons.view_vol_stc()。

分布式计算支持#

MNE-BIDS-Pipeline 已增强,可通过 Dask 和 joblib 支持云计算。在配置好 Dask 以使用本地或远程分布式计算资源后,MNE-BIDS-Pipeline 便可直接利用远程工作进程,将被试的处理并行化。

二维可视化#

该目标已在 CZI EOSS2 支持下完成。另一些也可实施的增强列于 #7751。

教程/示例全面改版#

该目标已在 CZI EOSS2 支持下完成。持续的文档需求列于“文档更新”。

集群计算镜像#

作为该目标的一部分,我们通过 MNE-Docker 创建了适用于云计算的 Docker 镜像。