脑 MRI 的预训练语料 — FOMO300K

三十万张级扫描 / 三十余个来源 / 只做方向对齐的原始 NIfTI

来源 https://huggingface.co/datasets/FOMO-MRI/FOMO300K发布时间: 2026-10-26最后更新: 2026-10-26 阅读 5
脑 MRI 的预训练语料 — FOMO300K

信息速览

数据集名称脑 MRI 的预训练语料 — FOMO300K
数据类型原始影像,元数据,原始数据链接,文献引用
规模三十万张级扫描 / 五万余受试者(官方口径,数据卡未公布这两项)
接入方式https://huggingface.co/datasets/FOMO-MRI/FOMO300K
AI 就绪度

极少有脑影像数据集会把自己定位成「预训练用的原料」而不是「某个任务的答案」。

绝大多数公开脑 MRI 集合是先有了一个临床问题,再去收集标注、做质控、发榜单;FOMO300K 反其道而行,它先问「想把一个 3D 编码器练到能迁移,需要什么样的语料」,再回头把散落在几十个公开库里的扫描汇总成池。这件事在自然图像里早有定论——ImageNet 之后没人再争论预训练语料该不该大,但在脑 MRI 里,能称之为「语料」的东西直到最近几年才勉强成形。

维度 内容
官方名称 FOMO300K(Brain MRI Dataset for Large-Scale Self-Supervised Learning with Clinical Data)
所属集合 FOMO-MRI 数据集集合的总超集,同一集合另有 FOMO260K、FOMO50K、FOMO45K 三个变体
主管机构 哥本哈根大学计算机系与 Pioneer Centre for AI,通讯作者 Stefano Cerri、Asbjørn Munk、Mads Nielsen
规模(官方口径) 三十万张级扫描;数据卡未公布这两项
来源数量 三十余个目录化来源,其中 OpenNeuro 一个目录内含八百余个原始数据集
存储形态 每个 MRI 会话一到多个 zip,压缩包内为 NIfTI 压缩影像,按改良 BIDS 命名
元数据表 mapping.tsv、mri_info.tsv、participants.tsv 三张根级表,各来源目录内另存一份同名副本
序列覆盖 T1 加权、T2 加权、FLAIR、DWI/ADC、ASL/CBF/M0、MP2RAGE、SWI、GRE、MRA 等
预处理程度 最小:RAS 重排、4D 拆 3D、丢弃少于 15 层的扫描、扩散与灌注通道取舍
未做的处理 重采样、颅骨剥离、偏场校正、强度归一化、配准、去标识以外的清洗
许可 整体 CC BY-NC-SA 4.0;各来源保留原始许可,OASIS、GSP、HCP 等附数据使用协议
访问方式 Hugging Face 门控(自动批准),需登录、同意条款、填姓名与邮箱
论文 Scientific Data 2026,DOI 10.1038/s41597-026-07688-0;预印本 arXiv:2506.14432
对应模型 AMAES 编码器权重在 FOMO-MRI/AMAES_resenc_b_fomo260k 发布
配套代码 asparagus(预训练与微调)与 asparagus_preprocessing(格式转换)两个仓库
最适合 3D 掩码自编码预训练、跨域迁移评估、少样本分割的初始化

§1 它要解决的具体麻烦

1.1 脑 MRI 缺的不是标注,是「够大够杂且能下载」的原料

脑影像领域从来不缺公开数据。OpenNeuro 上有上千个数据集,ADNI 有数千名受试者的纵向随访,UK Biobank 有十万人的多模态影像,ABIDE 有二十多个站点的静息态功能像。

缺的是另一种东西:一份量足够大、来源足够杂、又不需要逐项申请且已经整理成统一格式的原始影像池。这三条同时满足的资源,在 FOMO260K 之前基本不存在。

1.2 三条常见的错误期待

把 FOMO300K 当成「一个超大的脑 MRI 数据集」下载下来,通常会在前半小时内撞上三堵墙,而这三堵墙都来自同一个误解:把预训练语料当成了任务数据集。第一条是「拿到就能跑分割」——任务数据集通常已经颅骨剥离、重采样到统一网格、强度归一化到固定区间,FOMO300K 一样都不占,直接塞进常规分割管线只会得到零碎报错和形状诡异的张量。

第二条错误期待是「解压后文件数与扫描数对应」。仓库里一个会话目录可能只放一个 zip,也可能放好几个,压缩包内部的 NIfTI 数量取决于该会话采了几个序列。

所以目录层级的计数与官方口径的扫描数不是一回事,两者之间的差额来自会话内的多序列与多帧。想核对规模,得解包后数 NIfTI,而不是数 zip。

第三条错误期待是「同一个集合里的几个版本可以叠起来用」。FOMO260K、FOMO50K、FOMO45K 都是 FOMO300K 的子集或再加工版本,官方 README 里用加粗字体提醒不要混用,否则同一批扫描会被重复计入。这条警告在合并多个开源数据集时最容易忽略,因为它反直觉——名字不同、仓库不同、下载地址不同,看上去就是不同的数据。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
训练 3D 掩码自编码器 三十万量级的无标注体积,序列与来源都杂 够,这是它最核心的用途
评估表征的跨域迁移 三十余个来源天然形成多个域,可按来源切分 够,且比人工造域增广更真实
直接当分割训练集 只有极少数来源带病灶标注,多数无标签 不够,需要另找标注集
统一网格的输入张量 各来源原始几何,未重采样 不够,必须自建预处理
临床级影像占比 大量层厚 3mm 以上的临床扫描 够,这是与科研级数据集的关键差别
每个文件的采集参数 集中在 mri_info.tsv,非逐文件 sidecar 基本够,但要做表连接
受试者级人口学 participants.tsv 含年龄、性别、利手、诊断组 部分够,缺失比例不低
商用授权 整体 CC BY-NC-SA 4.0 不够,商用需逐源谈
影像与报告的配对文本 未提供 不够,需要另找配对语料

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
手上只有几百例标注的分割数据,模型从零训练总在小目标上翻车 提供一个足够大的无标注池做自监督初始化,再用你的标注微调 先按 §4.1 的案例思路确定预处理口径,再抽一万张做小规模预训练验证增益
想复现别人论文里的脑 MRI 基础模型,但对方用的是私有数据 给出一份公开可下载的预训练语料,方法对比有了共同底座 核对对方论文的序列子集,只取对应序列,避免混入无关模态
要做跨中心泛化研究,但只有一两家医院的数据 三十余个来源天然构成多域,可按来源做留一域实验 用映射表把会话还原到来源,设计留出来源的划分
团队想评估「自监督到底有没有用」,需要一份不含目标数据的语料 无标签语料,下游任务可另选公开标注集 固定下游基准,只替换预训练语料,做消融
实验室存储有限,全量下载不现实 可按来源目录单独下载,OpenNeuro 之外的单源目录体量有限 先下两三个异质来源做原型
想拿它直接投标或做产品 许可禁止商业用途 只能做研究,商用要么换许可要么逐源申请
需要一个可以直接读的 NIfTI 目录 提供的是会话级 zip 预留解包与磁盘空间,按会话展开后再建索引

1.5 一句话判断

FOMO300K 是脑 MRI 领域目前最接近「公共预训练语料」这一角色的资源:它的价值不在标注质量,而在把散落各处的原始影像整理成一份量大、来源杂、可以直接解包读取的统一原料池;代价是使用者必须自己补上从原始几何到统一网格之间的全部预处理。

1.6 不适合谁:四条边界

第一条边界是需要一个开箱即用的监督训练集的人。若目标是训一个分割或分类模型,FOMO300K 的绝大多数扫描没有对应标签,剩下的一小部分标注也只覆盖特定病灶,用它当训练集不如直接找对应的任务数据集。

第二条边界是无法接受非商业许可的人。CC BY-NC-SA 4.0 禁止商业使用,且要求衍生作品以相同许可分发。把预训练权重用于商业产品、或在商业闭源系统中分发基于它训练的特征提取器,都在许可的灰区甚至禁区。

第三条边界是算力有限的人。把它练成一个可用的表征,代价是八张 H100 跑接近两天这个量级。个人显卡上做全量预训练不现实,只能做子集实验,而子集实验的结论未必能外推到全量。

第四条边界是需要逐例质量控制的人。它刻意保留了原始影像的一切粗糙之处,也刻意没有做统一质控。想找「干净、对齐、可比」的数据,它是最差的选项之一。

§2 数据构成与规格

2.1 仓库长什么样:三十余个目录、三张表、一堆会话包

