NCT-CRC-HE-100K — 结直肠癌组织学图像分类 AI-Ready Wikipedia | 千方病案医数集

10 万张结直肠癌 H&E patch 的 9 类组织分类金标准

来源 Zenodo — National Center for Tumor Diseases (NCT) Heidelberg / University Medical Center Mannheim url: https://zenodo.org/records/1214456发布时间: 2026-09-08最后更新: 2026-09-08 阅读 6

信息速览

数据集名称NCT-CRC-HE-100K — 结直肠癌组织学图像分类 AI-Ready Wikipedia | 千方病案医数集
数据类型约 24.2 GB TIFF(3 个 ZIP),100,000 张训练 patch,7,180 张验证 patch,9 类组织标签
规模136 名患者(86 张源切片 + 50 名验证患者)
接入方式Zenodo — National Center for Tumor Diseases (NCT) Heidelberg / University Medical Center Mannheim url: https://zenodo.org/records/1214456
AI 就绪度

数据集封面

NCT-CRC-HE-100K — 结直肠癌组织学图像分类 AI-Ready Wikipedia

INFOBOX

字段 内容
数据集名称 NCT-CRC-HE-100K(含 CRC-VAL-HE-7K 验证集)
英文全称 100,000 histological images of human colorectal cancer and healthy tissue
别名/简称 Kather 100K、CRC-100K、CRC-100K-Raw(指 NONORM 版)、kather100k(TIAToolbox 命名)
疾病分类 ICD-11 2B90(结肠恶性肿瘤)、2B91(直肠乙状结肠交界恶性肿瘤)、2B92(直肠恶性肿瘤)
SNOMED CT 363406005(Malignant tumour of colon)、94608002(Adenocarcinoma of colon)、34402009(Colon structure)
数据模态 数字病理:FFPE 切片 H&E 染色扫描图像 patch(静态 2D)
AI 任务类型 9 类多类图像分类;自监督预训练/特征提取;基础模型线性探针与 KNN 评测
样本总数 107,180 张 patch(100,000 训练 + 7,180 验证;另有 NONORM 版 100,000 张)
数据大小 24.2 GB(3 个 ZIP,Zenodo 官方合计)
数据格式 TIFF(RGB,224×224 px,0.5 µm/px)
许可证 CC-BY 4.0
访问级别 开放(Zenodo 直链下载,无需注册)
DUO 标签 NRES(无限制)+ GRU(通用研究使用),商用须署名
语言 元数据德语/英语;图像数据无语言内容
首发日期 2018-04-07(Zenodo v0.1)
最后更新 2018-04-07(v0.1 后官方未再版本化;社区镜像持续维护)
发布机构 德国国家肿瘤疾病中心(NCT Heidelberg);曼海姆大学医学中心(UMM)病理研究所
官方主页 zenodo.org/records/1214456
下载地址 NCT-CRC-HE-100K.zip(11.7 GB)
DOI 10.5281/zenodo.1214456(数据集);10.1371/journal.pmed.1002730(论文)
引用次数 1,074(Semantic Scholar,截至 2026-09);Zenodo 页面收录 62 篇引用该数据集的文献
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方 train/val 划分 + 目录即标签结构,torchvision/HF/TIAToolbox 均可一键加载;扣分:无 patch→患者映射、验证集类别分布漂移、需自行实现加权采样与 balanced accuracy
页面状态 published

§0 E-E-A-T 信任声明与免责声明

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、组织学类别与临床任务定义、金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(目录即标签体系、TIFF 位深问题)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

审核方式:交叉审核

利益冲突声明:千方病案医数集与 NCT Heidelberg、UMM、Zenodo 无任何商业利益关联。本页面不销售 NCT-CRC-HE-100K 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。NCT-CRC-HE-100K 采用 CC-BY 4.0 许可,使用时须注明原始出处(Zenodo DOI 10.5281/zenodo.1214456)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。

§1 数据集概览

§1.0 📌 30 秒速览

这是什么? NCT-CRC-HE-100K 是病理 AI 领域最经典的 patch 级分类数据集之一:10 万张 224×224 像素的 H&E 染色显微图像小块,每一块都被病理专家归入 9 类组织之一——脂肪、背景、碎屑、淋巴细胞、黏液、平滑肌、正常结肠黏膜、癌相关间质和结直肠腺癌上皮。它还有一个"期末考试":来自 50 名全新患者的 7,180 张验证 patch(CRC-VAL-HE-7K),训练集与验证集患者零重叠。

为什么重要? 它伴随 Kather 等 2019 年 PLoS Medicine 论文发布——该研究首次证明从常规 H&E 切片自动提取的"深度间质评分"是结直肠癌独立预后因子。10 万 patch 的规模、9 类肿瘤微环境语义、CC-BY 4.0 完全开放,使它成为 UNI、CONCH、Prov-GigaPath、Virchow 等病理基础模型的标准 ROI 级评测场。

我能用它做什么? 训练 patch 分类器(原论文 9 类准确率 >94%);给自监督/基础模型做线性探针或 KNN 评测(CONCH 平衡准确率 0.941、UNI 0.925);把它当特征提取器 backbone 用于全切片弱监督流水线;或作为教学与数据质量研究的样本(已有研究证明仅用 RGB 均值就能"作弊"到 50%+ 准确率)。

§1.1 摘要

NCT-CRC-HE-100K 的构建流程:病理团队在 86 张 H&E 染色 FFPE 切片(来自 NCT Biobank 与 UMM 病理档案,含结直肠癌原发灶、肝转移灶,正常组织类另用胃切除标本非肿瘤区域增强)上手工圈定单组织区域,再以非重叠方式切成 224×224 px(0.5 µm/px,等效 20x)小 patch,共 100,000 张;标准版经 Macenko 方法颜色归一化以压制切片间染色差异,官方同时发布未归一化的 NONORM 版本。验证集 CRC-VAL-HE-7K 从 50 名与训练集无重叠的结直肠腺癌患者切片中以同样协议提取 7,180 张。原论文用迁移学习 CNN 达到 9 类准确率 >94%,并基于分类器输出构建"深度间质评分",在 TCGA 500 例与 DACHS 409 例两个独立队列中证明其独立预后价值(OS HR 1.99 与 1.63)。数据以"类别目录 + TIFF 文件"的扁平结构发布于 Zenodo,v0.1(2018-04-07)至今未变。

从今天的视角看,这个 2018 年的数据集做对了三件此后被反复验证重要的事:患者独立的验证集(今天被称为"泄漏卫生")、双版本发布(归一化 + 原始染色,天然构成域偏移实验台)、零限制许可(使它能够进入几乎所有基础模型的评测组合)。这三点解释了它为何在 2024 年后反而比许多更大更新的数据集更常被引用。

§1.2 战略价值

基础模型时代的标准 ROI 评测场。 2024 年起,UNI(Chen et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-02857-3)与 CONCH(Lu et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-02861-7)及其官方仓库把「CRC-100K-Raw」9 类 ROI 分类列为代表性基准:在冻结特征上跑 KNN(K=20),CONCH 0.941、Prov-GigaPath 0.929、UNI 0.925、Virchow 0.919(平衡准确率,见 KatherLab/CONCH README)。这意味着任何新病理基础模型都可以用同一数据、同一协议与这些旗舰模型直接对标——这是它区别于绝大多数数据集的独特生态位。

肿瘤微环境(TME)语义的最小可学单元。 9 类标签本质上是对结直肠癌 H&E 形态学的一套轻量 TME 词表:TUM/STR/LYM/MUC 等类别恰好对应间质评分、免疫浸润、黏液腺癌等有临床含义的构成要素。把它作为预训练语料或特征基座,下游做弱监督全切片分类(如 MSI 预测、生存分析)时特征空间天然对齐病理语义,这也是 TIAToolbox 官方提供 kather100k 预训练 backbone(见官方预训练页)的原因。

开放许可与教学友好。 CC-BY 4.0 + 直链下载 + 24.2 GB 体量,使其成为少数可被完整下载、反复基准化且允许商用的病理金标准(商用须署名)。围绕它已形成正反馈生态:LUnit DINO 自监督基准、HuggingFace 19+ 个派生模型、以及一篇专门剖析其数据质量偏倚的论文(Ignatov & Malivenko, 2024, arXiv:2409.11546),让后来者能站在已知的坑上做研究。

可预期的"批评红利"。 一个被彻底审计过的数据集比一个看似完美无瑕的数据集更有研究价值:颜色捷径、类间伪影、分布漂移等缺陷都已有文献定量描述与复现代码,新方法可以直接以"修复这些缺陷"为叙事起点——这在数据集选择上是一种被低估的优势。

§1.3 同类数据集横向对比

