news 2026/9/15 18:44:14

fNIRS公开数据集实用指南:格式、处理与避坑要点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
fNIRS公开数据集实用指南:格式、处理与避坑要点

做fNIRS研究这两年,我有个很深的感触:想找一套靠谱的公开数据集,难度一点也不比去实验室重新采数据低。fNIRS(功能性近红外光谱)在国内实验室的普及度涨得很快,但它的公开数据生态相比fMRI和EEG要碎片化得多——没有统一的存储库,格式五花八门,很多论文号称"数据可获取",点开却只有一个失效的GitHub链接。这篇文章把我这几年调研、下载、处理fNIRS公开数据集的完整路径整理出来,从BCI方向的benchmark数据到临床向的ADHD、抑郁症数据,从SNIRF格式规范到下载时容易忽略的元数据陷阱,一次性讲清楚。无论你是正在找数据做课题的研究生、还是打算把fNIRS引入产品做预研的工程师,这份清单都能帮你省下好几个星期。

1. 为什么fNIRS公开数据这么难找:碎片化的生态现状

fNIRS的基本原理可以粗浅地理解成"在头皮上用手电筒照组织,看反射回来的光携带了多少血氧信息"。近红外光穿过头皮和颅骨后,一部分被组织中含氧血红蛋白(HbO)和脱氧血红蛋白(HbR)吸收,通过测量衰减变化,可以反推皮层局部血流动力学响应,从而间接衡量神经活动。好处是设备便携、耐运动干扰、成本比fMRI低得多;坏处是信噪比天然低、空间分辨率有限、信号易受头皮血流和头动污染。这个技术特性决定了它的数据共享生态也和fMRI、EEG走的是完全不同的路。

1.1 和EEG/fMRI对比,fNIRS缺了什么

fMRI有HCP、ABCD、UK Biobank这类巨型共享项目,EEG也有TUH EEG Corpus、BNCI Horizon 2020、OpenMIIR这些被反复引用的benchmark库,领域内的人一提名字就能对上号。但fNIRS呢?到目前为止没有一个"fNIRS版HCP"级别的中心化存储库。大部分数据散落在四个地方:论文的补充材料、OSF项目页面、个人/实验室的GitHub仓库,以及厂商官网的示例数据区。

这个局面带来一个很实际的问题:你找到的数据往往不是一个"数据集",而是一堆格式各异的文件夹。同一个研究团队发布的两批数据,可能一批用Homer2的.nirs格式,另一批用MATLAB的.mat格式,事件标记的时间戳还可能是相对时间而非绝对时间。我在前期调研时经常遇到一个trial看了半天README才明白任务时序的情况,非常消磨耐心。

但碎片化不等于没有好东西。fNIRS的公开数据集虽然规模小,质量却普遍不错,因为发布者通常是做BCI或临床研究的小团队,样本量不大但任务设计、行为数据记录都很完整,恰恰适合做精细的算法验证和机制研究。

1.2 数据共享正在变好的三个信号

让我觉得这个领域在往好的方向走的,是下面这三件事:

第一,SNIRF格式逐渐成为共识。SNIRF(Shared Near-Infrared Spectroscopy Format)是一个基于HDF5的开放标准,用来统一存储fNIRS原始光强、光密度、浓度变化、事件标记和探测器三维坐标。现在Homer3、MNE-NIRS、AtlasViewer这些主流工具都已经原生支持,意味着你只要把数据转成SNIRF,所有生态里的工具都能直接读。

第二,越来越多论文开始认真写Data Availability声明,并给出带DOI的存储链接。以前是"有需要请联系作者",现在很多期刊强制要求数据必须可访问,这是个实打实的进步。

第三,BCI方向的fNIRS数据开始形成事实benchmark。个别数据集被几十篇论文反复使用,大家评估模型时有了可对比的基线,这反过来又促使更多团队愿意把自己的数据公开出来。