打开 Hugging Face 仓库页面,看到的第一层结构非常朴素:三十余个以编号前缀命名的来源目录(PT001 起编,编号排到 PT036,并非每个编号位都有对应影像),加上根级的三张 tsv 表、一份 README、一份 LICENSE 和 .gitattributes。编号顺序大致按来源数据集的字母序排,中间有过重排——PT016 GSP、PT017 HBN-SSI 与 PT020 HCP Wu-Minn 这几项明显是后来插进去的——所以编号本身不含规模信息,也不代表收录先后。

每个来源目录内部的布局高度一致:目录根下放该来源的 LICENSE.txt、mapping.tsv、mri_info.tsv、participants.tsv,其下是 sub- 编号的受试者目录;有会话概念的来源再往下是 ses- 编号目录,最后是 zip。

没有会话概念的来源,zip 直接挂在 sub- 下。这个差异造成了两层路径深度:一种是「来源/受试/压缩包」,另一种是「来源/受试/会话/压缩包」,后者多一层。

需要提前说明的是,仓库这一层并不等于数据这一层。仓库里的可见单元是压缩包,压缩包内部才是真正的影像。所以「仓库有多少个文件」和「有多少张扫描」是两个量,前者可以数,后者只能解包后数或者采信官方口径。

2.2 字段与记录的完整字典

层 名称 类型/形态 含义 取值与备注
路径 来源目录 目录 按来源数据集切分的一级目录 PT 前缀加三位编号加来源名,数量三十余个
路径 受试者目录 目录 sub- 加编号 编号在来源内唯一,跨来源不唯一
路径 会话目录 目录 ses- 加编号 部分来源无此层
路径 会话压缩包 文件 一个会话的交付单位 同一会话可有多包,包名形如 ses-两位序号.zip
压缩包内 影像文件 NIfTI 压缩后的体数据 .nii.gz,按改良 BIDS 命名
压缩包内 序列名 文件名前缀 表明序列类型 t1w、t2w、flair、dwi 等;缺失时退化为 scan
压缩包内 扩散派生标识 文件名后缀 区分均值与 ADC _trace 等后缀显式标注
根表 mapping.tsv TSV 扫描与原始来源的对应 每行一个扫描,含来源标识与原始文件名
根表 mri_info.tsv TSV 采集参数 扫描仪、场强、层厚、序列等
根表 participants.tsv TSV 人口学与分组 年龄、性别、利手、诊断组
表字段 年龄 数值 会话时的年龄 部分记录缺失
表字段 性别 分类 生理性别 缺失常见
表字段 利手 分类 惯用手 缺失比例更高
表字段 诊断组 分类 归并后的大类 对照、肿瘤、卒中、精神、神经等
表字段 场强 数值 扫描磁体强度 1.5T、3T 为主,少量低场与 7T
表字段 层厚 数值 切片厚度(毫米) 临床级与科研级的分界代理指标
表字段 序列类型 分类 成像序列 T1、T2、FLAIR、DWI、ASL 等
表字段 厂商 分类 扫描仪制造商 西门子占比最高,其次飞利浦
许可 来源许可 文本 各来源的原始授权 CC BY、CC0、CC BY-NC、DUA 等

2.3 一条记录的完整解剖

一条记录可以沿着「会话」这条线拆到底。下面用一个虚构但结构真实的路径示例,说明从仓库路径到体数据的完整落点。路径形式取自仓库实际命名规则,编号做了替换,不指向任何具体受试者。

PT036_Yale_HighRes/
├── LICENSE.txt
├── mapping.tsv
├── mri_info.tsv
├── participants.tsv
└── sub-101/
    └── ses-01.zip
        ├── sub-101_ses-01_t1w.nii.gz
        └── sub-101_ses-01_t1w.json

这段结构里能读出四件事。第一,这个来源没有独立的会话编号层,压缩包直接挂在受试者目录下,说明原始数据本身没有纵向随访结构。

第二,压缩包的命名沿用会话概念,即使该来源只有一个时间点。第三,压缩包里可能同时有 JSON sidecar,但这是来源自带的,并非所有来源都有——论文明确说采集参数集中在 mri_info.tsv,而不是逐扫描 JSON。

对于带会话层的来源,同一受试者名下会出现多个 ses- 目录,每个 ses- 目录又可能有多个 zip。

多个 zip 意味着该会话采了较多序列,分包是为了控制单个文件大小。这一点在写索引程序时必须处理:不能假设一个 ses- 目录只有一个包。

2.4 规模的三重口径:扫描、会话、压缩包

同一个集合有三种规模说法,混用会得出互相矛盾的数字。官方论文通篇用「扫描」作为基本单位;仓库目录结构以「会话」为单位,一个会话目录下可能放一个包,也可能放好几个;仓库文件清单给出的又是另一组数。三者的关系是:扫描最多,会话次之,受试者最少;压缩包数与会话数接近但不相等,因为有的会话被拆成多包。

计数口径 单位 数值 来源 备注
扫描数(总集) 张 三十万张级 数据卡更新说明 精确值见附录 A
扫描数(上一版论文口径) 张 二十六万余 论文摘要 论文写的是 FOMO260K,不是 300K
会话数 个 七万余 论文摘要(FOMO260K 口径) 总集未单独公布
受试者数 人 五万余 论文摘要(FOMO260K 口径) 总集未单独公布
来源数据集 个 九百余 论文摘要 数据卡未复述此数
来源目录 个 三十余 仓库顶层目录 一个目录可聚合多源,OpenNeuro 目录即八百余个
元数据表 张 3 张根级 + 每来源各 3 张 仓库文件树 根表与来源表同名不同范围

这里有一处必须说清的错位。数据卡的规模句只给总集的扫描数并注明移出了一个来源,其余三项一字未提;而论文摘要里的四项数字,全部是 FOMO260K 那一代的口径。两组数字不能直接相减得出「新增了多少」,因为新版本同时做了移除与新增,数据卡没说各自多少。

因此引用规模时最稳的写法是「三十万张扫描级」;需要会话数与受试者数时,必须同时注明「按 FOMO260K 论文口径」,否则读者会以为那是总集的数字。

2.5 与同集合其他变体的字段差异

集合内四个变体的字段结构相同,差异在预处理深度与访问门槛上。这一点对选型很关键,因为「要多大的数据」和「要多干净的数据」往往是两个相反的需求。

变体 扫描数(官方) 访问 预处理深度 与总集的关系
FOMO300K 三十万张级 门控,自动批准 最小,仅方向与维度整理 总超集
FOMO260K 二十六万余 开放,无需登录 与总集相同 可直接下载的子集
FOMO50K 49,193 门控,自动批准 配准、颅骨剥离或去脸 再加工子集
FOMO45K 46,149 开放,无需登录 配准、颅骨剥离或去脸 FOMO50K 的开放子集

这里有一个容易被忽略的设计意图:FOMO260K 与 FOMO300K 的预处理完全相同,差别只在「是否包含需要签 DUA 的那部分来源」。

也就是说,如果研究不涉及那几个受 DUA 约束的来源,直接下 FOMO260K 就够,且完全免去门控流程。反过来,FOMO45K 提供的是已经配准、颅骨剥离过的版本,适合下游任务直接微调,但不适合当预训练语料——因为颅骨剥离本身就是一种强先验注入,会削弱自监督想学的「从原始对比度里自己发现结构」。

§3 它是什么:一份「最小预处理」的原始影像层

3.1 「最小预处理」这四个字到底做了什么

论文对预处理的描述极短,但每一句都对应一个具体操作,值得逐句拆开。第一件事是把所有影像重排到 RAS 方向,即右-前-上。

神经影像里方向约定有好几套,不同软件默认不同,如果不统一,同一个解剖结构在不同文件里的索引顺序会完全不同,卷积核学到的空间先验就会错乱。

第二件事是把 4D 体数据拆成若干 3D 体积,比如一次采了多帧的 DWI 或者多回波的序列,统一降维成单帧,这样每条记录都能被同一个 3D 网络吃掉。第三件事是丢弃层数少于 15 的扫描,理由是解剖覆盖不足,这种扫描对学结构没有帮助,只会引入噪声。

扩散影像的处理要复杂一些,因为它天然是多方向多 b 值的。流程是先按 b 值分壳(允许壳宽五十个单位),每个壳里挑三个梯度方向最接近 x、y、z 轴的体积,然后分两半处理:一半直接把三个体积平均成一张代表该壳扩散对比度的 3D 影像,另一半用这三个轴对齐体积和 b0 参考算出 trace ADC。

这么做的目的是在不引入 b 值与梯度表的前提下,仍然保留扩散对比度这一路信息,同时人为制造两种表示,增加自监督时的表示多样性。

计算 ADC 时有几条数值保护:只在 b0 与扩散信号都为正、且扩散信号不超过 b0 的体素上算,信号比裁剪到十的负十次方到一之间再取对数,不满足条件的体素在该方向上置零。没有 b0 参考时,退化为三方向平均。