数据集 规模 模态/规格 标注 与 NCT-CRC-HE-100K 的差异化
NCT-CRC-HE-100K + CRC-VAL-HE-7K 100,000 + 7,180 patch H&E,224×224,0.5 µm/px 9 类 patch 级,手工圈定区域 患者独立验证集;基础模型标配评测;CC-BY 4.0
Kather Texture 2016(Zenodo 53169 5,000 patch(8 类)+ 100 张大图 H&E,150×150,0.5 µm/px 8 类(无 BACK/DEB/LYM 细分) 前身数据集,规模小,适合快速基线
PatchCamelyon(官方页 327,680 patch H&E,96×96 淋巴结转移二分类 规模更大但任务单一,无多类 TME 语义
EBHI(ScienceDirect 协议 5,000 图像 H&E,224×224 5 类息肉/腺体分类 面向息肉诊断,低倍率,规模小
TCGA-COAD/READ 全切片 约 1,000 张 WSI H&E 全切片 患者级生存/分子标签 有真实结局标签但无 patch 级组织标注
HunCRC(Pataki et al., 2022, Sci Data. DOI 10.1038/s41597-022-01450-y 23 张 WSI 多区域标注 H&E 全切片 22 类组织学指标,多名标注者 标注更细但规模小、许可证更严格

§1.4 版本时间轴

时间 版本/事件 说明
2018-04-07 Zenodo v0.1 首发 NCT-CRC-HE-100K(11.7 GB)+ NONORM(11.7 GB)+ CRC-VAL-HE-7K(800.3 MB),DOI 10.5281/zenodo.1214456
2018-05 → 2018-12 论文投稿与接收 PLoS Medicine(2018-05-23 投稿,2018-12-17 接收)
2019-01-24 论文正式发表 PLoS Med 16(1): e1002730,PMID 30677016;随文公开姊妹数据(Zenodo 1420524、1471616)
2023 预训练生态成熟 TIAToolbox 发布 resnet18/50 等 kather100k 预训练 backbone;LUnit DINO 自监督基准在此数据上训练
2024-09 系统性质量批判 arXiv:2409.11546 揭示颜色捷径、JPEG 伪影与动态范围损坏样本
2024–2026 基础模型标配 UNI/CONCH/GigaPath/Virchow 官方基准采用 CRC-100K-Raw ROI 分类(平衡准确率 0.80–0.94 区间)

§1.5 典型应用场景

  1. 基础模型 ROI 评测:冻结 UNI/CONCH 等编码器,在 100K 上提特征、7K 上线性探针/KNN,一句话与旗舰模型对标(协议见 §8.3)。
  2. 监督训练的 patch 分类器:ResNet/EfficientNet/ViT 从头到尾微调,作为病理分类教学与新方法验证的最小闭环(原论文 >94% 准确率为参照线)。
  3. 自监督预训练语料:DINO/SimCLR 等在 10 万 patch 上预训练 ViT,再迁移到下游任务(LUnit DINO 基准的做法)。
  4. 弱监督 WSI 流水线的特征基座:用在本数据集上预训练的特征提取器给 TCGA 全切片切块提特征,再接 ABMIL/TransMIL 做患者级建模。
  5. 数据质量与捷径学习研究:利用其已证实的颜色捷径与伪影问题,研究数据集偏差检测与去偏方法(arXiv:2409.11546 提供完整复现代码)。

场景选型提示:场景 1–2 关注 patch 级指标,坑点集中在评估口径(§6.5 坑点 2/4);场景 3–4 关注特征迁移,必须把"训练域选择"(NORM vs NONORM)写进方法节(坑点 7);场景 5 则直接以 arXiv 复现代码为起点,避免重复造轮子。

§2 医学背景

§2.1 ICD-11 编码映射

数据集 9 类标签中仅 TUM(结直肠腺癌上皮)直接对应疾病实体;依据 ICD-11 中文版第 2 章,结直肠癌按原发部位映射如下:

数据集实体 ICD-11 编码 ICD-11 术语(中文版)
TUM(结肠原发,未细分) 2B90.Z 结肠恶性肿瘤,未特指的
TUM(乙状结肠原发,腺癌) 2B90.30 乙状结肠腺癌
TUM(直肠乙状结肠交界,腺癌) 2B91.0 直肠乙状结肠交界处腺癌
TUM(直肠原发,腺癌) 2B92.0 直肠腺癌
TUM(部位未特指,腺癌) 2B93.0 未特指部位的大肠腺癌

§2.1b SNOMED CT 映射

标签 SNOMED CT 首选术语 映射说明
TUM 94608002 Adenocarcinoma of colon 腺癌上皮的形态学主概念
TUM(定位补充) 363406005 Malignant tumour of colon 结肠恶性肿瘤定位概念
NORM 34402009 Colon structure 正常结肠黏膜的解剖结构锚点
LYM 59441001 Structure of lymph node 淋巴细胞浸润区对应的淋巴样结构
ADI 23443005 Adipose tissue structure 脂肪组织结构
MUS 14766009 Structure of smooth muscle tissue 平滑肌组织结构
MUC —(组合编码) 与 TUM/STR 共现的黏液成分 无单一直接概念,需按成分组合编码
STR —(组合编码) 癌相关间质为功能性描述 需映射至结缔组织+肌成纤维细胞概念组合
DEB / BACK —(不适用) 碎屑/背景为成像伪实体 非组织学疾病概念,无标准编码

§2.2 疾病简介与流行病学

结直肠癌(colorectal cancer, CRC)是起源于结肠或直肠上皮的恶性肿瘤,绝大多数为腺癌(ICD-O-3 形态学编码 M-8140/3),遵循"腺瘤—癌"的腺瘤性息肉恶性转化路径。按 GLOBOCAN 2020 统计,结直肠癌全球年新发约 193 万例、死亡约 93 万例,发病率居恶性肿瘤第三位、死亡率第二位。病理诊断的金标准是 FFPE 组织的 H&E 染色镜检,由病理医师在光镜下评估肿瘤分化、浸润深度(T 分期)、脉管侵犯等;肿瘤微环境(TME)——间质比例、淋巴细胞浸润、黏液成分——已被证实与预后及治疗反应相关,这正是本数据集 9 类标签的临床语义来源(Kather et al., 2019, PLoS Med)。

分期与形态学背景:临床采用 UICC/AJCC 第 8 版 TNM 分期(T 浸润深度、N 淋巴结、M 远处转移),病理报告还包含肿瘤出芽、脉管侵犯、黏液比例等形态学参数——其中肿瘤间质比例与肿瘤浸润淋巴细胞(TIL)正是本数据集 STR/LYM 类的对应物。WHO 消化系统肿瘤分类将结直肠腺癌细分为管状腺癌、黏液腺癌(黏液成分 >50%)、印戒细胞癌等亚型;本数据集的 MUC 类与黏液成分的量化研究直接相关。

§2.3 临床任务定义

本数据集支持的任务处于"诊断辅助"链条的中游:

任务 输入 输出 临床定位
组织类型识别(主任务) 224×224 H&E patch 9 类组织标签 自动"组织分解",为 WSI 级分析提供基础词表
肿瘤区检测 WSI 切块 TUM 概率图 辅助聚焦诊断视野,缩小阅片范围
TME 定量 WSI 全部 patch 的类别构成 各类组织占比 间质/免疫/黏液定量,替代人工估计
预后建模 组织占比聚合的深度间质评分 生存风险分层 原论文在 TCGA/DACHS 验证的科研级应用

原论文的"深度间质评分"即:先用本数据训练 9 类 CNN,再把 WSI 分解为 patch 类别构成,以分类器输出激活构造评分,最终在多变量 Cox 模型中作为独立预后因子(OS HR 1.99 [1.27–3.12],p=0.0028;见 PLoS Med 2019)。

为什么是 patch 分类而非像素分割? 9 类 patch 词表是精度与成本的折中:像素级标注每张 WSI 需要数小时专家工时,而"区域圈定 + patch 继承"把标注成本降低约两个数量级,同时保留了 TME 定量所需的类别构成信息。代价是边界 patch 标签模糊(坑点 3)与空间细节信息的损失——这也是后续弱监督/多实例学习研究把 100K patch 分类器当作"词表模型"再向上组合的原因。

§2.4 患者人群

维度 训练集(86 张切片) 验证集(50 名患者)
来源机构 NCT Biobank(海德堡)+ UMM 病理档案(曼海姆) NCT 组织库(海德堡)
组织类型 CRC 原发灶 + CRC 肝转移灶;正常类含胃切除标本非肿瘤区 结直肠腺癌
年龄/性别 未公布(匿名存档样本) 未公布(匿名存档样本)
种族/地域 德国单一国家、双中心 德国单一国家、单中心
就医类型 三级肿瘤中心会诊/手术存档 同左
患者重叠 与训练集患者零重叠(官方明确声明)

⚠️ 注意:官方未公布患者年龄、性别、分期分布等人口学统计,做公平性分析时不能假设人群代表性(见 §7.5)。

§2.5 临床价值

对临床端的价值主要有三层:其一,阅片效率——9 类自动组织分解可快速圈出肿瘤区与淋巴结浸润区,减少病理医师在低信息背景(BACK/脂肪)上的扫描时间;其二,TME 定量标准化——间质比例、肿瘤浸润淋巴细胞(TIL)目前依赖人工半定量估计,观察者间差异大,patch 分类器可给出可复现的连续量;其三,预后生物标志物研发——原论文证明从 H&E 提取的深度间质评分在两个独立队列中独立于 UICC 分期预测生存(PLoS Med 2019),为"常规染色即可预后分层"提供了范式。需要强调:这些均为研究级证据,作者明确指出进入临床工作流前需前瞻性验证。

其四,多任务特征迁移:9 类分类器学到的表征被广泛用作 MSI 状态、分子分型、生存预测等下游任务的初始化或特征基座,这是该数据集在临床研究中的最大杠杆。其五,教学与可复现性基准:CC-BY 4.0 与直链下载使其成为病理 AI 课程、论文消融实验与代码演示的事实标准数据。

§2.6 金标准对照表

属性 内容
标注划分 训练 100,000 patch(86 切片)/验证 7,180 patch(50 患者独立)
标注方式 病理专家手工圈定单组织区域 → 非重叠切 patch(patch 天然继承区域标签)
标注者 Kather/Halama/Marx 团队病理与肿瘤学研究者(具体人数与资历未逐一公布)
一致性评估 官方未公布标注者间 Kappa;原论文以外部患者验证集准确率(>94%)间接佐证
标注性质 patch 级类别标签(区域级提取),非像素级分割;混合组织 patch 存在固有模糊
官方评估建议 “类别仅大致平衡;不应只用全集合准确率评估分类器;有训练偏倚风险时建议按类平衡”(Zenodo 官方注释原文意译)
版本演进 v0.1(2018-04-07)后官方未再更新;数据质量审计由第三方完成(arXiv:2409.11546)
已知缺陷披露 官方披露类别不平衡与染色变异(NONORM 版说明);扫描仪信息与患者映射未披露(见 §7.1)

§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐文件 大小 理由
训练 + 快速出结果 NCT-CRC-HE-100K.zip 11.7 GB Macenko 归一化版,染色一致,收敛快,论文与多数复现用此版
基础模型/真实泛化评测 NCT-CRC-HE-100K-NONORM.zip 11.7 GB 保留真实染色变异,UNI/CONCH 基准即用 Raw 版(CRC-100K-Raw),泛化结论更可信
只需验证/外部测试 CRC-VAL-HE-7K.zip 800.3 MB 50 名独立患者 7,180 patch,可直接当外部测试集挂载到任何已训模型
全功能研究 三个 ZIP 全下 24.2 GB 训练/对照/验证齐备,可做归一化消融实验

§3.1 模态详情

  • 成像对象:福尔马林固定石蜡包埋(FFPE)组织的 H&E 染色切片,来源为 NCT Biobank(海德堡)与 UMM 病理档案(曼海姆)的匿名存档样本(Zenodo 官方描述)。
  • 像素规格:所有 patch 均为 224×224 px、RGB、0.5 µm/px——等效 20x 物镜的观察分辨率,覆盖约 112×112 µm 组织区域,单 patch 通常容纳数十至数百个细胞核。
  • 颜色处理:标准版 100K 全部经 Macenko 方法归一化(Macenko et al., 2009, ISBI. DOI 10.1109/ISBI.2009.5193250);NONORM 版保留原始染色变异。两版来自同一原始数据但 tile 为随机选择,区域不完全相同(官方声明)。
  • 文件形态:TIFF 无损存储;注意官方同时注明数据集中存在类间不一致的压缩伪影与个别动态范围损坏样本(arXiv:2409.11546)。
成像维度 规格/说明
标本类型 FFPE 石蜡块切片
染色 H&E(苏木精-伊红)
扫描分辨率 0.5 µm/px(等效 20x 物镜)
patch 尺寸 224×224 px(≈112×112 µm 视野)
颜色管线 标准版 Macenko 归一化;NONORM 版原始染色
存储编码 8-bit RGB TIFF

§3.2 子集样本数

子集 样本数 患者数 用途
NCT-CRC-HE-100K 100,000 86 张源切片(患者数未公布) 训练
CRC-VAL-HE-7K 7,180 50(与训练集零重叠) 验证/外部测试
NCT-CRC-HE-100K-NONORM 100,000 同上(区域随机、非同一批 tile) 对照/真实泛化评测

注意 NONORM 与 NORM 虽然都标注为 100,000 张,但官方声明二者的 tile 是从同一原始数据随机选择的,并非逐像素对应的两个版本——做"归一化消融"时这是两组近似而非严格配对的样本。

§3.3 格式规格

属性 规格
文件格式 TIFF(RGB 三通道)
分辨率 224×224 px(全部一致,无尺寸变化)
位深 8 bit/通道(少数样本存在动态范围异常,见 §6.5 坑点 7)
组织结构 顶层目录名=类别名,文件名为"类别-序号.tif"
打包 3 个独立 ZIP(训练/NONORM/验证),MD5 见 §6.2
官方镜像 HuggingFace 1aurent/NCT-CRC-HE(parquet)、DykeF/NCTCRCHE100K(loading script)

§3.4 存储大小

Zenodo 官方三个文件合计 24.2 GB:NCT-CRC-HE-100K.zip 11.7 GB(MD5 6fd702d11df6292bc054397ae038a464)、NCT-CRC-HE-100K-NONORM.zip 11.7 GB(MD5 035777cf327776a71a05c95da6d6325f)、CRC-VAL-HE-7K.zip 800.3 MB(MD5 2fd1651b4f94ebd818ebf90ad2b6ce06)。解压后因逐文件元数据开销略增;若仅需训练+验证约 12.5 GB。HuggingFace parquet 镜像下载体积 27.7 GB(含三分区重编码)。

磁盘与带宽规划:三个文件全量下载约 24.2 GB,解压后约 25–26 GB,训练期峰值磁盘建议预留 60 GB(数据 + 缓存特征 + checkpoint)。Zenodo 单线程下载约 10–30 MB/s,断点续传用 wget -c;国内环境建议走 HuggingFace 镜像或学术加速。仅需 NORM 训练 + 验证的最小组合约 12.5 GB。

§3.5 标注方式

人工弱监督(区域级):病理团队先在 WSI 上手工圈定纯组织区域(hand-delineated),再在区域内非重叠切 patch——patch 标签继承自所在区域,而非逐 patch 复核。这带来两点推论:其一,区域内部的异质性(如间质中混入肿瘤细胞巢)会使部分 patch 标签模糊;其二,人工圈定天然偏向"典型"区域,边缘过渡区与罕见形态覆盖不足。官方明确建议"类别仅大致平衡,不应只看全集合准确率"(Zenodo)。

标注流水线可复述为五步:1) 从组织库调档匿名 FFPE 块;2) 切片与 H&E 染色;3) 全切片扫描(0.5 µm/px);4) 病理专家在 WSI 上圈定单组织区域(每类尽量覆盖多患者、多视野);5) 区域内随机非重叠切 224×224 patch,区域标签下沉到 patch。步骤 4–5 的执行细节(区域数量、每片工时、质检比例)官方未公布。