基于这个现状,下面这份清单我按研究方向来拆,而不是简单的数据集名堆砌。因为同一个数据集,在BCI算法验证和在临床群体差异研究里的使用逻辑差别非常大。

2. 我实际用过/调研过的公开数据集清单

为了让你快速定位,先放一张总表,后面详细展开。整理口径以我自己的实际使用经历和圈内口碑为主,具体参数以数据集发布页面的README为准。

数据集/来源任务类型典型设备/通道主要用途获取渠道
Shin et al. 运动想象/心算组合任务左手/右手运动想象、心算、静息基线连续波fNIRS,覆盖运动皮层与前额叶BCI分类、特征工程、深度学习benchmarkGitHub公开仓库
NIRx官方示例数据手指敲击、静息态等NIRScout系列,多通道工具链验证、格式熟悉厂商官网
OSF检索到的情绪诱发数据集视频/图片情绪诱发前额叶通道为主情感计算、前额叶偏侧化分析OSF搜索
Kaggle fNIRS任务分类数据运动想象/认知负荷分类CSV格式,通道数不等快速原型、教学演示Kaggle平台
IEEE DataPort BCI相关fNIRS数据运动想象、混合BCI视项目而定算法竞赛、模型评估IEEE DataPort
临床向ADHD/抑郁症数据集静息态或言语流畅任务几十通道,覆盖前额叶及颞叶临床识别、群体差异研究论文补充材料/OSF,需申请

2.1 BCI任务向:运动想象、心算与混合脑机接口

做BCI的人对Shin这个名字应该不陌生。Shin等人公开的fNIRS运动想象/心算组合任务数据,算是我见过被引用次数最多的fNIRS公开数据集之一。它的任务结构设计得比较标准:每个trial包含提示阶段、任务阶段和休息阶段,任务阶段通常是10秒上下,被试需要完成左手运动想象、右手运动想象或者心算。通道覆盖运动皮层和前额叶,正好能同时捕获运动想象和认知负荷调制出来的血流响应。

这个数据集最大的优点是标签干净。事件标记和trial边界都在文件里,研究者在跑分类模型时不需要自己去猜任务时序。很多fNIRS-BCI论文用它做benchmark,所以你看文献时经常会看到"在Shin数据上准确率到达多少"的说法。对于想发论文的人来说,用公开数据集跑实验的最大好处就是可复现——审稿人自己也能下载,复现门槛低很多。

Kaggle上的fNIRS数据则是另一类存在。它们大多由论文作者或爱好者转成CSV,方便直接喂给机器学习框架。坏处是转格式的过程中经常丢失原始光强,只留下HbO/HbR通道,甚至已经是特征提取后的表格式数据,后期想换预处理参数就没得玩了。所以我的建议是:Kaggle数据适合做快速原型验证,不适合做严肃的方法学实验。

IEEE DataPort上也有些fNIRS相关BCI竞赛数据,有些是EEG-fNIRS混合采集的。如果你对多模态融合感兴趣,这个方向的数据更稀缺也更值钱,因为能同时拿到两种模态下同一批被试的脑活动,可以研究模态间的互补信息。

2.2 情绪与认知负荷向:自然刺激与可控范式的取舍

情绪诱发类的fNIRS数据这几年明显变多了。大体上分两类:一类用图片(比如国际情绪图片系统IAPS)做块设计,另一类用视频片段或音乐做连续诱发。前者的优势是trial边界明确,适合做传统的事件相关分析;后者的生态效度更高,但分析起来麻烦得多,因为被试的情绪状态是连续变化的,往往会用到滑动窗口分类或者回归模型。

这类数据多数能在OSF上搜到,关键词可以组合着搜"fNIRS emotion dataset"、"fNIRS affective"、"prefrontal fNIRS video"等。通道设置通常集中在前额叶,因为情绪加工和前额叶偏侧化的关系被研究得最多。如果你要做情感计算,又不想自己花钱采数据,这类数据是最容易上手的。