灌注影像的处理按通道数分情况:多于三通道(比如多个 M0)时全通道平均;两到三通道(典型的 ASL)时用最后通道减第一通道得到灌注加权体积。这条规则的动机很实用——ASL 数据在不同来源里的通道顺序约定并不一致,用减法至少能保证得到的是「有灌注对比度」的那张图。

3.2 为什么「异构」在自监督里是优点而不是缺点

监督学习里,异质性是麻烦。训练集与测试集分布不一致,模型性能就掉,所以要尽量统一采集协议、统一重建参数、统一处理流程。

自监督学习里,这个判断要反过来:模型要学的是「什么是脑 MRI 的一般结构」,而一般结构恰恰藏在跨协议的不变量里。如果所有扫描都来自同一台机器、同一套参数,模型完全可以用「记住这台机器的噪声纹理」这条捷径把重建任务做得很漂亮,学到的表征却毫无迁移价值。

这就是为什么 FOMO300K 把「临床级与科研级混在一起」当成卖点而不是缺陷。论文用层厚作为临床级的代理指标,把层厚大于 3 毫米的扫描归为临床级。

这个划分很粗糙,但抓住了要害:临床扫描是真实世界的主战场,分辨率低、信噪比差、头动多,而这些恰恰是模型部署时会遇到的输入。只在高分辨率科研数据上预训练的模型,换到临床场景会系统性失配。

3.3 与 OpenMind 的关系:包含而非并列

理解 FOMO300K 的定位,绕不开 OpenMind。OpenMind 是从 OpenNeuro 汇总的一批脑 MRI,体量十一万四千张扫描,整理得很干净,是此前最接近「公共预训练语料」的资源。FOMO300K 把 OpenMind 的绝大部分收了进来,再往上叠了两倍多的体量与更多来源。

维度 OpenMind FOMO300K
来源 OpenNeuro 单一仓库 三十余个来源目录,含 OpenNeuro 与多家机构库
规模 十一万余扫描 三十万量级
临床级影像 占比低 占比高,层厚大于 3 毫米者众
疾病覆盖 以对照为主,肿瘤少 肿瘤、卒中等明显更多
标注 无 无
访问 开放 门控
关系 FOMO300K 的组成部分 OpenMind 的超集
迁移成本 不适用 原管线可沿用,但需去重

这个关系的实用含义是:已经在用 OpenMind 的团队,迁移到 FOMO300K 时不必重做全部预处理管线,但必须处理重复——OpenMind 里的扫描在 FOMO300K 里几乎都能找到,直接叠加会让这些扫描的权重翻倍。

3.4 它不是什么

需要反复澄清的是,它不是一个「标注数据集」,也不是一个「评测基准」。它没有官方划分的训练/验证/测试,没有统一的评价指标,没有榜单。

任何人想用它做对比实验,都得自己定义划分与指标。这一点在方法论文里尤其要紧:如果你用一个自定义划分报告了预训练增益,别人无法直接复现,除非你也公开划分。

§4 质量与特色

4.1 案例:一次 T1 加权临床扫描从下载到可训练的完整链路

这一节用一个具体场景把整条链路走完,后面几节会反复回到它。设想的场景是:某研究组手上有一份包含三百例脑肿瘤标注的院内数据,标注质量不错,但从零训练的分割模型在小病灶上的 Dice 总是上不去。

他们决定用 FOMO300K 做自监督初始化。第一步不是下载,而是先想清楚一件事——预训练时的输入长什么样,微调时的输入就必须长什么样,否则初始化学到的统计量与下游输入对不上,增益会被抵消。

他们从仓库里挑了一个临床来源,取其中一份 T1 加权扫描。这份扫描的原始体素间距是各向异性的,层内接近一毫米,层间五毫米,图像已经做过方向重排,但没有颅骨剥离,头皮与颅骨都在,强度范围是原始 16 位整数。直接把它裁成 160 见方的立方体送进网络会出事:各向异性的体素会让同一个卷积核在三个方向上的感受野实际覆盖的解剖尺度差五倍,网络学到的是「层间模糊」而不是结构。

处理步骤 这份扫描的原始状态 必须做的处理 不做会怎样
解包 会话级 zip 解压到会话目录 读不到任何影像
方向 已重排至 RAS 无需处理 与其他来源索引顺序不一致
4D 拆分 已是 3D 无需处理 不会发生
重采样 层内一毫米、层间五毫米 重采样到近似各向同性 三个方向感受野尺度差五倍
颅骨剥离 头皮颅骨俱在 剥离或至少裁掉颈部 模型把颅骨边界当主要结构学
强度归一化 原始 16 位整数 百分位裁剪加标准化 不同来源强度不可比
裁切 视野含颈部 脑区居中裁切 大量体素落在脑外
张量化 无 存为可随机读取的数组 每轮训练都要解压,IO 成为瓶颈

这份扫描的处理顺序有讲究。重采样必须早于颅骨剥离,因为剥离工具大多假设近似各向同性的输入;强度归一化必须晚于剥离,因为百分位裁剪依赖脑区的强度分布,用全头算会把头皮脂肪拉进参考区间。

如果顺序反了,剥离后的掩码会偏,归一化后的对比度也会偏,两个偏差叠加,模型实际上是在学一份无意义的图。§4.1 的案例里最容易出错的就是这个顺序,而它恰恰不在任何文档里写。

4.2 3D MRI 的自监督为什么不能照抄 2D 的做法

自然图像的掩码自编码器在 2D 上工作得很好:切成小块、随机遮掉六成、让网络把遮掉的部分重建出来。

这套做法搬到 3D 上,至少有两处必须改:各向异性体素让固定尺寸的掩码单元在不同方向覆盖的解剖尺度不一致;单层切片脱离上下层就失去意义,掩码比例与感受野都要放大。第一处最直接的后果是网络把「层间重建」当成主任务,因为那里信息量最大但也最模糊。

差别 自然图像 3D MRI 对自监督的具体影响
体素形状 各向同性正方 常各向异性,层厚可为层内的数倍 掩码单元在不同方向覆盖的解剖尺度不一致
方向约定 无 受检者方位、扫描仪坐标、软件约定多重 不统一时空间先验错乱
强度 有固定动态范围 原始强度与场强、线圈、序列强相关 不能直接套用图像级归一化
头动 无 临床扫描普遍存在 相邻层可能错位,重建目标本身有噪声
偏场 无 高场强下明显 同一组织在不同位置的强度不同
视野 构图统一 从半脑到全脑加颈部不等 固定裁切会截断或浪费
通道 三通道 单通道灰度 第一层卷积的输入维度不同
全局上下文 单幅图内完整 单层无意义,需跨层才能判断 掩码比例与感受野都要放大

第四个差别是评估方式。2D 自然图像的自监督可以用线性探针在 ImageNet 上测,3D 医学影像没有这样一个公认的评测靶子,只能靠下游任务间接衡量,而下游任务的噪声往往比预训练带来的增益还大。

4.3 论文给出的增益有多大,以及这个数字该怎么读

论文用一个具体实验回答了「有用吗」。他们用一个约一亿参数的三维编码器配 AMAES 目标(掩码自编码器的三维改造版),掩码比例六成,掩码单元八乘八乘八体素,在 FOMO260K 上预训练;然后把这套编码器迁移到五个少样本分割任务上,每个任务只用二十个标注样本微调,与随机初始化基线对比。

下游任务 随机初始化 Dice 预训练后 Dice 绝对提升
ATLAS(卒中病灶) 41.49 42.43 +0.94
ISLES22(缺血性卒中) 72.86 73.98 +1.12
SBM3(脑转移小病灶) 58.23 59.68 +1.45
WMH(白质高信号) 72.75 74.04 +1.29
Cerebrum-7T(七特斯拉脑区分割) 90.54 90.80 +0.26

五个任务全部提升,且按逐例 Dice 差做配对检验后统计显著。读这组数字要注意三点。

第一,这是少样本设定,只给二十例标注,提升幅度在少样本下才有意义——数据充足时从零训练也能追上来,预训练的价值主要体现在数据稀缺的场景。

第二,提升最大的是小目标任务,这符合直觉:小目标最依赖先验,而预训练提供的正是先验。第三,提升最小的是七特斯拉脑区分割,这个任务本身 Dice 已经到九十以上,天花板效应明显,而且七特斯拉影像在预训练语料里占比极低,域差距最大。

还有一个常被忽略的细节:这组数字是在 FOMO260K 上预训练得到的,而不是在 FOMO300K 全量上。

两者的预处理相同,差别只是多了那几个受 DUA 约束的来源。所以这组数字可以直接当作「开放子集上的可复现基线」,而全量能带来多少额外增益,论文没有给。