§3.6 标注者资质与一致性

标注由 NCT/UMM 的病理与肿瘤信息学研究团队完成(团队含病理学家 Alexander Marx、肿瘤学家 Niels Halama 等多学科成员)。官方未公布逐 patch 复核流程、标注者人数与一致性 Kappa;原论文以 50 名独立患者验证集上 >94% 的 9 类准确率作为间接质量证据(PLoS Med 2019)。使用时应把 MUC↔TUM、STR↔DEB 等混淆矩阵对角线外的高频对视为"标注模糊"而非单纯模型错误。

对使用者的含义:由于缺少逐 patch 复核记录,不应把 100% 的标签当作绝对真值;经验做法是把类间混淆矩阵的高频离对角对(MUC↔TUM、STR↔DEB、LYM↔STR)视为"共享不确定带",在报告指标时对这些类别对给出单独讨论(见坑点 3)。

§3.7 采集周期

切片为 NCT/UMM 匿名存档样本,伦理批件 S-207/2005 于 2017-12-20 续展,数据集于 2018-04-07 发布;具体取材年份区间官方未公布。TCGA 与 DACHS 队列的应用分析分别对应 2018–2019 年研究期(DACHS 队列入组 2003–2007)。

对使用者的推论:无法按"取材年代"分层分析时间效应(如染色Protocol迭代、免疫治疗时代的影响);若研究需要时间维度,应改用带采集时间的队列(如 TCGA 或 DACHS)。

§3.8 地域覆盖

单一国家(德国)、两个中心(海德堡 NCT + 曼海姆 UMM)。无多国、多扫描仪覆盖——这既是数据同质性的优点,也是泛化到其他实验室时最大的外推风险(见 §7.6)。

跨中心研究的实操含义:把本数据当作"域 A",任何新中心数据都是"域 B";在 A 上训练、B 上测试的性能衰减是文献中反复出现的常态(染色与扫描差异是主因)。UNI/CONCH 选择 NONORM(Raw)版做基准正是为了让表征暴露在真实域变异下。

§3.9 设备规格

官方仅公布等效采样分辨率 0.5 µm/px(20x),未公布扫描仪型号、厂商与版本。独立分析显示数据集内部存在批间色彩/伪影差异,提示扫描/处理批次不均一(arXiv:2409.11546)。做扫描仪稳健性研究时需自行控制该混杂。

§3.10 深度溯源链

环节 内容 可追溯性
患者/组织 NCT Biobank(决议 2152/2154)+ UMM 病理档案(2017-806R-MA) 伦理批件号公示
染色 FFPE 常规 H&E 试剂/协议未公布
扫描 0.5 µm/px 数字扫描 设备型号未公布
区域圈定 病理专家手工单组织勾画 圈定软件/工时未公布
切分 非重叠 224×224 patch,随机选择 随机种子未公布
归一化 Macenko 方法(仅标准版) 参考图像未公布
发布 Zenodo v0.1 + CC-BY 4.0 DOI 固定
伴随论文 PLoS Med 16(1): e1002730 开放获取

§4 数据结构

§4.0 目录树

data_root/
├── NCT-CRC-HE-100K/                 # 训练集(11.7 GB,Macenko 归一化版)
│   ├── ADI/                         # 脂肪组织  10,407 张
│   │   ├── ADI-1.tif                #   文件名 = 类别前缀-序号
│   │   ├── ADI-2.tif
│   │   └── ...
│   ├── BACK/                        # 背景(空白)10,566 张
│   ├── DEB/                         # 碎屑      11,512 张
│   ├── LYM/                         # 淋巴细胞  11,557 张
│   ├── MUC/                         # 黏液       8,896 张
│   ├── MUS/                         # 平滑肌    13,536 张
│   ├── NORM/                        # 正常结肠黏膜 8,763 张
│   ├── STR/                         # 癌相关间质 10,446 张
│   └── TUM/                         # 腺癌上皮  14,317 张
├── CRC-VAL-HE-7K/                   # 官方验证集(800.3 MB,50 名独立患者)
│   ├── ADI/ ... TUM/                # 结构与训练集完全相同
└── NCT-CRC-HE-100K-NONORM/          # 可选:未归一化版(11.7 GB),目录结构同上

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
patch_id string 文件名主干,“类别-序号” LYM-108 唯一索引、去重 全局唯一
label_name string 类别前缀(目录名=文件名前缀) LYM 监督标签 区域内异质性可致标签模糊 ADI/BACK/DEB/LYM/MUC/MUS/NORM/STR/TUM
label int 类别索引(字母序,与 HF/ImageFolder 一致) 3 损失计算 同上 0–8
image uint8[224,224,3] RGB 像素阵列 模型输入 少数样本动态范围损坏 无(损坏样本需自行过滤) 0–255
mpp float 像素物理尺寸,全局常量 0.5 尺度换算 0.5
patient_id 不存在:训练集无患者映射 泄漏控制的阻碍
split 不存在:官方仅隐含 train(100K)/val(7K) 需自行实现
subset string 所属 ZIP:norm/nonorm/val norm 版本追踪 NORM 与 NONORM tile 不同
organ_source string* 组织来源(CRC 原发/肝转移/胃切除正常区) 偏倚分析 字段未发布
file_size int 单文件字节数 ≈122 KB 均值 存储预算 约 100–150 KB(未压缩 RGB 上限 147 KB)

§4.2 标签分布

数据来自 PMC10827850 Table 2Frontiers in Oncology 2025 的独立统计(与官方"大致平衡"声明一致):

类别 中文语义 训练集 n (%) 验证集 n (%)
ADI 脂肪组织 10,407(10.4%) 1,338(18.6%)
BACK 背景(空白) 10,566(10.6%) 847(11.8%)
DEB 碎屑 11,512(11.5%) 339(4.7%)
LYM 淋巴细胞 11,557(11.6%) 634(8.8%)
MUC 黏液 8,896(8.9%) 1,035(14.4%)
MUS 平滑肌 13,536(13.5%) 592(8.2%)
NORM 正常结肠黏膜 8,763(8.8%) 741(10.3%)
STR 癌相关间质 10,446(10.4%) 421(5.9%)
TUM 结直肠腺癌上皮 14,317(14.3%) 1,233(17.2%)
合计 100,000 7,180

注意两处结构性差异:训练集最少的 NORM(8.8%)与最多的 TUM(14.3%)相差约 1.6 倍;验证集分布明显漂移——ADI 升至 18.6%、DEB 降至 4.7%、MUC 升至 14.4%。

上述训练集计数经三个独立来源交叉一致(PMC10827850STAR ProtocolsFrontiers in Oncology 2025),且三数合计恰为 100,000;部分二手资料把 DEB 误写为 1,512(丢一位),使用网络统计时请以本表为准。

§4.3 关键统计

  • patch 尺寸全部为 224×224 px(min=median=max),0.5 µm/px,单 patch 视野约 112×112 µm。
  • 9 类中 7 类落在 8.8%–11.6% 区间,MUS/TUM 略多——官方结论"roughly balanced"成立但不严格平衡。
  • 训练/验证 patch 比 13.9:1;验证集 50 患者人均约 144 patch。
  • 数据集无缺失图像、无重复 patch(非重叠切分保证),但存在少量动态范围损坏样本(arXiv:2409.11546)。
  • 解压后单 patch 未压缩 RGB 体量 147 KB(224×224×3),官方 ZIP 平均 ≈122 KB/patch(11.7 GB / 100,000),提示部分文件含压缩。
  • 训练/验证目录结构完全一致,torchvision.datasets.ImageFolder 跨集合自动编码对齐。
  • 每类验证样本 339–1,338 张,per-class 指标的 95% 置信区间宽度约 ±3–5 个百分点(按二项近似估算),模型间小差异需谨慎解读。

§4.4 数据层级

患者(86 切片源患者数未公布 / 验证 50 名)     ← 最细粒度:切片级,无患者 ID 字段
  └── H&E 全切片(86 张训练源 + 50 患者验证源)
        └── 手工圈定单组织区域(区域标签 = 类别)
              └── 224×224 非重叠 patch(100,000 / 7,180)  ← 数据集发布粒度

关键缺陷:发布层级止步于 patch,患者→切片→patch 的映射字段被省略,导致 §6.5 坑点 1 的患者泄漏问题无法在数据内部解决。

层级缺失的连带影响:所有"按患者分组"的标准技术(GroupKFold、患者级 bootstrap、域自适应按 slide 加权)在本数据上均无法直接实施;社区通行的替代方案是把 7K 当作唯一患者级证据源(§5.3),或在自建数据上重建完整层级。

§4.5 缺失值与信息性缺失

缺失项 性质 影响 处理建议
患者人口学(年龄/性别/分期) 从未发布 无法做人群代表性/公平性分析 外部补充队列(TCGA-COAD 临床表)
patch→患者映射 从未发布 无法做患者级划分 用 7K 验证集承担患者泛化结论(见坑点 1)
扫描仪元数据 从未发布 无法分析设备效应 以染色/伪影代理指标做稳健性检查
动态范围损坏样本 质量缺陷而非缺失 拉低个别类别表现 加载时断言 uint8/RGB 并过滤(坑点 7)
染色归一化参数 Macenko 参考图像未发布 无法精确复现官方归一化 用 torchstain 自行估计(先训练集、后套验证集)

§5 划分与使用建议

§5.1 官方划分

官方仅提供隐含二分:NCT-CRC-HE-100K(100,000,训练)与 CRC-VAL-HE-7K(7,180,验证),患者零重叠是官方明确声明的设计(Zenodo)。训练集内部没有任何官方划分。

这一设计把"患者泛化"的验证责任完全交给 7K——官方称其为 validation set,但它既不该参与训练,也不该参与早停等任何训练决策;使用者应在模型卡中明确自己的用法(纯外部测试 vs 验证集),两种用法得出的数字含义不同。

§5.2 社区惯例

社区有三种做法:其一,直接用官方 100K/7K(原论文与 UNI/CONCH 教程均如此);其二,把 100K 按 80/10/10 随机切 train/val/test——此法有患者泄漏风险(见坑点 1);其三,把 100K 按 K 折做交叉验证时按类别分层随机分——同样无法回避 patch 相关性问题。

三种做法的适用边界:法一适合方法学论文(与原论文/基础模型基准直接可比);法二只适合训练诊断与超参搜索,结论不得外泄到论文主表;法三适合鲁棒性研究但必须披露泄漏风险。