认知负荷向的数据同样是热点,典型范式是N-back。N-back任务能稳定诱发前额叶的负荷效应,很多研究想用它做飞行员、驾驶员的疲劳监测或人因工程评估。公开的N-back fNIRS数据比情绪数据少一点,但在OSF和期刊补充材料里能找到,搜索时加上"N-back fNIRS"就行。

2.3 临床与人群向:ADHD、抑郁症与老年认知数据

临床向的fNIRS公开数据是稀缺资源,因为涉及患者知情同意和伦理审批,能做公开分享的项目不多。但正因如此,一旦有团队愿意公开,质量往往很高。

ADHD方向有过基于多通道fNIRS的静息态公开数据,被试分ADHD组和典型发育对照组,采样位置一般覆盖前额叶和颞叶。这类数据对分类任务非常有价值,因为临床样本的分类器如果只在健康人上训练,泛化到真实场景基本是空中楼阁。

抑郁症方向同样有公开数据集,有的基于言语流畅性任务(VFT)来诱发前额叶激活,因为抑郁症患者在做VFT时前额叶血氧响应往往减弱,这是被反复验证过的现象。老年认知方向则常见"年轻组vs老年组"的对照设计,用于研究认知老化过程中前额叶代偿效应。

需要提醒的是,临床数据通常不会开放匿名下载,而是要求你先填写数据使用申请,说明研究目的、分析计划、伦理审批情况,签了数据使用协议才给数据。流程有时候长达几周,所以如果课题依赖这些数据,务必预留申请时间,别等实验做完了才想起来要数据。

3. 找到数据集之后先别急着下载:格式与元数据检查

很多人下载完数据,解压后就直接丢给代码跑,结果跑到一半发现没有探测器坐标,或者事件标记全是相对的,整个分析管线卡死。这个体验我太熟悉了,所以强烈建议你把"格式和元数据检查"当成一个正式步骤来做。

3.1 SNIRF正在成为事实标准

先说格式。fNIRS早期数据格式基本都是各厂商私有格式:NIRx的NIRStar导出一堆.txt/.hdr,日立ETG系列导出.csv,Artinis导出的同样是专有结构。这些格式不是不能用,而是可移植性差。你换一个处理工具,就得写一个解析脚本,格式文档还不一定完整。

SNIRF的出现就是为了终结这种混乱。它是一个基于HDF5的开放标准,把原始光强、通道定义、事件标记、被试信息、设备参数全都塞进一个结构化的文件里。Homer3和MNE-NIRS是目前支持得最彻底的两个工具,基本做到"读进SNIRF就能直接跑预处理"。

OpenfNIRS是另一个值得关注的项目,它不只是定义格式,还提供了配套的数据共享平台和工具链。如果你打算发布自己的数据,用SNIRF/OpenfNIRS的标准来整理,发布出去被其他人复用的概率会高得多。

3.2 下载前要核对这8项元数据

不管你拿到的是什么格式,我建议下载前就准备好下面这个核对清单,缺了哪项会带来什么后果也一并写了——

元数据项为什么重要缺失的后果
采样率决定频域分析的上限采样率太低无法做心率、呼吸频段分析
波长组合常见690/830nm或780/850nm不同波长对HbO/HbR分离系数不同
通道数量与排布能否做空间配准和网络分析无法转MNI坐标,图论分析基本做不了
原始光强 vs 已转换OD/HbO决定能否换预处理参数只有HbO就没办法重做运动校正和滤波
事件标记与任务时序决定e poching和GLM是否可靠标记缺失只能放弃试次级分析
被试人口学信息组间分析的基础年龄性别利手不清楚,结论很难解释
生理同步记录心电、呼吸、脉搏可用于伪影回归无生理记录,运动伪影排查更困难
许可证/引用要求决定能否商用、发论文怎么署名用了禁止商用的数据做产品会被卡住