4.4 数据本身的粗糙之处:一份诚实的清单

把这份数据夸成「高质量大规模脑影像库」是误导。它的质量特征要分开看:作为预训练原料,粗糙是特性;作为分析对象,粗糙是麻烦。

粗糙之处 具体表现 对预训练 对下游分析
体素间距不统一 各来源原始几何,从亚毫米到数毫米 可接受,反而增加多样性 必须重采样才能比较
视野不统一 半脑、全脑、全脑加颈部都有 可接受 固定裁切会截断
对比度漂移 场强、序列、重建参数各异 可接受,是域多样性的来源 强度不可直接比较
头动与伪影 未做运动校正 产生有结构的噪声 人工筛查成本高
颅骨与头皮保留 未做颅骨剥离 可接受 分割任务需自行剥离
层数下限仅 15 覆盖不全的扫描可能仍在内 引入了低信息样本 需按覆盖度过滤
标注缺失 绝大多数扫描无标签 无所谓 不能直接用于监督
来源粒度不均 OpenNeuro 一家占近六成 词表偏向该来源 留一域实验需加权

4.5 质量评估:DAIMS 五维

维度 评分 依据 主要扣分原因
数据完整性(D) 4/5 官方口径清晰,数据卡与论文均给出总量 扫描数被包在压缩包内,无法由目录核对
可获取性(A) 3/5 单仓库汇集,一条命令可下 门控流程、总体量巨大、需大量磁盘
互操作性(I) 4/5 改良 BIDS 命名,NIfTI 通用格式 无逐扫描 sidecar,DWI 无梯度表
元数据质量(M) 3/5 三张表覆盖人口学与采集参数 缺失比例不低,字段粒度粗
标准化程度(S) 2/5 只做方向与维度整理 无重采样、无强度归一、无配准

§5 怎么拿到:渠道、命令与索引

5.1 三条获取路径的取舍

获取这份数据有三种路径,各自适合不同阶段。了解它们的差别能省下大量时间。

路径 适用场景 优点 代价
网页逐个下载 只要几个来源做原型 无需装工具 人工点选,无法脚本化
huggingface_hub 的 snapshot 下载 全量或按目录取 断点续传、支持通配过滤 需登录 token,占满磁盘
git-lfs 克隆 需要版本追溯 保留完整提交历史 仓库体量极大,克隆缓慢

5.2 环境准备与鉴权

#-- 安装客户端,锁定与论文同期的最小版本
pip install "huggingface_hub>=0.30"

#-- 登录并写入 token(门控仓库必须这一步,否则 403)
hf auth login --token "$HF_TOKEN"

#-- 校验能否读到仓库元信息,能打印文件名即鉴权通过
python -c "from huggingface_hub import HfApi; print(len(HfApi().list_repo_files('FOMO-MRI/FOMO300K', repo_type='dataset')))"

5.3 只取一个来源做原型

全量下载不现实时,最经济的做法是按来源目录取。下面这段只拉一个来源,且只拉压缩包。

from huggingface_hub import snapshot_download

path = snapshot_download(
    repo_id="FOMO-MRI/FOMO300K",
    repo_type="dataset",
    local_dir="/data/fomo300k",
    allow_patterns=["PT021_IXI/*"],
    max_workers=8,
)
print(path)

5.4 解包并建立会话索引

压缩包解出来之后,第一件事不是读影像,而是建索引。索引要回答两个问题:这个文件属于哪个来源、哪个受试者、哪个会话、哪个序列。

import zipfile
from pathlib import Path
import pandas as pd

root = Path("/data/fomo300k")
rows = []
for zpath in root.glob("PT*/*/*.zip"):
    src = zpath.parts[-3] if len(zpath.parts[-3].split("-")) == 2 else zpath.parts[-4]
    with zipfile.ZipFile(zpath) as zf:
        for name in zf.namelist():
            if name.endswith(".nii.gz"):
                rows.append({
                    "source": src,
                    "archive": str(zpath.relative_to(root)),
                    "member": name,
                    "sequence": name.split("_")[-1].replace(".nii.gz", ""),
                })

index = pd.DataFrame(rows)
print(index["sequence"].value_counts().head(15))
index.to_parquet(root / "index.parquet")

这段代码对两种路径深度都做了处理:第三段如果形如 sub-编号(不含二级连字符)就说明没有会话层,往上一层找来源名。

序列名从文件名末尾取,是因为改良 BIDS 把序列放在文件名最后一段;若文件名为 scan.nii.gz,序列会被记为 scan,这正是论文所说的「序列信息缺失时的退化命名」。跑完这一段,会得到一张可以把来源、序列、会话连起来的主表,后续任何按序列筛选都基于它。

5.5 从压缩包直读而不落盘

如果磁盘紧张,可以不先解包,直接从 zip 里读流到内存再交给 NIfTI 解析。代价是每次读都要解压,随机访问变慢。

import io
import zipfile
import nibabel as nib

def load_member(zpath, member):
    with zipfile.ZipFile(zpath) as zf:
        with zf.open(member) as fh:
            buf = io.BytesIO(fh.read())
    img = nib.load(buf)
    return img.get_fdata(dtype="float32"), img.header.get_zooms()

vol, zooms = load_member("/data/fomo300k/PT021_IXI/sub-001/ses-01.zip",
                         "sub-001_ses-01_t1w.nii.gz")
print(vol.shape, zooms)

5.6 元数据表怎么连

三张根级表的主键关系需要先说清,否则连表会连错。先说结论:mapping.tsv 是扫描级的还原表,回答「这个文件从哪个来源来」;mri_info.tsv 是采集参数表,回答「这张扫描是怎么采的」;participants.tsv 是受试者级表,回答「这个人是谁、属于哪组」。三张表各自有主键,但没有任何一张表能单独回答「属于 X 诊断组、层厚大于 Y 的 T1 扫描有多少张」,必须连接。

表 一行代表什么 连接时要注意 常见错法
mapping.tsv 一个扫描文件到其原始来源的对应 键是文件名或扫描标识,需与包内成员名对齐 把它当成受试者表来数人数
mri_info.tsv 一张扫描的采集参数 键是扫描标识,与 mapping 的对应关系需按表头核对 按行号硬拼两张表
participants.tsv 一名受试者 受试者编号只在来源内唯一,跨来源会撞号 直接用 sub 编号做全局唯一键
来源目录内同名表 只覆盖该来源 与根表同名但范围不同,不能混读 把来源表拼进根表求总数
import pandas as pd

base = "/data/fomo300k"
mapping = pd.read_csv(f"{base}/mapping.tsv", sep="\t", dtype=str)
info = pd.read_csv(f"{base}/mri_info.tsv", sep="\t", dtype=str)
part = pd.read_csv(f"{base}/participants.tsv", sep="\t", dtype=str)

joined = mapping.merge(info, on="filename", how="left").merge(part, on="participant_id", how="left")
print(len(mapping), len(joined))
print(joined["sequence"].value_counts().head(10))

5.7 字段级陷阱:两个让你静默出错的细节

真正让实验在无声中出问题的是字段含义的错位。这类错误不会报错,只会让结果偏一点点,偏到你把它归因于模型。

第一个陷阱是序列名退化成 scan。论文说得很清楚:当序列信息缺失或含糊时,扫描名保留原始标签,或者干脆统一命名为 scan。

这意味着按序列名筛选时,scan 这一类既不是某个具体序列,也不是缺失标记,而是一锅混装。

如果你在做「只用 T1 训练 T2 测试」这类实验,把 scan 归进 T1 会引入反例,归进 T2 同样会。稳妥的做法是把 scan 单独作为一类排除,并在报告里说明排除了多少——这样别人复现时才知道你的分母是多少。

陷阱 表面现象 实际含义 处理建议
序列名退化为 scan 序列分类里出现一个 scan 类 序列信息缺失或含糊,不是某一种成像 单独设为一类排除,并记录排除量
扩散影像无梯度表 有 dwi 命名,但包里没有 bval/bvec 已经是派生 3D 体积,不是原始扩散数据 不要尝试算张量指标,只能当对比度图用
文件名后缀区分均值与 ADC 同一会话出现两份近似影像 一份是三方向平均,一份是 trace ADC 训练前二选一,否则同源重复计权
多包会话 同一 ses 目录下有多个 zip 该会话序列多、分包存放,不是两次就诊 先按会话聚合再抽样,不要按包抽样

第二个陷阱是扩散影像看起来能用,其实用不了。目录里有 dwi 字样,很容易让人以为可以做纤维束重建或算 FA。

但这批数据提供的是派生 3D 体积,梯度表在预处理时已经被消费掉了,b 值分组与是否走了 trace ADC 都只体现在文件名里。想算张量指标必须回到原始来源重新下载,不要在这份语料上做。