§5.3 划分策略建议与泄漏风险 ⭐

本数据集的泄漏风险有独特结构:同一手工圈定区域切出的相邻 patch 几乎共享全部组织学内容,且同一患者的多张 patch 来自相同染色/扫描批次。随机 patch 级划分会让"同一张照片的复印件"同时出现在训练与测试中,指标虚高。由于官方未发布 patch→患者映射,数据内部无法根治,可行策略是:

  1. 所有泛化结论只以 CRC-VAL-HE-7K(患者独立)报告;
  2. 100K 内部的 val 集仅用于训练早停/超参选择,不作为性能证据;
  3. 需要患者级建模时,改用 TCGA-COAD/READ 或 DACHS 等有患者结构的外部队列。

判断泄漏是否影响你结论的快速检验:把「100K 内部划分指标 − 7K 指标」的差值当作"泄漏膨胀量";若差值超过 2 个百分点,任何基于内部划分的消融结论都要打折报告。

§5.4 交叉验证建议

若必须在 100K 内做 K 折:采用分层 K 折 + 早停于 7K,并在论文中明确声明"内部折指标含 patch 相关性偏倚,仅用于超参选择"。禁止把内部折指标与外部患者级结果并列比较。

若目的是模型选择而非报告,可在 100K 内做 5 折分层 CV + 以 7K 为统一早停参照;这样每一折都能接收到患者无关的信号,选择偏差可控——但 7K 一旦参与早停,它在论文中就必须改称"验证集"而非"外部测试集"。

§5.5 外部验证建议

推荐外部验证链:CRC-VAL-HE-7K(同类、患者独立)→ NONORM 版(染色变异)→ TCGA-COAD/READ WSI(患者级生存/分子)→ 其他中心/扫描仪数据。每前进一跳,预期性能都会下降,下降幅度本身就是泛化性的度量。

外部验证的成本递增、信息也递增:7K 只验证"新患者同域",NONORM 验证"染色域",TCGA 验证"中心与人群域",本地数据验证"落地域"。当前审稿环境下,方法学论文通常被期望至少跳两级。

§5.6 论文方法节声明模板

写论文时建议逐条披露以下五点(可直接改写进 Methods/Limitations):

  1. 训练/验证采用官方 100K/7K 划分,验证集来自 50 名与训练集无重叠的患者;
  2. 训练集不含 patch→患者映射,训练内部划分含 patch 级相关性偏倚,仅用于模型选择;
  3. 主指标为 balanced accuracy 与 per-class F1(类别大致平衡,但验证集先验漂移:DEB 11.5%→4.7%);
  4. 训练域注明 NORM(Macenko 归一化)或 NONORM(原始染色)版本;
  5. 局限性:数据来自德国双中心、扫描仪未知,跨中心泛化结论需外部队列支撑。

§6 AI 就绪指南

§6.0 云端快速启动

不想下载 24 GB ZIP?用 HuggingFace parquet 镜像(1aurent/NCT-CRC-HE)直接流式加载:

# pip install datasets —— 官方 Zenodo 数据的 parquet 镜像,三个 split
from datasets import load_dataset
ds = load_dataset("1aurent/NCT-CRC-HE")
print(ds)                      # CRC_VAL_HE_7K / NCT_CRC_HE_100K / NCT_CRC_HE_100K_NONORM
ex = ds["NCT_CRC_HE_100K"][0]  # {'image': PIL.Image, 'label': int(0-8)}

无 GPU 环境的快捷路径:先只下载 CRC-VAL-HE-7K(800.3 MB),用云端 CPU 给 7K 提取基础模型特征后跑 KNN,数分钟内即可与旗舰模型基准完成一次对齐(协议见 §6.4b)。

§6.1 快速上手

# 目录结构预期:解压 3 个 ZIP 到 data_root/,得到
#   data_root/NCT-CRC-HE-100K/{ADI..TUM}/*.tif        ← 训练
#   data_root/CRC-VAL-HE-7K/{ADI..TUM}/*.tif          ← 验证
#   data_root/NCT-CRC-HE-100K-NONORM/{ADI..TUM}/*.tif ← 可选
# data_root 拼接关系:DATA_ROOT / "NCT-CRC-HE-100K" 直接可被 ImageFolder 消费
# 最小可用子集:任意两个类别目录即可跑通端到端(如 NORM/ vs TUM/ 二分类)
import torchvision

DATA_ROOT = "data_root"
train_ds = torchvision.datasets.ImageFolder(f"{DATA_ROOT}/NCT-CRC-HE-100K")
val_ds   = torchvision.datasets.ImageFolder(f"{DATA_ROOT}/CRC-VAL-HE-7K")
print(train_ds.class_to_idx)
# {'ADI': 0, 'BACK': 1, 'DEB': 2, 'LYM': 3, 'MUC': 4, 'MUS': 5, 'NORM': 6, 'STR': 7, 'TUM': 8}
# 注意:ImageFolder 按目录名字母序编码,与 HuggingFace class_label 顺序一致
print(len(train_ds), len(val_ds))  # 100000 7180

§6.2 数据获取

文件 大小 MD5 直链
NCT-CRC-HE-100K.zip 11.7 GB 6fd702d1…a464 下载
NCT-CRC-HE-100K-NONORM.zip 11.7 GB 035777cf…325f 下载
CRC-VAL-HE-7K.zip 800.3 MB 2fd1651b…ce06 下载
# 无需注册,直链下载 + 校验 + 解压(Zenodo 欧洲服务器,国内建议使用镜像或断点续传)
wget -c https://zenodo.org/records/1214456/files/NCT-CRC-HE-100K.zip
wget -c https://zenodo.org/records/1214456/files/CRC-VAL-HE-7K.zip
md5sum NCT-CRC-HE-100K.zip   # 6fd702d11df6292bc054397ae038a464
unzip NCT-CRC-HE-100K.zip -d data_root/
unzip CRC-VAL-HE-7K.zip    -d data_root/

若通过 HuggingFace 加载,注意部分基础模型权重(UNI/CONCH/GigaPath)本身需在 HF 上申请——数据不需要,模型需要。

# HuggingFace 镜像直下原始 ZIP 的替代方案(国内带宽友好):
pip install -U huggingface_hub
hf download 1aurent/NCT-CRC-HE --repo-type dataset --local-dir data_hf/
# 或用 DykeF 的打包文件(tar.gz 形态,与 Zenodo 内容一致):
# https://huggingface.co/datasets/DykeF/NCTCRCHE100K/resolve/main/NCT-CRC-HE-100K.tar.gz

§6.3 预处理全流程

from pathlib import Path
from PIL import Image
import numpy as np

CLASSES = ["ADI", "BACK", "DEB", "LYM", "MUC", "MUS", "NORM", "STR", "TUM"]

def load_patch(path):
    """加载并校验单张 patch:强制 RGB、8bit、224x224(拦截损坏样本,见坑点 7)。"""
    img = Image.open(path)
    img.load()                      # 立即读取,避免延迟加载引发的句柄问题
    if img.mode != "RGB":
        img = img.convert("RGB")
    arr = np.asarray(img)
    assert arr.dtype == np.uint8 and arr.shape == (224, 224, 3), f"异常样本: {path}"
    return img

def label_from_filename(path):
    """文件名即标签:'LYM-108.tif' → 'LYM' → 3。禁止整串文件名当标签(坑点 6)。"""
    stem = Path(path).stem          # 'LYM-108'
    prefix = stem.split("-")[0]     # 'LYM'
    assert prefix in CLASSES, f"无法解析标签: {path}"
    return CLASSES.index(prefix)

def per_class_counts(root):
    """统计各类样本数,供加权采样使用(坑点 4)。"""
    return {c: len(list((Path(root) / c).glob("*.tif"))) for c in CLASSES}

如需自行做染色归一化(例如对 NONORM 版使用标准版做参考),推荐 torchstain(Macenko 的 PyTorch 实现,见 PMC10827850 的用法);但务必先在训练集估计归一化参数、再把同一变换套到验证集,切勿在验证集上重新估计。

# Macenko 归一化(torchstain):参考图取训练集典型 patch,变换统一应用于验证/外部数据
import torchstain
import torchvision.transforms as T

he_normalizer = torchstain.normalizers.MacenkoNormalizer()
ref = T.ToTensor()(load_patch("data_root/NCT-CRC-HE-100K/STR/STR-1.tif"))
he_normalizer.fit(ref)                       # 只在训练域拟合一次

target = T.ToTensor()(
    load_patch("data_root/NCT-CRC-HE-100K-NONORM/TUM/TUM-1.tif"))
normed = he_normalizer.normalize(I=target, beta=0.15, alpha=1)
# 提示:官方 NORM 版的 Macenko 参考图像未公布,自归一化结果与官方版必有差异,
# 因此"自归一化模型"的指标只能与自归一化基线比,不能与官方 NORM 版数字混排。
# 一次性数据体检:入库/训练前运行(对应坑点 6/7,输出可直接存档为数据卡附件)
from pathlib import Path
import numpy as np
from PIL import Image

def audit(root, classes=CLASSES):
    report = {}
    for cls in classes:
        files = sorted((Path(root) / cls).glob("*.tif"))
        bad_format, low_entropy = [], []
        for p in files:
            img = Image.open(p); img.load()
            if img.mode != "RGB":
                img = img.convert("RGB")
            arr = np.asarray(img)
            if arr.dtype != np.uint8 or arr.shape != (224, 224, 3):
                bad_format.append(p.name)          # 位深/尺寸异常(坑点 6)
            elif float(arr.std()) < 1.0:
                low_entropy.append(p.name)         # 近乎纯色 → 疑似损坏/空白异常
        report[cls] = {"count": len(files),
                       "bad_format": bad_format, "low_entropy": low_entropy}
    return report

rep = audit("data_root/NCT-CRC-HE-100K")
for cls, info in rep.items():
    n_bad = len(info["bad_format"]) + len(info["low_entropy"])
    print(f"{cls}: n={info['count']}, 异常样本={n_bad}")

§6.4 PyTorch DataLoader 完整代码

<details>
<summary>展开完整 Dataset + 加权采样 + DataLoader 代码(约 60 行)</summary>

import numpy as np
import torch
from pathlib import Path
from PIL import Image
from torch.utils.data import Dataset, DataLoader, WeightedRandomSampler
from torchvision import transforms

class CRCPatchDataset(Dataset):
    """NCT-CRC-HE-100K / CRC-VAL-HE-7K 通用 Dataset。
    目录结构:data_root/<CLASS>/<CLASS>-<id>.tif,目录名即标签。
    label 编码与 torchvision.ImageFolder / HuggingFace class_label 一致(字母序 0-8)。
    """
    CLASSES = ["ADI", "BACK", "DEB", "LYM", "MUC", "MUS", "NORM", "STR", "TUM"]

    def __init__(self, root, transform=None):
        self.samples, self.labels = [], []
        for idx, cls in enumerate(self.CLASSES):
            cls_dir = Path(root) / cls
            files = sorted(cls_dir.glob("*.tif"))
            assert files, f"类别目录为空或不存在: {cls_dir}"
            self.samples += files
            self.labels += [idx] * len(files)
        self.transform = transform

    def __len__(self):
        return len(self.samples)

    def __getitem__(self, i):
        img = Image.open(self.samples[i])
        img.load()
        if img.mode != "RGB":
            img = img.convert("RGB")
        if self.transform:
            img = self.transform(img)
        return img, self.labels[i]

# 归一化均值/方差:正式实验建议在训练集上实算;此处用 ImageNet 统计做占位起点
train_tf = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.RandomRotation(90),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
])
eval_tf = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
])