这8项里最容易栽跟头的是"原始光强还是HbO/HbR"。很多数据集直接发布的是浓度变化数据,表面上看方便,实际上把预处理选择权剥夺了。运动伪影校正、带通滤波这些步骤必须在OD或原始光强层面做,如果数据只给了HbO/HbR,你只能拿现成的结果继续分析,分析自由度大打折扣。

4. 不同研究方向该怎么选数据

明确了自己的研究问题后,选数据集的标准完全不同。这里我把常见方向分成三类,分别说明选择优先级。

4.1 算法/深度学习向:标签干净优先

如果你主要做分类算法、深度学习模型,或者要验证一个信号处理方法,最看重的应该是标签质量和样本总量。运动想象、心算、情绪分类这类任务标签明确,适合做监督学习。

具体选择上,优先考虑事件标记清晰、trial数量多的任务型数据。比如Shin系数据集的trial数量通常在几十到上百个,虽然单个被试样本不算大,但做leave-one-subject-out交叉验证时依然能给出有意义的结果。Kaggle上那些已经特征化的数据适合课程作业或快速原型,但发表论文时说服力会弱一些。

有一类问题特别容易被忽略:类别不平衡。公开数据里如果某一类任务明显偏少,分类器很容易学成"永远猜多数类"。下载后先统计每个条件下的trial数量,如果发现不平衡,再考虑采样策略。

4.2 脑连接与群体差异向:样本量和蒙太奇信息优先

做脑连接或者群体差异研究的人,选数据的逻辑和做分类完全不同。这类研究的核心载体是通道间的功能连接,所以通道覆盖范围和坐标信息是第一位的。

有些公开数据集为了让设备轻便,只在运动皮层或前额叶布了几通道。这种数据做局部网络分析没问题,但想脑区全脑尺度结论就基本没用。理想情况下,你需要的是覆盖多个脑叶、并且提供MNI坐标或标准头模模板通道位置的数据,这样才能把每个被试的通道映射到公共空间做群组分析。

临床向研究还需要特别关注对照组设置。ADHD数据如果只有患者组没有典型发育对照组,你发了论文也只能说是描述性研究,做不了组间统计。所以下载前看清被试构成,别看到"ADHD fNIRS"就激动。

4.3 方法学入门向:从多模态和小任务开始

如果你之前只做过EEG,想学fNIRS的数据处理,建议从一个数据量适中、任务结构经典的数据集入手,最好还是EEG-fNIRS同步采集的版本。这样你可以一边跑fNIRS预处理,一边用同步EEG结果做交叉验证,对这个模态的信号特性会有更直观的感受。

NIRx官方示例数据就是一个不错的起点,数据量小、README清晰、格式官方,配合Homer3的tutorial可以快速跑通从原始数据到HbO/HbR的完整流程。跑通之后再上Shin那类大一点的数据集,处理复杂任务时就不容易懵。

5. 处理公开fNIRS数据的实际操作流程

很多新手拿到数据后的第一反应是直接算平均激活图,这是不好的习惯。fNIRS信号低信噪比是出了名的,预处理不做扎实,后面所有统计都是在噪声上跳舞。

5.1 从原始光强到HbO/HbR的预处理管线

我自己常用的管线大概是这样的顺序:

  1. 导入原始数据后,先把通道定位(probe geometry)加载进来,没有坐标后面什么都配不准。
  2. 把原始光强转换成光密度(Optic Density,OD),这是后续一切计算的基础。
  3. 做运动伪影校正。这一步特别重要,fNIRS对头动极敏感,哪怕一个小小的动作都会导致尖峰。常用的算法有样条插值加Savitzky-Golay滤波(spline-SG)、主成分分析(tPCA)、移动标准差法(MARA),具体选哪个要看伪影特征。
  4. 带通滤波。血流动力学信号本身是低频的,一般取0.01-0.1Hz的带通,既能保留任务相关的慢波,又能滤掉高频噪声和大部分生理振荡。但注意,如果后续想做心率变异性或梅耶波分析,滤波范围要重新设计。
  5. 用修正的Beer-Lambert定律把OD转成HbO和HbR浓度变化。
  6. 之后才进入epoch分割、基线校正、平均或者GLM建模。