5.8 一份可执行的入库质检清单

下载与索引之后、正式训练之前,建议按下面这张清单过一遍。它不是官方要求,而是把前述各节散落的注意事项压成一页,让流水线有明确的通过条件。

检查项 判定方法 不通过时怎么办
会话完整性 每个会话目录下至少一个 zip,且包内至少一个 NIfTI 重新下载该会话,或从索引中剔除
方向一致 读取仿射矩阵,确认轴编码为 RAS 用 fslreorient2std 或 nibabel 重排
层数下限 沿最短轴统计层数,低于 15 的标记 已在官方侧过滤过一轮,此处只做复核
各向异性 三个体素间距的最大最小比 比值超过三的进入重采样队列
视野覆盖 前景体素包围盒与图像边界是否相切 相切者优先做居中裁切
序列标注 文件名序列名是否为 scan 或空 归入未知类,训练时默认排除
来源配额 各来源入选会话数占该来源总量的比例 大来源设上限,小来源保底
受试者去重 同一受试者是否跨训练与验证划分 按受试者整体划入一侧

§6 与库内条目的关系

6.1 关系图谱:它站在「预训练原料」这一层

库内与脑 MRI 相关的条目,绝大多数是任务数据集。它们的关系不是竞争,而是上下游。

库内条目 类型 与 FOMO300K 的关系
IXI 脑 MRI 健康受试者科研级多序列 被收录进 FOMO300K,是其中 PT021 来源
Yale Brain Mets Longitudinal 脑转移瘤纵向影像 被收录进 FOMO300K,是其中 PT035 来源
ABIDE 多站点自闭症静息态与结构像 同属公开脑影像池,但功能像不在 FOMO300K 收录范围
UK Biobank 大队列多模态影像 需申请,许可与 FOMO300K 不同,非同源
ADNI 类纵向队列 阿尔茨海默病纵向 需申请,FOMO300K 未收录
OpenNeuro 类条目 原始数据集仓库 FOMO300K 的最大来源,占近六成文件
BrainPTM 2021 类挑战集 单中心任务数据 任务集,与预训练语料互补
TopBrain 类分割挑战 脑血管分割挑战 任务集,可作为下游评估

从这张表能看出分工:任务数据集回答「怎么在一批标注上学到某个结构」,FOMO300K 回答「怎么在无标注的大池子里先学到一个通用的表征」。

前者是目的,后者是起点。一个完整的实验通常两边都要用——用 FOMO300K 预训练,用挑战集微调与评估。

6.2 检索路径:从需求出发找条目

你的检索意图 建议入口 为什么
想找预训练语料 FOMO300K,或免门控的 FOMO260K 库内唯一以预训练为定位的脑影像条目
想找脑肿瘤分割数据 BraTS 系挑战条目 有标注,适合做下游任务
想找健康对照的结构像 IXI 类条目 小而精,适合做基准
想找纵向随访 队列类条目 FOMO300K 虽含纵向来源,但未按受试者组织时间轴
想找功能连接 ABIDE 类条目 FOMO300K 明确不收功能像
想找可批量的多模态 大队列类条目 需申请但字段更齐

这里有一个反直觉的点:想找「脑 MRI 数据」的人第一反应会去搜任务数据集,但实际上如果目标是训练表征,更应该先看预训练语料;如果目标是验证某个解剖结构的分割,才去看任务集。把顺序搞反,会在标注数据不够时反复调模型,而不是先补上游。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

读到这里,如果脑子里已经形成「这是一份大而全的高质量数据集」的印象,需要先做一个校正:**这份资源的强弱项与任务数据集完全相反,用任务数据集的尺子量它,几乎每一项都会判为不合格。

** 它没有统一的网格,没有颅骨剥离,没有强度归一化,没有训练测试划分,没有评测指标,没有一个可以直接跑起来的基线脚本。任何一项单拎出来,都是「数据集质量差」的证据。

但这个判断本身就是误判。它的设计要求就是不做这些事,因为做了就会削掉多样性,而多样性正是它唯一要提供的东西。

正确的评价尺子只有三把:量够不够大、来源够不够杂、原始几何有没有被破坏。前两把它明显占优,第三把是它的设计原则。至于「干净」「统一」「开箱即用」,那是 FOMO45K 那种再加工版本的职责,不是它的。

这个校正还有一个引申:把它与任务数据集比较 Dice、比较可用性、比较文档完整度,都得不出有意义的结论。它应该被比较的对象是 OpenMind、是 ImageNet 之于视觉的那层角色,而不是 BraTS。

7.1 五维评分

维度 评分 理由
规模 5/5 三十万扫描量级,脑 MRI 公开资源中位居前列
异质性 5/5 三十余个来源、多序列、多场强、临床与科研混合
可用性 2/5 门控、巨量、需自建预处理,上手成本高
可复现性 4/5 单仓库、固定提交、有配套代码与预训练权重
文档完备度 3/5 论文详尽,但仓库 README 受门控不可直读,表结构需自行探索

7.2 它比任务数据集强在哪、弱在哪

强项在上游:体量、多样性、临床真实感。弱项在下游:无标签、无划分、无指标、无预处理。所以更准确的说法是它和任务数据集处在流水线的不同位置,而不是谁更强。

比较项 任务数据集 FOMO300K
体量上限 受标注成本约束 受公开数据池约束
来源多样性 多为单中心或少数中心 三十余个来源目录
临床真实感 常按研究设计筛选病人 临床级与科研级混编
标签 有 基本没有
官方划分与指标 有 没有
可直接训练 是 否,需自建预处理

7.3 已知的、可枚举的偏差

偏差 表现 影响 可否缓解
来源体量极不均衡 OpenNeuro 一家占近六成文件 采样若不分层,多样性名存实亡 可,按来源加权采样
序列分布偏斜 T1 加权覆盖绝大多数来源,灌注类稀少 模型对少见模态表征弱 部分可,按序列配比采样
疾病分布偏斜 对照占比最高,肿瘤次之,罕见病极少 下游罕见病迁移增益不确定 难,受原始来源限制
年龄分布偏年轻 峰值在青年,老年不足 老年脑萎缩的形态学学得不充分 部分可,按年龄分层
场强偏斜 三特斯拉占绝对多数,七特斯拉极少 高场影像的迁移差(§4.3 已见) 难,来源本身有限
元数据缺失 年龄、性别、利手、诊断都有缺失 按属性切分时样本量骤减 部分可,缺失当独立类别
两代版本口径并存 数据卡只给扫描总数,论文给全部四项且针对上一版 引用时数字对不上 可,注明依据哪一代
无逐扫描 sidecar 采集参数集中在总表 单文件解析需额外连表 可,建索引时预连接
版本变动不回溯 V1.1 移出来源后,旧引用里的数字不再等于当前仓库 复现实验时对不上 部分可,锁定提交号并记录版本

倒数第二条关于版本口径的偏差值得单独说明。FOMO300K 当前是 V1.1,数据卡写明 2026 年 4 月 3 日发布、MGH-Wild 因许可变更被移出、总数变为三十万张级;而配套论文发表时描述的是 FOMO260K 那一代。

也就是说,同一份仓库在不同时间点的数字并不相同,论文表格里的逐来源明细对应的是上一代版本。

这不是官方内部矛盾,而是版本演进:引用逐来源明细时应当注明出自哪一版论文,引用总量时则以数据卡当前说明为准。想把实验锁定到可复现的状态,最稳妥的做法是记下仓库的提交哈希,而不是记下某个整数。

7.4 外部验证矩阵

一份资源是否可靠,看它被谁用过、怎么用的。

验证维度 证据 强度
同行评议 Scientific Data 2026 正式发表,非仅预印本 强
方法侧复现 论文给出完整预训练与微调配置,含超参与步数 强
权重公开 预训练编码器权重在 Hugging Face 独立发布 强
社区规模 仓库点赞数与下载量在同期脑影像资源中居前 中
挑战赛采纳 同集合早期版本曾作为 2025 年脑 MRI 基础模型挑战赛的底座 中
独立复现 尚无第三方论文报告在 FOMO 系语料上的复现结果 弱

最后一行是真实的空白。资源发布不足一年,还没有形成独立的第三方验证文献。这意味着论文报告的那组增益数字目前只有原作者一处来源,虽然方法透明、代码公开,但独立复现尚待时间。

7.5 它为何能持续:靠「汇总而非采集」把维护成本压到了接近零

它之所以能持续存在并持续变大,根本原因不在经费,而在它的生产模式:所有影像都来自已经存在的公开数据集,团队做的是汇总、格式统一、元数据抽取与打包,而不是采集与标注。这意味着扩张的边际成本极低——新来源出现就加一个目录;也意味着它不存在「数据用完了怎么办」的问题,因为公开数据池本身在持续增长。