train_ds = CRCPatchDataset("data_root/NCT-CRC-HE-100K", transform=train_tf)
val_ds   = CRCPatchDataset("data_root/CRC-VAL-HE-7K", transform=eval_tf)

# 加权采样:按逆类频率过采样,抵消 TUM 14.3% vs NORM 8.8% 的轻度不平衡(坑点 4)
counts = np.bincount(train_ds.labels, minlength=len(CRCPatchDataset.CLASSES))
sample_weights = 1.0 / counts[train_ds.labels]
sampler = WeightedRandomSampler(sample_weights, num_samples=len(train_ds), replacement=True)

train_loader = DataLoader(train_ds, batch_size=256, sampler=sampler,
                          num_workers=8, pin_memory=True, persistent_workers=True)
val_loader   = DataLoader(val_ds, batch_size=512, shuffle=False,
                          num_workers=8, pin_memory=True)

x, y = next(iter(train_loader))
print(x.shape, y[:8])   # torch.Size([256, 3, 224, 224]) tensor([...])

</details>

§6.4b 冻结基础模型特征评测(UNI/CONCH 协议)

基础模型时代的标准玩法是"冻结特征 + KNN/线性探针",与 §8.1 排行榜直接可比:

# 方案 A(免申请、即开即用):TIAToolbox kather100k 预训练 backbone(HF/timm 直取)
# 方案 B(更强表征):mahmoodlab/UNI(需 HF 申请权重),代码结构完全一致
import timm
import torch
import torch.nn.functional as F
from torch.utils.data import DataLoader
from sklearn.metrics import balanced_accuracy_score

model = timm.create_model("hf-hub:1aurent/densenet201.tiatoolbox-kather100k",
                          pretrained=True, num_classes=0).eval()   # num_classes=0 → 输出特征
eval_tf = timm.data.create_transform(
    **timm.data.resolve_model_data_config(model), is_training=False)

def extract(ds_root):
    ds = CRCPatchDataset(ds_root, transform=eval_tf)
    loader = DataLoader(ds, batch_size=256, num_workers=8)
    feats, labels = [], []
    with torch.inference_mode():
        for x, y in loader:
            feats.append(model(x).cpu()); labels.append(y)
    return torch.cat(feats), torch.cat(labels)

train_f, train_y = extract("data_root/NCT-CRC-HE-100K")      # 首次提特征 GPU 约数十分钟
test_f,  test_y  = extract("data_root/CRC-VAL-HE-7K")
train_f = F.normalize(train_f, dim=1)
test_f  = F.normalize(test_f, dim=1)

# KNN(K=20) 余弦相似度投票——与 CONCH/UNI 官方 ROI 基准同协议
topk  = (test_f @ train_f.T).topk(20, dim=1).indices
pred  = torch.mode(train_y[topk], dim=1).values
print("KNN balanced acc:", balanced_accuracy_score(test_y, pred))

两种协议的取舍:KNN 反映表征的"最近邻结构",无需训练;线性探针(逻辑回归)反映线性可分性,更接近常见下游用法。官方基准报告 KNN 结果,做严格对比时两种都跑。

标签编码一致性提醒:上面 CRCPatchDataset 的类别索引与 ImageFolder、HuggingFace class_label(1aurent 镜像)三者一致(字母序 0–8);若混用 DykeF 加载脚本(按字符串标签返回),注意其输出是类名而非索引,进入 CrossEntropyLoss 前需显式映射。

§6.5 八个坑点 ⭐

⚠️ 坑点 1:patch 级划分导致患者泄漏,且数据内部无法根治(分类:数据泄漏)

问题:官方只发布类别目录,不含 patch→患者/切片映射;同一患者同一染色批次切出的 patch 高度相关,随机 patch 级 train/test 划分会让测试集"见过"训练患者的组织风格,指标虚高。
症状:100K 内部随机划分轻松 97%+,换到 7K 患者独立验证集立刻掉点数个百分点;论文间复现数字对不上。
解决

  1. 简单方法:一切泛化结论只在 CRC-VAL-HE-7K 上报告;100K 内部 val 仅做早停与调参。
  2. 进阶方法:自建数据时保留切片 ID 做分组划分(GroupKFold by slide);对公开 100K,可用染色/风格聚类代理"伪患者"做分组。
  3. SOTA 方法:训练时加 domain-adversarial 或按 slide 重切分自建队列,把"site/slide 泛化"作为一等公民指标。
    检测:比较 100K 随机划分与 7K 的指标差值——差值越大说明你的模型越依赖"记住患者风格"而非组织学本身。
    参考Zenodo 官方描述(86 切片、无映射字段);PLoS Med 2019(验证集设计初衷即患者独立)。

⚠️ 坑点 2:BACK/DEB 非组织类 + 轻度类不平衡,整体准确率失真(分类:偏倚陷阱)

问题:BACK(背景空白)与 DEB(碎屑)是成像伪实体而非组织;类别占比 8.8%–14.3% 不等,官方明确警告"分类器不应只用全集合准确率评估"。
症状:模型学会"大片空白=好样本";BACK 接近 100% 拉高总准确率,掩盖 DEB/STR 的真实错误;未加权训练时少数类召回偏低。
解决

  1. 简单方法:报告 balanced accuracy 与 per-class F1,而非 accuracy。
  2. 进阶方法:用 WeightedRandomSampler(§6.4)或类加权交叉熵(权重=逆频率),代码一行搞定。
  3. SOTA 方法:聚焦任务无关类——把 BACK/DEB 从目标任务中剔除重训(9 类→7 类),或在 WSI 聚合阶段给非组织类 patch 降权。
    参考Zenodo 官方注释原文Frontiers in Oncology 2025(类分布与加权损失实践)

⚠️ 坑点 3:9 类标签语义重叠——MUC vs TUM 混合 patch 的标注模糊(分类:标签理解)

问题:224×224 patch(约 0.01 mm²)经常横跨组织边界;黏液湖中漂浮腺癌细胞的 patch 被归为 MUC 或 TUM 取决于圈定者,STR/DEB 亦有类似重叠。标签是"区域继承"而非逐 patch 复核。
症状:混淆矩阵在 MUC↔TUM、STR↔DEB、LYM↔STR 出现稳定的离对角质量;继续堆模型容量几乎不动这些数字。
解决

  1. 简单方法:把这些混淆对从"错误"重分类为"模糊",在论文中单列讨论。
  2. 进阶方法:用 label smoothing(0.1)训练,让模型对边界样本输出软概率;评估时报告 top-2 准确率。
  3. SOTA 方法:软标签蒸馏——用多组随机裁剪/不同标注代理产生概率标签,或对高不确定 patch 做主动学习二次标注。
    参考:类别定义见 Zenodo;伪影与标注讨论见 arXiv:2409.11546

⚠️ 坑点 4:验证集仅 50 患者且类别分布漂移,泛化被高估/错估(分类:评估误用)

问题:CRC-VAL-HE-7K 只有 50 名患者(原论文摘要表述 25 名,Zenodo 官方页为 50 名——两个口径均来自官方文本,需注意),人均约 144 patch;且类分布与训练集差异巨大:DEB 11.5%→4.7%、ADI 10.4%→18.6%、MUC 8.9%→14.4%。
症状:在 7K 上的 accuracy 因先验变化而系统性偏移;50 患者的置信区间很宽,模型间 1–2 个点的差异可能无统计意义。
解决

  1. 简单方法:主指标用 balanced accuracy(对先验漂移稳健),并报 per-class 指标。
  2. 进阶方法:按患者重采样/bootstrap 置信区间;对类别先验做重归一化(先验校正)后再比较。
  3. SOTA 方法:追加第二外部集(NONORM 版或 TCGA WSI 聚合指标),以"多跳验证"估计泛化衰减曲线。
    口径注意:论文摘要表述该验证集为 25 名患者、Zenodo 官方页为 50 名——引用时注明出处口径,避免"引用打架"。
    参考Zenodo 官方描述;分布统计见 Frontiers in Oncology 2025

⚠️ 坑点 5:文件名即标签的解析错误(分类:工程陷阱)

问题:文件名形如 LYM-108.tif,标签藏在目录名与文件名前缀里;HuggingFace DykeF 加载脚本按第一个 - 前缀取标签。用 filename.split(".")[0] 整串当标签、或忽略前缀按字典序自造映射,都会得到错位标签。
症状:训练 loss 正常、验证指标随机般地差;或自己写的 label_map 与 torchvision/HF 的字母序映射对不上(如把 ADI 编成 8)。
解决

  1. 简单方法:永远用 Path(path).stem.split("-")[0] 提取前缀,并断言前缀 ∈ 9 类集合。
  2. 进阶方法:统一用 torchvision.datasets.ImageFolder 或 §6.4 Dataset 类,让目录结构自动决定编码(字母序 ADI=0…TUM=8,与 HF class_label 一致)。
  3. SOTA 方法:在 pipeline 里加断言测试——抽样 100 个文件,验证目录名、文件名前缀、编码三者一致。
    参考DykeF/NCTCRCHE100K 加载脚本filepath.find('-') 解析逻辑)。

⚠️ 坑点 6:TIFF 位深与读取器差异——16-bit/8-bit 读入与损坏样本(分类:预处理陷阱)

问题:官方 patch 为 8-bit RGB TIFF,但不同读取器对位深/通道处理不一致:OpenCV 默认 flag 可能改变位深解释,IMREAD_UNCHANGED 才保真;独立研究还发现数据集中存在因图像动态范围处理不当而完全损坏的组织样本。
症状:同一文件在 PIL/OpenCV 下数值不同;个别 patch 显示为纯黑/纯白或通道错乱,训练时产生离群 loss;跨框架复现结果有微小系统性差异。
解决

  1. 简单方法:统一用 PIL/tifffile 读取,加载后断言 dtype==uint8 and shape==(224,224,3),不过断言的直接丢弃并记录。
  2. 进阶方法:写一次性数据体检脚本,输出每类的极值/熵分布,把熵异常低的"僵尸样本"清出训练集。
  3. SOTA 方法:把数据体检纳入 CI,任何环境(本地/集群/云)入库前先跑同一份体检报告再训练。
    参考arXiv:2409.11546(动态范围损坏样本与复现代码);OpenCV 位深 flag 语义(IMREAD_UNCHANGED=-1)。

⚠️ 坑点 7:染色变异未归一化的性能损失与颜色捷径(分类:预处理陷阱)

问题:标准版已做 Macenko 归一化,但归一化并不完美且引入类间不一致的 JPEG 伪影;NONORM 版保留真实染色变异。独立分析证明:仅 RGB 三通道均值即可达 >50% 准确率、颜色直方图 >82%——颜色本身就是一个捷径特征。
症状:在 NORM 版上训练的模型搬到外部 WSI(未归一化)性能骤降;模型把"粉色程度"当证据;EfficientNet-B0(ImageNet 预训练)微调可达 97.7%,超过诸多病理基础模型,提示指标部分反映低层偏倚。
解决

  1. 简单方法:训练 NORM 版、验证 NONORM/原始数据,两套指标都报。
  2. 进阶方法:训练时加染色增强(HED-Jitter、随机 Macenko 变换),把染色当作 nuisance 维度。
  3. SOTA 方法:用随机染色增强 + 灰度/色彩打乱的自监督扰动,或直接评估冻结基础模型特征(UNI/CONCH 在 Raw 版上的 KNN 平衡准确率 0.925/0.941 是更可信的参照)。
    参考arXiv:2409.11546KatherLab/CONCH 基准

⚠️ 坑点 8:与 Kather 100K 多任务/姊妹数据集混淆(分类:工程陷阱)