这个流程每一步都会影响最终结论。比如运动伪影校正用tPCA还是spline-SG,处理同一个数据集的结果可能差不少。所以写论文时务必写清楚每一个参数,最好把预处理脚本也放到GitHub上,既方便审稿人复现,也方便自己六个月后回来查。

5.2 一个快速上手的Python示例

下面是用MNE-NIRS读取SNIRF格式并完成基本预处理的最小示例。建议在jupyter里一步一步跑,每一步都看一眼中间结果。

import mne from mne_nirs.io import snirf # 读取SNIRF格式数据 raw = snirf.read_snirf("sub-01_task_motor.snirf") # 查看基本信息 print(raw.info) print(raw.ch_names) # 提取近红外通道,转成光密度 from mne_nirs.channels import get_long_channels raw = get_long_channels(raw, min_dist=0.01, max_dist=0.05) raw = mne.preprocessing.nirs.beer_lambert_law(raw) # 绘制HbO/HbR时间序列检查信号质量 raw.plot(n_channels=10, duration=60, scalings="auto")

代码不长,但已经覆盖了读取、通道筛选和浓度转换三个关键步骤。实际处理时,You还需要在beer_lambert_law之前加上运动伪影校正和滤波,MNE-NIRS文档里有对应的函数,比如mne.preprocessing.nirs.optical_densitysavgol_filter的组合。

我想强调最容易被忽略的一步:get_long_channels会根据source-detector距离筛选出长距离通道。fNIRS信号里既有皮层信号也有头皮表层血流信号,短距离通道(一般指的是源探距小于1厘米)主要测的是头皮血,不做回归的话会污染真正的皮层信号。很多公开数据集的通道设置里其实包含短距通道,但不少研究者直接忽略,这是信号质量的一个隐形杀手。

6. 下载和复用过程中最容易踩的坑

这部分我踩过不少,逐个说,希望能让你少走弯路。

6.1 链接失效与"公开但不共享"

"公开数据集"这个词水分可以很大。有的论文写"数据可获取",正文里给的却是作者个人主页,点进去要么服务器过期了,要么留个邮箱让你发邮件要。我甚至遇到过发邮件三个月后才收到回复的情况,对方说数据在旧硬盘里还没找出来。

应对策略很简单:优先选择带DOI、存在OSF/Figshare/Dryad/Zenodo这些长期存储平台上的数据。DOI的好处是版本可追溯,即使原始链接失效,你也能通过DOI定位。GitHub仓库就算了,一个项目改名、迁移都可能导致永久404。

6.2 通道坐标缺失或坐标系记录混乱

做群体分析时,通道坐标是最难补的一个信息。有些数据集发布时只给了通道编号,没有对应的头皮坐标,也没有提到用了什么头模模板。这种情况下,你无法把通道映射到MNI空间,做不了皮层投影,也做不了不同被试之间的通道对齐。

另一个容易踩的坑是坐标系来源混乱。有的数据用的是ICBM152模板坐标,有的用Colin27,有的用HSP(head surface position)结合光学探头的实际位置。如果混着用,结果的可比性就说不清楚了。建议你在数据说明文档里仔细找"probe geometry"、"digitized positions"、"MNI"这些关键词,确认坐标来源。

6.3 运动伪影与生理噪声:不预处理直接建模是大忌

fNIRS数据有一个特点:运动伪影和任务往往相关。比如让被试做运动想象,他可能不自觉地头动了一下,这个动作直接产生一个尖峰,计算平均激活时就能伪装成一个激活效应。所以,不做运动校正的结果,轻则方差变大,重则出现假阳性。