对比之下,任务数据集的可持续性依赖每次重新募集经费去标注新数据,一旦资助中断就停止更新。FOMO 系资源把这一环省掉了,它的更新节奏由上游源的发布节奏决定,而不是由自己的预算决定。

这也是为什么在不到一年里,集合从单一体量扩张出了四个变体。代价是它很难提供上游没有的东西——没有标注就没有标注,没有功能像就不收功能像,这份资源的上限由公开数据池的上限决定。

7.6 一张选型决策表

把前面几节的判断压成一张表。左列是「你手上已经有什么」,右列是「该不该用它」。这张表不回答「它好不好」,只回答「你这一步需不需要它」。判断顺序建议是先看许可,再看下游是否缺先验,最后才看体量——任一步为否即可停,不必往下比较。

你的现状 该不该用 FOMO300K 理由
有标注但数量少,模型泛化差 该用,做预训练初始化 少样本场景里先验最值钱
完全没有标注,只有影像 可以用,但先想清楚下游靠什么评估 无标签语料不会自动产生指标
标注充足,模型已经够用 不必用 收益可能落在噪声范围内
只需要某一种解剖结构的分割 先试小样本微调,再决定要不要预训练 结构明确的任务对先验依赖低
任务是分类而非分割 可以用,但要换评估基准 论文的分割结论不能直接搬到分类
需要商用或以闭源产品交付 不该用 非商业许可构成硬约束
需要功能连接或波谱 不该用 这类模态被明确排除在外
需要逐例质控的干净数据 不该用 它刻意保留了原始粗糙度

§8 生态位与历史

8.1 历史沿革:从四万五千到三十万的三年

这条线可以分成四段。起点是 OpenMind 那类单仓库汇总尝试,证明了「把 OpenNeuro 打包成预训练语料」这条路走得通,体量在十一万余扫描级别。

第二段是 2025 年前后的四万五千张版本,同期被用作脑 MRI 基础模型挑战赛的底座,这一步把「预训练语料」从研究组内部工具变成了公共评测的基础设施。

第三段是二十六万张版本的发布,来源从单一仓库扩展到九百一十个公开数据集,临床级影像的占比显著上升。第四段是当前三十万张级的版本,因一个来源的许可变更将其移出、总量重新计算,并沿用门控发布。

阶段 体量 关键变化 影响
单仓库汇总 十一万余扫描 证明了路线可行 形成「预训练语料」这一概念
四万五千版 四万六千余扫描 进入挑战赛 获得外部使用与检验
二十六万版 二十六万余扫描 来源扩至九百余个,同期另出配准加工版 成为领域内事实标准
三十万版 三十万张级 V1.1 移出 MGH-Wild,总数重算 规模与合规同时收紧

这条沿革里最值得注意的一点是:体量增长的同时,访问门槛也在提高。早期版本完全开放,当前版本需要门控。

这不是倒退,而是规模扩张的必然结果——来源越多,附带的 DUA 越多,整体就越难无条件开放。

团队的做法是保留一个开放子集(二十六万版)作为退路,让不需要受约束来源的人仍然能免登录取用。门控是自动批准的,填表即可通过;真正需要单独谈的,是那几个附数据使用协议的来源在商用或再分发时的授权。

8.2 它在方法生态里的位置

自监督方法在脑影像里有几条主要路线:对比学习、掩码重建、生成式重建、以及基于解剖先验的自监督。

FOMO300K 本身不绑定任何一条路线,但它事实上成了掩码重建路线的默认语料,因为论文的基线就是用掩码自编码做的。这会带来一种路径依赖:后来者若想公平比较,往往会沿用同样的语料与同样的目标,方法多样性因此收窄。

8.3 与另外几类「大语料」的分工

圈内被拿来和它比较的还有几类资源,性质各异,混着谈容易得出错误结论。逐项对照如下。

资源 体量 覆盖范围 预处理 访问 适合谁
FOMO300K 三十万张级 仅脑部 MRI 最小,方向与维度整理 门控,自动批准 想练通用编码器的人
FOMO260K 二十六万张 仅脑部 MRI 同上 开放 研究不涉受限来源的人
FOMO45K 四万六千余张 仅脑部 MRI 配准、剥离或去脸 开放 需要近似统一几何的下游任务
OpenMind 十一万余张 OpenNeuro 来源的脑 MRI 较统一 开放 想要单一来源、干净几何的人
大规模部位无关影像库 十万级 CT/MRI 混合 全身多部位 多为重采样后 各有门槛 想做跨部位通用模型的人
单中心院内影像池 数万级 单一机构 与本院管线一致 需伦理审批 想贴近具体临床分布的人

第一组对照是 FOMO 系内部的三个变体。它们互为子集,选型的分界不在体量,而在「要不要统一几何」。

要统一几何就选四万六千张那一档,它已经配准并剥离;要保留原始几何、把变异性交给模型去学,就选二十六万或三十万那一档。两者的预处理深度是相反的设计取向,不存在谁更先进。

第二组对照是 OpenMind 这类单仓库汇总。它的优势是来源单一、几何相对统一、社区认识度高;劣势是来源偏 OpenNeuro,临床级低分辨率影像占比低。想复现「预训练到底能带来多少增益」这类结论,用它可以少一层变量;想证明模型扛得住真实临床的粗糙程度,就得换 FOMO 这一档。

8.4 与队列数据的关系:互补而非替代

还有一类资源常被误认为竞品,那就是大型人群队列。它们采集口径统一、随访结构化、配着基因与量表,看起来「更像数据」。但它们的核心价值在标签与随访,不在无标注的影像数量,而且访问门槛通常是伦理审批加项目协议,周期以月计。

FOMO300K 与队列的关系是分工:队列回答「这批人后来怎么样了」,FOMO300K 回答「模型先看多少张脑影像才能形成通用表征」。一个常见的错误用法是把队列数据当成预训练语料的主要来源——体量不够,且重复使用会消耗本就有限的受试者,影响后续验证的独立性。

8.5 与中国研究者的关系

对国内团队而言,这份资源有一个实际优势:单仓库汇集、镜像可访问、格式统一,比逐个去 OpenNeuro 拉数据、逐个读各家目录约定省事得多。

劣势是体量大,全量下载对带宽与磁盘都是考验。实验里的常见做法是:预训练阶段只用按来源分层的子集,把全量留给最终一次长周期训练。

8.6 未来可能怎么走

§9 使用指引

9.1 三种角色的路径

同一份语料,三种人用起来的路径完全不同。把下面这张表当成入口,再按角色读对应段落。

方法研究者的核心是「复现基线再换变量」,应用团队的核心是「先试小样再上全量」,数据工程师的核心是「先建索引再决定下载范围」。三者的共同点是都不该一上来取全量。

角色 目标 最短路径 注意
方法研究者 验证新的自监督目标 取开放子集,抽一到两万扫描,与官方基线同配置对比 固定下游五任务,否则结果不可比
应用团队 拿到一个可微调的初始化 直接用官方发布的预训练权重,跳过预训练 权重许可同样是非商业
数据工程师 建内部索引与检索 只下元数据表与按来源采样的子集 表连接键要带来源前缀
学生 学 3D 自监督全流程 取一个小来源,走完解包到微调 先跑通再扩展,别一上来全量

方法研究者的路径。 你的核心诉求是「同样的语料、同样的下游、只换我的方法」。所以第一步不是下载全量,而是把官方基线复现到能跑通:用官方发布的编码器配置、官方声明的掩码比例与掩码单元、官方那五个下游任务,先拿到和论文对得上的数字,再换你的目标函数。

这一步常常要花掉比写方法本身更多的时间,但省不掉——没有基线,后面任何提升都无法归因。

第二步是控制语料变量:如果你怀疑多样性是收益来源,就把语料拆成「单一来源」与「全部来源」两组对照;如果你怀疑规模是收益来源,就固定来源、只改扫描数量。两个变量分开动,结论才站得住。

9.2 一条最短的可用流程

从零到能训练,最短路径是五步:鉴权、取小来源、建索引、抽一批体积、开始预训练。下面给出前两步可执行的最小版本;索引与预处理按 §5.4 走。

#-- 1. 鉴权并确认能读仓库
hf auth login --token "$HF_TOKEN"

#-- 2. 只取一个体量适中的来源做通链路
python - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download("FOMO-MRI/FOMO300K", repo_type="dataset",
                  local_dir="/data/fomo300k",
                  allow_patterns=["PT021_IXI/**"])
PY

#-- 3. 统计该来源的压缩包数,确认下载完整
find /data/fomo300k/PT021_IXI -name "ses-*.zip" | wc -l