问题:生态里多个名字都带 “Kather/100K”:本数据集(9 类 patch 分类,Zenodo 1214456)、同论文姊妹数据 TCGA 多组织 patch(Zenodo 1420524)与 DACHS patch(Zenodo 1471616)、TIAToolbox 把本数据集命名为 “kather100k”、以及 Kather 实验室后续 MSI/TME 等多任务数据集。文献与代码里 “CRC-100K”、“kather100k”、“NCT-CRC-HE” 指代并不总是同一东西。
症状:下载错文件训练出"奇怪的基线";论文对比表把 9 类 ROI 指标与患者级 TME/MSI 指标混排;复现他人结果时数据版本对不上。
解决

  1. 简单方法:以 Zenodo DOI 为准——patch 分类基准只认 1214456;1420524/1471616 是生存分析姊妹集。
  2. 进阶方法:写数据卡(data card)注明"文件 MD5 + 类别数 + 目录结构"三项指纹再入库。
  3. SOTA 方法:在结果表中固定引用协议命名(CRC-100K-Raw = NONORM 版 KNN 平衡准确率),与 CONCH/UNI 官方基准保持同词表。
    参考Zenodo 1214456TIAToolbox KatherPatchDataset 命名KatherLab/CONCH

§6.6 数据增强

增强 是否安全 说明
水平/垂直翻转 病理图像无方向语义,全开
90°/270° 旋转 同上,等效 4 倍数据
小角度旋转(±15°) 模拟摆位差异
HED/染色抖动 治疗染色捷径的良药,NONORM 版尤其推荐
小幅亮度/对比度 扫描曝光差异的近似
随机 gamma(±0.1) 曝光差异的轻量近似
高斯噪声(低强度) ⚠️ 仅用于鲁棒性测试,会钝化核细节证据
大幅缩放(>1.25x) 破坏 0.5 µm/px 语义,等效换物镜倍数,核形态跨尺度失真
弹性形变/强几何畸变 破坏腺体结构语义,TUM/STR 判别依赖结构
灰度化 ⚠️ H&E 双色信息是核心证据,整图灰度会移除关键线索;仅作极端鲁棒性测试
ColorJitter 大幅扰动色相 会把 MUC 与 TUM 的染色线索抹掉,加剧坑点 3

增强强度的经验法则:先把"翻转 + 旋转 + 染色抖动"三件套跑满,再逐个加回其余增强做消融;任何增强组合都要在 NONORM 验证上复核一遍,防止增强本身变成新的捷径(坑点 7)。

§6.7 模型推荐

