信息速览
三个数据集在 Kaggle 上被下载数十万次,论文引用更多。它们常被放在同一段话里介绍:脑部 MRI、肿瘤、深度学习、高准确率。但它们其实回答三个不同的问题——有没有肿瘤、肿瘤在哪、边界画到哪里。
把三者合在一篇,是因为它们共享同一个缺陷,而这个缺陷比数据本身更值得记录:没有患者标识,因此没有患者级切分,因此没有可信的测试成绩。同一患者的相邻层面被分到两侧,模型学到的是颅骨形状与扫描参数,而不是肿瘤的影像学特征。
这不是作者粗心,而是公开数据缺少患者主键时的结构性后果。本篇把它拆开来讲,并说明为什么在 Kaggle 上拿到 99% 的脑肿瘤分类准确率本身就是警报信号,而不是成绩单。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 中文名 | Kaggle 脑肿瘤 MRI 数据集家族(分类 / 检测 / 分割) |
| 英文名 | Brain Tumor MRI Dataset; Br35H Brain Tumor Detection 2020; LGG MRI Segmentation |
| 发布平台 | Kaggle(三个独立页面,无统一组织账号) |
| 发布者 | Masoud Nickparvar;Ahmed Hamada;Mateusz Buda 等 |
| 首个版本时间 | 2020 年(Br35H 2020;四分类集同期) |
| 四分类集规模 | 7200 张 JPEG,训练 5600、测试 1600,类内均衡 |
| 检测集规模 | 3060 张,yes 1500、no 1500,另有 pred 目录与画框版 |
| 分割集规模 | 110 名患者,数千张切片配对掩膜 + data.csv |
| 类别体系 | 四档(glioma/meningioma/pituitary/notumor);两档(yes/no);二值掩膜 |
| 图像格式 | 四分类与检测为 JPEG/PNG;分割集为 TIF,三通道拼接 |
| 患者标识 | 仅分割集有(文件夹名即患者号) |
| 官方划分 | 仅四分类集有训练/测试目录 |
| 许可 | CC BY 4.0;Kaggle 页面未标许可;CC BY-NC-SA 4.0 |
| 核心风险 | 患者级泄漏;源域混杂;无外部验证集 |
| 推荐用途 | 教学演示、流水线验证 |
| 不推荐用途 | 临床性能声明、跨中心泛化论证、监管申报证据 |
| 库内对照 | BraTS 2026 / BraTS-MEN / TCGA |
§1 它要解决的具体麻烦
1.1 这是一个被反复复用的教学样本,不是被认真维护的临床数据
这三个集诞生于个人或小团队的整理:被课程与教程反复引用,下载量不断累积,却少有人回头修它的方法学缺陷。四分类集第二版做了去重与均衡,页面写明「消除了训练与测试之间的重叠」——范围只是图像层面,不是患者层面:近似副本不再重复,同一患者的第 12 层与第 13 层仍是两张不同的图。
它们解决的不是「怎么诊断脑肿瘤」,而是「怎么用一个小巧、下载快、一眼能跑出高分的集合演示深度学习流水线」。课程需要能在笔记本上 20 分钟训完的数据集,它们恰好合格;问题出在有人把演示结果当成研究成果。
它们是好教具,不是好证据。
| 它像什么 | 真实定位 | 用对的场景 | 用错的后果 |
|---|---|---|---|
| 教学样本 | 流水线演示集 | 课程、作业顺 | 无 |
| 研究基准 | 不是基准 | 论文正文数字 | 不可复核 |
| 临床数据 | 远不是临床数据 | 无 | 风险外推 |
1.2 三条常见的错误期待
第一条是「准确率高说明模型学到了肿瘤」。这三个集上的高准确率,首先说明模型找到了区分训练集与测试集的捷径:相邻层面高度相似,颅骨轮廓、头皮厚度、偏置场、边距裁切方式都带患者指纹。记住这些就能远超人类放射科医生,而对新患者的泛化可能接近随机。这在医学影像机器学习里已被反复复现。
第二条是「官方给了训练/测试目录,切分就可信」。四分类集的目录切分是文件级的,页面从未说明按患者分组;没有患者标识,它不可能按患者分组——无从知道哪两张图属于同一人。目录越是规整,越容易让人放下戒心。
第三条是「三个集拼起来用,样本越多越好」。三者的标签体系、许可与来源全不同,拼合会污染类别定义,更严格的非商业条款还会传染到整个衍生模型。数据量变大不等于信息量变大,尤其当新增部分的分布与原有部分系统性不同时。
| 错误期待 | 背后的错误假设 | 实际情况 | 后果 |
|---|---|---|---|
| 高分说明学到了肿瘤 | 高分必然来自病理特征 | 高分可能来自患者指纹 | 泛化被高估 |
| 有测试目录就可以放心 | 目录划分等于患者划分 | 目录是文件级划分 | 泄漏未被察觉 |
| 拼起来样本更多更好 | 数据量等于信息量 | 三源分布与许可均冲突 | 类别被污染 |
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 一批真实的脑部 MRI 图像 | 7200 张 / 3060 张 / 数千张切片 | 够,且下载快 |
| 带四类标签的分类任务 | 四分类集,每类训练 1400 张 | 够,标签基本干净 |
| 带边界框的检测任务 | 检测集部分画框 | 勉强,框粗且仅两档 |
| 带像素级掩膜的分割任务 | 分割集,人工 FLAIR 掩膜 | 够,但只有一类 |
| 按患者切分的训练/测试 | 仅分割集能做到 | 另两个不够 |
| 外部验证集 | 三个集都没有 | 不够,需自备 |
| 明确的许可条款 | 两个有,一个未标 | 部分不够 |
| 采集参数与扫描仪信息 | 几乎全无 | 不够 |
| 与 BraTS 对标的性能 | 无官方基准 | 不够 |
| 课程演示与教学复现 | 三个都合适 | 够,也是最好的用途 |
| 发表临床性能声明 | 高分数不可归因 | 远不够 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 要在两小时内给学生演示 CNN 分类全流程 | 下载快、体量小、类别均衡,一次训练可见收敛 | 同步展示按患者切分前后的分数落差,把泄漏讲成课程内容 |
| 论文初稿用了四分类集,审稿人问数据泄漏 | 可重跑泄漏检测:去重、聚类、分组重切 | 补做感知哈希去重与分组交叉验证,报两套数字 |
| 要做脑肿瘤分割的原型 | 分割集提供配对掩膜,可直接算 Dice | 按患者切分,并明确只适用于低级别胶质瘤 |
| 要训练一个能上临床的模型 | 三者都撑不起临床声明 | 转向 BraTS 系列或自建带患者 ID 的多中心数据 |
| 要做商业产品,需要可商用数据 | 仅四分类集的 CC BY 4.0 宽松 | 剔除分割集,逐图核对来源,评估源域混杂 |
| 要评测一个跨中心泛化能力 | 三者均无中心标识 | 至少留一个独立来源做外部验证,或改用有站点标注的集合 |
| 要复现某篇 99% 的论文 | 多半就是那篇用的数据 | 先查它的划分方式:复现不了通常因为划分不同 |
1.5 一句话判断
这三个集是「数据泄漏」这门课最好的教材,也是最差的成绩单;把它们当教具用,你会得到一整套可复现的实验课,把它们当证据用,你会得到一个无法归因的高分。
1.6 不适合谁:四条边界
不适合要用它声明临床性能的人。 没有患者级切分,就没有可信的泛化估计。在这里报出的准确率、敏感度、特异度都不能外推到门诊。审稿人只要问一句「测试集里有没有训练患者的其他层面」,多数论文答不上来。
不适合需要多类肿瘤分型的临床任务。 四分类集只覆盖胶质瘤、脑膜瘤、垂体瘤与无肿瘤,转移瘤、淋巴瘤、儿童胚胎性肿瘤一概不在其中。门诊里常见的「这是哪种肿瘤」远比四选一复杂,四档之外的病例会被强行塞进最近的类。
不适合需要精确边界的放疗或手术规划。 检测集的框位置粗糙,只能回答「大概在哪」;分割集的像素掩膜只针对 FLAIR 上的低级别胶质瘤异常区,无坏死核、增强区、水肿区的亚区分层。靶区勾画需要多序列、多亚区、专家终审的标注,三者都不满足。
不适合要求清晰商用授权的团队。 分割集是 CC BY-NC-SA 4.0,非商业且要求相同方式共享;检测集没有明确许可声明;只有四分类集是干净的 CC BY 4.0。用错一个集,整条产品线的数据合规都要重做。
| 边界 | 被卡住的能力 | 典型失败场景 | 替代方向 |
|---|---|---|---|
| 无患者级切分 | 泛化估计 | 新患者掉点 | 自建带 ID 数据 |
| 类别只有四档 | 分型覆盖 | 转移瘤被错分 | 更全的肿瘤分型集 |
| 无亚区标注 | 靶区勾画 | 放疗计划无法生成 | BraTS 系列 |
| 许可不清或非商业 | 商用合规 | 产品上线被叫停 | 仅用 CC BY 部分 |
1.7 先分清你要的是哪一层
拿到这三个名字,第一件事不是下载,而是判断你要哪一层能力。三者对应判类别、定位置、画边界三层,能力要求、评估指标与标注依赖完全不同,混在一起讨论正是多数误用的起点。
| 层次 | 要回答的问题 | 对应数据集 | 关键指标 | 标注成本 |
|---|---|---|---|---|
| 判类别 | 这是什么肿瘤 | 四分类集 | 准确率、宏 F1 | 每图一个类名 |
| 定位置 | 肿瘤大概在哪 | Br35H | 敏感度、框 IoU | 每图一个框 |
| 画边界 | 边界到哪里 | LGG 分割集 | 每患者 Dice | 每层一个掩膜 |
层次越高,对标注质量与患者级切分的要求越严。分割任务中相邻层几乎一模一样,分到两侧会让 Dice 逼近 1,这种高分毫无意义——所以分割对患者级切分比分类更刚性。
| 层次 | 患者泄漏的伤害 | 源域泄漏的伤害 | 主要防范手段 |
|---|---|---|---|
| 判类别 | 极大 | 大 | 去重加分组 |
| 定位置 | 大 | 中 | 确认框来源 |
| 画边界 | 极大 | 小 | 按患者切分 |
反过来,分类任务标注成本低,更容易被复制与误用。这三个集的误用集中在分类集,正因为它最便宜,也最容易被当成标准答案。
1.8 一次误用是怎样发生的
误用路径几乎总是同一条:找到四分类集,写一个 ResNet 迁移学习脚本,跑出 98% 测试准确率,觉得可以用,再把结果写进作业、周报与论文初稿。全程没有一步是错的——数据公开、代码标准、指标计算正确。
错的是那个没被问出口的问题:测试集里的图像,有没有来自训练集里的同一名患者。页面上找不到答案,数据里也没有字段可查,于是它就没有被问。
打破这条路径不需要推翻任何一步,只需加一个动作:报分之前先做一次近重复检测与一次推断分组。两步不到一小时,却能改变整篇结论的措辞;最小实现见 §4.5 与 §9.2。
§2 数据构成与规格
2.1 三个集的三套目录逻辑
四分类集是教科书式结构:Training 与 Testing 各含四个以类别命名的子目录,装着平铺的 JPEG。类别即目录名,用 ImageFolder 一行就能加载,设计目标是「零配置可跑」。
Br35H 检测集分 yes、no、pred 三个目录:前两者是两档标签,pred 是演示预测结果的目录,不算标注数据;另有 Br35H-Mask-RCNN 子集,是作者用 Mask R-CNN 跑出的结果示意。画框并非 YOLO txt,而是嵌在部分图像或结果目录里,与「YOLO 格式」的说法有出入——页面没有提供标准 YOLO 标注目录。
LGG 分割集按患者编号组织:每人一个文件夹,内含切片与同名掩膜,掩膜以 _mask 结尾。这是它最大的优点——患者标识保留在路径里,无需额外元数据即可按患者切分。
| 数据集 | 顶层结构 | 标签载体 | 患者标识位置 | 加载难度 |
|---|---|---|---|---|
| 四分类集 | Training / Testing → 4 类目录 | 目录名 | 无 | 极低 |
| Br35H 检测集 | yes / no / pred / Mask-RCNN | 目录名 + 部分框 | 无 | 低 |
| LGG 分割集 | 患者号目录 → 切片 + 掩膜 | 掩膜文件名后缀 | 目录名 | 中 |
目录逻辑决定了能写什么代码:分类集可套用任意分类模板,几乎不改加载部分;检测集要先梳理目录,分清哪些是标签、哪些是展示;分割集要写配对逻辑,并处理个别患者缺掩膜。
| 结构特征 | 四分类集 | Br35H | LGG 分割集 |
|---|---|---|---|
| 层级深度 | 两层 | 一层 | 两层 |
| 类别即目录名 | 是 | 是 | 否 |
| 目录名可作主键 | 否 | 否 | 是 |
| 文件名有语义 | 部分有 | 无 | 有(_mask) |
| 场景 | 分类集改动量 | 检测集改动量 | 分割集改动量 |
|---|---|---|---|
| 套用分类模板 | 无 | 需先降级为二分类 | 不适用 |
| 套用检测模板 | 不适用 | 需确认标注格式 | 不适用 |
| 套用分割模板 | 不适用 | 不适用 | 需写配对与按患者切分 |
2.2 字段与记录的完整字典
分类集与检测集几乎没有字段——纯图像目录,无 CSV 清单、无采集参数、无年龄性别。唯一的表格性文件是分割集的 data.csv。下表统一列出元信息及其有无。
| 字段 | 四分类集 | Br35H 检测集 | LGG 分割集 | 说明 |
|---|---|---|---|---|
| 文件路径 | 有 | 有 | 有 | 路径即标签 |
| 类别标签 | 有(4 类) | 有(2 类) | 隐式(全为肿瘤) | 分割集只有正样本 |
| 患者标识 | 无 | 无 | 有(目录名) | 关键差异 |
| 切片序号 | 无 | 无 | 间接(文件序) | 排序≠解剖顺序 |
| 模态序列 | 无 | 无 | 有(FLAIR) | 分类集为混合序列 |
| 图像尺寸 | 有 | 有 | 有(256×256) | 分类集尺寸不一 |
| 色彩通道 | 3 通道 | 3 通道 | 3 通道(拼 RGB) | 分割集非真彩 |
| 分割掩膜 | 无 | 无 | 有 | 二值 |
| 边界框 | 无 | 部分 | 无 | 检测集框粗 |
| 基因组簇 | 无 | 无 | 有(data.csv) | 来自 TCGA |
| 扫描仪信息 | 无 | 无 | 无 | 三个集都缺 |
| 采集年份 | 无 | 无 | 间接 | TCGA 入组年 |
| 专业标注者 | 无 | 无 | 有 | 人工勾画 |
| 许可声明 | 有 | 无 | 有 | 见 §3 |
| 官方划分 | 有 | 无 | 无 | 仅分类集有 |
| 数据体量 | 168 MB | 92 MB | 1.06 GB | 页面显示值 |
| 更新频率 | 不再更新 | 版本 12 | 不再更新 | 均无维护 |
2.3 一条记录的完整解剖
四分类集的一条记录就是一张 JPEG 加一个目录名:只有像素和四个类名之一,没有患者、设备或层号信息。
#-- 一条四分类集记录的完整内容
from pathlib import Path
p = Path("brain_tumor_mri/Training/glioma/Tr-gl_0001.jpg")
print(p.parent.name) #-- 唯一的标签来源:glioma
print(p.suffix) #-- .jpg
print(p.stat().st_size) #-- 字节数,与解剖信息无关
#-- 除此之外:没有患者号、没有层面号、没有序列、没有扫描仪
分割集的一条记录是「切片 + 掩膜」配对,由文件名保证。掩膜二值:白色为 FLAIR 高信号异常区,黑色为背景与正常组织。
#-- 一条分割集记录的配对关系
from pathlib import Path
patient_dir = Path("kaggle_3m/TCGA_CS_4941_19960909")
slices = sorted(p for p in patient_dir.glob("*.tif") if "_mask" not in p.name)
print(len(slices)) #-- 该患者切片数
img = slices[0]
mask = patient_dir / f"{img.stem}_mask{img.suffix}" #-- 配对规则
print(img.name, mask.exists())
| 记录层次 | 四分类集 | Br35H | LGG 分割集 |
|---|---|---|---|
| 最小单位 | 一张切片 | 一张切片 | 切片 + 掩膜 |
| 标签所在 | 目录名 | 目录名 | 掩膜像素 |
| 可否回溯患者 | 否 | 否 | 是 |
| 可否算体数据 | 否 | 否 | 可按目录重组 |
| 可否做 3D 模型 | 需自建体数据 | 否 | 可以,但层间距未给出 |
配对规则有两个坑:一是扩展名大小写,部分镜像改成小写,而代码写死大写,配对即失败;二是掩膜文件被当成切片参与枚举,不过滤会让切片数翻倍。
| 配对环节 | 常见错误 | 后果 | 检查方式 |
|---|---|---|---|
| 扩展名大小写 | 写死扩展名 | 配对全失败 | 打印实际后缀 |
| 掩膜混入枚举 | 未过滤 mask | 切片数翻倍 | 比较枚举数与期望 |
| 患者目录遍历 | 只取一层 | 漏患者 | 打印目录树 |
最容易被忽略的是末行:切片间距未给出,而 3D 卷积对层间距极敏感。按固定间距重组,体数据的物理尺度就是错的,体积、表面积等形态学指标随之不可信——所以很多 3D 工作只报相对指标。
| 下游任务 | 分类集 | 检测集 | 分割集 |
|---|---|---|---|
| 图像分类 | 直接可做 | 需改造 | 不适用 |
| 目标检测 | 不适用 | 勉强可做 | 不适用 |
| 2D 分割 | 不适用 | 不适用 | 直接可做 |
| 3D 分割 | 不适用 | 不适用 | 先确认层间距 |
| 形态学测量 | 不可行 | 不可行 | 受层间距限制 |
2.4 类别与来源的分布
四分类集训练每类 1400 张、测试每类 400 张,彻底均衡。这是人为重抽样,不是自然患病率:真实门诊里胶质瘤与脑膜瘤的比例、转移瘤的存在、「无肿瘤」的巨大基数都与等量四类相去甚远。均衡让训练稳定、指标直观,却让真实人群上的指标严重偏离。
Br35H 的 3060 张里 yes 与 no 各 1500 张,其余为 pred 目录;这个「一对一」同样是整理者的选择。
LGG 分割集是单类的,不存在均衡问题:全部为低级别胶质瘤患者的 FLAIR 序列,所谓「分布」指每人的切片数,从几张到几十张不等。
| 维度 | 四分类集 | Br35H | LGG 分割集 |
|---|---|---|---|
| 类别数 | 4 | 2 | 1(全部有肿瘤) |
| 类别比例 | 每类等量 | 一比一 | 不适用 |
| 比例来源 | 人为重抽样 | 人为整理 | 自然 |
| 是否反映真实患病率 | 否 | 否 | 不适用 |
| 负样本来源 | Br35H 的 no 类 | 自身 no 目录 | 无 |
| 肿瘤类型覆盖 | 3 类 | 不区分 | 仅 LGG |
| 年龄覆盖 | 未知 | 未知 | 成人为主 |
四类等量便于训练,却会误导解释。若部署到真实门诊——「无肿瘤」占七成以上,肿瘤中又以转移瘤居多——均衡数据学到的决策边界会严重偏向阳性。这不是模型能力问题,而是训练分布与部署分布不一致的必然结果。
| 类别 | 训练数量 | 测试数量 | 真实占比是否可比 | 备注 |
|---|---|---|---|---|
| glioma | 1400 | 400 | 否 | 部分由图源替换 |
| meningioma | 1400 | 400 | 否 | 来源未逐类说明 |
| pituitary | 1400 | 400 | 否 | 来源未逐类说明 |
| notumor | 1400 | 400 | 否 | 全部来自 Br35H |
2.5 三个集的字段与同类资源差异
与 BraTS 相比差距是结构性的:BraTS 有多序列(T1、T1c、T2、FLAIR)、多亚区标注、患者级划分与固定评测协议;这三个集只有图像加粗标签。
| 字段/能力 | 四分类集 | Br35H | LGG 分割集 | BraTS 2026 |
|---|---|---|---|---|
| 多序列 | 无 | 无 | 单序列 FLAIR | 四序列 |
| 亚区标注 | 无 | 无 | 单区 | 三亚区 |
| 患者标识 | 无 | 无 | 有 | 有 |
| 官方划分 | 文件级 | 无 | 无 | 患者级且保密 |
| 评测协议 | 无 | 无 | 无 | 容器盲评 |
| 中心标识 | 无 | 无 | 间接 | 有 |
| 体数据 | 无 | 无 | 可重组 | 原生 |
| 外部验证集 | 无 | 无 | 无 | 有 |
最值得看的是「官方划分」一行:BraTS 按患者划分且测试标签保密;三个集里只有四分类集给了划分,且是文件级的。在最容易被比较的这一项上,两者处于两个方法学层级。
| 能力项 | 三个集的最好水平 | BraTS 水平 | 差距性质 |
|---|---|---|---|
| 序列数量 | 一 | 四 | 结构性 |
| 标注粒度 | 类名或单区 | 三亚区 | 结构性 |
| 划分正确性 | 仅分割集 | 官方患者级 | 结构性 |
| 评测可复现性 | 靠作者自觉 | 容器盲评 | 结构性 |
2.6 图像本身的技术参数
三个集在图像参数上的共同点是「缺」。四分类集页面明说「图像尺寸不统一」,建议使用者自行缩放、归一化与去边距——工程语言就是:官方没做任何预处理。
LGG 分割集为固定方形、三通道;三通道不是 RGB 真彩,而是三种模态各占一通道拼成的伪彩图。直接用 RGB 预训练权重加载,通道语义是错的,需自行转换。
| 参数 | 四分类集 | Br35H | LGG 分割集 |
|---|---|---|---|
| 尺寸 | 不统一 | 不统一 | 固定方形 |
| 通道 | 三通道 | 三通道 | 三通道(模态拼接) |
| 位深 | 8 位 | 8 位 | 8 位 |
| 压缩 | JPEG 有损 | JPEG/PNG 混合 | TIF 无损 |
| 是否已去边 | 部分已裁 | 部分已裁 | 已裁 |
| 是否有标注叠加 | 无 | 部分图有框 | 无 |
| 空间方向信息 | 无 | 无 | 无 |
「标注叠加」一行值得单说:有的整理者把框烧进像素,这类图混进分类集,框本身就是标签泄漏。Br35H 部分图像带框,用前须确认框在像素上还是独立文件里。
| 预处理动作 | 官方是否做过 | 建议做法 | 不做会怎样 |
|---|---|---|---|
| 尺寸统一 | 否 | 缩放到固定边长 | 批内无法堆叠 |
| 去边距 | 否 | 按前景包围盒裁切 | 边距成为类别线索 |
| 强度归一化 | 否 | 按分位数拉伸 | 源间对比度差异成了信号 |
| 通道重排 | 否 | 伪彩转单通道或按需 | 预训练权重语义错位 |
| 方向校正 | 否 | 保持一致即可 | 部分图翻转会引入噪声 |
2.7 三个集的数据字典缺失项
一份数据字典至少要回答:一行是什么、关键字段、缺失值表示、值域。三个集四项都有缺口,逐项列于下表,写数据卡时可直接引用。
| 字典项 | 四分类集 | Br35H | LGG 分割集 |
|---|---|---|---|
| 一行是什么 | 未说明 | 未说明 | 未说明(可推断) |
| 主键 | 无 | 无 | 患者号加文件名 |
| 缺失值约定 | 不适用 | 不适用 | 不适用 |
| 值域说明 | 仅四个类名 | 仅两个类名 | 0 与 255 |
| 单位 | 像素 | 像素 | 像素 |
| 版本变更记录 | 有(版本 2) | 有 | 无 |
| 采样方法说明 | 无 | 无 | 论文中有 |
「一行是什么」看似多余,其实最关键。分类集一行是切片,不是患者也不是扫描;误以为一行一人,就会把七千张当成七千名患者,样本量误差是数量级的。
| 常见误读的「样本量」 | 实际含义 | 放大倍数 | 影响 |
|---|---|---|---|
| 7200 个样本 | 7200 张切片 | 取决于每人层数 | 置信区间被低估 |
| 110 个样本 | 110 名患者 | 一对一 | 分割集无需换算 |
| 3060 个样本 | 3060 张切片 | 未知 | 同样被低估 |
§3 三份数据三种出身:来源链与许可
3.1 四分类集是三个源的拼合物
四分类集由 figshare、SARTAJ、Br35H 三源拼合,no tumor 类全部来自 Br35H。准备时发现 SARTAJ 的 glioma 类标注不一致,那部分图被移除,改用 figshare 确认过的 glioma 补齐。
于是四类各自来自不同源:glioma 偏向 figshare,notumor 全部来自 Br35H,meningioma 与 pituitary 未逐类说明。类与源高度耦合,这比图像重复更隐蔽:模型不必学肿瘤形态,只要认得「figshare 的边框与对比度」和「Br35H 的另一种」,四分类就能做得很好。
这正解释了该集上 Grad-CAM 为何常把注意力放在颅骨边缘与图像边距:那里是源域指纹所在。
| 类别 | 主要来源 | 页面是否明说 | 源域指纹风险 |
|---|---|---|---|
| glioma | figshare(替代 SARTAJ) | 是 | 中高 |
| meningioma | 未逐类说明 | 否 | 中 |
| pituitary | 未逐类说明 | 否 | 中 |
| notumor | Br35H | 是 | 高 |
3.2 Br35H 是检测集的源头,也是四分类集的负样本库
Br35H 出自 Brain Tumor Detection 2020,作者 Ahmed Hamada。页面大段讲流行病学与深度学习动机,对数据本身只说一句:3060 张,yes 与 no 各 1500 张。
它定位为「检测」:先判断有没有,再定位。Br35H-Mask-RCNN 子集是作者用 Mask R-CNN 跑出的结果,不是人工标注——严格说人工标注只有「有/无」两档,定位信息是模型输出的副产物。当带框检测数据用之前,须确认框的来源,页面并未直接回答。
| 目录 | 内容 | 标注类型 | 能否当训练标签 |
|---|---|---|---|
| yes | 有肿瘤图像 | 人工两档 | 可以 |
| no | 无肿瘤图像 | 人工两档 | 可以 |
| pred | 预测结果展示 | 无 | 不可以 |
| Br35H-Mask-RCNN | 模型分割结果 | 模型生成 | 不可以 |
3.3 LGG 分割集是三份数据里唯一有出身证明的
LGG 分割集由 Buda、Saha、Mazurowski 整理,配套两篇论文:2019 年 Computers in Biology and Medicine 的基因亚型与形状研究,2017 年 Journal of Neuro-Oncology 的放射基因组学研究。数据取自 TCIA 中 TCGA 低级别胶质瘤集合里至少具备 FLAIR 与基因组簇的 110 名患者。
每个限定词都有分量:「TCIA」意味着有标准的提交与去标识流程;「至少具备 FLAIR」意味着序列选择有明确规则;「基因组簇」意味着可做影像基因组学关联而非只练分割。掩膜是人工在 FLAIR 上勾画的异常区,覆盖全部高信号范围,不分亚区。
它的许可也是三者中最严格的:CC BY-NC-SA 4.0。非商业、署名、相同方式共享三条同时生效。
| 来源环节 | 提供方 | 可追溯性 | 对本篇的意义 |
|---|---|---|---|
| 原始影像 | TCGA / TCIA | 有病例号 | 可写「基于 TCGA 队列」 |
| 序列筛选 | 按 FLAIR 规则 | 有论文 | 选择可复核 |
| 掩膜勾画 | 整理者 / 放射科 | 论文有说明 | 可写人工掩膜 |
| 基因组簇 | TCGA 配套 | data.csv | 可做关联分析 |
| 发布 | Kaggle 镜像 | 页面 | 只是分发渠道 |
3.4 三份许可并排看
| 数据集 | 页面许可 | 版本 | 商用 | 再分发 | 衍生作品 |
|---|---|---|---|---|---|
| 四分类集 | CC BY 4.0 | 4.0 | 允许 | 允许,需署名 | 允许 |
| Br35H | 页面未列出许可字段 | 未知 | 不确定 | 不确定 | 不确定 |
| LGG 分割集 | CC BY-NC-SA 4.0 | 4.0 | 禁止 | 允许,需署名 | 须相同方式共享 |
| BraTS 2026 | CC BY / CC BY-NC | 混合 | 视赛道 | 视赛道 | 视赛道 |
Br35H 的许可空缺值得单说:Kaggle 许可由发布者自选,页面不显示即未声明。在企业合规流程里,这通常等价于「不可用」而非「随便用」。
3.5 来源链决定了你能主张什么
出身决定能支撑什么结论:有 TCIA 出身与论文配套的 LGG 分割集,可写「基于 TCGA 低级别胶质瘤队列」;有四源拼合说明的四分类集,可写「来自三个公开源的整合」,但不能写「某医院的患者队列」;Br35H 连来源都没说清,只能写「一个公开的 Kaggle 集合」。
投稿时这个区别很实际:审稿人对「患者队列」的要求比「公开图像集合」高一个量级。
§4 泄漏是怎么发生的:机制、证据与检查
4.1 泄漏的三种形态在同一批数据上叠加
数据泄漏在医学影像里有三个层次,这三个集恰好把三层都占全了。
第一层是重复泄漏:同一张图或近乎相同的副本同时出现在两侧。四分类集第二版已删除重复图,但「删除重复」通常基于字节级或感知哈希精确匹配,对轻微重编码、轻裁切的副本不敏感。
第二层是患者泄漏:同一患者的不同切片分列两侧。只有分割集能处理,另两个集没有患者标识。
第三层是源域泄漏:类别与来源耦合,模型学到的是采集风格而非病理。四分类集最明显,四个类确实对应不同数据源。
三层效应可叠加:即使重复图删干净,患者泄漏与源域泄漏仍能把准确率推到接近满分。
| 泄漏形态 | 出现在哪一层 | 需要什么信息才能处理 | 三个集能否处理 |
|---|---|---|---|
| 重复泄漏 | 图像 | 图像指纹 | 三者都可自建 |
| 患者泄漏 | 患者 | 患者主键 | 仅分割集有 |
| 源域泄漏 | 来源 | 来源标签 | 三者都无 |
打个比方:重复泄漏像两本书共用一页,患者泄漏像同一本书的两页分给两人,源域泄漏像整架书出自同一家印刷厂。第一种比对字迹即可发现,后两种要追问页码归属与印厂来源;真正难处理也影响最大的,正是后两者。
| 层次 | 可观测的迹象 | 检测成本 | 修复成本 |
|---|---|---|---|
| 重复泄漏 | 哈希距离极小 | 低 | 低(删图) |
| 患者泄漏 | 尺寸与统计高度相似 | 中 | 高(重划分) |
| 源域泄漏 | 类与尺寸或对比度共变 | 中 | 高(重采样) |
4.2 一则系统性的证据:去重后只剩三千余张唯一扫描
2026 年 Journal of Medical Systems 的一篇工作直接处理了这个问题:作者指出「许多被广泛采用的脑肿瘤 MRI 数据集存在重复引起的数据泄漏」,并建立自动化清洗流水线移除重复扫描。跑完后,一个被广泛使用的公开数据集只剩 3522 张唯一扫描,他们以此为无泄漏基准做全部对比实验。
这就是最有力的证据:号称七千张的集合,去掉重复后只剩不到一半。而且这还只是图像层面去重,不含患者分组,真实患者数只会更少。
同一篇工作提出的 MTA-Swin 在该基准上报告 98.57% 的三随机种子均值。数字仍高,但前提变了:分母是去重后的唯一扫描,且做了分层交叉验证与 Grad-CAM。高分并非不能出现,只是必须先说清在什么数据上、怎么切的。
98.57% 与 99% 以上相差不大,含义却完全不同:前者在承认并处理泄漏后仍能达到,后者出自未处理的划分。只看小数点后一位会误以为相近,实际差的是「能否被引用」这一整道门槛。
| 项目 | 原文划分 | 去重后基准 | 差在哪 |
|---|---|---|---|
| 数据基数 | 七千张量级 | 三千余张唯一扫描 | 重复被移除 |
| 划分依据 | 目录级 | 分层交叉验证 | 更接近真实评估 |
| 报告方式 | 单次或多次 | 三种子均值 | 更稳健 |
| 可引用性 | 低 | 中 | 前提被写清 |
两者的关系容易被误读成「去重后性能掉了」。实际上它们不是同一实验的两次测量,而是不同数据集与不同协议的结果,放在一起只提示「前提不同、不可直接相减」,并不证明「去重会损失性能」。
| 比较方式 | 是否成立 | 原因 |
|---|---|---|
| 直接相减 | 不成立 | 数据集与协议都不同 |
| 定性比较 | 成立 | 一个处理了泄漏,一个没有 |
| 排榜 | 不成立 | 分母不同 |
4.3 一份对照:同一任务、不同切分下的分数带
把近年结果排在一起,是一条很宽的分数带:四分类集原样划分上 99% 以上是常态;患者级切分或去重基准上会掉;跨中心外部数据上掉得更多。
| 研究/设定 | 数据基础 | 划分方式 | 报告准确率 | 可读到什么 |
|---|---|---|---|---|
| 四分类集原样划分(大量论文) | 7200 张 | 文件级 | 99% 以上 | 同分布,含患者泄漏 |
| MTA-Swin 论文 | 去重后 3522 张 | 分层交叉验证 | 98.57%(三种子均值) | 仍高,但前提明确 |
| 混合源集成+校准 | 多源整合 | 外部 TEST2 域偏移 | 内部 99.33%,外部下降 | 域偏移是真瓶颈 |
| 患者级分层五折 | 内部数据九成训练 | 患者级五折 | 98.3% ± 0.9% | 需机构数据 |
| 单中心临床切片集 | 院内部 8040 张 | 五折 + 外部零样本 | 内部 97.42%,外部 94.82% | 外部验证见真实落差 |
这张表该读的不是「谁最高」,而是「谁把前提写清楚了」。同为 98% 上下,分别来自文件级切分、患者级交叉验证与跨中心外部验证,证据强度差一个量级。
4.4 案例:同一个患者的第 12 层与第 13 层
设想一名 47 岁女性胶质瘤患者在某中心做了一次增强 MRI,共 24 个轴位层面。整理者按 80/20 随机划分:第 3、7、11、16、20 层进训练,第 12、13、18、23 层进测试。第 12 与第 13 层解剖上几乎连续,颅骨轮廓、脑室形态、头皮脂肪厚度、偏置场梯度全部一致。
模型见过第 11 层,遇到第 12 层时几乎不必识别肿瘤,只要认出「颅骨形状同第 11 层,而它标的是胶质瘤」。测试准确率因此轻松越过 99%,对从未见过的新患者却可能完全失败。
关键不在「随机划分错了」,而在于缺少患者主键时随机划分是唯一可执行的划分。整理者别无选择:问题不是操作失误,而是数据结构不允许正确操作。
这个案例后文还会出现:§4.5 用图像指纹把它找出来,§7.3 讲它如何扭曲文献数字,§9.2 讲怎么在最短流程里隔离它。
| 层面 | 第 11、12 层共享的线索 | 模型能否利用 | 对新患者是否成立 |
|---|---|---|---|
| 颅骨轮廓 | 完全一致 | 能 | 不成立 |
| 头皮脂肪厚度 | 完全一致 | 能 | 不成立 |
| 偏置场梯度 | 完全一致 | 能 | 不成立 |
| 脑室形态 | 几乎一致 | 能 | 部分成立 |
| 不同患者间 | 差异大 | 不能 | 成立 |
模型两种能力要分开报告:在已知患者的新切片上识别病灶,与在未知患者上识别。前者用于同一患者随访,后者才是诊断场景的主要需求。原划分只能测前者,多数论文却把它当后者来写。
| 报告场景 | 对应能力 | 三个集能否支持 | 建议措辞 |
|---|---|---|---|
| 同患者随访 | 已知患者识别 | 能 | 「同患者不同层面」 |
| 新患者诊断 | 未知患者泛化 | 需自建划分 | 「按推断分组」 |
| 跨中心部署 | 跨源泛化 | 不能 | 「需外部验证」 |
4.5 三条可执行的泄漏检查
第一条:图像级近重复检测。 用感知哈希(pHash)或骨干嵌入做近邻搜索,把距离低于阈值的图像聚成簇;跨训练/测试的簇即泄漏证据。无需患者标识,还能给出可复核清单。
第二条:按尺寸与像素统计聚类。 同一患者、同次扫描的切片尺寸与灰度高度一致,把 (高, 宽, 均值, 方差) 画散点会看到明显团块;团块跨训练与测试即可判定泄漏。四分类集上这一步常直接暴露源域混杂——不同来源形成分离团块。
第三条:推断分组后重切。 把前两步的簇当作「推断患者」,用 GroupKFold 重做交叉验证。这不是真实分组,必须声明为推断,但它给出的分数下界比文件级切分诚实得多。
#-- 用感知哈希做图像级近重复聚类,找出跨训练/测试的簇
import imagehash
from PIL import Image
from pathlib import Path
def phash_of(p, size=8):
return imagehash.phash(Image.open(p).convert("L"), hash_size=size)
train_dir = Path("brain_tumor_mri/Training")
test_dir = Path("brain_tumor_mri/Testing")
train_h = {str(p): phash_of(p) for p in train_dir.rglob("*.jpg")}
test_h = {str(p): phash_of(p) for p in test_dir.rglob("*.jpg")}
leaked = []
for tp, th in test_h.items():
for rp, rh in train_h.items():
if th - rh <= 4: #-- 汉明距离阈值,4 为常用起点
leaked.append((tp, rp, th - rh))
print(len(leaked))
阈值 4 只是起点,应按数据调并用人工抽查校准。leaked 清单可直接进论文附录,比一句「可能存在泄漏」有力得多。
#-- 按尺寸与灰度统计做第二层聚类,暴露源域混杂
import numpy as np
from PIL import Image
from pathlib import Path
from collections import defaultdict
rows = []
for p in Path("brain_tumor_mri/Training").rglob("*.jpg"):
a = np.asarray(Image.open(p).convert("L"), dtype=np.float32)
rows.append((p.parent.name, a.shape[0], a.shape[1], a.mean(), a.std()))
buckets = defaultdict(int)
for cls, h, w, m, s in rows:
buckets[(cls, h // 16, w // 16)] += 1
for k in sorted(buckets, key=lambda k: -buckets[k])[:10]:
print(k, buckets[k])
若某类图像集中在少数尺寸桶、其他类分散,类别就与尺寸绑定,模型完全可以靠尺寸分类。
4.6 为什么检测集与分割集的泄漏性质不同
Br35H 的主要问题不是患者泄漏,而是标签粒度过粗:只有「有/无」两档,框的来源也不确定。模型最多学到「有没有高信号团块」,学不到「这是什么肿瘤」。
LGG 分割集不同:有患者标识可按患者切分,有像素掩膜可算 Dice,有 TCGA 基因组簇可做关联分析。它的限制是规模与单类,而非泄漏。
| 泄漏形态 | 四分类集 | Br35H | LGG 分割集 |
|---|---|---|---|
| 重复泄漏 | 第二版已处理,残余未知 | 可能性高 | 低 |
| 患者泄漏 | 无法处理 | 无法处理 | 按目录切分可控 |
| 源域泄漏 | 高(类与源耦合) | 中 | 低 |
| 标签噪声 | 中(glioma 有问题) | 高(框粗) | 低 |
| 表面相似度 | 高 | 中 | 低 |
检测集的框即便出自人工,也普遍偏松:常把整个脑区包进去而不紧贴肿瘤。这对分类无害,对定位评估却致命——IoU 会因画法被系统性压低或抬高。分割掩膜逐像素,无此问题,但只有单区。
| 标注形态 | 误差来源 | 对指标的偏置 | 补救难度 |
|---|---|---|---|
| 类名 | 边界病例争议 | 类别混淆 | 中 |
| 粗框 | 框过松 | IoU 失真 | 高 |
| 单区掩膜 | 无亚区分层 | Dice 偏高 | 中 |
补救成本也不同:四分类集去重后重切最便宜;检测集要先确认框来源,可能要联系作者,成本不可控;分割集本就该按患者切分,改起来最容易。
| 数据集 | 最便宜的补救 | 耗时量级 | 剩余风险 |
|---|---|---|---|
| 四分类集 | 去重加推断分组 | 小时级 | 源域混杂仍在 |
| Br35H | 确认框来源 | 取决于作者 | 粒度太粗 |
| LGG 分割集 | 改为按患者切分 | 小时级 | 规模与单类 |
§5 怎么取、怎么装、怎么先跑通
5.1 三种获取路径
获取方式有三种:网页手动下载、Kaggle CLI、Kaggle API。三者都需账号,区别在于是否要人盯着。对这几个 GB 以内的集合,CLI 最省事。
| 路径 | 需要账号 | 可脚本化 | 适合场景 | 缺点 |
|---|---|---|---|---|
| 网页下载 | 是 | 否 | 一次性取用 | 无法进 CI |
| CLI | 是 | 是 | 日常开发 | 需先配凭据 |
| API | 是 | 是 | 程序内取数 | 版本易变 |
#-- 安装 CLI 并配置凭据
pip install kaggle
mkdir -p ~/.kaggle
#-- 把网页 Account 页下载的 kaggle.json 放进去
chmod 600 ~/.kaggle/kaggle.json
kaggle --version
#-- 下载三个集
kaggle datasets download -d masoudnickparvar/brain-tumor-mri-dataset -p data/ --unzip
kaggle datasets download -d ahmedhamada0/brain-tumor-detection -p data/ --unzip
kaggle datasets download -d mateuszbuda/lgg-mri-segmentation -p data/ --unzip
CLI 报 403 通常是凭据未生效或未接受条款:先在网页打开数据集页点同意,再重试。
5.2 用 Python API 拉取并核对体量
#-- 用官方 API 拉取,并按页面公布的体量核对
from kaggle.api.kaggle_api_extended import KaggleApi
from pathlib import Path
api = KaggleApi()
api.authenticate()
items = [
("masoudnickparvar/brain-tumor-mri-dataset", "data/"),
("ahmedhamada0/brain-tumor-detection", "data/"),
("mateuszbuda/lgg-mri-segmentation", "data/"),
]
for slug, dest in items:
api.dataset_download_files(slug, path=dest, unzip=True)
print(slug, "done")
root = Path("data/brain_tumor_mri")
print(len(list(root.rglob("*.jpg")))) #-- 应接近 7200
核对体量是必要一步:公开数据集被重打包、截断、加壳并不罕见,下载后先数文件再开训。
| 核对项 | 期望值来源 | 偏差的含义 | 处置 |
|---|---|---|---|
| 文件总数 | 页面 Summary | 下载不完整 | 重新下载 |
| 各类文件数 | 页面目录 | 版本不同 | 核对版本号 |
| 单文件可读 | 文件系统 | 传输损坏 | 逐文件试读 |
| 目录层级 | 实际解压结构 | 打包方式不同 | 调整路径 |
5.3 把目录装成可训练的数据集
#-- 四分类集:一行加载,再按患者推断分组重切
from torchvision import datasets, transforms
from pathlib import Path
tf = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
train_ds = datasets.ImageFolder("data/brain_tumor_mri/Training", transform=tf)
test_ds = datasets.ImageFolder("data/brain_tumor_mri/Testing", transform=tf)
print(train_ds.class_to_idx)
print(len(train_ds), len(test_ds))
ImageFolder 按目录名生成类别索引,顺序按字母排列,与页面顺序不同。写报告时务必打印 class_to_idx 并附映射表,否则无法核对混淆矩阵的列对应哪一类。
#-- 分割集:按患者构建、按患者切分
from pathlib import Path
import numpy as np
from PIL import Image
root = Path("data/kaggle_3m")
patients = sorted([d for d in root.iterdir() if d.is_dir()])
def load_pair(img_path):
m_path = img_path.with_name(f"{img_path.stem}_mask{img_path.suffix}")
img = np.asarray(Image.open(img_path).convert("L"), dtype=np.float32) / 255.0
msk = (np.asarray(Image.open(m_path).convert("L")) > 127).astype(np.float32)
return img, msk
p0 = sorted(patients[0].glob("*.tif"))
img, msk = load_pair([p for p in p0 if "_mask" not in p.name][0])
print(img.shape, msk.shape, msk.mean())
掩膜以大于 127 二值化,是因为 TIF 掩膜通常存 0 与 255。先算 msk.mean() 即可看出该切片的肿瘤占比,占比为零的切片在训练中贡献极小。
5.4 三个集的最小可用流水线
对分类集,最小流水线是「加载 → 分组重切 → 训练 → 报两套分数」。对检测集,最小流水线是「先确认框的来源 → 若无人工框则退化为二分类」。对分割集,最小流水线是「按患者切 → 训练 U-Net → 报每患者 Dice」。
| 数据集 | 最小任务 | 最小模型 | 最小指标 | 最小交付物 |
|---|---|---|---|---|
| 四分类集 | 四分类 | ResNet18 迁移 | 准确率 + 混淆矩阵 | 两套分数 |
| Br35H | 二分类 | 任意 CNN | 准确率 + 敏感度 | 框来源说明 |
| LGG 分割集 | 二值分割 | U-Net | 每患者 Dice | 患者级划分清单 |
5.5 训练前的三次核对
第一次:文件数是否与页面一致。四分类集七千余张,检测集三千张量级,分割集约 7860 个文件(含掩膜)。差太多说明下载不完整或版本不同。
第二次:类别索引顺序。ImageFolder 的字母序与页面顺序不同,混淆矩阵标签必须与之对应。
第三次:图像是否被重采样。四分类集体量约 167 MB,分辨率不高,很多图已裁到只剩脑部区域,说明原始版本可能更大,Kaggle 版是处理过的。
| 核对序号 | 核对对象 | 期望 | 不过的后果 |
|---|---|---|---|
| 一 | 文件总数 | 与页面一致 | 分母错,比例失真 |
| 二 | 类别索引 | 与混淆矩阵对应 | 类别标错 |
| 三 | 是否重采样 | 记录在案 | 无法与原文对齐 |
5.6 常见取数故障
| 现象 | 可能原因 | 处置 |
|---|---|---|
| CLI 返回 403 | 凭据未生效或未接受条款 | 网页点同意后重试 |
| 目录多一层嵌套 | Kaggle 打包差异 | 先 find 确认顶层再改路径 |
| 图像打不开 | 部分文件为零字节 | 逐文件试读并记录 |
| 类别目录大小写不一 | 跨源合并残留 | 统一小写后再加载 |
| 掩膜与切片数量不等 | 个别患者缺掩膜 | 按配对关系取交集 |
| 尺寸差异极大 | 源域混杂 | 统一缩放并记录损失 |
5.7 存储与算力预算
三个集合计不到两个 GB,笔记本硬盘足够。真正吃资源的是解码与增强,把数千张图放大到 224 像素以上时内存占用会明显上升。
| 项 | 四分类集 | Br35H | LGG 分割集 | 合计 |
|---|---|---|---|---|
| 压缩包体量 | 约 168 MB | 约 92 MB | 约 1.06 GB | 约 1.3 GB |
| 解压后估计 | 数百 MB | 数百 MB | 约 1 GB | 两 GB 以内 |
| 单卡训练可行性 | 可行 | 可行 | 可行 | 均可单卡完成 |
| 典型训练耗时 | 十分钟量级 | 十分钟量级 | 半小时量级 | 视模型而定 |
这么轻的体量有个副作用:使用者倾向不做数据检查就直接开训。一次近重复检测只占一次训练的几分之一,多数流程里却没有这一步。
5.8 一次完整的取数核对记录
下面的脚本串起下载后的核对:数文件、看类别、查尺寸、验配对,装了 Python 即可跑,不依赖 GPU。
#-- 下载后的一次性核对:文件数、类别、尺寸、掩膜配对
from pathlib import Path
from collections import Counter
from PIL import Image
root = Path("data/brain_tumor_mri")
cnt = Counter(p.parent.name for p in root.rglob("*.jpg"))
print("四分类各类文件数:", dict(cnt))
sizes = Counter()
for p in list(root.rglob("*.jpg"))[:200]:
with Image.open(p) as im:
sizes[im.size] += 1
print("抽样前 200 张的尺寸分布:", sizes.most_common(5))
seg = Path("data/kaggle_3m")
missing = []
for d in [x for x in seg.iterdir() if x.is_dir()]:
for p in d.glob("*.tif"):
if "_mask" in p.name:
continue
if not p.with_name(f"{p.stem}_mask{p.suffix}").exists():
missing.append(p)
print("缺掩膜的切片数:", len(missing))
三行输出对应三个核对项:文件数对不上说明下载不完整;尺寸分布极散说明源域混杂;缺掩膜数非零说明配对要按交集处理。三项都过,才谈得上模型。
§6 与库内条目的关系
6.1 关系图谱
本篇与库内三条主线相连。
第一条是 BraTS 系列,代表「有协议」的一端:多序列、多亚区、患者级划分、容器盲评、跨中心赛段。本篇三个集是「无协议」的一端。两者不是优劣关系而是用途分层:BraTS 做正式研究,Kaggle 集做教学与流水线验证。
第二条是 TCGA:LGG 分割集的数据来自 TCGA 低级别胶质瘤集合,库内已有 TCGA 总条目。理解来源背景应从 TCGA 条目进入,而非 Kaggle 页面。
第三条是 脑影像基础设施类条目:BrainWeb 提供仿真真值,IXI 提供健康脑多序列基准,与本篇构成对照——前者检验预处理是否正确,本篇三个集检验流水线能否在真实病理数据上跑通。
| 库内条目 | 关系类型 | 差异要点 | 何时选它 |
|---|---|---|---|
| BraTS 2026 | 同任务不同协议 | 多序列、多亚区、盲评 | 正式分割研究 |
| BraTS-MEN | 同器官不同肿瘤 | 脑膜瘤专项、靶区 | 脑膜瘤或靶区研究 |
| TCGA | 上游来源 | 多组学、无影像掩膜 | 影像基因组学关联 |
| BrainWeb | 仿真对照 | 无真实病理 | 检验预处理流水线 |
| IXI | 健康对照 | 无肿瘤 | 做配准与分割基线 |
| BHX 脑出血检测框 | 同形态不同任务 | 大规模框标注 | 检测任务本体 |
6.2 检索路径
站内检索可用这几条路径。
按任务找:脑肿瘤分类 → 本篇;脑肿瘤分割 → BraTS 系列与本篇的 §2;脑肿瘤检测 → 本篇与 BHX。
按数据来源找:TCGA → TCGA 条目 → 本篇分割集;公开教学集 → 本篇。
按方法学找:数据泄漏 → 本篇 §4;患者级切分 → 本篇 §4.5;评测协议 → BraTS 2026。
| 检索词 | 命中条目 | 命中的是哪一节 |
|---|---|---|
| 脑肿瘤分类 | 本篇 | §2 与 §3 |
| 胶质瘤分割 | 本篇、BraTS 2026 | §2、§4 |
| 数据泄漏 | 本篇 | §4 全节 |
| 患者级切分 | 本篇 | §4.5 |
| FLAIR | 本篇、BraTS 系列 | §2.2 |
| TCGA 影像 | TCGA、本篇 | §3.3 |
6.3 与 BraTS 的逐项分工
库内 BraTS 条目有六个(2026 主赛、脑膜瘤、转移瘤、儿童、非洲区域、脑膜瘤放疗),覆盖有协议的一端;本篇覆盖无协议的一端。两者是一条流水线上的两道工序,不是替代关系。
| 工序 | 用哪个 | 目的 | 通过标准 |
|---|---|---|---|
| 代码正确性 | 本篇三个集 | 确认加载、增强、损失没写错 | 已知数据上能收敛 |
| 方法比较 | 本篇去重基准 | 粗筛架构 | 无泄漏下的相对排序 |
| 正式评测 | BraTS 系列 | 与公开榜单比较 | 盲评分数 |
| 临床申报 | 自建多中心数据 | 证明泛化与合规 | 前瞻或外部验证 |
跳过第一道,后续数字可能被低级 bug 污染;停在第一道,数字可能被泄漏污染。后者正是三份 Kaggle 数据最容易导致的——分数好到没人想往下走。
6.4 消歧:三个同名不同物的东西
站内检索时容易混淆三类条目。
第一类是同一器官的不同数据集:BraTS-MEN 也是脑膜瘤,但是带掩膜的挑战赛数据;四分类集里的 meningioma 只是一个类名。同名,用途完全不同。
第二类是同一数据的上游与镜像:TCGA 条目是上游,LGG 分割集是它在 Kaggle 的影像镜像。引用原始来源走 TCGA,下载切片与掩膜走本篇。
第三类是同一任务的不同形态:脑出血检测框(BHX)与 Br35H 都是检测任务,但前者有规模的框级标注,后者是两档分类加少量框。都叫检测,可用性差很远。
| 容易混淆的名字 | 实际指什么 | 真正差异 | 判断方法 |
|---|---|---|---|
| 脑膜瘤数据 | BraTS-MEN 或四分类类名 | 有无掩膜 | 看是否给体数据 |
| TCGA 影像 | TCGA 总集或本篇镜像 | 上游与下游 | 看是否带掩膜 |
| 检测集 | BHX 或 Br35H | 标注规模 | 看是否有人工框文件 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
有一个常见的误判需要先纠正:把「Kaggle 下载量高」当成「数据质量高」。下载量只反映易得性,与标注质量、划分正确性、许可清晰度都无关。这三个集之所以下载量高,恰恰因为它们小、快、开箱即用——这些优点与「能否支撑临床结论」是两条互不相干的轴。
第二个误判是把「第二版已去重」当成「泄漏已解决」。去重解决的是重复泄漏,不解决患者泄漏与源域泄漏。这两个才是这三个集的主要问题。
第三个误判是把「论文里用了它并报了 99%」当成同行认可。同一批数据被不同划分方式反复使用,分数高低主要取决于划分方式,而不是方法优劣。
7.1 五维评分
采用 DAIMS 框架的五个维度,每维 5 分制。评分对象是三个集的合集,但分维度时按各自最弱的一环计。
| 维度 | 评分 | 理由 |
|---|---|---|
| 可得性(Accessibility) | 4.5 | 一键下载,无需审批或伦理申请 |
| 可用性(Usability) | 3.0 | 分类集开箱可跑;检测集框来源不明;分割集需按患者重组 |
| 标注质量(Annotation Quality) | 2.5 | 分类标签干净但无标注者;检测框粗;掩膜为人工单区 |
| 方法学严谨性(Rigor) | 2.0 | 无患者标识、无患者级划分、无评测协议、无外部验证 |
| 代表性与公平性(Representativeness) | 1.5 | 类别人为均衡,不含转移瘤,人群信息缺失 |
| DAIMS 综合 | 2.7 | 教学友好,研究受限 |
7.2 各维度失分的具体位置
可得性得分高不完全是好事:门槛低意味着用户庞大,其中不少人不会读页面上关于来源与划分的说明。被误用的概率与易得性成正比。
标注质量失分在两处:一是分类集没有标注者信息——glioma 与 meningioma 的边界由谁定?若只按原来源目录继承,标注质量就等同于原来源,而页面自认 SARTAJ 的 glioma 有问题;二是检测集的框,人工还是模型在页面上找不到答案。
方法学严谨性是全篇的核心失分:没有患者标识就没有患者级切分,没有官方划分跨论文数字就无法比较,没有外部验证集则所有泛化声明都缺一环。
代表性失分在类别体系:四类等量是人为的,真实门诊里转移瘤占比不低,却根本不在类别表里。
| 维度 | 主要失分点 | 失分的方向 | 一句话 |
|---|---|---|---|
| 可得性 | 几乎无门槛 | 双刃剑 | 越易得越易误用 |
| 可用性 | 检测框来源不明 | 拉低 | 需先确认才能用 |
| 标注质量 | 无标注者信息 | 拉低 | 标签是继承来的 |
| 方法学 | 无患者级划分 | 大幅拉低 | 核心缺陷 |
| 代表性 | 类别四档且均衡 | 拉低 | 不是真实分布 |
7.3 已知的、可枚举的偏差
| 偏差 | 方向 | 影响 | 可否补救 |
|---|---|---|---|
| 患者泄漏 | 高估性能 | 分数虚高,泛化被夸大 | 部分可补救 |
| 源域混杂 | 高估性能 | 模型学到采集风格 | 难,需知道源标签 |
| 类别人为均衡 | 指标偏离真实 | 阳性预测值失真 | 需重加权 |
| 肿瘤类型缺失 | 覆盖不全 | 转移瘤等被错分 | 不可补救 |
| 无年龄性别 | 亚组分析不可做 | 无法评估公平性 | 不可补救 |
| 无扫描仪信息 | 无法做域分析 | 无法解释失败案例 | 不可补救 |
| 检测框粗糙 | 定位指标失真 | IoU 不可信 | 需重标 |
| 单类分割 | 泛化受限 | 只适用 LGG | 需扩展数据 |
§4.4 的案例对应的正是第一行:患者泄漏让性能系统性高估,幅度取决于随机划分时同一患者切片被拆到两侧的概率。切片越多、训练测试比例越接近,概率越高。
7.4 外部验证矩阵
| 验证方式 | 四分类集 | Br35H | LGG 分割集 | 说明 |
|---|---|---|---|---|
| 文件级随机划分 | 可做 | 可做 | 不适用 | 默认做法,含泄漏 |
| 患者级划分 | 不可做 | 不可做 | 可做 | 仅分割集 |
| 去重后留出 | 可做 | 可做 | 可做 | 需自建流水线 |
| 跨来源留一 | 勉强可做 | 不可做 | 不适用 | 需知道源标签 |
| 跨中心外部验证 | 不可做 | 不可做 | 需另找数据 | 无中心标识 |
| 与 BraTS 交叉验证 | 不可行 | 不可行 | 序列不同 | 任务与协议都对不上 |
这张矩阵说明:这三个集上能做的最强验证是「去重 + 推断分组 + 内部交叉验证」。跨中心泛化必须另找数据——不是偷懒,而是数据没提供。
| 验证强度 | 能排除什么 | 不能排除什么 | 结论强度 |
|---|---|---|---|
| 文件级划分 | 几乎没有 | 重复、患者、源域 | 弱 |
| 去重后划分 | 重复泄漏 | 患者、源域 | 中弱 |
| 推断分组后 | 部分患者泄漏 | 源域、中心差异 | 中 |
| 外部独立数据 | 患者与源域大部分 | 标签定义差异 | 较强 |
7.5 它为何能持续:低门槛与高回报的组合
这三个集能活到今天,靠一条极短的正反馈回路:下载快、跑得快、分数高、论文收得快。任何一环变长,流行度都会下降。这也解释了它们为何不会被修好:患者级划分、去重、外部验证都要增加工作量,收益却是分数变低,整理者没有动力。
只要「高准确率的脑肿瘤分类」仍可发表、可引用、可当课程案例,这三个集就会继续被使用。真正的改变不来自数据集修订,而来自评测习惯:当审稿人开始要求患者级划分,它们的用法自然会退回教学。
| 回路环节 | 需要多久 | 收益 | 阻碍 |
|---|---|---|---|
| 下载 | 分钟级 | 立即可用 | 无 |
| 训练 | 十分钟到半小时 | 高分数 | 无 |
| 写稿 | 天级 | 可发表 | 无 |
| 修数据 | 月级 | 分数变低 | 缺激励 |
§8 生态位与历史
8.1 三个集的时间线
Br35H 明确带 2020 年份,三者中定位最清楚。作者在页面花大量篇幅讲流行病学,语气像科普加项目说明,也符合当时 Kaggle 数据集页面的普遍风格。
四分类集约在 2020 年出现,此后多次迭代,第二版做了去重与均衡(页面写明「版本 2」)。它远比前两者流行,因为第一次把「四类、均衡、开箱可跑」同时做到。
LGG 分割集源头更早:两篇配套论文分别是 2017 年与 2019 年,数据取自 TCGA 既有集合。它在 Kaggle 上更像论文配套数据的镜像,而非一次独立整理。
| 时间 | 事件 | 数据集 |
|---|---|---|
| 2017 | 放射基因组学论文 | LGG 分割集(源头) |
| 2019 | 基因亚型与形状论文 | LGG 分割集(源头) |
| 2020 | Br35H 发布 | 检测集 |
| 2020 前后 | 四分类集首版 | 四分类集 |
| 之后 | 第二版去重与均衡 | 四分类集 |
| 2026 | 去重论文指出普遍重复泄漏 | 全家族 |
8.2 为什么它们成了教学标准件
教学需要特定组合:小到能在笔记本跑完、类别少到指标一眼能懂、准确率高到学生有成就感、许可宽松到可随意分发。同时满足的公开脑 MRI 集合不多,这三份恰好都满足。
相比之下 BraTS 要注册、下载数 GB 到数十 GB、理解多序列与多亚区、跑容器评测,对研究者友好、对初学者不友好。教学与科研的选型逻辑完全不同,这解释了它们为何在教学里不可替代。
8.3 在方法学演进中的位置
它们在文献里的另一个角色是「试金石」:新架构出现时作者都会在上面跑一遍,因为大家都跑过、数字可比。做法本身没错,问题是比较基准不统一。
近年来的纠偏工作也多从这三个集入手:先证明泄漏存在,再提出无泄漏基准,最后在新基准上重新排榜。这条路径正在成为惯例,2026 年那篇去重工作即是典型。
| 阶段 | 主流做法 | 对三个集的用法 |
|---|---|---|
| 2017–2020 | 追求高准确率 | 直接使用原划分 |
| 2021–2023 | 架构竞赛 | 原划分上刷分 |
| 2024–2025 | 质疑划分 | 加做交叉验证 |
| 2026 起 | 去重与患者级切分 | 自建无泄漏基准 |
8.4 与 BraTS 的分工
把两者放在一起看,分工很清楚。
BraTS 负责「能不能用」:用盲评、保密测试集、跨中心赛段回答模型在未见数据上到底行不行。三个 Kaggle 集负责「跑不跑得通」:以极低门槛回答流水线有没有写错。
健康的团队两个都用:先用 Kaggle 集跑通代码,再用 BraTS 或自建数据验证。跳过第一步浪费时间,停在第一步浪费结论。
| 维度 | 三个 Kaggle 集 | BraTS 系列 |
|---|---|---|
| 入门门槛 | 极低 | 高(注册、体量大) |
| 评测协议 | 无 | 容器盲评 |
| 患者级划分 | 仅分割集可做 | 官方提供 |
| 多序列 | 无 | 有 |
| 适合阶段 | 原型与教学 | 正式研究与申报 |
| 典型误用 | 报 99% 当成果 | 无(协议约束强) |
8.5 使用人群画像
从页面标签与评论可看出用户构成。四分类集的标签集中在 Cancer、Image、Health、Deep Learning、Multiclass Classification、Transfer Learning 六类,这一组合说明它被当作迁移学习入门样本,而非临床数据集。评论区的用途以学习、研究、应用为主,学习占比不小。
这意味着:论文里用了它,很可能与大量课程作业共享同一份数据与同一种划分。此时数字本身不构成贡献,贡献只能来自你如何处理这个数字。
| 使用者类型 | 占比观感 | 典型用途 | 对泄漏的敏感度 |
|---|---|---|---|
| 学习者 | 高 | 跑通教程 | 低 |
| 研究者 | 中 | 方法对比 | 中 |
| 应用方 | 低 | 原型验证 | 中 |
| 课程作者 | 中 | 教学案例 | 视课程而定 |
8.6 未来三年它大概会变成什么
最可能的变化不是数据被修好,而是引用规范变严:2026 年的工作里,「无泄漏基准」成为必须声明的条件,去重流水线被单独描述,患者级交叉验证从加分项变成基本项。
若趋势延续,它们的角色会从「论文常用数据集」退回「教学标准件与泄漏案例」。这不是贬低,而是回归本位:把脑肿瘤分类的全部陷阱集中展示的教学材料,比被误当基准的数据集有用得多。
| 情景 | 触发条件 | 对使用者的影响 |
|---|---|---|
| 维持现状 | 评测习惯不变 | 继续产生不可比较的 99% |
| 引用规范收紧 | 期刊要求声明划分 | 补做去重与分组 |
| 出现无泄漏版 | 维护者修订 | 旧结果需重跑 |
| 被新数据集替代 | 出现带患者 ID 的超大集 | 退回教学用途 |
§9 使用指引
9.1 三种角色的路径
学生与课程作者。 用四分类集做第一个实验,把泄漏检测作为实验的一部分:先跑文件级划分记录 99% 级分数,再跑去重与分组记录下降后的分数。这个对比比任何调参都更能说明问题。
算法工程师。 用四分类集验证代码、分割集验证分割流水线,然后立刻转向有患者标识的数据。把它们当单元测试,不当验收标准。
临床研究者。 若一定要用,只用分割集,且只做影像基因组学关联与分割方法学,不做诊断性能声明。分类集与检测集在你的场景里没有可用之处。
| 角色 | 首选集 | 用法 | 不做什么 |
|---|---|---|---|
| 学生 | 四分类集 | 分类实验 + 泄漏对比 | 不宣称泛化 |
| 课程作者 | 四分类集 + 分割集 | 分类与分割两节课 | 不省略泄漏讨论 |
| 算法工程师 | 全部 | 流水线单元测试 | 不用它做验收 |
| 临床研究者 | 分割集 | 关联与分割方法学 | 不做诊断声明 |
| 产品团队 | 四分类集 | 仅限原型 | 不把模型上线 |
9.2 一条最短的可用流程
下面这条流程从下载到出两套分数,大约二十行代码,可以直接跑。它的价值在于把「泄漏」从抽象讨论变成一组可比较的数字。
#-- 最短流程:下载 → 去重 → 分组 → 两套分数
import numpy as np, imagehash
from PIL import Image
from pathlib import Path
from sklearn.model_selection import StratifiedKFold, GroupKFold
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.metrics import accuracy_score
root = Path("data/brain_tumor_mri")
paths, labels = [], []
for split in ("Training", "Testing"):
for p in (root / split).rglob("*.jpg"):
paths.append(p); labels.append(p.parent.name)
labels = np.array(labels)
feat, groups = [], []
for i, p in enumerate(paths):
a = np.asarray(Image.open(p).convert("L").resize((64, 64)), dtype=np.float32).ravel() / 255.0
h = imagehash.phash(Image.open(p).convert("L"), hash_size=8)
feat.append(a); groups.append(int(str(h), 16) % 9973) #-- 感知哈希当推断患者组
feat = np.array(feat); groups = np.array(groups)
def run(cv, tag):
acc = []
for tr, te in cv.split(feat, labels, groups):
m = make_pipeline(StandardScaler(), LogisticRegression(max_iter=2000))
m.fit(feat[tr], labels[tr])
acc.append(accuracy_score(labels[te], m.predict(feat[te])))
print(tag, round(float(np.mean(acc)), 4))
run(StratifiedKFold(5, shuffle=True, random_state=0), "切片级 StratifiedKFold")
run(GroupKFold(5), "推断分组 GroupKFold")
用感知哈希值取模当「推断患者组」是粗糙但可复现的近似,真实使用应以哈希距离聚类。即便是这个版本,两行输出的落差通常已足够说明问题。
§4.4 的案例在此兑现:同一患者的第 12 与第 13 层若落在同一推断组,GroupKFold 会把它们一起留在训练侧或测试侧,分数随之下降。降幅越大,原划分的泄漏越严重。
| 输出项 | 含义 | 正常表现 | 异常表现 |
|---|---|---|---|
| 切片级准确率 | 含泄漏的上界 | 很高 | 偏低说明代码有错 |
| 分组级准确率 | 更接近真实 | 中等 | 与切片级差距大即泄漏重 |
| 两者差值 | 泄漏的量级 | 数点到十余点 | 二十点以上重点排查 |
9.3 引用方式
引用四分类集应引 Kaggle 页面本身,并在方法里写明「使用官方 Training/Testing 划分」或「重新划分,方式为 X」。不写明划分,数字无法复核。
引用 Br35H 时,需要额外说明框的来源。若无法确认,应在局限性里写明「边界框的来源未能确认」。
引用 LGG 分割集应同时引原始论文,因为 Kaggle 页面只是镜像:标准引用指向 2019 年 Computers in Biology and Medicine 论文,并注明数据来自 TCIA 的 TCGA-LGG 集合。
| 数据集 | 应引用的对象 | 需额外声明 | 常见错误 |
|---|---|---|---|
| 四分类集 | Kaggle 页面 + 划分方式 | 是否重新划分 | 只引页面不写划分 |
| Br35H | Kaggle 页面 | 框来源 | 当成 YOLO 标注集 |
| LGG 分割集 | 2019 年论文 + Kaggle 镜像 | 按患者切分方式 | 只引 Kaggle 页面 |
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 写作方式 | 人机协作,结构与论点由编辑确定 |
| 资料核验 | 逐个访问三个 Kaggle 页面,读 About 与 Summary |
| 论文来源 | Europe PMC 检索,读摘要,未取全文 |
| 未核验 | 逐文件统计、原始分辨率、分类集与检测集患者数 |
| 来源层级 | 页面一级、摘要二级、推算三级,均已标注 |
| 事实与判断 | 规模与许可为事实,评分为编辑判断 |
| 更新承诺 | 页面不再更新,本篇随其版本修订 |
| 责任边界 | 不构成医学建议,不替代合规审查 |
10.1 本篇对「合并成一篇」的处理说明
三个数据集写进同一篇是编辑判断:它们不是同一批发布的产品,也无统一维护者,但共享同一方法学缺陷与同一类误用路径。分写三篇会把共同缺陷重复三遍,而使用者需要的是一次讲透。
合并之后,每个集仍保留独立的规模、结构、许可与边界,没有混成一个模糊的「脑肿瘤 MRI 大数据集」。凡三者表现不同处,都以并排表格呈现。
| 编辑处理 | 做法 | 理由 |
|---|---|---|
| 规模数字 | 分集列出,不求和 | 来源与口径不同 |
| 许可 | 分集列出 | 三者条款互不相同 |
| 适用边界 | 分别给出 | 能力层次不同 |
| 泄漏问题 | 合并论述 | 缺陷是共有的 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 四分类集有测试集,所以切分可靠 | 目录是文件级,不是患者级 | 页面 About 未提患者分组;去重论文称该族数据集普遍存在重复泄漏 |
| 第二版说消除了重叠,所以没有泄漏了 | 消除的是图像级重复,患者级重叠仍在 | 页面 Version 2 Updates 原文只提 duplicate images |
| Br35H 是 YOLO 格式的检测集 | 页面给的是 yes/no 两档目录,框来源未声明 | 页面 About the data 只描述三个目录 |
| 99% 准确率说明方法好 | 主要反映划分方式 | 去重后唯一扫描仅 3522 张,原划分含重复 |
| 三个集可以合并增大样本 | 标签体系、许可、来源都不同 | 四分类 4 档、检测 2 档、分割单类;许可 3 种 |
| 分割集也是 Kaggle 的,所以许可一样 | 分割集是 CC BY-NC-SA 4.0 | 页面 License 字段 |
| 图像尺寸不一可以统一缩放解决 | 缩放不能消除源域指纹 | 页面 Note 提到尺寸差异,推荐自行预处理 |
| 分割集只有 110 人所以没用 | 有患者标识,可做正确的患者级验证 | 页面明确 110 名 TCGA 患者 |
| 有基因组簇就能做影像基因组学 | 能做关联,但 110 例的统计功效有限 | 页面引用两篇论文,样本即 110 例 |
| 用了公开数据就没有伦理问题 | 公开不等于可商用,也不等于可发表性能声明 | 三个集许可不同,Br35H 未标许可 |
FAQ
Q1:99% 的分类准确率可信吗?
在四分类集上不应直接采信:缺少患者标识,训练与测试可能含同一患者的相邻切片,模型可靠记忆患者而非病灶拿高分。要判断可信度,先看去重与分组后还剩多少分。
Q2:三个数据集能合并训练吗?
不建议默认合并:三者的标签体系、许可与采集协议都不同,分类集的标签无法直接对齐分割掩膜,分割集的非商业许可会传染到下游模型。
Q3:哪个适合做严肃研究?
LGG 分割集:有真实的 TCGA 患者来源与人工掩膜,可按患者切分。分类集与检测集更适合教学演示与流水线跑通。
Q4:没有患者 ID 怎么补救?
可做图像级感知哈希去重、按尺寸与像素统计聚类,再用相似度阈值合并成推断患者组。但这只是近似,必须在论文里声明为推断而非官方分组。
Q5:为什么 BraTS 就没有这个问题?
因为 BraTS 有官方患者级划分与容器盲评,测试标签保密。不是数据本身更干净,而是协议约束了用法,让泄漏无法转化为分数。
Q6:四分类集的四个类分别来自哪里?
页面写明由 figshare、SARTAJ、Br35H 三源拼合:no tumor 全部来自 Br35H,glioma 中 SARTAJ 的问题图替换为 figshare 图。逐类对应关系页面未完全展开。
Q7:Br35H 的框是人工标还是模型生成的?
页面没有明确说明。Br35H-Mask-RCNN 的名字暗示是 Mask R-CNN 的结果,但主目录的框来源仍需向作者确认;确认前不应当作人工标注。
Q8:分割集为什么只有低级别胶质瘤?
因为它取自 TCGA 的 LGG 集合,该集合只收录低级别胶质瘤。这不是抽样偏差,而是父集合定义决定的。
Q9:可以商用吗?
只有四分类集的 CC BY 4.0 允许商用并需署名。分割集禁止商业使用。检测集未标许可,合规上应视为不可用。
Q10:测试集分数掉下来多少才算正常?
没有统一阈值,但方向是确定的:去重后通常下降,分组后进一步下降,跨中心外部验证下降最多。应报告三档数字并解释差异,而不是只报最高的一档。
Q11:能不能用这三个集做预训练再迁到 BraTS?
技术上可以,但收益不确定:四分类集的源域特征可能与 BraTS 差异很大,预训练学到的可能是采集风格而非解剖特征。若要尝试,需做消融对比。
Q12:如果审稿人质疑数据泄漏,我该怎么回应?
重跑去重与分组交叉验证,把两套数字放进补充材料,并在局限性里说明患者标识缺失、无法做真实患者级划分。这比辩解有效。
Q13:这三个集和 BraTS 的差距到底在哪儿?
差在协议,不在图像:BraTS 有患者级划分、盲评、多序列、多亚区,这三个集只有图像加粗标签。图像可先用来试代码,但任何跨机构比较的结论都必须换数据。
Q14:如果我只想验证一段 MRI 预处理代码,用哪个最快?
四分类集:目录规整、体量最小、加载只要一行,几秒就能跑通预处理流水线。跑通后立刻换到目标数据,不要在这上面调参。
| 你的问题 | 可查的节 | 一句话答案 |
|---|---|---|
| 规模多大 | §2 | 七千张、三千张、百人级 |
| 怎么拿 | §5 | Kaggle CLI 或 API |
| 能不能用 | §7 | 教学可以,临床不行 |
| 怎么防泄漏 | §4.5 | 去重加推断分组 |
| 选哪个 | §1.7 | 按你要的能力层次选 |
术语表
| 术语 | 解释 |
|---|---|
| 数据泄漏 | 训练时可见测试信息,评估分数虚高 |
| 患者级切分 | 同一患者的样本只落在训练或测试一侧 |
| 切片级切分 | 按单张图像划分,同患者可跨两侧 |
| 重复泄漏 | 同一图或近似副本同时出现在两侧 |
| 源域泄漏 | 类别与来源耦合,学到采集风格 |
| 感知哈希 | 将图像压成短指纹,快速找近似副本 |
| 推断患者组 | 无患者标识时用相似度聚类出的近似分组 |
| 混淆矩阵 | 真实与预测类别的交叉计数表 |
| Dice 系数 | 分割重叠度指标,0 到 1 |
| FLAIR | 液体衰减反转恢复序列,抑脑脊液、显病灶 |
| TCIA | 美国癌症影像档案库,提供去标识影像 |
| TCGA | 癌症基因组图谱,多组学与配套影像 |
| LGG | 低级别胶质瘤 |
| 亚区 | 肿瘤内部按组织类型划分的区域 |
| 盲评 | 评测方持有测试标签,提交方只见容器 |
| 域偏移 | 训练与部署分布不一致 |
| 类别均衡 | 各类样本数相近 |
| 偏置场 | MRI 中随空间缓慢变化的强度不均 |
| 迁移学习 | 用预训练权重初始化新任务 |
| 特征提取器 | 冻结骨干网络,只训分类头 |
| 消融实验 | 逐项去掉组件以确认贡献 |
| 外部验证集 | 来源不同于训练的独立测试数据 |
| 相同方式共享 | 衍生作品须沿用相同许可 |
| 非商业 | 禁止用于盈利目的 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 四分类集图像数 | 7200 | 页面 About | 一级 |
| 训练每类 | 1400 | 页面目录 | 一级 |
| 测试每类 | 400 | 页面目录 | 一级 |
| 四分类集体量 | 167.85 MB | Data Explorer | 一级 |
| 四分类集许可 | CC BY 4.0 | 页面 License | 一级 |
| 检测集图像数 | 3060 | 页面 About | 一级 |
| 检测集 yes | 1500 | 页面 About | 一级 |
| 检测集 no | 1500 | 页面 About | 一级 |
| 检测集体量 | 91.77 MB | Data Explorer | 一级 |
| 分割集患者数 | 110 | 页面 About | 一级 |
| 分割集体量 | 1.06 GB | Data Explorer | 一级 |
| 分割集文件数 | 7860 | 页面 Summary | 一级 |
| 分割集许可 | CC BY-NC-SA 4.0 | 页面 License | 一级 |
| 去重后唯一扫描 | 3522 | J Med Syst 摘要 | 二级 |
| 去重基准准确率 | 98.57% | J Med Syst 摘要 | 二级 |
| 源域偏移外部准确率 | 96% 量级 | Sci Rep 摘要 | 二级 |
| 四分类集患者数 | 未知 | 未披露 | 未核实 |
| 检测集框来源 | 未知 | 未说明 | 未核实 |
附录 B:数字的来源分层
第一级:官方页面。 三个 Kaggle 的 About、Data Explorer、Summary 区块提供全部规模数字与许可信息。优点是可复核,缺点是不完整:不给患者数、采集参数与逐类源映射。
第二级:论文摘要。 去重后的唯一扫描数来自 Journal of Medical Systems 摘要;分数带数字来自 Europe PMC 收录的摘要。优点是经同行评议,缺点是只读摘要,方法细节未核。
第三级:推算。 「下降幅度取决于切片数与划分比例」这类判断没有直接数字支撑,由机制推出,已尽量放在定性段落里,不给具体数值。
| 层级 | 来源数量 | 可信度 | 本篇用法 |
|---|---|---|---|
| 一级 | 3 个 Kaggle 页面 | 高,可复核 | 规模、结构、许可 |
| 二级 | 4 篇论文摘要 | 中高,经同行评议 | 泄漏证据、分数带 |
| 三级 | 机制推算 | 中,需实证 | 只作定性 |
附录 C:完整参考文献
- Nickparvar M. Brain Tumor MRI Dataset(版本 2). Kaggle. https://www.kaggle.com/datasets/masoudnickparvar/brain-tumor-mri-dataset
- Hamada A. Br35H: Brain Tumor Detection 2020(版本 12). Kaggle. https://www.kaggle.com/datasets/ahmedhamada0/brain-tumor-detection
- Buda M, Saha A, Mazurowski MA. LGG MRI Segmentation. Kaggle. https://www.kaggle.com/datasets/mateuszbuda/lgg-mri-segmentation
- Buda M, Saha A, Mazurowski MA. Association of genomic subtypes of lower-grade gliomas with shape features automatically extracted by a deep learning algorithm. Computers in Biology and Medicine, 2019. DOI: 10.1016/j.compbiomed.2018.12.012
- Mazurowski MA, et al. Radiogenomics of lower-grade glioma: algorithmically-assessed tumor shape is associated with tumor genomic subtypes and patient outcomes in a multi-institutional study with The Cancer Genome Atlas data. Journal of Neuro-Oncology, 2017. DOI: 10.1007/s11060-017-2470-3
- MTA-Swin: A Multi-Token Attention Swin Transformer for Brain Tumor Classification with Leakage-Free MRI Benchmarking. Journal of Medical Systems, 2026. DOI: 10.1007/s10916-026-02418-w
- A Hybrid Approach for Brain-Tumor Detection and Classification from MRI Images. Journal of Imaging, 2026. DOI: 10.3390/jimaging12090460
- Enhancing brain tumor detection through deep learning and explainable AI techniques. Scientific Reports, 2026. DOI: 10.1038/s41598-026-60334-y
- The Cancer Genome Atlas Research Network. Comprehensive, Integrative Genomic Analysis of Diffuse Lower-Grade Gliomas. NEJM, 2015. DOI: 10.1056/NEJMoa1402121
附录 D:任务代码
任务一:给四分类集做一份泄漏清单。 输出跨训练与测试的近重复对,可直接附进论文。
#-- 输出跨集近重复清单到 CSV
import csv, imagehash
from PIL import Image
from pathlib import Path
def h(p):
return imagehash.phash(Image.open(p).convert("L"))
tr = {p: h(p) for p in Path("data/brain_tumor_mri/Training").rglob("*.jpg")}
te = {p: h(p) for p in Path("data/brain_tumor_mri/Testing").rglob("*.jpg")}
with open("leak_report.csv", "w", newline="") as f:
w = csv.writer(f); w.writerow(["test_file", "train_file", "distance"])
for tp, th in te.items():
for rp, rh in tr.items():
d = th - rh
if d <= 4:
w.writerow([str(tp), str(rp), d])
任务二:给分割集做一次患者级体数据重组。 切片重组为体可以喂 3D 模型,但页面未给切片间距。
#-- 按患者重组为体数据
import numpy as np
from PIL import Image
from pathlib import Path
def stack_patient(patient_dir):
files = sorted(p for p in patient_dir.glob("*.tif") if "_mask" not in p.name)
imgs = [np.asarray(Image.open(p).convert("L"), dtype=np.float32) for p in files]
msks = [np.asarray(Image.open(p.with_name(f"{p.stem}_mask{p.suffix}")).convert("L")) for p in files]
return np.stack(imgs), np.stack(msks)
root = Path("data/kaggle_3m")
p = sorted([d for d in root.iterdir() if d.is_dir()])[0]
vol, mask = stack_patient(p)
print(vol.shape, mask.shape) #-- (层数, 高, 宽)
任务三:按类别与尺寸交叉制表,暴露源域混杂。
#-- 类别 × 尺寸桶交叉表
import pandas as pd
from PIL import Image
from pathlib import Path
rows = []
for p in Path("data/brain_tumor_mri/Training").rglob("*.jpg"):
with Image.open(p) as im:
rows.append({"cls": p.parent.name, "h": im.size[1], "w": im.size[0]})
df = pd.DataFrame(rows)
df["bucket"] = (df.h // 32).astype(str) + "x" + (df.w // 32).astype(str)
print(pd.crosstab(df.cls, df.bucket).T.head(15))
附录 E:如果只记五件事
一、三个集是同一问题的三种表现:没有患者标识,就没有可信的患者级切分。
二、99% 是警报而非成绩:文件级划分上的高分,首先说明模型记住了患者。
三、去重能把七千张砍到三千余张唯一扫描,这就是泄漏的直接证据。
四、只有 LGG 分割集能按患者切分,也只有它能做严肃研究;但它只有 110 人、单类、非商业。
五、当教具用是它们最好的用途,当证据用则是对使用者的误导。
编辑说明
三个数据集页面于 2026-10-27 逐个访问,读取 About、Data Explorer、Summary、License 区块,未登录、未下载数据体。论文证据来自 Europe PMC 摘要检索,未获取全文,故对摘要中未展开的方法细节未作推断。
未覆盖内容包括:逐文件尺寸分布、原始分辨率、分类集与检测集的实际患者数、检测集边界框的标注者身份。这些无法从公开页面确认,已如实标注为未核实,未做估算填充。
页面内部存在需要留意的口径差异:四分类集页面声称第二版「消除了训练与测试之间的重叠」,而 2026 年的去重研究仍将该族数据列为重复泄漏的典型。两者并不矛盾——前者说的是图像级重复,后者说的是跨患者的近重复与扫描级重复,但页面表述容易被理解成后者也已解决,这一点已在 §4 与避坑清单中说明,未对页面做对错判断。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- kg-lgg-mri-segmentation — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
- brats — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
- crossmoda-2023 — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
- brisc — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
- brats-2026 — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
- brats-africa — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
- segthy — 共享标签:医学影像 / MRI / 医学图像分割
- rembrandt — 共享标签:医学影像 / MRI / 脑肿瘤
- remind — 共享标签:医学影像 / 医学图像分割 / 脑肿瘤
- brats-pediatric — 共享标签:医学影像 / MRI / 医学图像分割 / 脑肿瘤
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