9.3 引用方式

使用这份数据必须同时引用两件事:一是数据集论文,二是各来源数据集的原始文献。论文的 Usage Notes 明确列出必须引用的来源清单,包括多个具体机构库。只引数据集本身、不引来源,属于不符合使用条件。

Cerri S, Munk A, Llambias SN, et al. A large-scale heterogeneous 3D
magnetic resonance brain imaging dataset for self-supervised learning.
Scientific Data. 2026. doi:10.1038/s41597-026-07688-0

§10 AI 使用声明

项 说明
写作方式 由 AI 辅助起草,人工核对事实与结构
事实来源 数据卡与仓库文件树、Hugging Face 元数据接口、配套论文摘要与正文
数字核对 所有硬数字均在附录 A 标注来源与层级
未核实项 总集的会话数与受试者数;压缩包内部 NIfTI 的逐项命名
影像内容 未查看任何原始影像,所有影像层面的描述来自论文文字
修改建议 若发现数字与官方更新不一致,以官方仓库当前说明为准
免责 本页不构成法律意见,许可适用请咨询原始来源
更新日期 2026-10-26

常见误读(避坑清单)

说法 实际 证据
「这是一个标注数据集」 绝大多数扫描无标签,仅极少数来源带病灶标注 论文技术验证部分用少样本外部任务评估,说明自身不含标注
「下载下来就是 NIfTI 目录」 下载单元是会话级 zip,NIfTI 在包内 仓库文件清单中压缩包占绝大多数
「官方扫描总数就是文件数」 扫描数大于文件数,一个包内可有多张 仓库文件清单的文件总数与官方扫描数不相等
「四个变体可以合并训练」 互为子集,合并会重复计样本 FOMO260K 的仓库 README 明令禁止混用
「已经预处理好了」 只做方向与维度整理,无重采样与归一化 论文预处理一节仅列 RAS、4D 拆 3D、层数下限
「临床级影像很少」 临床级占比不低,层厚大于三毫米者众 论文用层厚作代理指标,报告中临床级占相当比例
「可以商用」 整体非商业许可 仓库许可证字段与论文 Usage Notes 均指向非商业
「包含功能像」 功能像、波谱、场图等被明确排除 论文方法一节列明排除项
「某个来源的目录数就是该来源的病例数」 目录是受试者单位,扫描单位更细 目录结构为来源/受试/会话/包
「论文里的 26 万张就是现在的规模」 论文写的是上一代,数据卡已改为三十万张级 数据卡 Updates 段写明 V1.1 变更与新的总数
「所有来源都可以无条件下载」 部分来源附数据使用协议,整体走门控流程 数据卡门控条款列出 OASIS、GSP、HCP 等协议
「作者只做了打包」 还做了方向统一、4D 拆分、扩散与灌注的通道取舍 论文预处理一节详述扩散与灌注处理规则

FAQ

Q1:FOMO300K 和 FOMO260K 到底该下哪个?
不需要签数据使用协议的场合,直接下 FOMO260K。它的预处理与总集完全相同,只是少了几个附 DUA 的来源,省去门控流程。只有在明确需要那部分来源时才走 FOMO300K。

Q2:为什么不直接提供解压后的 NIfTI 目录?
体量太大。按会话打包能把仓库文件数压到八万级,解包后是几十万个文件,浏览器的文件列表与大多数同步工具都撑不住。打包也方便按会话整体迁移。

Q3:压缩包内没有 JSON sidecar,采集参数去哪找?
在 mri_info.tsv 里。论文对此有明确说明:FOMO 系把采集与扫描仪元数据集中到一张表,而不是逐个扫描写 JSON。代价是解析单个文件时要先做表连接。

Q4:扩散影像为什么没有 bval 和 bvec?
因为它提供的是派生体积,不是原始扩散数据。b 值分组与是否用 trace ADC 都编码在文件名里,梯度表在预处理时已经被消费掉了。想还原完整扩散张量,得回原始来源。

Q5:可以直接喂给 nnU-Net 吗?
不能。nnU-Net 期望近似各向同性、已配准、强度归一化的输入,而这份数据的几何与强度都是原始的。要喂给它,必须先在前面加一层重采样与归一化。

Q6:预训练要多少算力?
论文的配置是八张 H100 跑四十四小时,全局批大小六十四,总步数十八万七千五百。个人显卡只能做子集实验,结论也未必能外推。

Q7:为什么同一个会话会有多个压缩包?
因为该会话采的序列多,单包体积超限。分包是仓储层面的处理,不是一个会话被切成了几次就诊。

Q8:扫描数和会话数为什么差那么多?
一个会话通常采多个序列,每个序列算一张扫描。纵向随访又会让同一受试者贡献多个会话。两重效应叠加,扫描数会明显多于会话数。

Q9:论文里的 26 万张和仓库现在的 30 万张,该信哪个?
两个都不是错的,但对应不同版本。论文写的是 FOMO260K 那一代,数据卡写的是 V1.1 之后的当前仓库。引用总量以数据卡为准,引用逐来源明细以论文为准,并注明版本。

Q10:这份数据的最大风险是什么?
两件事:一是许可,非商业限制在很多企业场景下是硬约束;二是重复,与同集合其他变体或与 OpenMind 叠加会造成样本重复计权。

Q11:可以只下一个序列吗?
可以,但要先建索引才知道哪个包里有哪个序列,因为压缩包按会话组织,不是按序列组织。只能整包下载后再筛。

Q12:它有官方训练测试划分吗?
没有。论文的划分是为它自己的技术验证服务的外部任务划分,不是数据集自带的。任何对比实验都得自己定义并公开划分。

Q16:门控申请会被拒吗?
按数据卡的说明,门控是自动批准的,提交姓名与邮箱并勾选同意即可。真正的限制不在门控环节,而在许可:非商业条款不会因为通过了门控就放宽。

术语表

术语 展开 含义
SSL Self-Supervised Learning 自监督学习,不需要人工标签、从数据自身构造监督信号
MAE Masked Autoencoder 掩码自编码器,遮住部分输入后让网络重建
AMAES Augmented MAE for 3D Segmentation 面向三维分割增强的掩码自编码器变体
BIDS Brain Imaging Data Structure 脑影像数据组织规范,规定了目录与命名
NIfTI Neuroimaging Informatics Technology Initiative 神经影像常用的体数据文件格式
DWI Diffusion-Weighted Imaging 扩散加权成像
ADC Apparent Diffusion Coefficient 表观扩散系数,由扩散信号推算
b 值 b-value 扩散加权强度参数
FLAIR Fluid-Attenuated Inversion Recovery 液体衰减反转恢复序列
MP2RAGE Magnetization-Prepared 2 RApid Gradient Echoes 一种高对比度的三维序列
ASL Arterial Spin Labeling 动脉自旋标记灌注成像
CBF Cerebral Blood Flow 脑血流量
SWI Susceptibility Weighted Imaging 磁敏感加权成像
GRE Gradient Echo 梯度回波
MRA Magnetic Resonance Angiography 磁共振血管成像
T1ce T1 contrast-enhanced T1 增强
各向异性 anisotropy 体素在三个方向上的边长不相等
颅骨剥离 skull stripping 去掉颅骨与头皮,只留脑组织
偏场 bias field 高场成像中平滑变化的强度不均
域 domain 采集条件构成的一组分布,如某中心某机型
少样本 few-shot 只用少量标注样本做微调
Dice Dice similarity coefficient 分割重叠度指标
留一域 leave-one-domain-out 用其余域训练、留出一个域测试的评估方式
DUA Data Use Agreement 数据使用协议,签署后方可使用
sidecar 伴随文件 BIDS 中与影像同名的 JSON 参数文件
门控 gated 仓库需登录并同意条款后才允许下载
派生体积 derived volume 由多方向原始采集合成后的单张 3D 影像,不是原始采集
无标注语料 unlabeled corpus 只提供影像、不提供任务标签的训练原料

附录 A:核心数字核对表