模型 参数量 预训练 适用场景 参考表现
ResNet-50 25.6M ImageNet 教学/快速基线 微调可达 97%+(社区复现区间,arXiv:2409.11546
EfficientNet-B0 5.3M ImageNet 小显存微调 97.7%(arXiv:2409.11546
ViT-S/16(DINO on 100K) 21.7M 自监督(本数据集) 自监督研究 LUnit DINO 基准训练语料
UNI(ViT-H) 686M 病理基础模型 冻结特征/线性探针 CRC-100K-Raw KNN 平衡准确率 0.925(CONCH 仓库
CONCH 视觉-语言 病理图文对齐 ROI/KNN 评测、零样本 CRC-100K-Raw KNN 0.941(CONCH 仓库
TIAToolbox resnet50-kather100k 23.6M 本数据集监督训练 即插即用 backbone/分类器 官方预训练页
TIAToolbox resnet18-kather100k 11.2M 本数据集监督训练 边缘设备/快速推理 官方预训练页

选型说明:微调类模型选 ImageNet 预训练的小模型即可(本任务容量不敏感);冻结特征类任务首选病理基础模型——同一批数据上二者的 KNN 差距高达 0.13(0.941 vs 0.797),说明"病理域内预训练"的收益在这个看似简单的 9 类任务上依然显著。
| UNI 2-h | 686M | 病理基础模型(二代) | 更强冻结表征 | UNI 官方教程 |

§6.8 硬件需求

场景 GPU 显存 batch size 单 epoch(100K)经验值 存储
ResNet-50 微调 8–12 GB 128–256 数分钟量级 数据 12.5 GB + checkpoint
ViT-S 微调 16–24 GB 128 十分钟量级 同上
UNI/CONCH 特征提取(冻结) 24 GB+(ViT-H) 256 约 40 分钟(提特征一次) 特征约 0.4 GB(fp16)
CPU 推理(单 patch) 无 GPU 1 毫秒–几十毫秒 12.5 GB 数据即可

说明:本数据集全部为 224×224 定尺寸 patch,无需大显存的全切片处理栈;瓶颈通常在 I/O——把数据放到 SSD 或先跑一轮缓存到内存可显著提速。特征提取属一次性成本,缓存后 KNN/线性探针实验可在 CPU 上秒级迭代。

§6.9 评估指标代码

from sklearn.metrics import (balanced_accuracy_score, classification_report,
                             confusion_matrix)
import numpy as np

# 官方要求:不能只看 accuracy(类别大致平衡但验证集分布漂移)
y_true, y_pred = np.array(all_labels), np.array(all_preds)
print("balanced accuracy:", balanced_accuracy_score(y_true, y_pred))
print(classification_report(y_true, y_pred,
      target_names=["ADI","BACK","DEB","LYM","MUC","MUS","NORM","STR","TUM"],
      digits=4))
cm = confusion_matrix(y_true, y_pred, normalize="true")
# 重点检查离对角线:MUC<->TUM、STR<->DEB(坑点 3)、以及 DEB 的低召回(坑点 2/4)
# 多类宏平均 AUROC(需要概率输出)
from sklearn.metrics import roc_auc_score
proba = torch.softmax(all_logits, dim=1).numpy()
print("macro AUROC:", roc_auc_score(y_true, proba, multi_class="ovr", average="macro"))

指标优先级建议:balanced accuracy > per-class F1 > macro AUROC > accuracy;accuracy 只作参考,且必须与类分布一起报告。

§6.10 MLOps 笔记

  • 版本指纹:记录三个 ZIP 的 MD5 + 解压后各类文件计数(§4.2 数字),数据卡入库;任何指标必须绑定这组指纹。
  • 数据体检前置:把坑点 6 的断言脚本做成训练前门禁(数据体检不过,禁止启动训练)。
  • 双指标制度:所有实验同时记录「7K balanced accuracy」与「per-class F1」,缺一不可(坑点 2/4)。
  • 染色消融留痕:NORM 版与 NONORM 版各训一份对照(或至少对 NONORM 做零样本评估),把染色稳健性写进模型卡(坑点 7)。
  • 禁止内部划分当卖点:模型卡里 100K 随机划分指标只允许出现在"训练诊断"栏,对外声明一律用 7K(坑点 1)。
  • 锚定回归测试:保留 500 张固定 patch 的特征哈希,任何环境/依赖升级后先跑锚定集,确保读取路径(PIL 版本、色彩管线)没有悄悄改变数值。
  • 评估隔离:7K 的标签与预测只进评估进程,禁止参与任何早停回调;一旦 7K 参与训练决策,它就从外部验证集降级为验证集(§5.1)。
# experiment.yaml —— 把上述规则固化为配置文件,随实验一起版本化
data:
  root: data_root
  train_subset: NCT-CRC-HE-100K-NONORM   # 与基础模型基准对齐(坑点 7/8)
  val_subset: CRC-VAL-HE-7K              # 仅外部评估,禁止早停(§5.1)
  audit_gate: true                        # §6.3 体检不过即中止
train:
  batch_size: 256
  sampler: weighted                       # 逆类频率加权(坑点 4)
  augmentation: [hflip, vflip, rot90, hed_jitter]
eval:
  metrics: [balanced_accuracy, per_class_f1, macro_auroc]
  focus_pairs: [[MUC, TUM], [STR, DEB]]   # 高频混淆对单独报告(坑点 3)
provenance:
  zip_md5: {train: "035777cf327776a71a05c95da6d6325f", val: "2fd1651b4f94ebd818ebf90ad2b6ce06"}

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
颜色捷径 RGB 均值 3 特征 >50%,颜色直方图 >82% 染色增强;NONORM 验证;冻结基础模型特征对照
类间伪影不一致 Macenko 归一化伴随类间不同的 JPEG 压缩伪影 用 NONORM 版做消融;对伪影做频域分析
地域/中心单一 仅德国双中心,无扫描仪多样性 外部队列(TCGA/DACHS/本地数据)验证
验证集单中心 7K 全部来自 NCT 组织库 追加第二个外部测试集
patch 相关性 无患者映射,同一区域 patch 高度相似 只以 7K 报告泛化(坑点 1)
验证分布漂移 7K 类别先验与训练集差异大 balanced accuracy + 先验校正
标注模糊 MUC/TUM 等混合 patch 边界不清 label smoothing;混淆矩阵单列讨论
正常类增强偏差 NORM 等正常类混入胃切除标本非肿瘤区 低-中 解读 NORM 相关结论时注明器官来源混合

§7.2 标注质量

标注为"病理专家区域圈定 + patch 继承"的弱监督模式,无逐 patch 复核记录与一致性 Kappa(官方未公布)。间接证据:独立患者验证集 9 类准确率 >94%,说明主体标签可靠;系统性错误集中于组织过渡区。定量参考:EfficientNet-B0 可达 97.7%(含偏倚加成),冻结基础模型 KNN 0.941——这些上限本身提示"剩余 5% 左右"相当部分是模糊样本而非纯模型问题。

已知标签模糊热点(按类别对):

类别对 模糊来源 建议处理
MUC ↔ TUM 黏液湖内漂浮肿瘤细胞 报告合并类"黏液性肿瘤区"指标
STR ↔ DEB 坏死/碎屑与间质的过渡形态 检查混淆矩阵并单独讨论
LYM ↔ STR 间质内散在淋巴细胞 top-2 准确率作辅助指标
BACK ↔ 任意类 空白与浅染组织的边界 训练前过滤或降权

§7.3 泛化性评估

目标场景 失效风险 证据
同机构新切片(NORM 版训练) 低-中 官方 7K 验证 >94%(PLoS Med 2019
未归一化真实染色(NONORM) 颜色捷径与伪影偏倚(arXiv:2409.11546
其他国家/扫描仪 WSI 单一双中心来源;扫描仪未公布(§3.9)
其他器官(胃、肺等) 很高 标签语义绑定结直肠形态学
患者级生存预测 中-高 patch 分类器不能直接外推;原论文用 TCGA/DACHS 两级聚合验证
染色流程变更后的本中心数据 H&E 试剂批次与扫描设置变化可触发颜色捷径失效(坑点 7)

§7.4 伦理

研究遵循赫尔辛基宣言、CIOMS 指南与贝尔蒙特报告:海德堡大学伦理委员会批件 S-207/2005(2017-12-20 续展,组织库决议 2152/2154,患者知情同意经组织库协议获得);UMM 伦理委员会 II 决议 2017-806R-MA,对追溯性完全匿名分析豁免知情同意(Zenodo 伦理声明)。发布数据为完全匿名组织图像,不含任何可识别个人信息。

数据治理视角:CC-BY 4.0 允许商用(须署名),对应 DUO 的 NRES/GRU 组合;与典型医疗数据"申请审核 + 签署 DUA"的流程相比,本数据集的合规负担几乎为零——但转移学习产出的模型若宣称临床用途,仍需按医疗器械软件(SaMD)路径独立走监管流程,数据许可的宽松不能传导为用途的宽松。

§7.5 公平性

官方未发布患者年龄、性别、种族与分期分布,公平性审计所需的关键字段缺失。已知约束:单一国家双中心来源使跨人群外推无从在数据内部验证。建议:涉及临床落地的研究,须在本地人群数据上复测并报告亚组指标,不得以本数据集宣称人群公平性。

实操建议:把"人群公平性"的验证预算留给外部队列(如 DACHS、TCGA 或本地数据),本数据集的公平性角色定位是"方法开发"而非"证据生成";引用本数据集的训练结果时,措辞上避免"适用于某人群"的表述,改用"在德国双中心存档组织上验证"。

§7.6 数据漂移

三类现实漂移需要监控:其一,染色/扫描漂移——新中心扫描仪与染色试剂差异是最主要的协变量漂移,建议上线后用染色特征(OD 分布)做漂移检测;其二,类别先验漂移——真实送检切片的 TUM/STR 占比随科室病例构成波动,7K 验证集的先验与训练集本就不同;其三,伪影漂移——压缩与扫描伪影随设备更新变化,arXiv 研究已证明模型可能利用此类伪影。缓解:定期以固定锚定集回测 + 染色归一化/增强 + 先验校正。

漂移类型 监控信号 触发动作
染色漂移 OD/HSV 直方图距离(对锚定集) 更新染色归一化参数
类别先验漂移 patch 类别构成滚动均值 先验校正 / 阈值重调
伪影漂移 高频能量/块效应指标 复核扫描仪与压缩管线
性能漂移 7K balanced accuracy 周期回测 连续两期下降即冻结发布并复核

§7.7 DAIMS 24 项数据质量评估

# 检查项 状态 说明
1 宽格式 目录+文件扁平结构,一行(文件)一条记录,无需透视
2 唯一标识 ⚠️ 文件名全局唯一,但无患者/切片 ID,标识链在 patch 层断裂
3 特殊字符 文件名仅大写字母/数字/连字符,跨平台安全
4 重复行 非重叠切分保证无重复 patch
5 缺失编码 图像数据无缺失单元格概念;损坏样本经体检可筛
6 标签标识 目录名=文件名前缀=标签,三重冗余,解析明确
7 罕见类分组 ⚠️ 9 类占比 8.8%–14.3%,轻度不平衡;验证集 DEB 仅 4.7%
8 偏倚评估 ⚠️ 颜色捷径、伪影偏倚已被独立研究证实(arXiv:2409.11546)
9 数据字典 ⚠️ 官方仅 README 式描述,无机器可读字段字典
10 信息性缺失解释 不适用(无表格型缺失),损坏样本处理已有社区方案
11 设备记录 扫描仪型号/厂商完全未公布
12 共线性 单模态图像分类不涉及特征共线性
13 编码映射 9 类索引字母序固定,torchvision/HF/TIAToolbox 一致
14 时间戳处理 静态图像,不适用;发布时间戳由 Zenodo DOI 固定
15 划分建议 ⚠️ 提供 train/val 二分,但训练集内部无官方划分且无患者映射
16 泄漏讨论 ⚠️ patch 相关性/患者泄漏官方未讨论,需使用者自行处理
17 标签分布 类别计数已由多方独立核实(§4.2),官方声明"大致平衡"
18 测量偏倚 ⚠️ 区域圈定偏向典型形态,混合组织 patch 标注模糊
19 外部验证建议 官方明确 7K 为验证用途;论文提供 TCGA/DACHS 外部范式
20 版本记录 Zenodo v0.1 + DOI 版本化,内容自发布未变
21 预处理脚本 ⚠️ 官方无预处理脚本;社区提供 torchstain/tiatoolbox 方案
22 合规要求 CC-BY 4.0 开放直链,伦理批件号全部公示
23 多模态对齐 单模态数据集,无对齐需求
24 去标识化 完全匿名存档组织,双伦理批件覆盖,无可识别信息

DAIMS 评分:19.5 / 24(✅ 15 项 + ⚠️ 8 项 × 0.5 + ❌ 1 项 × 0)

评分解读:19.5/24 属于"高质量但有结构性盲区"区间。数据本体干净(无重复、无缺失、编码一致、许可合规),扣分集中在三个结构性问题上——标识链缺失(无患者映射)、设备元数据缺失、以及官方未正视的泄漏与偏倚讨论。这些问题无法靠使用者补数据解决,但全部可以通过正确的使用姿势规避

分层来看:纯数据本体项(1/3/4/5/6/13/17/20/22/24)几乎全绿,说明这是一个"文件层面无可挑剔"的数据集;方法学项(2/15/16/21)集体失分,说明它更像一个"研究制品"而非"工程制品";设备与元数据项(9/11/21)失分是 2018 年学术数据集的普遍通病,UNI/CONCH 时代的下游教程实际上已经用行动补齐了第 21 项(预处理脚本)。

对你意味着什么:如果你做 patch 分类或基础模型评测,直接按 §6 的协议走即可放心使用(把 7K 当唯一对外指标);如果你做患者级建模或临床转化,本数据集只能当"特征学习预训练语料",患者级结论必须在外部队列完成;如果你要写论文,请务必引用 balanced accuracy 而非 accuracy,并在方法节声明 patch 级划分的泄漏限制——这三个动作能让你避开本数据集 90% 的已知坑。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
TCGA CRC(500 患者 862 切片) TCGA 国际多中心 WSI 组织分解 + 深度间质评分→生存 OS HR 1.99 [1.27–3.12] 间质评分独立于 UICC 分期的预后因子(PLoS Med 2019
DACHS 队列(409 患者,2003–2007) 德国多中心 OS/CSS/RFS HR 1.63 [1.14–2.33] / 2.29 / 1.92 一致复现 两个独立队列均验证评分稳健性(同上)
CRC-100K-Raw(KNN K=20) Mahmood Lab 基准 9 类 ROI 平衡准确率 CONCH 0.941/Prov-GigaPath 0.929/UNI 0.925/Virchow 0.919 基础模型间差距 ≤2.2 点 冻结特征即可 0.92+,ResNet-50(ImageNet) 仅 0.797(KatherLab/CONCH
9 类全量微调(含测试协议审计) ETH Zurich / AI Witchlabs accuracy EfficientNet-B0 97.7% 超越多数专用模型 高分被低层颜色/伪影偏倚放大,需谨慎解读(arXiv:2409.11546

§8 基准性能与生态

§8.1 排行榜(CRC-100K-Raw 9 类 ROI 基准)

以下数字统一来自 KatherLab/CONCH 官方 README 的 ROI 基准(CRC-100K-Raw,即 NONORM 版;KNN K=20,平衡准确率),各家模型数值出自同一协议,可直接比较;与下方全量微调数字不可互比:

排名 模型 平衡准确率 年份 关键技术 完整引用 代码
1 CONCH 0.941 2024 病理视觉-语言对齐 Lu et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-02861-7 GitHub
2 Prov-GigaPath 0.929 2024 全片级多尺度 ViT Xu et al., 2024, Nature. DOI 10.1038/s41586-024-07441-w HuggingFace
3 UNI 0.925 2024 10 万例 WSI 自监督 ViT-H Chen et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-02857-3 GitHub
4 Virchow (CLS+MEAN) 0.919 2024 大规模病理 SSL Vorontsov et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-03141-0 闭源权重
5 Phikon 0.845 2023 TCGA 大切片 DINO ViT-B Filiot et al., 2023, arXiv:2309.14414 GitHub
6 CTransPath 0.836 2022 跨组织对比学习 Swin-T Wang et al., 2022, Medical Image Analysis. DOI 10.1016/j.media.2022.102570 GitHub
7 ResNet-50(ImageNet 迁移) 0.797 2016 通用视觉基线 He et al., 2016, CVPR. DOI 10.1109/CVPR.2016.90 torchvision

补充基准(协议不同,禁止与上表比较):全量微调 EfficientNet-B0(ImageNet 预训练)在 100K 训练/7K 测试上达 97.7% accuracy,超过此前所有专用方案(Ignatov & Malivenko, 2024, arXiv:2409.11546);原论文迁移学习 CNN 在 7K 上 >94% accuracy(Kather et al., 2019, PLoS Medicine. DOI 10.1371/journal.pmed.1002730)。

⚠️ 数值不可直接比较的原因:KNN 冻结特征(上表)考察表征质量,微调(本段)考察可学习性上限;accuracy 与 balanced accuracy 在分布漂移的 7K 上可差 2–4 点;NORM 与 NONORM 训练域不同;部分复现含内部随机划分(患者泄漏,坑点 1)。另外 KNN 与线性探针也有差异:KNN 反映最近邻结构、线性探针反映线性可分性,同一模型两条协议可相差 1–3 个点,引用时必须注明协议。

§8.2 SOTA 总结与选型建议

  • 要一个能打的冻结特征:CONCH 或 UNI——两行代码加载,KNN 0.94/0.925 是当前公开参照系的天花板。
  • 要训练自己的小模型:EfficientNet-B0/ResNet-50 微调即可到 97%+,但请同时报 NONORM/染色增强版本(坑点 7)。
  • 要写新方法论文章:把 balanced accuracy、per-class F1 与患者独立验证写进主表;97%+ 的 accuracy 已经不是区分度。
  • 要复现基准对比表:锁定 CONCH 官方 README 的协议版本(KNN K=20 + CRC-100K-Raw),任何自己跑的数字旁注明协议与训练域。
  • 警惕"刷分":arXiv 研究已证明该基准的低层偏倚足以让非病理特征拿到高分,任何"超过 foundation model"的微调结果都应先做颜色捷径消融。

选型决策树:① 只想要一个强 baseline → EfficientNet-B0 微调(一天内可复现);② 论文要对比基础模型 → 冻结 UNI/CONCH 跑 KNN + 线性探针双协议(§6.4b);③ 研究数据偏倚 → 直接 fork arXiv:2409.11546 复现代码,从颜色捷径消融开始;④ 做下游 WSI 任务 → 先用 TIAToolbox kather100k backbone 提特征(免申请),有余力再换 UNI。

§8.3 评测协议

社区默认协议(与 MahmoodLab/UNI 下游教程一致):训练域选 NCT-CRC-HE-100K-NONORM(CRC-100K-Raw)或 NORM 版(须注明);测试域固定为 CRC-VAL-HE-7K;基础模型类方法 = 冻结编码器提特征 → KNN(K=20) 或线性探针;监督类方法 = 全量微调。必报指标:balanced accuracy、per-class F1、混淆矩阵(重点 MUC↔TUM)。禁止:在 100K 内部随机划分上对外报告、只用 accuracy、混用 NORM/NONORM 不注明。

协议要素 推荐设置
训练域 NONORM 版(与基础模型基准对齐)或 NORM 版(须注明)
测试域 CRC-VAL-HE-7K(不参与任何训练决策)
冻结特征协议 KNN K=20(余弦)+ 线性探针(逻辑回归,C=1)
微调协议 全量微调,AdamW 5e-4,cosine 退火,加权采样(§6.4)
必报指标 balanced accuracy、per-class F1、混淆矩阵
禁止事项 内部随机划分对外报告;只用 accuracy;混用 NORM/NONORM 不注明
数据集 关系 链接
Kather Texture 2016(8 类 5,000 patch) 同团队前身数据集 Zenodo 53169
Zenodo 1420524 / 1471616 同论文姊妹集(TCGA/DACHS 多组织 patch) 1420524 / 1471616
PatchCamelyon 更大规模二分类(淋巴结转移) 官方页
TCGA-COAD/READ 患者级生存/分子标签全切片 GDC Portal
LC25000(肺/结肠组织学) 多器官 5 类×2 万 patch,跨器官对照 Kaggle
HunCRC 全切片细粒度多标注 Sci Data 2022
EBHI 结直肠息肉 5 类小数据集 ScienceDirect 协议

§8.5 关键论文 Top 6

  1. Kather et al., 2019, PLoS Medicine 16(1): e1002730. DOI 10.1371/journal.pmed.1002730 — 数据集配套主论文:9 类 CNN + 深度间质评分,两队列生存验证。
  2. Chen et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-02857-3 — UNI 基础模型;官方下游教程即用本数据集做 linear probe 演示。
  3. Lu et al., 2024, Nature Medicine. DOI 10.1038/s41591-024-02861-7 — CONCH 视觉-语言基础模型;CRC-100K-Raw KNN 0.941 为当前公开参照最高值。
  4. Ignatov & Malivenko, 2024, arXiv:2409.11546 — 系统性数据质量批判:颜色捷径、伪影、损坏样本与 97.7% 微调上限。
  5. Pocock et al., 2022, Computational and Structural Biotechnology Journal. DOI 10.1016/j.csbj.2022.05.040 — TIAToolbox:官方 kather100k 预训练 backbone 的载体框架。
  6. Kang et al., 2023, Medical Image Analysis. DOI 10.1016/j.media.2023.102962 — LUnit DINO 自监督基准:在本数据集上训练 DINO ViT,系统对比 SSL 策略,HF 派生模型来源之一。
  7. Wang et al., 2022, Medical Image Analysis. DOI 10.1016/j.media.2022.102570 — CTransPath:跨组织对比学习预训练,该基准上的强非 foundation 基线。
  8. Macenko et al., 2009, IEEE ISBI. DOI 10.1109/ISBI.2009.5193250 — Macenko 染色归一化原始论文,理解 NORM 版颜色管线的必读文献。

§8.6 社区活跃度

  • Zenodo 页面累计列出 62 篇引用该数据集的文献(截至 2026-09 检索);数据集 DOI 引用稳定增长。
  • Semantic Scholar 显示主论文引用 1,074 次(截至 2026-09)。
  • HuggingFace 生态:1aurent/NCT-CRC-HE 关联 19+ 个派生模型(lunit_dino ViT、tiatoolbox 系列等),另有 DykeF/NCTCRCHE100K 加载脚本镜像。
  • GitHub:mahmoodlab/UNI、KatherLab/CONCH、gmalivenko/NCT-CRC-HE-experiments 构成"评测—复现—批判"完整三角。
  • 质量审计论文(arXiv:2409.11546)发布后,该数据集成为"数据集偏倚"教学与研究的引用案例,讨论热度同时覆盖病理与通用 CV 两个社区。
  • 7K 验证集让复现门槛极低:800 MB 数据 + 冻结特征即可复现旗舰模型的 ROI 基准,社区教程大量涌现(UNI 官方教程是最完整示例)。

§8.7 生态快照

资源 类型 链接 维护方 推荐理由
Zenodo 1214456 官方数据 链接 NCT/UMM 唯一权威源,含 MD5 与官方描述
1aurent/NCT-CRC-HE HF 镜像 链接 社区(1aurent) parquet 流式加载,免下载 24 GB
DykeF/NCTCRCHE100K HF 加载脚本 链接 Dyke Ferber(原论文作者) 作者亲自维护的 datasets 脚本
TIAToolbox pretrained 预训练模型 链接 Warwick TIA Centre kather100k backbone 即插即用
mahmoodlab/UNI 基础模型 链接 Harvard Mahmood Lab 官方 CRC-100K 下游教程
KatherLab/CONCH 基础模型 链接 Kather Lab / Mahmood Lab ROI 基准表与零样本工具
NCT-CRC-HE-experiments 质量审计 链接 Ignatov & Malivenko 偏倚复现代码,做去偏研究必读
DykeF/NCTCRCHE100K HF 加载脚本 链接 Dyke Ferber(原论文作者) 原作者维护的 datasets 流式脚本

§9 相关资源与引用

§9.1 官方与社区资源

§9.2 BibTeX 完整引用

@dataset{kather_jakob_nikolas_2018_1214456,
  author    = {Kather, Jakob Nikolas and Halama, Niels and Marx, Alexander},
  title     = {{100,000 histological images of human colorectal cancer and healthy tissue}},
  month     = apr,
  year      = 2018,
  publisher = {Zenodo},
  version   = {v0.1},
  doi       = {10.5281/zenodo.1214456},
  url       = {https://doi.org/10.5281/zenodo.1214456}
}

@article{kather2019predicting,
  author  = {Kather, Jakob Nikolas and Krisam, Johannes and Charoentong, Pornpimol and
             Luedde, Tom and Herpel, Esther and Weis, Cleo-Aron and Gaiser, Timo and
             Marx, Alexander and Valous, Nektarios A. and Ferber, Dyke and Jansen, Lina and
             Reyes-Aldasoro, Constantino Carlos and Z{\"o}rnig, Inka and J{\"a}ger, Dirk and
             Brenner, Hermann and Chang-Claude, Jenny and Hoffmeister, Michael and
             Halama, Niels},
  title   = {Predicting survival from colorectal cancer histology slides using deep learning:
             A retrospective multicenter study},
  journal = {PLoS Medicine},
  volume  = {16},
  number  = {1},
  pages   = {e1002730},
  year    = {2019},
  doi     = {10.1371/journal.pmed.1002730}
}

@article{chen2024uni,
  author  = {Chen, Richard J. and Ding, Tong and Lu, Ming Y. and Williamson, Drew F. K. and
             Jaume, Guillaume and Song, Andrew H. and Chen, Bowen and Zhang, Andrew and
             Shao, Daniel and Shaban, Muhammad and Williams, Mane and Oldenburg, Lukas and
             Weishaupt, Lilly L. and Wang, Judy J. and Vaidya, Anurag and Le, Long Phi and
             Gerber, Georg and Sahin, Szilvia and Mahmood, Faisal},
  title   = {Towards a general-purpose foundation model for computational pathology},
  journal = {Nature Medicine},
  volume  = {30},
  pages   = {850--860},
  year    = {2024},
  doi     = {10.1038/s41591-024-02857-3}
}

@article{lu2024conch,
  author  = {Lu, Ming Y. and Chen, Bowen and Williamson, Drew F. K. and Chen, Richard J. and
             Zhao, Melissa and Chow, Aaron K. and Ikemura, Kenji and Kim, Ahrong and
             Pouli, Dimitra and Patel, Ankush and Soliman, Ashley and Ou, Chengkuan and
             Singh, Jainder and Chen, Tong and Ding, Tong and Wagner, Norma F. and
             Mahmood, Faisal},
  title   = {A visual-language foundation model for computational pathology},
  journal = {Nature Medicine},
  volume  = {30},
  pages   = {863--874},
  year    = {2024},
  doi     = {10.1038/s41591-024-02861-7}
}

@article{ignatov2024nct,
  author  = {Ignatov, Andrey and Malivenko, Grigory},
  title   = {NCT-CRC-HE: Not All Histopathological Datasets Are Equally Useful},
  journal = {arXiv preprint arXiv:2409.11546},
  year    = {2024}
}

§9.3 引用指南

使用数据本身请引 @dataset 条目(Zenodo DOI);报告基于数据集的建模结果请同时引 @article{kather2019predicting};使用 UNI/CONCH 权重请补引对应模型论文;若你的结论涉及准确率上限或数据偏倚,引用 arXiv 质量审计以便读者对照。

新手学习路径建议(一周节奏):第 1–2 天跑通 §6.1/§6.2 的 ImageFolder 加载与训练集体检(§6.3);第 3–4 天微调 EfficientNet-B0 并按 §6.9 报指标;第 5 天用 §6.4b 冻结 UNI/TIAToolbox 特征跑 KNN,与自己的微调结果对比;第 6–7 天读 arXiv:2409.11546 复现颜色捷径消融——此时你对这个数据集的理解会超过大多数引用它的人。

§10 AI 使用声明卡

§10.1 本页面生产中使用的 AI 模型

模型 用途
fast-model(CodeBuddy Code 内置 LLM) 检索结果综合、正文撰写、代码示例编写与事实清单整理

§10.2 AI 参与范围

AI 负责检索资料汇总、初稿撰写与格式规范化;所有数字均回溯至 §10.3 所列来源并由编辑流程核对;结构框架遵循千方病案写作宪法。AI 不得自行引入无来源数字,事实性内容以官方 Zenodo 描述与原始论文为最高优先级。

具体分工边界:类别计数、基准数字、文件大小与 MD5 全部来自检索命中的官方页面或同行评审文献(来源见 §10.3);ICD-11/SNOMED 编码逐条对照官方/权威镜像核对;代码示例基于官方加载逻辑改写,语义正确性经人工复核。凡检索无法确证的字段(如扫描仪型号、标注工时),本页面一律标注"未公布"而非推测。

§10.3 输入来源列表

  1. Kather, Halama, Marx. 100,000 histological images of human colorectal cancer and healthy tissue. Zenodo, v0.1, 2018. DOI 10.5281/zenodo.1214456
  2. Kather et al. Predicting survival from colorectal cancer histology slides using deep learning. PLoS Med 16(1): e1002730, 2019. DOI 10.1371/journal.pmed.1002730
  3. 同论文 PubMed 记录. PMID 30677016. https://pubmed.ncbi.nlm.nih.gov/30677016/
  4. Semantic Scholar Citation API(引用数查询,2026-09). https://api.semanticscholar.org/graph/v1/paper/DOI:10.1371/journal.pmed.1002730
  5. KatherLab/CONCH 官方仓库 README(ROI 基准表). https://github.com/KatherLab/CONCH
  6. MahmoodLab/UNI 下游评测教程(CRC-100K-NONORM linear probe). https://github.com/mahmoodlab/UNI(镜像示例 billy-enrizky.github.io/UNI-9-groups)
  7. TIAToolbox Pretrained Models 文档. https://tia-toolbox.readthedocs.io/en/latest/pretrained.html
  8. Ignatov & Malivenko. NCT-CRC-HE: Not All Histopathological Datasets Are Equally Useful. arXiv:2409.11546, 2024
  9. HuggingFace 镜像 1aurent/NCT-CRC-HE 数据卡. https://huggingface.co/datasets/1aurent/NCT-CRC-HE
  10. HuggingFace DykeF/NCTCRCHE100K 加载脚本. https://huggingface.co/datasets/DykeF/NCTCRCHE100K
  11. Histopathology image classification: highlighting the gap between manual analysis and AI automation. PMC10827850(类别分布 Table 2)
  12. Protocol article(NCT-CRC-HE-100K 标签分布表). STAR Protocols, S2666166725003430
  13. Exploring prognostic biomarkers in pathological images of colorectal cancer patients. Frontiers in Oncology, 2025. DOI 10.3389/fonc.2025.1659010
  14. ICD-11 中文版第 2 章(肿瘤编码 2B90–2B93). https://zh.wikisource.org/(维基文库)
  15. KEGG Human Diseases in ICD-11 Classification(H00020 Colorectal cancer). https://www.genome.jp/kegg-bin/get_htext?br08403

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§2 医学背景(ICD-11/SNOMED 映射、流行病学) 千方病案医学编辑部 对照 ICD-11 中文版与原始论文逐条核对 ✅ 已通过
§3/§4 数据规格与分布数字 千方病案医学编辑部 与 Zenodo 官方页及三方独立统计交叉验证 ✅ 已通过
§6 代码与 8 个坑点 千方病案医学编辑部(数据工程) 依据官方加载脚本与 arXiv 复现代码逻辑审校 ✅ 已通过
§7 DAIMS 评分与偏倚结论 千方病案医学编辑部 按 24 项清单逐项复核证据链 ✅ 已通过
§8 基准数字与引用 千方病案医学编辑部 与 CONCH 官方 README 基准表逐值核对 ✅ 已通过

§10.5 AI 生成章节标注

本页面所有章节均由 AI 辅助生成初稿,经 §10.4 所列人工校验流程修订后发布;不设"纯人工撰写"章节。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核日期一致)

页面状态:published(全部内容已完成审核并发布)

返回 AI-Ready 数据集