信息速览

LC25000 肺与结肠组织病理图像数据集 — 增广泄漏时代病理分类基准的样本课 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | LC25000 肺与结肠组织病理图像数据集 |
| 英文全称 | Lung and Colon Cancer Histopathological Image Dataset (LC25000) |
| 别名/简称 | lung_colon_image_set;Lung and Colon Cancer Histopathological Images(Kaggle 名) |
| 疾病分类(ICD-11) | 2C25.0 支气管或肺腺癌;2C25.2 支气管或肺鳞状细胞癌;2B92 结肠恶性肿瘤;2E92.4 大肠良性肿瘤;2F01 呼吸或胸内器官良性肿瘤 |
| SNOMED CT | 254626006(肺腺癌);254634000(肺鳞癌);408645001(大肠腺癌);92065004(结肠良性肿瘤) |
| 数据模态 | H&E 染色组织病理显微图像(2D 组织 tile) |
| AI 任务类型 | 图像多分类(5 类);衍生任务:肺三分类、结肠二分类、恶性/良性二分类 |
| 样本总数 | 25,000 张(5 类 × 5,000 张) |
| 数据大小 | 1.85 GB(ZIP 压缩包;Kaggle 镜像 1.89 GB) |
| 数据格式 | JPEG(768×768 像素,RGB 彩色) |
| 许可证 | CC BY-SA 4.0(Kaggle/天池标注;官方 GitHub 仓库未附 LICENSE 文件) |
| 访问级别 | 开放下载(无需注册、无需申请) |
| DUO 标签 | GRU(通用研究使用,随 CC BY-SA 4.0 分发) |
| 语言 | 无文本模态(类别目录名为英文小写缩写) |
| 首发日期 | 2019-12(arXiv:1912.12142 v1 与官方仓库同步发布) |
| 最后更新 | 2020-09-04(官方 GitHub 仓库最后推送) |
| 发布机构 | James A. Haley Veterans’ Hospital 病理科;University of South Florida;Moffitt Cancer Center |
| 官方主页 | github.com/tampapath/lung_colon_image_set |
| 下载地址 | Academic Torrents 官方镜像、Kaggle、HuggingFace |
| DOI | 10.48550/arXiv.1912.12142 |
| 引用次数 | 369+(Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 目录即标签、即拿即用、类别完美均衡;扣分项:无官方划分与预处理脚本、增广近重复泄漏需自行清洗、扫描与放大元数据缺失 |
| 页面状态 | published |
§0 E-E-A-T 审核声明
- 医学审核:千方病案医学编辑部(病理学方向)交叉审核:§2 医学背景(ICD-11/SNOMED CT 双映射、肺癌与结直肠癌流行病学表述)、§7 质量评估与偏倚分析。
- 数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。LC25000 经 Kaggle 与阿里云天池标注为 CC BY-SA 4.0,官方 GitHub 仓库未附独立 LICENSE 文件,署名引用 Borkowski 等人 2019 年论文是社区公认义务。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? LC25000 是一个肺与结肠 H&E 染色组织病理图像的公开分类数据集:25,000 张 768×768 像素彩色 JPEG,均分为肺腺癌、肺鳞状细胞癌、肺良性组织、结肠腺癌、结肠良性组织 5 类,每类 5,000 张(Borkowski et al., 2019)。图像摄自美国 James A. Haley 退伍军人医院病理科玻璃切片,去标识化、免费下载。
为什么重要? 病理 AI 长期缺"即拿即用"的中等规模公开数据集:要么太大难以起步(如 NCT-CRC-HE-100K),要么规模太小难以训练。LC25000 以 1.85 GB 的体积、完美的类别均衡与单行 ImageFolder 即可加载的友好度,成为 2019 年以来病理图像分类论文最高频的基准之一(Semantic Scholar 引用 369+,截至 2026-09),也几乎是每个病理入门项目的第一站。
我能用它做什么? 训练与教学演示 CNN/ViT 分类器、测试染色归一化与增强策略、研究"数据泄漏检测与清洗"这一方法论问题(配合第三方 LC25000-clean 分组标注)。但请注意:它不能支撑任何患者级结论——同一原始 tile 的约 20 个增广变体散布全库,官方未提供划分,随机 train/test 切分会让近满分指标失去意义(见 §6.5 坑点 1)。
§1.1 技术摘要
LC25000 由南佛罗里达大学与 James A. Haley 退伍军人医院病理科团队构建。团队首先从该院病理玻片摄录 1,250 张经确认的原始图像:肺组织 750 张(良性、腺癌、鳞癌各 250 张)与结肠组织 500 张(良性、腺癌各 250 张);原始图尺寸 1024×768,经 Python 裁剪为 768×768 后,用 Augmentor 包以"左右旋转 ≤25°(概率 1.0)+ 水平/垂直翻转(概率 0.5)"的流水线扩充至 25,000 张(论文 §2)。数据集以单个 1.85 GB ZIP 分发,目录即标签,无标注文件、无划分文件、无患者元数据。其"增广在前、混合在后"的发布方式是全部质量争议的根源:每类 5,000 张图平均仅对应 250 个独立视野,随机划分下约 99% 的测试图像在训练集中存在高度相关近重复,Batchkala et al., 2024, MICCAI DEMI Workshop 据此用病理基础模型聚类重建了分组干净的 LC25000-clean。本 Wiki 在 §5-§6 给出分组感知的完整使用方案。
§1.2 战略价值
教学与原型验证维度:LC25000 是病理深度学习教学中投入产出比最高的数据集之一。25,000 张图在单张消费级 GPU 上一个 epoch 只需数分钟,ResNet 级基线 15 个 epoch 内即可收敛;类别完美均衡意味着宏平均 F1 与准确率天然可比,学生不必先处理类别失衡。Kaggle 上 47.1K 次下载、212K 次浏览(截至 2026-09)与高活跃 Notebook 社区,使它是目前最容易获得同伴参照的病理数据集。
方法论与负样本维度:LC25000 的价值恰恰在于它是"泄漏"这一病理数据集系统性缺陷的最佳标本:增广变体跨集泄漏、原始视野不可追溯、文献报告 96%-100% 却无法互比。MICCAI 2024 DEMI Workshop 最佳论文以它为对象建立了半自动清洗管线,使该数据集成为泄漏检测、基础模型特征质量评估等新方法学的标准试验场。把 LC25000 的失败模式吃透,等于掌握了审视任何病理数据集的通用清单——这正是本 Wiki §6.5 八个坑点与 §7 DAIMS 评估的核心内容。
中文生态维度:中文世界长期缺乏对该数据集陷阱的系统整理,多数中文博客直接转录 99%+ 的文献数字而不加协议说明。本页面以中文完整梳理泄漏机制、清洗方案与诚实评估框架,为中文教学与工程团队提供一份可以直接进入课程讲义与内部规范的一手参考。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态/染色 | 类别数 | 标注形式 | 与 LC25000 的差异化 |
|---|---|---|---|---|---|
| LC25000 | 25,000 张 768×768 | H&E 病理 tile(肺+结肠) | 5 | 目录即标签(slide 级诊断) | 唯一同时覆盖肺三实体+结肠二实体的均衡分类集 |
| NCT-CRC-HE-100K | 100,000 张 224×224 | H&E 病理 tile(结直肠) | 9(组织学类型) | 目录即标签 | 规模大 4 倍、仅结直肠、含正常组织亚型 |
| BACH | 400 张标注区域图+WSI | H&E(乳腺) | 4 | 区域级+病例级双标注 | 提供病例级划分可避免 tile 泄漏 |
| BreakHis | 7,909 张 | H&E(乳腺) | 8 子类/4 放大倍数 | 目录即标签 | 显式记录 40×-400× 多放大倍数 |
| PCam | 327,680 张 96×96 | H&E 病理 patch(淋巴结) | 2 | 集中标签文件 | 规模最大但 patch 小、任务单一 |
| MHIST | 3,152 张 224×224 | H&E(息肉 HP/SSA) | 2 | 多数投票置信度 | 提供标注者置信度,含标注一致性信息 |
选型指南:想要"中等体量 + 五类 + 均衡"选 LC25000;想要大规模多类组织学类型选 NCT-CRC-HE-100K;需要病例级划分做严谨泛化实验选 BACH;研究尺度鲁棒性选 BreakHis(唯一带多放大倍数记录)。LC25000 的不可替代性在于:它是唯一一个把肺三实体与结肠二实体放进同一个均衡基准、且社区已为它建立起成套泄漏清洗方法学的数据集。
§1.4 版本时间轴
| 时间 | 事件 | 说明 |
|---|---|---|
| 2019-12-14 | GitHub 仓库 tampapath/lung_colon_image_set 创建 |
官方发布入口(ecosyste.ms 记录) |
| 2019-12 | arXiv:1912.12142 v1 提交 | 数据集描述论文(仅预印本,未刊于期刊) |
| 2020 | figshare 镜像与 Kaggle 镜像上线 | figshare 11504065;Kaggle 标注 CC BY-SA 4.0 |
| 2020-09-04 | 官方仓库最后一次推送 | 此后数据冻结,Kaggle 版本更新频率标注 Never |
| 2021-2023 | 基准文献爆发期 | Diagnostics 等期刊密集报告 96%-100% 档结果,划分协议互不相同 |
| 2024-06 | LC25000-clean 发布 | MICCAI DEMI 最佳论文发布分组清洗版与聚类标注,确立"泄漏税"叙事 |
| 2026-09 | Semantic Scholar 引用 369+ | Kaggle 累计下载 47.1K 次;数据内容自 2020-09 起从未变更 |
§1.5 典型应用场景
- 病理分类教学基线:
torchvision.datasets.ImageFolder一行加载,训练 ResNet-18/VGG-19 理解病理 tile 分类全流程,是医学院数据科学课程与 Kaggle 入门赛的理想素材。类别完美均衡意味着教师无需先讲授类别失衡处理,可以把课时集中在卷积、迁移学习与评估方法本身。 - 染色与增强方法学测试:5 类组织形态差异显著,可直观评估 Macenko 染色归一化、 stain augmentation 对收敛速度与泛化的影响(见 §6.6)。768×768 的原生大尺寸也给了 resize 策略(224/384/768)足够的实验空间。
- 泄漏检测与数据清洗方法学研究:以"能否把 25,000 张图按原始 tile 正确分组"为任务,评估基础模型嵌入质量(LC25000-clean 的最小基准设定)。该任务计算开销小(分钟级聚类)、判定客观(与人工校验组对比 ARI/NMI),适合作为新特征提取器的标准验收项。
- 模型压缩与蒸馏实验:类别均衡 + 中等规模使量化、剪枝、知识蒸馏的对比实验控制变量容易;25,000 张的规模足够让压缩前后差异显著而非淹没在随机噪声里。
- 弱监督/多示例学习预演:将同聚类 tile 模拟为"同一病例的 patch 袋",在无真实 WSI 的条件下原型化 MIL 管线(须明确这是模拟设定——真实病例内 patch 的形态异质性远高于同视野增广变体)。
- 负样本与失败模式教学:把本数据集当作"数据集审计"的活教材:让学生在动手前先完成 §7.7 DAIMS 24 项检查,亲身经历"表面完美、深层断裂"的诊断过程。
§2 医学背景
§2.1 ICD-11 编码映射
| 数据集标签 | 病理实体 | ICD-11 编码 | ICD-11 中文名称 |
|---|---|---|---|
lung_aca |
肺腺癌 | 2C25.0 | 支气管或肺腺癌 |
lung_scc |
肺鳞状细胞癌 | 2C25.2 | 支气管或肺鳞状细胞癌 |
lung_n |
肺良性组织 | 2F01(呼吸或胸内器官良性肿瘤类目) | 良性呼吸/胸内肿瘤 |
colon_aca |
结肠腺癌 | 2B92 | 结肠恶性肿瘤 |
colon_n |
结肠良性组织 | 2E92.4 | 大肠良性肿瘤 |
编码依据 WHO ICD-11 MMS 肿瘤章(2C25 查询、2E92.4 查询、良性肿瘤分组)。
§2.1b SNOMED CT 映射
| 数据集标签 | ICD-11 | SNOMED CT 码 | SNOMED CT 术语 |
|---|---|---|---|
lung_aca |
2C25.0 | 254626006 | Adenocarcinoma of lung(肺腺癌) |
lung_scc |
2C25.2 | 254634000 | Squamous cell carcinoma of lung(肺鳞状细胞癌) |
colon_aca |
2B92 | 408645001 | Adenocarcinoma of large intestine(大肠腺癌) |
colon_n |
2E92.4 | 92065004 | Benign neoplasm of colon(结肠良性肿瘤) |
lung_n |
2F01 | —(通用码 35917007 仅为"腺癌"形态学码,不适用) | 呼吸系统良性肿瘤按部位细分 |
SNOMED CT 码经 DICOM CP-2067 肿瘤编码表、OpenSafely 肺癌码表与 OMOP Athena 词汇服务交叉核实。
§2.2 疾病简介与流行病学
肺癌是全球疾病负担最重的恶性肿瘤之一,组织学上分为非小细胞肺癌(NSCLC,约占 85%)与小细胞肺癌。LC25000 覆盖的两大 NSCLC 实体中,腺癌起源于肺腺上皮或Ⅱ型肺泡细胞,是最常见的肺癌类型(引文转述约占 40%);鳞状细胞癌起源于支气管上皮的鳞状化生,多位于中央气道(引文转述约占 30%),详见 PMC7865416 综述转述。二者的形态学鉴别(腺管/乳头结构 vs 角化珠与细胞间桥)是病理 AI 分类研究的经典任务。
结肠癌以腺癌为绝对主体(引文转述超过 95%),绝大多数经由腺瘤性息肉的"腺瘤-癌"序列演进,因此"腺癌 vs 良性(腺瘤性/正常)组织"的二分类在筛查场景中有直接对应——结肠镜检发现息肉后的病理判读正是该任务的临床原型(Springer 2025 转述)。数据集论文指出,肺癌与结肠癌同为美国最常见的癌症死因(论文原文)。
五类实体的形态学鉴别要点(H&E 光镜下的经典特征,也是卷积网络实际学习的判别线索):
| 类别 | 关键形态学特征 | 常见鉴别难点 |
|---|---|---|
lung_aca 肺腺癌 |
不规则腺管/腺腔结构、乳头或贴壁生长、核异型性明显、核仁突出、可见核分裂象 | 与良性腺体增生在低倍镜下难分;高分化区与正常肺泡上皮过渡 |
lung_scc 肺鳞癌 |
角化珠、细胞间桥、胞质嗜酸性、巢状生长、坏死常见 | 与鳞状化生区分;低分化时与腺癌鉴别需免疫组化(数据集不含) |
lung_n 肺良性组织 |
肺泡结构保留、细支气管上皮整齐、间质炎症细胞散在、无异型性 | 含炎症/纤维化等非肿瘤病变,视觉多样性大 |
colon_aca 结肠腺癌 |
腺体结构异常(背靠背、筛状)、核深染拉长、极性紊乱、浸润性生长 | 高分化腺癌与腺瘤高级别上皮内瘤变的边界本身在病理学上就存在灰区 |
colon_n 结肠良性组织 |
隐窝结构规整、杯状细胞保留、核位于基底侧 | 与腺瘤(良性肿瘤性)混在一个标签桶内,语义宽泛 |
这张表解释了 LC25000 基准上的两类典型错误:lung_n ↔ lung_aca(腺体发育谱系两端)与 colon_n ↔ colon_aca(腺瘤-癌序列两端)——混淆矩阵的高发非对角位置与病理学灰区完全吻合。
§2.3 临床任务定义
| 任务类型 | 临床原型 | LC25000 支持度 |
|---|---|---|
| 组织学诊断分类 | 活检/切除标本的良恶性与组织学类型判读 | ✅ 核心任务(5 类/二分类/三分类) |
| 癌症筛查辅助 | 高危人群影像+病理联合筛查 | ⚠️ 仅病理环节、且无筛查人群分层 |
| 组织学分级/分期 | Gleason、TNM 等分级分期 | ❌ 无分级、分期标签 |
| 预后预测 | 生存、复发建模 | ❌ 无随访与结局数据 |
| 治疗反应预测 | 新辅助治疗后病理缓解评分 | ❌ 无治疗信息 |
需要特别区分"图像分类任务"与"临床诊断任务":前者只要求把 tile 分到正确目录,后者要求对病例给出可复核、可问责的诊断结论。LC25000 的全部设计(tile 级、均衡、无临床元数据)都只为前者服务;把文献中的 99% 分类准确率转述为"AI 诊断达到病理医师水平"是本数据集相关讨论中最常见、也最危险的过度引申。
需要注意:LC25000 的标签是玻片级病理诊断(slide 级),tile 继承其来源玻片的诊断,而非逐 tile 独立判读——良性玻片的某些 tile 可能与腺癌 tile 视觉相似(如良性腺体的切片伪影),这构成标签噪声的内在来源(见 §7.2)。
§2.4 患者人群
| 维度 | 信息 | 备注 |
|---|---|---|
| 来源机构 | James A. Haley Veterans’ Hospital(美国佛罗里达州坦帕) | 美国退伍军人事务部医院(论文) |
| 病例数 | 未披露 | 1,250 个原始 tile 对应的病例/玻片数未公开 |
| 采集时间 | 未披露 | 论文引用其 2018 年前期工作描述采集流程 |
| 年龄/性别 | 未披露 | VA 人群以老年男性为主,构成潜在人群偏倚 |
| 种族/族裔 | 未披露 | — |
| 就医类型 | 病理诊断服务标本 | 手术切除/活检玻片,去标识化 |
为什么"病例数"这一栏如此重要:病例数决定了统计有效性与泛化推断的边界。若 1,250 个视野来自 300 个病例与来自 1,200 个病例,其有效样本量相差数倍,置信区间宽度完全不同——而在 LC25000 中这一信息永久缺失。使用者只能以"视野数 1,250"作为上界、"1"作为下界做保守表述,任何介于其间的断言都缺乏依据。这也是评审病理数据集论文时应主动追问的第一问题。
§2.5 临床价值
在真实临床管线中,病理 AI 的第一落点是筛查与分诊:病理医师日均阅片数百张,腺癌与良性组织的初筛可压缩阅片时间。LC25000 覆盖的五个实体正好构成"两大癌种 × 恶性/良性"的最小教学与原型集,可作为病理科信息化改造前期的算法选型与工作流验证素材。三个具体的价值落点:其一,作为筛查流水线中"恶性 tile 优先送检"的排序器原型素材;其二,作为染色质控工具的回归测试集(染色漂移时分类性能应保持稳定);其三,作为新入职数字病理工程师理解 tile-诊断映射关系的训练材料。
但必须强调(详见 §7):该数据集的人群单一(退伍军人医院)、视野数有限(每类 250 个独立视野)且无分级/分期标签,任何"临床级诊断效能"的声明都没有证据支撑;其价值定位是方法学验证与教学,而非直接临床证据。
§2.6 标注金标准
| 维度 | 内容 |
|---|---|
| 金标准定义 | H&E 染色玻片的病理形态学诊断(WHO 肺肿瘤与消化系统肿瘤分类框架) |
| 标注方式 | 玻片经病理医师诊断确认后,tile 继承玻片级诊断标签(目录名即标签) |
| 标注者 | 论文作者团队:病理科医师 Borkowski、Bui、Thomas、Mastorides 等(均为 MD;Bui 兼 Moffitt 肿瘤中心病理) |
| 一致性评估 | 未披露(无标注者间一致性数据,如 kappa) |
| 标注性质 | 玻片级回顾性诊断标签,非逐 tile 独立标注 |
§3 数据集规格
§3.0 版本与获取渠道抉择矩阵
LC25000 数据内容自 2020-09 起冻结,无正式版本号;差异主要在分发渠道。按下表选择渠道:
| 你的需求 | 推荐渠道 | 大小 | 理由 |
|---|---|---|---|
| 可引用的官方原始文件 | Academic Torrents | 1.85 GB | 官方 GitHub README 直接指向,与论文描述一致(lung_colon_image_set 目录结构) |
| 快速实验 + Notebook 社区 | Kaggle | 1.89 GB | kagglehub 一行下载、8.75 usability、大量公开 Notebook 可参照 |
HuggingFace 生态/datasets 库 |
1aurent/LC25000 | ≈1.85 GB | 与 datasets 流水线无缝集成,注意文件命名已被重排 |
| 带泄漏分组标注的清洗版 | LC25000-clean | 原库+标注 | 附聚类分组 annotations 与清洗管线代码 |
§3.1 模态详情
全部 25,000 张图像为 H&E(苏木精-伊红)染色组织的显微数字图像:细胞核被苏木精染为蓝紫色,细胞质与胶原间质被伊红染为粉红色。图像是组织 tile(tile)而非全切片(WSI):从扫描玻片上截取 1024×768 视野后中心裁剪为 768×768。每张图对应一个独立视野的增广变体(旋转/翻转),不保留颜色标准差、分辨率层级或扫描仪信息。与 CT/MRI 不同,病理 tile 的像素值受染色浓度、扫描白平衡影响显著,跨实验室迁移时通常需要染色归一化(见 §6.3)。
H&E 染色的两个成像特性直接影响建模:
| 成像特性 | 成因 | 对 AI 建模的影响 |
|---|---|---|
| 染色强度批次漂移 | 苏木精/伊红染液批号、染色时长、分化步骤差异 | 同类图像 RGB 分布漂移;跨库迁移性能骤降的主因之一 |
| 扫描白平衡差异 | 扫描仪 A/D 转换与光源标定不同 | LC25000 未记录扫描仪,白平衡特性不可追溯 |
| 组织占比差异大 | 视野内间质/实质/空腔比例随机 | 归一化统计需排除空白背景像素,否则均值被稀释 |
| 无方向先验 | 病理形态学无"上下"语义 | 翻转类增强完全安全;旋转类增强注意黑角(坑点 4) |
§3.2 按子集样本数
| 子集目录 | 病理实体 | 原始 tile 数 | 增广后张数 | 命名模式 |
|---|---|---|---|---|
lung_image_sets/lung_aca |
肺腺癌 | 250 | 5,000 | lungaca1.jpeg … lungaca5000.jpeg |
lung_image_sets/lung_scc |
肺鳞状细胞癌 | 250 | 5,000 | lungscc1.jpeg … lungscc5000.jpeg |
lung_image_sets/lung_n |
肺良性组织 | 250 | 5,000 | lungn1.jpeg … lungn5000.jpeg |
colon_image_sets/colon_aca |
结肠腺癌 | 250 | 5,000 | colonca1.jpeg … colonca5000.jpeg |
colon_image_sets/colon_n |
结肠良性组织 | 250 | 5,000 | colonn1.jpeg … colonn5000.jpeg |
| 合计 | 5 类 | 1,250 | 25,000 | — |
命名模式行所列为官方 ZIP 的原始命名;Kaggle/HuggingFace 等镜像可能保留或更改前缀,以实际解压结果为准(§6.5 坑点 7 提供渠道无关的加载方案)。
§3.3 数据格式
| 属性 | 规格 |
|---|---|
| 文件格式 | JPEG(有损压缩,目录分发) |
| 分辨率 | 全部 768×768 像素(由 1024×768 中心裁剪) |
| 色彩 | RGB 三通道彩色 |
| 位深 | 8 bit/通道 |
| 组织方式 | lung_colon_image_set/ 根目录 + 2 个器官子目录 + 5 个类别叶子目录 |
| 元数据文件 | 无(无 CSV/JSON 标注文件、无划分文件、无 README 之外的文档) |
§3.4 存储大小
| 渠道 | 压缩包大小 | 解压后 | 备注 |
|---|---|---|---|
| 官方 ZIP(Academic Torrents) | 1.85 GB | ≈2.0 GB | JPEG 已高度压缩,压缩比有限 |
| Kaggle 镜像 | 1.89 GB | ≈2.0 GB | 与官方版目录一致 |
| 单卡训练驻留内存(224×224 resize) | — | ≈3.8 GB(uint8 全量) | 按需解码时磁盘瓶颈远大于内存瓶颈 |
| CPU-only 环境离线预缩副本(224²) | — | ≈1.6 GB | 一次性落盘副本,训练吞吐改由 CPU 解码决定 |
网络带宽参考:1.85 GB 在 100 Mbps 宽带下约 3 分钟;Academic Torrents 实际速度取决于当期做种数,赶时间时 Kaggle 直链通常更快。
§3.5 标注方式
标注为玻片级病理诊断的目录映射:原始玻片由病理医师完成常规诊断,采集时按诊断分组摄录 tile,发布时以目录名作为标签。没有单独的标注文件,也没有任何针对 tile 的二次确认流程被披露。这是一种弱验证标注:玻片诊断本身遵循病理金标准,但"tile 与玻片诊断一致"的假设在小视野、组织边缘或切片伪影处可能失效。
重建出的标注信息流如下:
病理医师签发玻片诊断(金标准)
→ 采集时按诊断分组选取视野(人工挑选,标准未披露)
→ tile 继承玻片诊断作为目录标签(无 tile 级复核)
→ 增广后混装发布(目录即标签)
三个未披露的环节——视野挑选标准、tile 复核流程、诊断版本(WHO 分类 2015 版肺肿瘤)——意味着使用者无法评估"标签噪声率",只能通过抽样目检自行估计:建议随机抽 100 张/类人工复核,把不一致样本率写入你的实验报告。
§3.6 标注者资质与一致性
论文作者均为执业病理医师:第一作者 Andrew A. Borkowski(James A. Haley 退伍军人医院病理与检验科)与通信作者 Marilyn M. Bui(南佛罗里达大学、Moffitt 肿瘤中心,H&E 病理 AI 领域资深病理学家)等(论文署名)。但数据集未披露逐张标注的执行者、复核流程与标注者间一致性指标,无法进行一致性量化。
§3.7 采集周期
论文未披露玻片采集时间窗,仅说明采集流程沿用作者 2018 年的前期工作(arXiv:1808.08230,NSCLC 亚型分类)。仓库 2019-12-14 创建、数据自 2020-09 冻结,可作为发布周期的参考锚点。
§3.8 地域覆盖
单机构:美国佛罗里达州坦帕市 James A. Haley Veterans’ Hospital(退伍军人事务部医院)。地域与人群多样性有限,构成跨人群泛化的主要风险(见 §7.1、§7.3)。
§3.9 设备规格
论文与仓库均未披露扫描仪型号、放大倍数、像素间距与切片厚度。第三方汇总确认仅有玻片级类别标签、无任何采集元数据(Emergent Mind 汇总)。社区普遍按 20× 或 40× 物镜等效分辨率假设处理,但没有任何官方依据——引用 LC25000 时不应声称特定放大倍数(见 §6.5 坑点 5)。
这不是一个无关紧要的元数据缺口:在计算病理学中,放大倍数决定了"一个像素代表多少微米",进而决定核形态、腺管间距等关键判别特征的表观尺度。缺失它意味着:① 无法与 WSI 数据集按物理尺度对齐;② 无法复现"物理分辨率归一化"的标准预处理;③ 论文中所有"视野"描述(如"一个 768×768 tile 覆盖约 X 微米组织")都只能留空。这是 LC25000 与现代 WSI 数据集(如 BACH、PAIP)在元数据规范上的最大代差。
§3.10 深度溯源链
患者(未披露,数量未知)
└─ 手术/活检组织标本(未披露采集时间)
└─ H&E 染色玻璃切片(病理科常规制样)
└─ 数字扫描(设备未披露)→ 全切片图像
└─ 组织 tile 提取:1,250 张原始视野(1024×768 → 768×768)
└─ Augmentor 增广(旋转 ≤25° + 翻转)→ 25,000 张
└─ 打乱混装 → 官方 ZIP(原始视野映射关系未保留)
溯源链在"tile → 玻片"处断裂:官方未保留任何分组信息,这是本数据集最关键的结构性缺陷(§6.5 坑点 2)。
对比现代 WSI 数据集的溯源规范,可以让这个断裂更直观:
| 溯源环节 | 现代规范(如 BACH/PAIP) | LC25000 实际 |
|---|---|---|
| 患者 ID | 伪匿名化保留 | 完全缺失 |
| 玻片 ID 与 tile 坐标 | 保留(可回溯到 WSI 区域) | 完全缺失 |
| 扫描仪/倍数/分辨率 | 保留 | 完全缺失 |
| 标注者与诊断版本 | 部分保留 | 仅作者团队名单 |
| 增广记录 | 通常不增广或记录可逆 | 增广不可逆且无记录 |
§4 数据结构
§4.0 目录树
lung_colon_image_set/ # 根目录(ZIP 解压后)
├── colon_image_sets/ # 结肠子集(2 类,10,000 张)
│ ├── colon_aca/ # 结肠腺癌:5,000 张
│ │ ├── colonca1.jpeg
│ │ ├── colonca2.jpeg
│ │ └── …(共 5,000 张)
│ └── colon_n/ # 结肠良性组织:5,000 张
│ ├── colonn1.jpeg
│ └── …(共 5,000 张)
└── lung_image_sets/ # 肺子集(3 类,15,000 张)
├── lung_aca/ # 肺腺癌:5,000 张
│ ├── lungaca1.jpeg
│ └── …(共 5,000 张)
├── lung_n/ # 肺良性组织:5,000 张
│ ├── lungn1.jpeg
│ └── …(共 5,000 张)
└── lung_scc/ # 肺鳞状细胞癌:5,000 张
├── lungscc1.jpeg
└── …(共 5,000 张)
注意:官方 ZIP 的文件名序列号(colonca1 … colonca5000)不携带增广来源信息;部分镜像(HuggingFace 等)已重命名文件(如 colonaca* 前缀),加载代码不要硬编码文件名模式(§6.5 坑点 7)。
§4.1 DAIMS 字段字典
LC25000 无显式表格字段,以下按"虚拟字段"给出 8 列数据字典(字段名/类型/说明/示例值/AI 用途/观测误差/信息性缺失编码/取值范围):
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
image_filename |
Text | JPEG 文件名(主键) | lungaca1234.jpeg |
样本追踪 | 镜像重命名导致前缀不一致 | — | ^[a-z]+[0-9]+\.jpeg$ |
label |
Text | 类别标签(目录名) | lung_aca |
分类目标 | 目录级继承,无 tile 级复核 | 无缺失 | 5 个枚举值 |
organ |
Text | 派生:器官(前缀) | lung |
分器官评估 | — | — | lung/colon |
malignancy |
Integer | 派生:恶性(1)/良性(0) | 1 | 二分类、分层评估 | 依赖玻片级诊断 | — | |
width |
Integer | 像素宽 | 768 | 输入尺寸校验 | 0(全部恒定) | — | 768 |
height |
Integer | 像素高 | 768 | 输入尺寸校验 | 0(全部恒定) | — | 768 |
source_tile_id |
— | 原始视野 ID | 不存在 | 泄漏分组的关键 | 字段缺失,无法重建 | 硬缺失 | — |
magnification |
— | 放大倍数 | 不存在 | 尺度标准化 | 未记录 | 硬缺失 | — |
source_tile_id 与 magnification 两个关键字段是"结构性缺失"而非"值缺失"——它们从未被采集或发布,任何加载器都应以硬错误提示这两个字段不可用。
§4.2 标签分布
| 任务设定 | 类别构成 | 分布 |
|---|---|---|
| 5 类多分类(全库) | lung_aca / lung_scc / lung_n / colon_aca / colon_n | 各 5,000 张(20% × 5) |
| 肺三分类(15,000 张) | aca / scc / n | 各 5,000 张 |
| 结肠二分类(10,000 张) | aca / n | 各 5,000 张 |
| 恶性/良性二分类(全库) | 恶性 15,000 / 良性 10,000 | 60% / 40% |
分布完全人工均衡,与真实疾病患病率无关(例如真实人群中结肠良性息肉检出率远高于此)——这是增广数据集的普遍特征,建模时不要把先验解释为流行病学。
§4.3 关键统计
- 原始独立视野:1,250 个(每类 250 个);增广倍数:每视野平均 20 个变体(LC25000-clean 测算)。
- 随机 80/20 划分下,预计 99% 的测试图像在训练集中有高度相关近重复(同上)。
- 全库像素尺寸恒定 768×768,无尺寸分布长尾,
ImageFolder加载零异常。 - JPEG 有损压缩引入的染色值量化噪声未量化,但基准实验普遍未见因此报错。
独立有效样本量是理解该数据集的钥匙:
| 统计口径 | 数值 | 倍增系数 | 含义 |
|---|---|---|---|
| 文件级样本 | 25,000 | ×1 | 表面样本量,绝大多数论文报告口径 |
| 视野级样本 | 1,250 | ÷20 | 每类仅 250 个独立视野 |
| 病例级样本 | ≤1,250 | 未知 | 一个病例可贡献多个视野,真实值更低且不可查 |
结论:所有"25,000 张大样本"的表述都应打折 20 倍理解——这不是数据集的缺陷独有的,而是所有"增广扩容"数据集的共同属性,但 LC25000 因为视野数恰好是整齐的每类 250,倍增系数清晰可算,反而成了最好的教学案例。
§4.4 数据层级
患者(未披露)
└─ 病例/标本(未披露)
└─ 玻片(未披露)
└─ 原始组织 tile(1,250 个,ID 未保留)
└─ 增广变体(25,000 张,占位发布单元)
发布单元(JPEG 文件)处于层级最末端,而有效统计单元(玻片/病例)完全缺失——任何"以文件为独立样本"的统计推断都高估了有效样本量约 20 倍。反之,层级视角也指出了一个进阶玩法:把"聚类组"视为伪病例、把组内 tile 视为伪 patch 袋,就能在不访问任何真实 WSI 的条件下,原型化基于注意力(ABMIL)或多实例(MIL)的聚合模型,为后续接入真实 WSI 项目预留架构。
§4.5 缺失值与信息性缺失
| 缺失项 | 类型 | 对建模的影响 | 处理建议 |
|---|---|---|---|
source_tile_id |
结构性缺失 | 泄漏分组不可从数据本身重建 | 采用 §6.5 坑点 2 的聚类方案或直接用 LC25000-clean 标注 |
magnification/扫描仪 |
结构性缺失 | 无法做尺度归一与跨库对齐 | 引用时禁写放大倍数;跨库迁移加 resize 敏感性分析 |
| 患者/临床元数据 | 结构性缺失 | 无法做人群分层与公平性审计 | 明确声明外部效度受限 |
| 图像内容缺失值 | 无 | 像素级无缺失 | — |
§5 数据划分与使用建议
§5.1 官方划分
官方未提供任何划分。 仓库与论文均无 train/val/test 定义,这使 LC25000 成为"自带划分缺失"的典型。Kaggle 社区讨论明确指出随机划分会导致严重泄漏并建议出版物谨慎使用(Kaggle 讨论 589281)。
"无官方划分"在 2019 年发布时是常态(同期多数 tile 数据集同样不含划分),但 2024 年之后,随着泄漏问题被系统研究,"是否随数据发布划分(或至少发布分组键)"已经成为数据集质量的事实标准——LC25000 恰好停留在标准演进之前的形态,且官方已停止维护,这一缺口不会再由官方补上。
§5.2 社区惯例与推荐策略
文献中出现的划分方案包括 80/20、75/25、60/20/20、68/17/15 与 5 折交叉验证等(汇总),彼此结果不可比。本 Wiki 推荐按研究目的选择:
| 研究目的 | 推荐策略 | 说明 |
|---|---|---|
| 方法论文(发表用途) | LC25000-clean 分组划分(组=原始 tile 聚类) | 唯一能控制泄漏的方案 |
| 教学/原型 | 分层随机划分 + 明确声明"含增广泄漏、指标虚高" | 快速但有偏 |
| 增强泛化实验 | 按聚类组做 GroupKFold | 对划分随机性更稳健 |
| 跨库迁移评估 | LC25000 训练 → NCT-CRC-HE-100K/BACH 测试 | 直接检验染色与人群偏移 |
一个量化"泄漏税"的最小演示(对比随机划分与组级划分的指标差):
# 需要 LC25000-clean 的 annotations.csv(列:filepath, label, group_id)
import pandas as pd
from sklearn.model_selection import train_test_split, GroupShuffleSplit
df = pd.read_csv("annotations.csv")
# 随机划分(文献常见做法):泄漏进入测试集
tr_r, te_r = train_test_split(df, test_size=0.2, stratify=df["label"], random_state=42)
# 组级划分:同 group_id 不跨集
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
tr_g, te_g = next(gss.split(df, groups=df["group_id"]))
print(f"随机划分: train={len(tr_r)}, test={len(te_r)}")
print(f"组级划分: train={len(df.iloc[tr_g])}, test={len(df.iloc[te_g])}")
# 用同一模型分别训练评估,两个准确率之差即泄漏税(文献区间可达数十个百分点)
§5.3 泄漏风险清单(重点)
以下三条按"是否可直接造成指标虚高"排序,第一条是全部讨论的核心:
- 增广近重复泄漏(严重):同一原始 tile 的旋转/翻转变体跨 train/test,随机 80/20 下约 99% 测试图有训练近邻(§6.5 坑点 1)。
- 无法患者级划分(结构性):玻片与患者映射未发布,即使分组干净也只能保证"tile 级不泄漏",病例级仍可能隐性相关(§6.5 坑点 2)。
- 预处理统计泄漏(中等):在划分前对全库计算归一化均值/方差或染色参考图,会把测试分布信息带入训练——务必在训练集内拟合统计量。
§5.4 交叉验证建议
使用 GroupKFold(组 = LC25000-clean 聚类组)做 5 折交叉验证;若用随机 KFold 报告结果,必须在论文中显式声明"分组信息不可得、指标含泄漏偏倚",否则与 99%+ 的文献放在一起会误导读者。
交叉验证的三个实操细节:① 每折内部再做染色归一化拟合(参考图从该折训练部分选),避免归一化信息跨折泄漏;② 分层维度用 label 而非 group(组内标签天然同质,分层自动满足);③ 报告折间标准差而非只报均值——组级划分下折间方差会显著大于随机划分,这本身就是有效样本量缩水的直接体现。
§5.5 外部验证建议
- 结直肠方向:以 NCT-CRC-HE-100K(9 类组织学)或 MHIST(息肉 HP/SSA)为外部测试集,预期准确率显著下降(染色、分辨率、人群三重偏移)。
- 肺方向:可用 BACH 或私有 WSI 队列;公开的肺病理 tile 集稀缺,这也是 LC25000 被高频引用的原因之一。
- 任何外部验证结果都应报告"相对内部(泄漏)指标的衰减幅度",这个衰减量本身就是有价值的泛化性度量。
外部验证的标签对齐注意:NCT-CRC-HE-100K 的 9 类与 LC25000 的 5 类不同构,直接迁移只保留共同语义(肿瘤 vs 非肿瘤组织);若需要严格同构任务,建议把双方都映射到"恶性/良性"二分类后再比较,并在论文中给出映射表。
§6 AI 就绪指南
§6.0 云端快速启动
数据已托管 Kaggle,最快的路径是在 Kaggle Notebook 或 Colab 中直接挂载:
# Kaggle Notebook 内已内置 /kaggle/input 路径,无需下载
ls /kaggle/input/lung-and-colon-cancer-histopathological-images/lung_colon_image_set
# Colab / 本地:用 kagglehub 一行拉取(约 1.89 GB)
pip -q install kagglehub
python -c "import kagglehub; p=kagglehub.dataset_download('andrewmvd/lung-and-colon-cancer-histopathological-images'); print(p)"
| 环境 | 推荐方式 | 说明 |
|---|---|---|
| Kaggle Notebook | 直接挂载 /kaggle/input |
零下载、GPU 免费 30h/周,社区 Notebook 最多 |
| Google Colab | kagglehub 拉取到本地盘 |
需 Kaggle API Token;会话重置后需重新拉取 |
| 实验室服务器 | Academic Torrents 官方文件 | 一次性落盘 + DVC/LFS 纳管,manifest 固化 |
| HuggingFace 生态 | load_dataset("1aurent/LC25000") |
与 datasets/transformers 训练脚本无缝衔接 |
§6.1 快速上手(含目录结构注释)
# ── 目录结构预期 ─────────────────────────────────────────────
# data_root/
# └── lung_colon_image_set/
# ├── colon_image_sets/{colon_aca, colon_n}/*.jpeg
# └── lung_image_sets/{lung_aca, lung_n, lung_scc}/*.jpeg
# data_root 就是 kagglehub 返回的路径 + '/lung_colon_image_set'
# ImageFolder 以叶子目录名作为标签,label 直接可用
# ─────────────────────────────────────────────────────────────
from torchvision.datasets import ImageFolder
from torchvision import transforms
from torch.utils.data import DataLoader, random_split
data_root = "lung_colon_image_set" # 与上面目录树一致
tfm = transforms.Compose([
transforms.Resize((224, 224)), # 见 §6.5 坑点 5:resize 策略
transforms.ToTensor(),
])
full = ImageFolder(data_root, transform=tfm)
print(full.classes) # ['colon_aca','colon_n','lung_aca','lung_n','lung_scc']
n_train = int(0.8 * len(full)) # ⚠️ 教学 demo 用随机划分可以;
train_ds, val_ds = random_split( # 发表用途必须换 §6.5 坑点 2 的分组划分
full, [n_train, len(full) - n_train], generator=torch.Generator().manual_seed(42))
train_dl = DataLoader(train_ds, batch_size=64, shuffle=True, num_workers=4, pin_memory=True)
val_dl = DataLoader(val_ds, batch_size=128, shuffle=False, num_workers=4)
最小可用子集:任取两个类别目录(如 lung_aca vs lung_n)即构成一个 10,000 张的二分类教学集,几分钟内可跑通首个 epoch。
数据落地后的三分钟完整性验收脚本:
# 验收:数量、尺寸、可读性三关
from pathlib import Path
from PIL import Image
import random
root = Path("lung_colon_image_set")
files = [p for p in root.rglob("*") if p.suffix.lower() in {".jpeg", ".jpg"}]
assert len(files) == 25_000, f"文件数异常: {len(files)}"
assert len({p.parent.name for p in files}) == 5, "类别目录数异常"
random.seed(0)
for p in random.sample(files, 200): # 抽样 200 张验证可读性与尺寸
with Image.open(p) as im:
assert im.size == (768, 768), f"尺寸异常: {p} {im.size}"
im.convert("RGB").load() # 触发完整解码,捕获截断文件
print("验收通过:25,000 张 / 5 类 / 768×768 全部一致")
§6.2 数据获取
| 渠道 | 方式 | 大小 | 前置条件 |
|---|---|---|---|
| Academic Torrents(官方) | BT 客户端或 aria2c 磁力链接 |
1.85 GB | 无 |
| Kaggle | kagglehub 或 Kaggle Notebook 挂载 |
1.89 GB | 免费 Kaggle 账号 |
| HuggingFace | datasets.load_dataset("1aurent/LC25000") |
≈1.85 GB | 无 |
| figshare | 浏览器直下 | 1.85 GB | 无 |
| LC25000-clean(清洗版标注) | git clone 官方数据 + 仓库 annotations |
+标注文件 | 遵循原库许可 |
# 方式一:官方镜像(Academic Torrents,seed 健康度以页面为准)
aria2c "magnet:?xt=urn:btih:7a638ed187a6180fd6e464b3666a6ea0499af4af"
# 方式二:Kaggle CLI(需要 ~/.kaggle/kaggle.json)
kaggle datasets download -d andrewmvd/lung-and-colon-cancer-histopathological-images
unzip -q lung-and-colon-cancer-histopathological-images.zip
# 方式三:HuggingFace datasets
python -c "from datasets import load_dataset; ds=load_dataset('1aurent/LC25000'); print(ds)"
下载完成后务必校验文件数与目录结构(§6.1 验收脚本);从非官方渠道获得的历史存档请先比对文件总数(应为 25,000)再入库,防止混入残缺镜像或被二次处理的版本。所有获取方式均不改变原库内容,差异仅存在于打包与命名层面。
§6.3 预处理全流程
病理 tile 预处理的四个标准步骤:黑角清除 → 尺寸策略 → 染色归一化 → 划分感知增强。
import numpy as np
import torch
from PIL import Image
def crop_black_corners(img: Image.Image, threshold: int = 20) -> Image.Image:
"""清除 Augmentor 旋转产生的四角黑色填充(坑点 4)。
以亮度阈值找非黑区域外接矩形,再中心裁剪回正方形。"""
arr = np.asarray(img.convert("L"))
mask = arr > threshold # 非黑像素
if not mask.any():
return img
rows, cols = np.where(mask)
box = (cols.min(), rows.min(), cols.max() + 1, rows.max() + 1)
cropped = img.crop(box)
w, h = cropped.size
side = min(w, h)
left, top = (w - side) // 2, (h - side) // 2
return cropped.crop((left, top, left + side, top + side))
def resize_strategy(img: Image.Image, target: int = 224) -> Image.Image:
"""768→224 直接 resize 是社区默认做法,但等效改变了视野尺度。
稳妥做法:先中心裁剪到 448(保留核心视野、丢弃边缘伪影)再 resize,
可显著降低黑角与空泡区域占比;对比实验见 §6.5 坑点 5。"""
return crop_black_corners(img).resize((target, target), Image.BILINEAR)
染色归一化(可选但推荐):多视野间染色浓度差异明显,Macenko 或 Reinhard 归一化可压缩染色风格方差。参考实现:staintools 或 torchstain(Macenko,SVD 估计染色向量)。
import torchstain, torchvision
def macenko_fit(ref_paths):
"""在训练集内选 1-3 张参考图拟合 Macenko 目标(不要用全库拟合,防泄漏)。"""
t = torchvision.transforms.Compose([torchvision.transforms.Resize((224, 224)),
torchvision.transforms.ToTensor()])
normalizer = torchstain.normalizers.MacenkoNormalizer()
ref = t(Image.open(ref_paths[0]).convert("RGB"))
normalizer.fit(ref)
return normalizer, t
全流程串接示例(下载完成后的标准作业顺序):
# Step 1 清点:扫描目录,生成 manifest(渠道无关,坑点 7)
from pathlib import Path
import pandas as pd
def build_manifest(root: str) -> pd.DataFrame:
rows = []
for p in Path(root).rglob("*"):
if p.suffix.lower() in {".jpeg", ".jpg"}:
rows.append({"filepath": str(p), "label": p.parent.name,
"organ": p.parent.parent.name.split("_")[0],
"size_kb": round(p.stat().st_size / 1024, 1)})
df = pd.DataFrame(rows)
assert len(df) == 25_000 and df["label"].nunique() == 5 # 完整性断言
return df
manifest = build_manifest("lung_colon_image_set")
manifest.to_csv("manifest.csv", index=False) # 固化后供所有下游消费
# Step 2 抽检:每类随机目检 20 张,确认黑角比例与染色质量
sample = manifest.groupby("label").sample(20, random_state=0)
# Step 3 分组:套用 LC25000-clean 标注或 §6.4 聚类流程,得 group_id
# Step 4 划分:GroupShuffleSplit(组级)→ 固化 train/val/test 索引文件
# Step 5 训练:只从 manifest + 划分索引读取,绝不二次扫描目录
§6.4 PyTorch DataLoader 完整实现
<details>
<summary>点击展开完整 Dataset + transform + DataLoader 代码(约 60 行)</summary>
"""
LC25000 分组感知训练流水线
预期目录:
DATA_ROOT/lung_colon_image_set/{colon_image_sets,lung_image_sets}/<class_name>/*.jpeg
ANNO_DIR/annotations.csv # 来自 github.com/GeorgeBatch/LC25000-clean
# 列:filepath, group_id(同组=同原始 tile)
依赖:torch >= 2.0, torchvision, pandas, scikit-learn, pillow
"""
from pathlib import Path
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
from sklearn.model_selection import GroupShuffleSplit
DATA_ROOT = Path("lung_colon_image_set")
ANNO_CSV = Path("annotations.csv") # LC25000-clean 分组标注
class LCDataset(Dataset):
def __init__(self, df: pd.DataFrame, train: bool, img_size: int = 224):
self.items = df[["filepath", "label_id"]].values
aug = [transforms.RandomRotation(degrees=15),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(brightness=0.15, contrast=0.15)]
base = [transforms.Lambda(lambda im: im),
transforms.Resize((img_size, img_size)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.8170, 0.6275, 0.7560], # 示例值:请在训练集重新计算
std=[0.1213, 0.1570, 0.1100])]
self.tf = transforms.Compose(aug + base if train else base)
def __len__(self):
return len(self.items)
def __getitem__(self, i):
path, y = self.items[i]
from PIL import Image
img = Image.open(path).convert("RGB")
return self.tf(img), int(y)
def build_loaders(img_size: int = 224, batch_size: int = 64, seed: int = 42):
df = pd.read_csv(ANNO_CSV) # filepath, group_id
classes = sorted(df["label"].unique()) # label -> id 映射
df["label_id"] = df["label"].map({c: i for i, c in enumerate(classes)})
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=seed)
tr, te = next(gss.split(df, groups=df["group_id"])) # ★ 组级划分,杜绝增广泄漏
tr_df, te_df = df.iloc[tr], df.iloc[te]
dl_kw = dict(num_workers=4, pin_memory=True, persistent_workers=True)
return (DataLoader(LCDataset(tr_df, True, img_size), batch_size=batch_size,
shuffle=True, drop_last=True, **dl_kw),
DataLoader(LCDataset(te_df, False, img_size), batch_size=batch_size * 2,
shuffle=False, **dl_kw),
classes)
if __name__ == "__main__":
train_dl, val_dl, classes = build_loaders()
x, y = next(iter(train_dl))
assert x.shape[1:] == (3, 224, 224) and y.max() < len(classes)
print("OK", x.shape, classes)
</details>
若暂时拿不到 LC25000-clean 标注,可先退化为"文件名哈希分组"(同一聚类不可得时至少保证同类增广变体不完全随机),并在论文中如实声明分组依据(§6.5 坑点 2)。
§6.5 八个坑点
⚠️ 坑点 1:增广近重复跨集泄漏——99% 准确率的第一嫌疑人(分类:数据泄漏)
问题:每类 5,000 张图全部由 250 张原始 tile 旋转/翻转而来,平均每个原始视野约 20 个高度相关变体随机散布全库;随机 train/test 划分把同源变体分进两侧,测试集对模型而言是"见过的图改个角度"。
症状:几个 epoch 内验证准确率冲上 99%;测试误差接近训练误差;任何架构(哪怕浅层 CNN)都能拿到近满分;混淆矩阵几乎全对角。
解决:
- 简单方法:按 LC25000-clean 的
group_id做GroupShuffleSplit/GroupKFold,保证同组变体只出现在一侧(§6.4 代码)。- 进阶方法:用病理基础模型(UNI 等)提取嵌入 → KMeans(k=250/类)聚类 → 人工校验 → 组级划分;LC25000-clean 已提供成品标注与管线(仓库)。
- SOTA 方法:把"聚类恢复原始分组"本身作为基准任务评估嵌入质量(precision@1/5、ARI、NMI),这是 Batchkala et al., 2024, MICCAI DEMI Workshop, LNCS 15265, pp 11-21 的设定。
参考:LC25000-clean GitHub;论文原文增广参数(arXiv:1912.12142 §2.2)。
⚠️ 坑点 2:原始 1,250 张未公开——文件名不含分组信息,泄漏无法事后精确修复(分类:数据泄漏)
问题:官方从未发布 tile→原始视野的映射;增广图像顺序打乱、序列号重排,
lungaca1234.jpeg与lungaca1235.jpeg不一定同源。作者明确拒绝提供原始图像与映射(GitHub issue #5)。
症状:尝试按文件名数字段、时间戳或 EXIF 分组全部失败;自己写的"分组"划分经近重复检测(pHash)仍发现跨集相似对。
解决:
- 简单方法:直接采用 LC25000-clean 发布的聚类分组标注,不要自己从零分组。
- 进阶方法:对全库计算感知哈希(pHash/dHash)+ 嵌入余弦相似度,将相似对做图连通分量合并后组级划分;旋转变体的 pHash 汉明距离会略高于纯翻转,阈值需按类内分布校准。
- SOTA 方法:UNI/CONCH 等病理基础模型嵌入 + KMeans/层次聚类 + 人工抽检(与 LC25000-clean 一致);把剩余的"未分组"图像单独设为 train-only 桶,宁可少用不污染测试。
参考:Kaggle 讨论 589281;issue #5。
⚠️ 坑点 3:无官方划分——文献 96%-100% 互相之间不可比(分类:评估误用)
问题:官方不提供划分,各论文自选 80/20、75/25、60/20/20、5 折等协议,且训练尺寸(224/150/384/480)与增强各异;同时叠加坑点 1 的泄漏,指标差异主要反映协议而非模型。
症状:复现某论文的 99.9% 却在"相同模型"上得到 97%;两篇论文互相比较时结论矛盾;审稿人要求解释与文献差距。
解决:
- 简单方法:报告时附完整协议(划分比例、种子、resize、增强、组级与否),并引用 系统综述汇总表 说明文献间方差。
- 进阶方法:自建 3 种协议下的统一基准(随机划分/组级划分/跨库),三者并列报告,展示"泄漏税"的大小。
- SOTA 方法:把组级划分结果作为论文主表,随机划分结果作为"与既有文献可比"的附录,并明示二者差异即为泄漏效应量。
参考:Emergent Mind 协议汇总;SAGE 2026 系统综述。
⚠️ 坑点 4:Augmentor 旋转的黑角伪迹(分类:预处理陷阱)
问题:官方增广用 Augmentor 的旋转(≤25°)+ 翻转,旋转未扩展画布,四角出现黑色填充区域;黑角像素不属于组织,会污染归一化统计、误导染色分析,甚至被模型当作判别特征。
症状:全库均值/标准差偏低(黑像素拉低);Macenko 染色估计的白色参考偏暗;Grad-CAM 在图像角落异常激活;以 Otsu 阈值做组织分割时前景 mask 出现缺角。
解决:
- 简单方法:加载时亮度阈值裁剪非黑外接矩形(§6.3
crop_black_corners),或直接中心裁剪 576×576 再 resize。- 进阶方法:训练管线中加
RandomCrop前的角落掩膜填充(用组织中值色填充而非删除,保持尺寸恒定);归一化统计仅在非黑像素上计算。- SOTA 方法:以组织分割模型(如 HistoQC 流程)先做质量过滤与黑角检测,输出二值组织 mask 供 collate 阶段加权,把伪迹处理变成显式可审计的步骤。
参考:Augmentor 仓库(rotate 默认不扩展画布的行为);HistoQC。
⚠️ 坑点 5:768→224 resize 与未知放大倍数叠加的尺度失配(分类:预处理陷阱)
问题:官方未记录放大倍数与像素间距,各论文把 768×768 随意 resize 到 224/150/384/480,等效放大倍数每篇都不同;跨数据集迁移时(如 224×224 的 NCT-CRC-HE-100K)核形态的表观尺度直接失配。
症状:模型对 resize 尺寸极度敏感(文献报告 96.6%→随输入尺寸上升);迁移到其他病理库时性能骤降且无法用染色解释;细腺管结构在小分辨率下消失导致肺腺癌误判为良性。
解决:
- 简单方法:固定单一 resize 目标(推荐 224,与多数文献可比),论文明确写出等效视野变化。
- 进阶方法:做 resize 敏感性曲线(112/224/384/768 四档),把"分辨率-性能"曲线作为鲁棒性证据;跨库时以"核直径像素数"粗对齐两库的表观尺度。
- SOTA 方法:训练多尺度(multi-crop / 尺度抖动 0.75-1.5×)或使用支持任意分辨率的基础模型(UNI/Virchow 系列),在嵌入空间而非像素空间对齐尺度。
参考:文献输入尺寸差异汇总(Diagnostics 2023, 13, 699、Diagnostics 2023, 13, 15, 2469)。
⚠️ 坑点 6:许可证跨平台不一致与 CC BY-SA 的传染性(分类:工程陷阱)
问题:官方 GitHub 无 LICENSE 文件,Kaggle/天池标注 CC BY-SA 4.0,HuggingFace 镜像另有标注;-SA(相同方式共享)条款对衍生数据集、蒸馏数据、可视化发布均有约束。
症状:法务/开源合规审查时发现"无正式许可文件";发布的衍生数据集被要求同样以 CC BY-SA 4.0 开放;把 LC25000 图像混入自采数据后整体数据集的许可被"传染"。
解决:
- 简单方法:以 Kaggle 标注的 CC BY-SA 4.0 为最严格假定,任何发布物带署名(Borkowski et al., 2019)+ 同许可声明。
- 进阶方法:衍生产物只发布特征/模型权重(模型权重是否受 -SA 约束仍有争议,保守做法是随附数据出处声明)。
- SOTA 方法:在数据卡片(Data Card)中显式记录各镜像许可标注差异与采纳决定,供下游审计;商业用途前直接联系作者(论文留有 andrew@usf.edu)确认。
参考:Kaggle 许可标注;官方仓库(无 LICENSE 文件)。
⚠️ 坑点 7:多镜像文件命名不一致——glob 模式跨渠道失效(分类:工程陷阱)
问题:官方 ZIP 用
colonca*/colonn*/lungaca*/lungn*/lungscc*前缀;部分镜像与清洗版仓库改用colonaca*/colonaca*.jpg等完整前缀或.jpg扩展名;datasets库还会重排路径。
症状:换下载渠道后glob("colonca*.jpeg")匹配数为 0;按文件名正则派生标签的代码静默产生空列表或错标;缓存重建时训练集标签顺序变化。
解决:
- 简单方法:永远以目录名(
ImageFolder的 class_to_idx)而非文件名派生标签;对扩展名用*.{jpeg,jpg}通配。- 进阶方法:写一个渠道无关的 manifest 生成器:扫描目录 → 输出
filepath,label,size三列 CSV,下游全部消费 manifest;渠道差异被隔离在 manifest 生成一步。- SOTA 方法:数据版本控制(DVC/MLflow dataset tracking)固定 manifest 哈希,任何渠道更换触发校验失败而非静默替换。
参考:命名差异对比(Awesome-Medical-Dataset 记载 vs LC25000-clean 仓库)。
⚠️ 坑点 8:近满分 ≠ 临床诊断效能——tile 级标签与人群偏倚的叠加(分类:偏倚陷阱)
问题:标签是玻片级诊断(tile 无独立复核)、人群单一(退伍军人医院,老年男性为主)、无分级/分期/结局数据;99.9% 的 tile 分类准确率与"能辅助临床诊断"之间隔着染色漂移、人群偏移、工作流整合三重鸿沟。
症状:媒体或论文引言写"AI 诊断准确率超 99%";用 LC25000 模型直接处理本院切片性能掉到 80% 上下;把良性类(含腺瘤)与"正常"混用导致筛查叙事失真。
解决:
- 简单方法:所有对外表述统一为"tile 级组织学图像分类基准",禁止"诊断准确率"措辞;良性类明确标注为"良性肿瘤/非恶性组织"而非"正常"。
- 进阶方法:报告外部验证衰减曲线(内部泄漏指标 → 组级指标 → 跨库指标三级),衰减量即临床适配距离。
- SOTA 方法:在前瞻性或多中心切片上做 reader study / 冻结权重微调实验,以校准曲线与决策曲线分析(DCA)评估临床净收益,而非准确率单指标。
参考:数据集论文的人群与标签定义(arXiv:1912.12142);LC25000-clean 对高指标成因的分析。
§6.6 数据增强(安全 ✅ / 危险 ❌)
| 增强 | 判定 | 理由与参数建议 |
|---|---|---|
| 小角度旋转(≤15°) | ✅ | 注意 expand 行为避免新增黑角,或旋转后裁剪 |
| 水平/垂直翻转 | ✅ | 病理形态无方向性;但注意与"官方已含翻转"的重复无实际危害 |
| 亮度/对比度抖动(±15%) | ✅ | 模拟染色浓度差异,幅度过大会破坏 H&E 判别特征 |
| Hue 抖动(±0.04 以内) | ⚠️ | 相当于轻量 stain augmentation;过强会让鳞癌角化珠失色 |
| 随机裁剪(原尺寸 80%-100%) | ✅ | 模拟不同视野;配合黑角清除 |
| 高斯模糊/运动模糊 | ❌ | 扫描玻片无焦外成像,引入非真实退化 |
| 弹性形变 | ❌ | 破坏核形态学,腺体结构变形后与真实病理形态混淆 |
| 生成式合成(GAN/扩散) | ❌(方法学场景除外) | 与"增广泄漏"主题冲突:合成图会被嵌入聚类误分组 |
| Resize 到 <112 px | ❌ | 核细节(染色质、核仁)丢失,肺腺癌乳头结构不可辨 |
用 Albumentations 把"安全增强"落成可直接复用的代码:
import albumentations as A
import cv2
train_tf = A.Compose([
A.OneOf([
A.Rotate(limit=15, border_mode=cv2.BORDER_CONSTANT,
value=(90, 60, 90), p=1.0), # 用组织色填充而非黑角(坑点 4)
A.SafeRotate(limit=15, border_mode=cv2.BORDER_REFLECT_101, p=1.0),
], p=0.8),
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.RandomResizedCrop(size=(224, 224), scale=(0.8, 1.0), p=0.7),
A.ColorJitter(brightness=0.15, contrast=0.15, hue=0.02, p=0.6), # 轻量染色抖动
])
val_tf = A.Resize(224, 224) # 验证/测试只做确定性 resize
§6.7 模型推荐
| 模型 | 适用场景 | 输入尺寸 | 预训练 | 备注 |
|---|---|---|---|---|
| ResNet-18/50 | 教学/快速基线 | 224 | ImageNet | 单 epoch 数分钟,文献基线丰富 |
| EfficientNetV2-S/L | 精度冲刺 | 300-384 | ImageNet-21k | 文献最高档 99.97% 的架构族 |
| ConvNeXt-T | 现代卷积基线 | 224 | ImageNet | 训练稳定,对染色抖动不敏感 |
| ViT-B/16 | 数据充足/迁移研究 | 224 | ImageNet-21k | 需强增强防过拟合;文献 5-shot 有 100% 报告(泄漏下) |
| UNI 等病理基础模型 | 冻结特征/分组任务 | 224 | 病理学专用 | LC25000-clean 即用 UNI 特征;泄漏敏感任务首选 |
两条选型提醒:其一,凡使用 ImageNet 预训练的架构,都隐含"自然图像统计 ≠ 病理染色统计"的域差,冻结浅层、只微调高层通常比全量微调更稳;其二,文献中架构排名(ResNet < EfficientNetV2 < ViT)都是在随机划分泄漏条件下测得的,组级划分下排名可能重排——不要依据文献排名决定架构,应以 §8.3 的组级协议自行实测。
§6.8 硬件需求
| 阶段 | GPU | 显存 | 时间参考 |
|---|---|---|---|
| 5 类 ResNet-50(224²,batch 64) | RTX 3060 级 | 8 GB | 全量 1 epoch ≈ 3-5 分钟 |
| 5 类 EfficientNetV2-L(384²) | RTX 4090 / A100 | 24-40 GB | 1 epoch ≈ 15-25 分钟 |
| 全库 UNI 特征提取(25,000 张) | A100 | 40 GB | ≈ 20-40 分钟(batch 256) |
| KMeans 聚类(每类 5,000 × 1024 维) | CPU 即可 | 2 GB | 分钟级 |
CPU-only 环境并非不可行:把 768→224 的解码 resize 提前离线做掉(一次性落盘 224×224 副本),小模型(MobileNetV3/ResNet-18)在 8 核 CPU 上一个 epoch 约 20-30 分钟,一晚上可完成一个完整二分类实验——适合没有 GPU 的教学场景。
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import (classification_report, confusion_matrix,
balanced_accuracy_score, f1_score)
from sklearn.model_selection import GroupKFold
def grouped_cv_report(X_feats, y, groups, clf_factory, n_splits: int = 5):
"""组级 5 折交叉验证:groups = 原始 tile 聚类组(LC25000-clean)。
同时输出组级与(对照)随机划分的差距,量化泄漏税。"""
oof = np.zeros_like(y)
for tr, te in GroupKFold(n_splits=n_splits).split(X_feats, y, groups):
clf = clf_factory()
clf.fit(X_feats[tr], y[tr])
oof[te] = clf.predict(X_feats[te])
print(classification_report(y, oof, target_names=class_names, digits=4))
print("macro F1 (grouped):", f1_score(y, oof, average="macro"))
print("balanced acc :", balanced_accuracy_score(y, oof))
print(confusion_matrix(y, oof)) # 期望:组级划分后对角线明显劣化于随机划分
return oof
关键原则:主指标 = 组级划分下的 macro F1 与 balanced accuracy;混淆矩阵重点观察 lung_n vs lung_aca(腺体发育异常边界)与 colon_n vs colon_aca 两对。
把"泄漏税"写进评估报告的标准三行式:
def leakage_tax_report(acc_random: float, acc_grouped: float) -> str:
"""同一模型、同一预处理下,两种划分的准确率差即泄漏税。"""
tax = acc_random - acc_grouped
return (f"随机划分准确率 {acc_random:.2%} | 组级划分准确率 {acc_grouped:.2%} | "
f"泄漏税 {tax:.2%}(>5% 即应警惕文献可比性,>20% 说明指标主要由泄漏构成)")
# 示例输出:
# leakage_tax_report(0.9997, 0.8412)
# -> 随机划分准确率 99.97% | 组级划分准确率 84.12% | 泄漏税 15.85%(>5% 即应警惕……)
LC25000-clean 论文的实验表明,泄漏消除后性能下降是系统性的而非个例——因此任何不披露泄漏税的 LC25000 结果都应被视为不完整报告。
§6.10 MLOps 笔记
- 数据卡与 manifest 优先:任何实验先固化
filepath,label,group_idmanifest 的哈希;渠道切换、镜像重命名都触发校验(坑点 7)。 - 双指标上线门禁:同时追踪"随机划分指标"(与文献可比)与"组级划分指标"(真实泛化),两者差值持续监控,防止回归时误把泄漏波动当成模型改进。
- 预处理漂移监控:生产切片与本库的染色分布差异(非黑像素均值/OD 空间统计)作为漂移特征,超阈值触发染色归一化重拟合(§7.6 代码)。
- 许可追踪:衍生数据/模型发布流程内置 CC BY-SA 4.0 合规检查清单(署名 + 同许可 + 出处链接)(坑点 6)。
- 可复现性:论文复现包须包含:manifest、划分索引(组级)、预处理脚本、种子与硬件配置——LC25000 本身不提供这些,因此它们是你的成果的一部分。
- 失败案例库:把组级划分后仍然分错的样本按"病理灰区/伪迹/真错标"三类归档;灰区样本是向病理医师演示模型行为边界最好的素材。
一条工程红线:不要因为"数据集结构简单"就跳过数据版本控制。LC25000 的多渠道镜像、命名漂移与清洗版并存状态,恰好是版本管理缺位时最容易出事故的形态。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 增广泄漏偏倚 | 同源变体跨集,随机划分下约 99% 测试图有训练近重复 | 🔴 高 | 组级划分(LC25000-clean 标注);报告泄漏税 |
| 单机构偏倚 | 全部样本来自坦帕一家 VA 医院病理科 | 🔴 高 | 外部验证(跨库/跨机构);结论限定为方法学 |
| 人群偏倚 | VA 人群以老年男性为主,人口学未披露 | 🟠 中高 | 谨慎外推;公平性审计不可行(无元数据) |
| 标签粒度偏倚 | tile 继承玻片诊断,无 tile 级复核 | 🟠 中高 | 视为标签噪声;用 label smoothing/噪声鲁棒损失 |
| 流行病学失真 | 人工 1:1:1:1:1 均衡不代表患病率 | 🟡 中 | 先验校准;避免患病率相关推断 |
| 尺度记录缺失 | 放大倍数未记录,跨库尺度不可对齐 | 🟠 中高 | resize 敏感性分析;跨库核尺度对齐 |
严重程度标定依据:🔴 高 = 直接使主要指标失真或结论不可迁移;🟠 中高 = 限制结论范围但可通过实验设计规避;🟡 中 = 可解释、可控。六项中两项 🔴 均指向同一根源——发布时省略了溯源结构,这与 §7.7 DAIMS 的低分项完全对应,也解释了为什么第三方清洗工作(LC25000-clean)成为该数据集生态中引用最高的方法学进展。
§7.2 标注质量
玻片级诊断遵循病理金标准流程,作者均为执业病理医师,但存在三层不确定性:① tile 与玻片诊断的一致性未逐张确认(边缘 tile、伪影 tile 可能与诊断不匹配);② 无标注者间一致性指标;③ 良性类是异质桶(正常组织、腺瘤等混合),语义宽泛。经验性缓解:训练时对良性类使用更强的增强与 label smoothing;评估时单独报告良性类内的错误样本比例。
一个可执行的标签质量抽检协议:从每类随机抽 100 张,交给至少一名有资质的病理阅片者做盲评(不告知目录标签),统计"盲评与目录标签不一致率"。若某类不一致率超过 5%,应把该类作为标签噪声重点处理(清洗或降权),并把抽检结果附在论文的补充材料中——这是在无官方标注元数据条件下唯一可自行实施的标签质量证据。
§7.3 泛化性评估
| 部署场景 | 失效风险 | 证据 |
|---|---|---|
| 同库新切片(同院同扫描) | 低-中 | 染色一致,但视野外推未验证 |
| 跨机构切片(他院扫描仪) | 高 | 染色/扫描特性漂移;文献跨库衰减显著 |
| 不同放大倍数采集 | 高 | 官方未记录倍数,尺度失配无补偿 |
| 不同人群(非 VA 群体) | 中-高 | 人群偏倚未量化,元数据缺失无法分层 |
| 染色协议变更(自动化染色机) | 中 | H&E 染色批次差异;Macenko 归一化可部分缓解 |
| 罕见亚型/混合癌 | 极高 | 5 类之外零覆盖(如腺鳞癌、大细胞癌) |
表中风险的共同点是不可测:因为溯源元数据缺失,任何一条失效风险都无法在本数据集内部量化,只能靠外部实验补证。工程上的对策是把"外部验证"从可选项升级为发布门槛——凡未完成至少一个外部数据集验证的模型,不得标注"泛化已验证"。
§7.4 伦理考量
数据经去标识化并符合 HIPAA 要求(论文声明),图像不含患者身份信息,公开发布经机构支持(James A. Haley 退伍军人医院)。残留风险:病理 tile 理论上极难再识别个体,但与外部临床数据库的偶然匹配可能性无法绝对排除;使用者不得尝试再识别,也不得将模型输出用于个体医疗决策。
§7.5 公平性
人口学元数据完全缺失,无法按性别、种族、年龄做公平性审计。VA 人群的性别构成(老年男性为主)意味着模型在女性或年轻人群上的表现完全未知。若下游应用涉及真实人群,必须在自有数据上重新做分人群评估——LC25000 本身无法提供公平性证据。
公平性视角下该数据集的三重限制:① 无分群评估能力——没有敏感属性字段,连事后标注代理变量(如年龄相关形态)都无从下手;② 人群外推无证据——VA 医疗系统人群的疾病谱与就诊行为与普通人群不同;③ 标注本身可能携带偏倚——诊断阈值与表述习惯随机构惯例变化。诚实的做法是在数据卡中声明"本数据集不适用于任何公平性结论",而不是假装这个问题不存在。
§7.6 数据漂移
数据自 2020-09 冻结,无版本演进;漂移风险全部来自"部署侧 vs 2020 年坦帕 VA 病理科"的差异:染色剂批号与染色机换代、扫描仪升级(如 40× 数字化普及)、人群构成变化。建议在生产中持续监控 OD 空间染色统计与组织占比两条漂移曲线。
# 漂移监控最小实现:对每批新数据计算两条统计量并与基准比较
import numpy as np
def drift_features(batch_imgs: list) -> dict:
"""batch_imgs: RGB uint8 数组列表。返回可入监控面板的两个统计量。"""
od_stats, tissue_fracs = [], []
for arr in batch_imgs:
rgb = arr.astype(np.float32) / 255.0 + 1e-6
od = -np.log(rgb) # 光密度空间
tissue = arr.min(axis=2) < 230 # 非背景像素
od_stats.append(od[tissue].mean(axis=0)) # 组织区 OD 均值 (R,G,B)
tissue_fracs.append(tissue.mean()) # 组织占比
return {"od_mean_rgb": np.mean(od_stats, axis=0).tolist(),
"tissue_fraction": float(np.mean(tissue_fracs))}
# 基准值建议在 LC25000 训练集(组级划分后的 train 部分)上一次性计算并固化;
# 生产批次 od_mean_rgb 偏移超过 2 个标准差 → 触发染色归一化重拟合。
§7.7 DAIMS 24 项数据质量评估
以下按宪法固定 24 项逐项评估,状态口径见表后说明。
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 目录即标签的扁平结构,无需宽表转换 |
| 2 | 唯一标识 | ✅ | 文件名全库唯一,可作主键 |
| 3 | 特殊字符 | ✅ | 文件名仅小写字母与数字 |
| 4 | 重复行 | ⚠️ | 平均 20 个增广近重复变体/原始视野,随机采样会取到近似重复 |
| 5 | 缺失编码 | ✅ | 像素级无缺失值 |
| 6 | 标签标识 | ✅ | 目录名标签语义明确,5 枚举值零歧义 |
| 7 | 罕见类分组 | ❌ | 无亚型/分级/分期细分,5 类之外不可分析 |
| 8 | 偏倚评估 | ⚠️ | 单机构 VA 人群偏倚明确但无法量化(无人口学) |
| 9 | 数据字典 | ⚠️ | 仅 README 级描述,无正式字段字典 |
| 10 | 信息性缺失解释 | ❌ | 缺失字段(tile 映射/倍数)无任何解释文档 |
| 11 | 设备记录 | ❌ | 扫描仪、放大倍数、像素间距全部未记录 |
| 12 | 共线性 | ✅ | 图像模态不适用共线性检查 |
| 13 | 编码映射 | ✅ | 5 类可无损映射 ICD-11/SNOMED CT(§2.1/§2.1b) |
| 14 | 时间戳处理 | ❌ | 无任何采集/处理时间元数据 |
| 15 | 划分建议 | ⚠️ | 官方无划分;社区有协议但互不相容 |
| 16 | 泄漏讨论 | ⚠️ | 官方未讨论;第三方 LC25000-clean 已系统论证并给出修复 |
| 17 | 标签分布 | ✅ | 5×5,000 完全均衡,分布一目了然 |
| 18 | 测量偏倚 | ⚠️ | 放大倍数未知导致尺度测量偏倚无法校正 |
| 19 | 外部验证建议 | ❌ | 官方无任何外部验证指引 |
| 20 | 版本记录 | ⚠️ | 单版本发布;Kaggle 标 Never 更新,无变更日志 |
| 21 | 预处理脚本 | ❌ | 官方仅文字描述增广参数,无可执行脚本 |
| 22 | 合规要求 | ⚠️ | HIPAA 去标识声明完备,但无正式 LICENSE 文件 |
| 23 | 多模态对齐 | ✅ | 单模态数据集,不适用(无跨模态对齐负担) |
| 24 | 去标识化 | ✅ | HIPAA 合规、去标识化,论文明确声明 |
状态判定口径:✅ = 官方以某种形式满足该项;⚠️ = 部分满足或依赖第三方补位;❌ = 完全缺失且无官方替代方案。所有第三方补位项(如 16 号泄漏讨论)不升格为 ✅,因为补位内容不属于官方数据集的组成部分,其长期可用性不受官方保证。
DAIMS 评分:14.0 / 24
评分解读:10 项 ✅ 全部集中在"结构规整"侧(唯一标识、恒定尺寸、均衡分布、编码映射),这是目录发布型数据集的天然优势;8 项 ⚠️ 与 6 项 ❌ 几乎全部命中"溯源与元数据"侧——没有 tile 映射、没有设备记录、没有时间戳、没有划分、没有脚本。一句话:这个数据集的表层结构无可挑剔,深层可追溯性近乎为零,它的 14 分里没有任何一项来自官方主动的质量建设,全部来自发布形式本身的红利。
对你意味着什么:① 如果你的任务是教学或方法学原型,表层结构红利足以覆盖成本,ImageFolder + 固定 resize 即可开工;② 如果任务是发表论文,必须自建组级划分(LC25000-clean 标注)并披露"泄漏税",否则审稿风险极高;③ 如果任务是生产系统前置研究,❌ 项(设备记录、时间戳、外部验证)意味着你需要在自有数据上重建全部元数据体系,LC25000 只能充当冷启动预训练素材而非生产基准;④ 任何场景下,把 §7.7 的 24 项清单当作你自建病理数据集的验收表——LC25000 的每个 ⚠️/❌ 都是一份"前车之鉴"。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| NCT-CRC-HE-100K(结直肠 9 类) | 德国国家肿瘤疾病中心(NCT) | 跨库 tile 分类 | 文献报告显著衰减(具体值依协议而异) | 内部泄漏指标 → 跨库下降数十个百分点级 | 染色+尺度+标签体系三重偏移叠加 |
| LC25000-clean 组级测试(同库重划分) | Oxford(Batchkala et al.) | 泄漏消除后分类 | 组级指标显著低于随机划分指标 | 随机 80/20 → 组级划分出现明确衰减 | 证明文献近满分主要由泄漏贡献(MICCAI 2024 DEMI) |
| 多架构组内对比(ResNet 系) | 多机构(系统综述) | 结肠 aca/n 二分类 | 96.00%-99.67%(各协议) | 协议间方差与架构间方差同量级 | 结论:协议差异 > 架构差异(SAGE 2026 综述) |
注:LC25000 缺乏官方支持的跨机构外部验证研究;上表只收录有同行评审支撑的结果,未收录未经评审的自述跨库数字。
§8 基准性能与生态
§8.1 性能排行榜
| 排名 | 模型/方法 | 性能(准确率) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | EfficientNetV2-L | 99.97%(5 类) | 2023 | 复合缩放 + 渐进学习 + 微调 | Robustness fine-tuning deep learning model for cancers diagnosis based on histopathology image analysis, Diagnostics, 2023, 13(4), 699, MDPI | 未公开官方库 |
| 2 | ResNet-101(AdaMax) | 99.89%(5 类) | 2023 | 残差微调 + 批归一 | 同上(Diagnostics 13(4):699) | 未公开官方库 |
| 3 | CNN + LightGBM | 99.6%(肺三分类) | 2023 | 深度特征 + 梯度提升混合 | An efficient combination of convolutional neural network and LightGBM algorithm for lung cancer histopathology classification, Diagnostics, 2023, 13(15), 2469, MDPI | 论文附方法描述 |
| 4 | Inception-ResNet-v2 | 99.7%(肺三分类) | 2021 | 迁移特征 + 三层 CNN 头 | 转引自 Diagnostics 13(15):2469 文献综述 [23] | 未公开官方库 |
| 5 | ResNet-110(混合 50 变体) | 99.67%(结肠二分类) | 2024 | 深残差 + 混合架构 | 转引自 SAGE 系统综述(Li et al., 2026, DOI 10.1177/20552076261451997) | 未公开官方库 |
| 6 | HOG + 深度特征融合 | 99.84%(5 类) | 2026 | 手工+深度特征拼接 | Ezuma et al., 2026(arXiv,转引于 Emergent Mind 协议汇总) | 未公开官方库 |
| 7 | ResNet-50(组级诚实基线参考) | 93.91%(肺三分类) | 2021 | 标准迁移学习 | Bukhari et al., 2021(转引于 Diagnostics 13(4):699 文献综述 [32]) | 未公开官方库 |
数值不可直接比较的原因:① 划分协议不同(80/20、75/25、60/20/20 等)且绝大多数为随机划分——受坑点 1 泄漏影响;② 输入尺寸 224-480 不等(坑点 5);③ 任务不同(5 类/肺三分类/结肠二分类混排);④ 多数未公开代码,无法核对实现。阅读此表的正确姿势:把 96%-100% 的区间视为"泄漏+协议方差"的产物,把组级划分下的诚实指标(显著更低)视为方法学进步的方向。
§8.2 SOTA 总结与选型建议
按用途选型:要发论文 → 冻结 UNI 特征 + 线性探针/浅层头,在组级划分下报告,避开"卷架构在泄漏指标上刷点"的红海;要教学 → ResNet-18/50,3 小时内完成从下载到混淆矩阵的全流程;要跨库泛化研究 → ConvNeXt 或 ViT + Macenko 归一化 + resize 敏感性分析。该数据集上架构间的差异(文献内 <3 个百分点)远小于协议间的差异,不值得做架构军备竞赛。
| 用途 | 首选方案 | 理由 |
|---|---|---|
| 论文方法学贡献 | UNI/CONCH 冻结特征 + 组级划分 | 与 LC25000-clean 方法论直接对话,审稿风险最低 |
| 课程教学 | ResNet-18 + 随机划分(声明泄漏) | 迭代快、可解释、混淆矩阵直观 |
| 泄漏检测研究 | 基础模型嵌入 + 聚类 + pHash 双通道 | 复刻并超越 LC25000-clean 管线 |
| 压缩/部署实验 | ResNet-50/EfficientNetV2-S | 规模适中,压缩收益可测量 |
| 染色鲁棒性研究 | 任意 CNN + Macenko/Reinhard 消融 | 5 类形态差异大,染色效应易分离 |
§8.3 评测协议建议
标准评测包应包含:① 数据 manifest 哈希;② 组级 5 折划分索引(GroupKFold,seed 固定);③ 预处理(黑角清除 + 224 resize + 训练集内 Macenko 拟合);④ 指标(macro F1、balanced accuracy、per-class sensitivity/specificity、混淆矩阵);⑤ 泄漏税披露(同模型随机划分 vs 组级划分的差值)。满足以上五项的结果才可与 LC25000-clean 方法论对话。
§8.4 相关数据集
| 数据集 | 关系 | 适合的衔接实验 |
|---|---|---|
| NCT-CRC-HE-100K | 同模态更大规模(结直肠) | LC25000 预训练 → 100K 微调的规模缩放对比 |
| BACH | 乳腺癌、带病例级划分 | 病例级 vs tile 级划分的方法学对照 |
| PCam | 淋巴结转移、patch 级 | 弱标签大规模预训练 |
| MHIST | 息肉、含标注置信度 | 标注质量对分类影响的对照研究 |
| BreakHis | 多放大倍数乳腺 | 尺度敏感性(补偿 LC25000 倍数缺失) |
选择衔接数据集时的匹配维度按优先级排序:① 染色协议接近(同为 H&E 常规染色);② tile 尺寸与表观倍数接近(减少 resize 失配);③ 标签体系可映射(能落回恶性/良性或组织学类型);④ 有病例级结构(能做更严格的划分对照)。四个维度全占的公开集并不存在——这本身再次印证了 LC25000 虽有缺陷,但"肺+结肠、均衡、开放"的组合在生态位上仍然稀缺。
§8.5 关键论文 Top 6
- Borkowski AA, Bui MM, Thomas LB, Wilson CP, DeLand LA, Mastorides SM. Lung and Colon Cancer Histopathological Image Dataset (LC25000). arXiv:1912.12142, 2019. — 数据集原始论文:定义 1,250→25,000 的增广构建流程与 5 类体系。
- Batchkala G, Li B, Rittscher J. Evaluating Histopathology Foundation Models for Few-shot Tissue Clustering: an Application to LC25000 Augmented Dataset Cleaning. MICCAI DEMI Workshop 2024(LNCS 15265, pp 11-21, 最佳论文奖). — 量化泄漏机制、发布清洗版与最小聚类基准。
- Chen RJ, Ding T, Lu MY, Williamson DFK, et al. Towards a general-purpose foundation model for computational pathology. Nature Medicine, 2024, 30(3):850-862. DOI 10.1038/s41591-024-02857-3. — UNI 基础模型;LC25000-clean 清洗管线的特征提取底座。
- Li J, Goh W, Jhanjhi NZ, Li T. A systematic review on colon cancer classification by convolutional neural networks: architecture, accuracy, and research directions. 2026. DOI 10.1177/20552076261451997. — 系统综述:汇总 LC25000 与同类库上 ResNet 系架构的完整性能谱系。
- Robustness fine-tuning deep learning model for cancers diagnosis based on histopathology image analysis. Diagnostics, 2023, 13(4):699, MDPI. — EfficientNetV2-L/ResNet-101 等 99.9% 档报告的代表性来源,也是"输入尺寸敏感"证据的主要出处。
- An efficient combination of convolutional neural network and LightGBM algorithm for lung cancer histopathology classification. Diagnostics, 2023, 13(15):2469, MDPI. — CNN-LightGBM 混合路线 + 对 2019-2023 年 LC25000 基准文献的系统性转引综述。
阅读顺序建议:先读 1(数据集事实)→ 再读 2(理解为什么文献数字不可信)→ 然后按研究方向选读 3(基础模型路线)或 5-6(传统监督路线)→ 4 作为横向定位的地图。注意 5、6 两篇代表"泄漏时代"的报告范式,阅读时应套用 §8.1 的不可比性清单,而非当作可直接超越的目标值。
§8.6 社区活跃度
Kaggle 端 212K 浏览、47.1K 下载、公开 Notebook 生态活跃(Learning 29 / Research 50 / LLM Fine-Tuning 12 等用途标记,截至 2026-09);GitHub 官方仓库 51 stars、9 个 open issues(数据 2024 年快照),官方维护已停滞(最后推送 2020-09);学术侧 Semantic Scholar 引用从 2024-06 的 142 次增长至 2026-09 的 369+ 次,两年余增长约 1.6 倍,年均新增引用仍在百次量级;清洗版仓库(LC25000-clean)自 2024 年起成为方法学讨论的活跃节点,其"泄漏税"框架已被后续病理数据集质量研究沿用。
三个活跃度信号值得注意:① 引用结构在迁移——2020-2023 年的引用主要来自"刷准确率"论文,2024 年后越来越多引用来自数据质量与基础模型评估方向,说明社区对其定位的认知已经切换;② 分发重心在 Kaggle——官方渠道(Academic Torrents)流量有限,绝大多数新用户从 Kaggle 进入,这也解释了为什么命名不一致坑点(§6.5 坑点 7)如此高频出现;③ 官方失联——9 个 open issues 无人回应(含拒绝提供原始图像的 issue #5),任何依赖官方澄清的问题都应假设无解并寻找社区替代方案。总体判断:数据冻结、社区火热——问题与方案都在第三方沉淀。
§8.7 生态快照
| 资源 | 类型 | 链接 | 热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| tampapath/lung_colon_image_set | 官方仓库 | GitHub | 51 stars | 权威出处与引用条目 |
| andrewmvd Kaggle 镜像 | 数据托管 | Kaggle | 47.1K 下载、8.75 usability | 一行获取 + Notebook 社区 |
| 1aurent/LC25000 | HF 镜像 | HuggingFace | datasets 兼容 |
流水线集成最顺滑 |
| GeorgeBatch/LC25000-clean | 清洗版/方法学 | GitHub | MICCAI 2024 DEMI 最佳论文 | 组级标注 + 泄漏量化 notebook |
| figshare 11504065 | 镜像存档 | figshare | — | 稳定 DOI 级存档 |
| atlan-antillia EfficientNetV2 项目 | 参考实现 | GitHub | — | TensorFlow 侧完整 train/eval 脚本 |
生态使用建议:把官方仓库(溯源锚点)+ 一个分发渠道(Kaggle 或 HF,按你的技术栈)+ LC25000-clean(组级标注)三件套作为标准配置;figshare 存档仅在需要 DOI 级稳定引用时使用。注意清洗版的标注与原库图像是松耦合(通过聚类对应而非硬 ID),每次原库渠道变更后应重新校验标注覆盖率。
§9 相关资源与引用
§9.1 官方与社区资源
- 官方仓库与引用说明:github.com/tampapath/lung_colon_image_set
- 数据集论文全文(arXiv):arxiv.org/abs/1912.12142
- 官方分发(Academic Torrents):details/7a638ed1…
- Kaggle 镜像(含 Notebook 社区):Kaggle 数据集页
- HuggingFace 镜像:1aurent/LC25000
- 泄漏清洗版与聚类标注:GeorgeBatch/LC25000-clean
- 增广工具 Augmentor:github.com/mdbloice/Augmentor
| 染色归一化参考实现:torchstain、staintools - 病理图像质控流程:HistoQC
工具链选型说明:torchstain 适合嵌入 PyTorch 训练循环(GPU 加速、可微友好);staintools 功能更全(含 Reinhard 与 Macenko 双算法)但维护停滞;HistoQC 定位在数据入库前的质量门禁而非训练时增强。三者串联即构成"入库质控 → 归一化 → 训练"的完整染色治理链。
§9.2 BibTeX 引用
数据集论文(官方推荐格式):
@article{borkowski2019lung,
title = {Lung and colon cancer histopathological image dataset (LC25000)},
author = {Borkowski, Andrew A and Bui, Marilyn M and Thomas, L Brannon and Wilson, Catherine P and DeLand, Lauren A and Mastorides, Stephen M},
journal = {arXiv preprint arXiv:1912.12142},
year = {2019},
url = {https://arxiv.org/abs/1912.12142}
}
泄漏清洗方法学论文(使用组级划分时建议同引):
@inproceedings{batchkala2024evaluating,
title = {Evaluating Histopathology Foundation Models for Few-shot Tissue Clustering: an Application to {LC25000} Augmented Dataset Cleaning},
author = {Batchkala, George and Li, Bin and Rittscher, Jens},
booktitle = {MICCAI Workshop on Data Engineering in Medical Imaging (DEMI)},
series = {Lecture Notes in Computer Science},
volume = {15265},
pages = {11--21},
year = {2024},
publisher = {Springer}
}
§9.3 引用指南
- 使用数据本身:引用 Borkowski et al., 2019(必引)。
- 使用组级划分或引用泄漏结论:加引 Batchkala et al., 2024。
- 提及放大倍数/扫描仪:官方无任何记录,只能以"未披露"表述或明确标注为你自己的假设,禁止给假设编造出处。
- 引用具体性能数字:注明协议(划分、resize、任务)与出处链接,禁止脱离协议的裸数字。
- 使用 Kaggle/HuggingFace 镜像:建议同时引用官方仓库地址,保持溯源链唯一入口。
§10 AI 使用声明卡
§10.1 使用的 AI 模型列表
| 模型 | 用途 |
|---|---|
| 千方医数集写作助手(LLM) | 资料整合、结构化写作、代码示例生成 |
§10.2 AI 参与范围
AI 参与了本页面的文献检索结果整合、结构设计、正文起草与代码示例生成;所有关键数字(规模、引用数、基准、编码)均溯源至 §10.3 所列公开来源并由人工核对;医学编码映射经 §0 所列病理学方向审核流程复核。AI 未参与任何数据的获取、加工或再分发;页面中全部外部链接由人工点击核验可达性;§6 代码块经人工走查确认与目录结构、依赖版本描述一致。
§10.3 输入来源列表
- Borkowski AA, et al. Lung and Colon Cancer Histopathological Image Dataset (LC25000). arXiv:1912.12142, 2019. https://arxiv.org/abs/1912.12142
- 官方数据仓库 README。https://github.com/tampapath/lung_colon_image_set
- Kaggle 镜像页(规模、许可、下载统计)。https://www.kaggle.com/datasets/andrewmvd/lung-and-colon-cancer-histopathological-images
- Batchkala G, Li B, Rittscher J. Evaluating Histopathology Foundation Models for Few-shot Tissue Clustering… MICCAI DEMI 2024, LNCS 15265:11-21. https://rd.springer.com/chapter/10.1007/978-3-031-73748-0_2
- GeorgeBatch/LC25000-clean 仓库(泄漏量化、清洗管线)。https://github.com/GeorgeBatch/LC25000-clean
- Robustness fine-tuning deep learning model… Diagnostics 2023, 13(4):699. https://www.mdpi.com/2075-4418/13/4/699
- An efficient combination of CNN and LightGBM… Diagnostics 2023, 13(15):2469. https://www.mdpi.com/2075-4418/13/15/2469/xml
- Li J, Goh W, Jhanjhi NZ, Li T. A systematic review on colon cancer classification by CNNs. 2026. https://journals.sagepub.com/doi/10.1177/20552076261451997
- Semantic Scholar 引用统计 API(369 次,截至 2026-09)。https://api.semanticscholar.org/graph/v1/paper/arXiv:1912.12142
- Kaggle 讨论:Dataset problem for train/test decomposition(589281)。https://www.kaggle.com/discussions/questions-and-answers/589281
- GitHub issue #5(原始图像不提供)。https://github.com/tampapath/lung_colon_image_set/issues/5
- Awesome-Medical-Dataset LC25000 条目(目录结构、作者机构)。https://github.com/openmedlab/Awesome-Medical-Dataset/blob/main/resources/LC25000.md
- ecosyste.ms 仓库元数据(创建/推送时间、stars)。https://awesome.ecosyste.ms/projects/github.com%2Ftampapath%2Flung_colon_image_set
- ICD-11 MMS 编码查询(2C25、2B92、2E92.4、良性肿瘤分组)。https://www.findacode.com/icd-11/code-316539081.html
- DICOM CP-2067 肿瘤 SNOMED 编码表(254626006、254634000、408645001)。https://dicom.nema.org/medical/dicom/Final/cp2067_ft_MoreTumorGraftTypes.xml
- OpenSafely 肺癌 SNOMED 码表。https://www.opencodelists.org/codelist/opensafely/lung-cancer-snomed
- OMOP Athena 词汇服务(92065004 结肠良性肿瘤)。https://athena.ohdsi.org/search-terms/terms/77234
- Emergent Mind LC25000 主题汇总(划分协议、无正式许可文件结论)。https://api.emergentmind.com/topics/lc25000-dataset
- 阿里云天池镜像页(CC BY-SA 4.0 标注)。https://tianchi.aliyun.com/dataset/dataDetail?dataId=94579
- A Machine Learning Approach to Diagnosing Lung and Colon Cancer…(流行病学转述)。https://preview.ncbi.nlm.nih.gov/pmc/articles/PMC7865416/
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| frontmatter 与 INFOBOX 元数据 | 千方病案医学编辑部 | 对照官方仓库/论文逐字段核对 | ✅ 已通过/已验证 |
| §2 医学背景与 ICD-11/SNOMED 映射 | 千方病案医学编辑部(病理学方向) | 编码表逐条比对 WHO/SNOMED 检索结果 | ✅ 已通过/已验证 |
| §3-§5 规格与划分策略 | 千方病案医学编辑部 | 对照论文原文与 LC25000-clean 量化结论 | ✅ 已通过/已验证 |
| §6 代码示例 | 千方病案医学编辑部(数据工程) | 逻辑走查 + 目录结构/依赖核对 | ✅ 已通过/已验证 |
| §7 DAIMS 与质量评估 | 千方病案医学编辑部(数据工程) | 24 项逐项对照证据链 | ✅ 已通过/已验证 |
| §8 基准数字 | 千方病案医学编辑部 | 每个数字回溯至 §10.3 来源 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
全页面草稿由 AI 起草,§0 声明、§2.1/§2.1b 编码表、§7.7 DAIMS 评分与解读、§9.2 BibTeX 经人工逐句修订定稿。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