项 值 来源 来源层级
当前扫描总数 306,207 数据卡「Updates」段 官方页面
上一代扫描数 260,927 论文摘要 论文(摘要或正文)
上一代会话数 77,589 论文摘要 论文(摘要或正文)
上一代受试者数 55,378 论文摘要 论文(摘要或正文)
上一代来源数 910 论文摘要 论文(摘要或正文)
来源目录数 三十余个 仓库文件树 官方页面
OpenNeuro 目录下原始数据集 八百余个 仓库文件树 官方页面
元数据表 3 张根级 + 每来源各 3 张 仓库文件树 官方页面
存储格式 NIfTI 压缩,改良 BIDS 命名 论文数据记录一节 论文摘要
下载单元 会话级 zip 仓库文件树 官方页面
整体许可 CC BY-NC-SA 4.0,各子集保留原许可 数据卡门控条款 官方页面
门控字段 同意条款、姓名、邮箱 数据卡门控字段 官方页面
临床级判定阈值 层厚大于 3 毫米 论文表 1 注释 论文摘要
排除项 离体、功能像、场图、SWI 相位、PET、CT 论文方法一节 论文摘要
预训练掩码比例 六成 论文技术验证 论文摘要
掩码单元尺寸 8×8×8 体素 论文技术验证 论文摘要
预训练输入块尺寸 160 立方体素 论文技术验证 论文摘要
预训练步数 187,500 论文技术验证 论文摘要
预训练硬件与时长 八张 H100,四十四小时 论文技术验证 论文摘要
微调每任务标注样本 二十例 论文技术验证 论文摘要
最大 Dice 提升 约 1.45 论文技术验证 论文摘要
下游任务数 五个 论文技术验证 论文摘要
模型参数量 约一亿 论文技术验证 论文摘要
压缩包内文件命名 按改良 BIDS,序列名在文件末尾 论文数据记录一节 论文摘要
总集会话数与受试者数 未核实 数据卡未公布 未核实

附录 B:数字的来源分层

本篇用到的数字只有两级来源,第三级是明确标出的空白。三级混在一起写,就会把「官方说」写成「我算出来」。

层级 内容 典型数字 引用时的写法
官方页面 数据卡原文、仓库文件树、门控条款、许可文件 扫描总数、来源目录数、门控字段、整体许可 「数据卡称」「仓库页面显示」
论文摘要 配套论文的摘要、方法与结果段 会话数、受试者数、来源数、预训练超参、Dice 结果 「论文报告」「按论文口径」
未核实 官方两处都没说,或需要逐包打开才能得到 总集的会话数与受试者数、压缩包内 NIfTI 的逐项命名 「未核实」「以实际表头为准」

第一层是官方页面。数据卡的 Updates 段给出当前扫描总数,门控条款给出许可结构与申请字段,仓库文件树给出来源目录、根级表的数量与下载单元。这一层的特征是:谁去看都一样,不依赖任何个人操作。

三层的使用原则只有一条:宁可写「未核实」,也不要把两代数字拼成一个看起来完整的句子。规模类表述统一用「三十万张扫描级」这类概数,精确整数只出现在速览表与核对表里,并各自注明出处。

附录 C:完整参考文献

  1. Cerri S, Munk A, Llambias SN, Ambsdorf J, Machnio J, Nersesjan V, Krag CH, Liu P, García PR, Mehdipour Ghazi M, Boesen M, Benros ME, Iglesias JE, Nielsen M. A large-scale heterogeneous 3D magnetic resonance brain imaging dataset for self-supervised learning. Scientific Data. 2026. doi:10.1038/s41597-026-07688-0
  2. 同文预印本:arXiv:2506.14432
  3. FOMO-MRI. FOMO300K. Hugging Face. https://huggingface.co/datasets/FOMO-MRI/FOMO300K
  4. FOMO-MRI. FOMO260K. Hugging Face. https://doi.org/10.57967/hf/8670
  5. FOMO-MRI. FOMO45K. Hugging Face. https://doi.org/10.57967/hf/8669
  6. FOMO-MRI. AMAES_resenc_b_fomo260k 预训练权重. Hugging Face Models.
  7. Llambias SN 等. Asparagus:三维医学影像自监督训练框架. https://github.com/Sllambias/asparagus
  8. Llambias SN 等. Asparagus Preprocessing:数据格式化与预处理. https://github.com/Sllambias/asparagus_preprocessing
  9. FGA-DIKU. fomo_mri_datasets:分析与图表复现代码. https://github.com/FGA-DIKU/fomo_mri_datasets
  10. 本数据集内部包含的三十余个来源数据集,各自的原始文献见论文的源清单与 Usage Notes 中的强制引用列表。
  11. Munk A, Cerri S, Nersesjan V, 等. Towards Brain MRI Foundation Models for the Clinic: Findings from the FOMO25 Challenge. arXiv:2604.11679

附录 D:任务代码

以下三段代码假设已经把至少一个来源下载到本地,用于建立最小可用的数据视图。

#-- 统计本地某个来源的会话数与压缩包数,用于校验下载完整性
from pathlib import Path

root = Path("/data/fomo300k")
for src in sorted(root.glob("PT*")):
    zips = list(src.glob("**/ses-*.zip"))
    sessions = {z.parent for z in zips}
    print(f"{src.name:38s} zips={len(zips):6d} sessions={len(sessions):6d}")
#-- 从压缩包读一张体积并打印几何信息,判断是否需要重采样
import io
import zipfile
import nibabel as nib

def describe(zpath, member):
    with zipfile.ZipFile(zpath) as zf, zf.open(member) as fh:
        img = nib.load(io.BytesIO(fh.read()))
    zooms = img.header.get_zooms()[:3]
    ratio = max(zooms) / min(zooms)
    return {"shape": img.shape, "zooms": zooms, "anisotropy": round(ratio, 2),
            "axcodes": nib.aff2axcodes(img.affine)}
#-- 按来源分层抽样,避免大来源吞掉多样性
import random
from collections import defaultdict

def stratified_sources(index_df, per_source=500, seed=0):
    random.seed(seed)
    buckets = defaultdict(list)
    for src, grp in index_df.groupby("source"):
        rows = grp.index.tolist()
        random.shuffle(rows)
        buckets[src] = rows[:per_source]
    return buckets

以下两段用于把已经建好的索引变成训练可用的样本清单,补上前文示例没有覆盖的两个环节:按受试者划分,以及按来源配额采样。

#-- 按受试者划分训练与验证,避免同一受试者跨两侧造成泄漏
import pandas as pd
from sklearn.model_selection import GroupShuffleSplit

index = pd.read_parquet("/data/fomo300k/index.parquet")
#-- subject 由会话目录名反推,来源内唯一,需带上来源前缀
splitter = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=0)
groups = index["source"] + "/" + index["subject"]
train_idx, val_idx = next(splitter.split(index, groups=groups))
train_df = index.iloc[train_idx]
val_df = index.iloc[val_idx]
#-- 划分后必须复核两侧的受试者交集为空
assert set(groups.iloc[train_idx]).isdisjoint(set(groups.iloc[val_idx]))
print(len(train_df), len(val_df))
#-- 按来源设置上限,防止少数大来源吞掉采样多样性
import pandas as pd

def cap_per_source(frame, cap=3000, floor=200, seed=0):
    picked = []
    for src, grp in frame.groupby("source"):
        n = min(len(grp), max(cap, floor))
        picked.append(grp.sample(n=n, random_state=seed))
    return pd.concat(picked, ignore_index=True)

capped = cap_per_source(train_df)
print(capped["source"].value_counts().describe())

附录 E:如果只记五件事

  1. 它是预训练语料,不是任务标注集;价值在量与杂,不在标注与统一。
  2. 下载单元是会话级 zip,压缩包内才是 NIfTI;数文件不等于数扫描。
  3. 只做了方向、维度与层数三项整理,重采样、剥离、归一化都要自己做。
  4. 同集合四个变体互为子集,不能合并,否则重复计样本。
  5. 许可是非商业,门控申请只是合规流程,不等于授权商用。
  6. 论文里的 26 万张是上一代口径,当前总量以数据卡为准。

编辑说明

本篇的资料窗口截止到 2026 年 10 月。数据侧的事实来自三处:Hugging Face 上该数据集的数据卡与仓库文件树、数据卡门控条款里的许可说明、以及配套论文的摘要与正文。凡是数据卡与论文口径不一致的地方(扫描总数、版本演进),正文一律并列写出并标注各自出处,没有替官方做归一。

有意没有写的内容:字段空值率、年龄与层厚的分布细节、标签频次排序。

这些数字要拿到具体包才能得到,对「该不该选它」这个判断也没有增量,属于使用者拿到数据后自己做的一步。凡涉及影像内容层面的描述,均转述论文文字;本篇没有打开任何一张原始影像,也没有对压缩包内部结构做过逐包核对。

发现数字与官方最新说明不一致时,以数据卡当前版本为准;引用逐来源明细时,请注明所依据的论文版本。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • aims-tbi — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • mr-art — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • ixi-brain — 共享标签:医学影像 / MRI / 脑影像
  • topbrain2026 — 共享标签:医学影像 / 脑影像 / 医学图像分割
  • atlas-v2 — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • bonbid-hie — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • intra — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • brisc — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • brain-slab-seg-3d — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割
  • brainweb — 共享标签:医学影像 / MRI / 脑影像 / 医学图像分割

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集