静息态数据也有类似陷阱。静息态fNIRS里藏着0.1Hz附近的梅耶波、约1Hz的心率搏动、约0.3Hz的呼吸波动。这些生理振荡的能量远大于神经源性低频信号,如果你要考察静息态连接,不去回归生理噪声,得到的连接矩阵可能反映的主要是血管和呼吸的同步性,而不是脑区的功能连接。

6.4 许可证与伦理:能不能商用、要不要签协议

公开数据不一定意味着可以随意商用。OSF或GitHub上的很多数据用的是CC-BY-NC(非商业)许可,拿去训练商业产品会有法律风险。Kaggle上的数据许可证也经常混乱,下载页面写了什么许可就看什么,别默认它是学术免费的。

临床数据则是另一种情况。哪怕数据文件本身是公开的,只要你用它发表涉及患者群体的研究结论,很多机构依然会要求你先过伦理审查甚至签数据使用协议。我的建议非常简单:拿数据之前,先把使用范围、用途、预期发表形式写清楚,发给数据所有者确认一次,留存邮件或协议记录。这件事最多花你一天时间,但能避免后面极其麻烦的纠纷。

7. 写在最后:我对fNIRS数据生态的一点操作体会

如果只给一条建议,那就是:别贪多,先把一两个结构干净的数据集完整跑通,再考虑扩大数据池。fNIRS公开数据集的单样本量通常不大,与其收集十套半懂不懂的数据,不如把三套真正搞清楚,包括任务设计意图、信号特点和局限性。

我自己最常留意的信号是原始光强是否被保留。只要原始光强还在,数据就有无限重新处理的可能性——想换滤波参数、想试新的运动校正算法、想重做GLM都可以。数据发布者如果只给了处理完的HbO/HbR,等于把这个可能性窗口关掉了。所以我自己发数据时,也坚持把原始光强和全部元数据一起打包成SNIRF格式放出去。

最后分享一个工作习惯:每次拿到一个新数据集,我会建一个独立的notes文档,记录数据的基本信息、格式检查结果、已知问题和处理决策。这个文档刚开始看起来像流水账,但当你同时处理三四个数据集、或者论文返修需要复现结果时,它就是你唯一的救命稻草。fNIRS公开数据资源的积累还很年轻,但正因为它年轻,现在认真把数据生态维护好的人,对这个领域的贡献会比想象中大得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 18:41:54

在 Nitro 中集成 Elysia:使用 Server Entry 构建完整 HTTP 服务

在 Nitro 中集成 Elysia:使用 Server Entry 构建完整 HTTP 服务 【免费下载链接】nitro Next Generation Server Toolkit. Create web servers with everything you need and deploy them wherever you prefer. 项目地址: https://gitcode.com/GitHub_Trending/ni…

作者头像 李华
网站建设 2026/9/15 18:41:13

Discourse开源论坛实战:从部署到运营的完整指南

干了这么多年社区搭建和开源项目落地,我接触过不少论坛系统,从老牌的 phpBB、Discuz,到后起之秀 NodeBB、Flarum,都折腾过不止一遍。但真正让我觉得“这玩意儿配得上时代”的,还是 Discourse 这套开源论坛方案。很多人…

作者头像 李华
网站建设 2026/9/15 18:40:47

es-toolkit/compat 的 add 函数:Lodash 兼容的加法实现与源码剖析

es-toolkit/compat 的 add 函数:Lodash 兼容的加法实现与源码剖析 【免费下载链接】es-toolkit A modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash. 项目地址: https://gitcode.com/GitHub_Trending…

作者头像 李华
网站建设 2026/9/15 18:38:52

LingBot-Map video.py视频编码揭秘:ffmpeg调用的工程细节

LingBot-Map video.py视频编码揭秘:ffmpeg调用的工程细节 【免费下载链接】lingbot-map (ECCV 2026 oral) LingBot-Map: Geometric Context Transformer for Streaming 3D Reconstruction 项目地址: https://gitcode.com/GitHub_Trending/li/lingbot-map Lin…

作者头像 李华