信息速览

BCSS(乳腺癌语义分割)— TCGA 三阴性乳腺癌区域级分割基准 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | BCSS(乳腺癌语义分割) |
| 英文全称 | Breast Cancer Semantic Segmentation |
| 别名/简称 | BCSS、CrowdsourcingDataset-Amgadetal2019、Amgad et al. 2019 众包分割数据集 |
| 疾病分类 | 乳腺癌(ICD-11:2C60 乳腺恶性肿瘤,以浸润性癌为主;详见 §2.1) |
| SNOMED CT | 254837009 Primary malignant neoplasm of breast(详见 §2.1b) |
| 数据模态 | H&E 染色病理全切片图像(数字病理,区域级分割标注) |
| AI 任务类型 | 语义分割(22 类组织区域像素分类,社区常用 5 类归并) |
| 样本总数 | 151 张 WSI / 151 例患者 / 20,000+ 标注区域 |
| 数据大小 | 约 4.9 GB(0.25 MPP RGB + mask,151 个 ROI,第三方镜像实测;官方支持按 MPP 灵活下载) |
| 数据格式 | PNG(RGB 图像与 22 类 mask)/ JSON(多边形区域坐标)/ SVS(TCGA 原始全切片,另行下载) |
| 许可证 | CC0 1.0 Universal(数据)/ MIT(下载与处理代码) |
| 访问级别 | 开放(无需注册,无需签署协议) |
| DUO 标签 | NRES(无限制使用) |
| 语言 | 英文(元数据、标注类别与文档) |
| 首发日期 | 2019-09(Bioinformatics 论文刊出随附发布) |
| 最后更新 | 2021-03(官方 GitHub 仓库最后修订) |
| 发布机构 | 埃默里大学医学院(主导) & 开罗大学 & 亚历山大大学等 14+ 国际机构 |
| 官方主页 | http://bcsegmentation.grand-challenge.org/ |
| 下载地址 | https://github.com/CancerDataScience/CrowdsourcingDataset-Amgadetal2019 |
| DOI | 10.1093/bioinformatics/btz083(论文) |
| 引用次数 | 277+(Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— mask/RGB 开箱即用、有论文级 82/43 划分;扣分项:无官方划分文件、22 类稀疏需自行归并、原始 WSI 需另行下载 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、三阴性乳腺癌流行病学、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(22 类像素编码、文件名坐标体系)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与埃默里大学、开罗大学、Kitware 及 Grand Challenge 平台无任何商业利益关联。本页面不销售 BCSS 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。BCSS 数据以 CC0 1.0 Universal(公共领域)许可发布,可自由使用与再分发,但学术惯例上请引用原始论文(Amgad et al., 2019)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
BCSS(Breast Cancer Semantic Segmentation) 是埃默里大学医学院联合开罗大学、亚历山大大学等国际机构于 2019 年发布的乳腺癌组织区域语义分割数据集。它从癌症基因组图谱(TCGA)中选取 151 例组织学确诊的三阴性乳腺癌,每例对应 1 张 H&E 染色全切片图像,并由 25 名从资深病理学家到医学生的标注者,在 Digital Slide Archive 平台上共同勾画出 20,000 多个组织区域,形成像素级分割掩模。
它为什么重要?在 2019 年之前,病理图像分割的公开标注规模普遍只有几十张图像,深度分割模型"吃不饱"。BCSS 用一套结构化众包流程——培训、Slack 实时反馈、资深病理学家两轮审核——把标注规模推到了同类最大的量级,同时量化了不同经验水平标注者之间的一致性(tumor 与 stroma 低分歧、罕见类高分歧)。这套方法论本身就是它的核心贡献之一。
你能用它做什么:训练乳腺癌组织区域分割模型(官方 VGG16-FCN8 基线 mean AUC 0.945)、为肿瘤区/基质/炎细胞浸润等下游定量任务提供分割底座、研究众包标注质量控制,或作为计算病理学的教学基准。数据 CC0 公共领域许可,无需注册即可下载。
§1.1 摘要
BCSS 的技术路线可以概括为"结构化众包 + 卷积分割"。数据方面,团队从 TCGA 筛选 151 例三阴性乳腺癌(TNBC,状态由临床数据文件确定)的 FFPE H&E 全切片,在每张切片上由临床专家圈定一个代表性感兴趣区(ROI);标注方面,25 名参与者分为资深病理学家(SP)、低年资病理住院医师(JP)与医学生(NP)三级,经统一培训后在 Digital Slide Archive 上以多边形勾画 22 类组织区域,标注者间以两两 Dice 系数量化分歧,资深者反馈经两轮校正后固化为 20,000+ 区域标注。发布形态为:多边形 JSON 注释(坐标相对 WSI 基底分辨率)、按设定 MPP(默认 0.25 µm/px)生成的 22 类 PNG 掩模,以及对应的 RGB 图像。官方以 VGG16-FCN8 为基线在 tumor、stroma、inflammatory infiltrates、necrosis、other 五类上取得 mean AUC 0.945;训练/测试按切片划分为 82/43 张,且训练与测试切片来自互不相同的机构集合。数据以 CC0 1.0 许可发布,官方提供 Girder 客户端下载脚本与训练好的模型权重。
§1.2 战略价值分析
维度一:医学 AI 众包标注的方法学范本。 BCSS 的价值远超一个分割数据集——它完整公开了"医学生 + 住院医师 + 资深病理学家"三级众包的整套流程:入门培训材料、标注指南、Slack 公共反馈渠道、双轮审核校正机制,并首次系统量化了病理标注者间一致性(25 人两两共 300 对组合的 Dice 矩阵)。这一范式直接催生了同团队 2022 年发布于 GigaScience 的 NuCLS 细胞核数据集,并被后续众包病理标注研究反复引用。对想构建自有病理标注管线的团队,它比任何综述都更具操作性。
维度二:免下载全切片的轻量分割基准。 整套 ROI 图像加掩模在 0.25 MPP 分辨率下约数 GB 量级,个人工作站即可完成训练,而无需先下载数百 GB 的 TCGA 原始全切片——因为掩模文件名编码了从 TCGA 提取对应 RGB 的全部信息(切片 ID 与 ROI 坐标),需要时可按需回溯原始切片。这使它成为入门计算病理学分割任务成本最低的公开选择之一,也是少数直接绑定 TCGA 条码、可与临床组学数据横向关联的分割数据集。
维度三:TNBC 特定人群的组织级监督信号。 全部 151 例均为三阴性乳腺癌(约占乳腺癌病例的 15%,依论文引述的 Plasilova et al. 2016),侵袭性强、化疗反应评估需求突出。对肿瘤浸润淋巴细胞(TIL)、肿瘤/基质比例等 TNBC 相关影像生物标志物研究,BCSS 提供了现成的区域级监督信号,可直接支撑炎细胞浸润、坏死等类别的定量分析。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注类型 | 差异化定位 |
|---|---|---|---|---|
| BCSS(本条目) | 151 张 WSI / 20,000+ 区域 | TCGA H&E 全切片 ROI | 22 类区域语义分割(像素级 mask) | 区域级语义分割规模标杆,众包方法学公开 |
| NuCLS(同团队,2022) | 1,744(train)+ 53(test)个 ROI | TCGA H&E 全切片 ROI | 细胞核分类、定位与分割 | 细胞核级粒度,与 BCSS 共享平台与方法 |
| BCSS Kaggle 重打包版(2023) | 151 个 ROI resize 为 224×224 与 512×512 | 同上 | 同 BCSS(22 类) | 为算力受限场景提供固定分辨率版本,非官方 |
| 众包标注子集(López-Pérez et al. 2024 使用) | TNBC 图像 + 多标注者标签 | H&E ROI | 多标注者噪声标签(供众包学习) | 面向"从噪声标注学习"方法研究 |
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2018-07-18 | 论文收稿 | 标注工作于此之前完成(Bioinformatics 投稿记录) |
| 2019-02-05 | 论文接收 | 数据集随论文流程准备发布 |
| 2019-09-15 | Bioinformatics 35(18):3461-3467 刊出 | 数据集正式公开发布,绑定 Digital Slide Archive 可视化实例 |
| 2021-03-09 | 官方 GitHub 仓库最后修订 | 下载脚本与 README 定稿;数据许可表述定为 CC0 1.0(早期部分 fork 曾标注 CC BY 4.0,见坑点 6) |
| 2023-12-30 | Kaggle 社区重打包 | 非官方镜像,将 ROI resize 为 224×224 与 512×512 两种规格 |
| 2026-09(检索时点) | 第三方镜像活跃 | Hugging Face、OpenDataLab 等平台存在多个镜像,内容以官方仓库为准 |
§1.5 典型应用场景
- 乳腺癌组织区域分割基线模型训练:以 22 类或归并后的 5 类(tumor/stroma/inflammatory/necrosis/other)训练 U-Net、DeepLabV3+、SegFormer 等分割网络,建立肿瘤检测底座。
- TIL 与肿瘤微环境定量:利用 lymphocytic_infiltrate、tumor、stroma 等类别,在 ROI 内计算 TIL 富集度与肿瘤/基质比例等影像生物标志物。
- 众包标注质量研究:复用其标注者级注释与一致性评估协议(300 对两两 Dice),研究噪声标注学习、标注者建模与主动学习。
- 迁移学习预训练:作为病理分割预训练源,向自有染色与扫描环境的乳腺或其他器官病理数据迁移。
- 教学与课程实验:CC0 许可 + 数 GB 体积 + mask/RGB 一一对应,适合作为医学影像分割课程的动手数据集。
§2 医学背景
§2.1 ICD-11 编码映射
BCSS 标注的是组织学成分而非疾病实体,仅部分类别可直接映射到 ICD-11 疾病编码;形态学成分类别的对应关系以"—"标注并附说明。
| 标注类别 | ICD-11 编码 | ICD-11 中文名称 | 对应说明 |
|---|---|---|---|
| tumor(浸润性癌,主要病种为浸润性导管癌 NST) | 2C60 | 乳腺恶性肿瘤 | 数据集全部 151 例为组织学确诊乳腺癌,以浸润性导管癌为主 |
| dcis(导管内癌成分) | 2E65 | 乳房原位癌 | 导管原位癌归属原位癌章节;BCSS 中作为区域类别出现 |
| angioinvasion(脉管侵犯) | 2C60 伴随形态学描述 | 乳腺恶性肿瘤(形态学限定) | 属肿瘤侵袭行为特征,无独立疾病编码 |
| lymphocytic_infiltrate / plasma_cells / other_immune_infiltrate | — | — | 组织学成分与免疫微环境表现,非独立疾病实体 |
| necrosis_or_debris / stroma / fat / blood 等 | — | — | 形态学成分,依部位与疾病上下文编码 |
| exclude / undetermined / outside_roi | — | — | 标注管理类别(排除区、未定区、ROI 外),非医学概念 |
§2.1b SNOMED CT 映射
| 标签/概念 | SNOMED CT 码 | 术语 | 说明 |
|---|---|---|---|
| tumor(乳腺原发恶性肿瘤) | 254837009 | Primary malignant neoplasm of breast | 数据集核心疾病背景 |
| dcis(导管内癌成分) | — | — | BCSS 未在掩模层面区分 DCIS 的 SNOMED 细分,建议以形态学编码体系(ICD-O-3 8500/2 等)另行处理 |
| stroma / lymphocytic_infiltrate / necrosis 等形态学成分 | — | — | 组织成分概念,语义分割数据集未绑定 SNOMED 形态学码 |
§2.2 疾病简介与流行病学
乳腺癌是全球女性发病率最高的恶性肿瘤。BCSS 聚焦其中侵袭性最强的亚型——三阴性乳腺癌(Triple-Negative Breast Cancer, TNBC):雌激素受体(ER)、孕激素受体(PR)与 HER2 均为阴性,缺乏内分泌治疗与抗 HER2 靶向治疗的靶点,治疗以化疗为主。依原始论文引述的 Plasilova et al.(2016),TNBC 约占全部乳腺癌病例的 15%,且在年轻患者中比例相对更高。
组织学层面,TNBC 多表现为浸润性导管癌(非特殊型,NST),镜下呈现肿瘤细胞巢与促结缔组织增生性基质交织、伴不等量炎细胞浸润与地图样坏死。正是这些区域的定量识别——肿瘤区面积、基质比例、炎细胞浸润密度、坏死范围——构成了乳腺癌计算病理学的核心形态学特征,也是 BCSS 以区域级语义分割作为标注形态的原因。
TCGA 队列的乳腺癌病例均经组织学确诊并完成多组学测序,这意味着 BCSS 的 151 例可通过 TCGA 条码(如 TCGA-XX-YYYY)关联临床随访、分子分型与基因组数据,为"影像特征-分子特征"关联研究提供接口。
§2.3 临床任务定义
| 临床场景 | BCSS 支持的任务 | 组织学依据 |
|---|---|---|
| 肿瘤检出与定量 | tumor 类别像素分割,计算肿瘤区占比 | 肿瘤细胞巢与正常乳腺结构的区分 |
| 肿瘤微环境评估 | stroma / lymphocytic_infiltrate 分割,计算 TIL 与肿瘤/基质比 | 促结缔组织增生基质与炎细胞浸润的分布 |
| 治疗反应与预后研究 | necrosis_or_debris 定量(坏死与预后及化疗反应相关) | 地图样肿瘤坏死区域识别 |
| 质控与诊断辅助 | 22 类精细组织成分分割,辅助全片浏览与教学 | 血管、神经、正常腺体等结构识别 |
| 分级与分型辅助 | dcis / angioinvasion 等类别定位 | 导管内癌成分与脉管侵犯的识别 |
需强调:BCSS 是区域级(region-level)分割数据集,标注对象是组织区域而非单个细胞,其临床定位是组织结构定量与筛查底座,不能替代细胞级检测(如核分裂象计数)或分子检测。
§2.4 患者人群描述
| 维度 | 描述 |
|---|---|
| 来源队列 | TCGA(The Cancer Genome Atlas)乳腺癌项目,组织学确诊乳腺癌 |
| 样本量 | 151 例(每例 1 张代表性 H&E 全切片,每张切片 1 个代表性 ROI) |
| 分子亚型 | 全部为三阴性乳腺癌(TNBC,状态由 TCGA 临床数据文件确定) |
| 主要组织学类型 | 浸润性导管癌(模型评估聚焦其中 125 个浸润性导管癌 ROI) |
| 标本处理 | 甲醛固定石蜡包埋(FFPE)、H&E 染色 |
| 机构分布(训练/测试划分) | 训练 82 张切片来自 11 家机构;测试 43 张切片来自 7 家机构 |
| 人口学(年龄/性别/种族) | 数据集未按性别/年龄/种族分层发布;依托 TCGA 条码可回溯队列人口学信息 |
| 标注团队地域 | 以埃及多所大学与埃及卫生部为主,另有美国、叙利亚、孟加拉、沙特阿拉伯等机构参与 |
§2.5 临床价值
区域级组织分割是乳腺癌数字病理定量分析的"第一公里"。BCSS 提供的肿瘤/基质/炎细胞浸润/坏死四类核心信号,直接对应以下临床研究路径:其一,TIL 定量——肿瘤浸润淋巴细胞已被多项乳腺癌研究关联于预后与新辅助化疗反应,区域级浸润分割是自动化 TIL 评估的前置步骤;其二,肿瘤/基质比( TSR )——基质占比与预后相关,分割模型可将病理医师的目测半定量升级为全片自动定量;其三,坏死定量——高核级肿瘤常见地图样坏死,自动化识别可辅助分级复核。由于数据绑定 TCGA,上述形态学定量可直接与生存结局、分子分型联合建模,这是多数独立病理数据集不具备的能力。
§2.6 金标准描述
| 维度 | 描述 |
|---|---|
| 标注划分 | 每张 WSI 由临床专家圈定 1 个代表性 ROI;ROI 内组织区域以多边形勾画,ROI 外区域编码为 0(don’t care) |
| 标注方式 | 结构化众包:Digital Slide Archive 网页平台 + 多边形勾画工具 + 统一标注指南与培训视频 |
| 标注者 | 25 名:资深病理学家(SP)、低年资病理住院医师(JP,未完成第二年住院培训者)、医学生(NP) |
| 一致性评估 | 25 人两两 300 对组合,以逐类 Dice 系数量化分歧;双聚类热图与 MDS 分析呈现 |
| 质控机制 | Slack 公共反馈 + 资深者生成校正叠加注释,两轮审核与修正 |
| 标注性质 | 众包 + 专家校正的"银标准":tumor/stroma 一致性高,主观类与罕见类一致性较低(详见 §7.2) |
| 最终形态 | 20,000+ 校正后区域标注;掩模像素值编码 22 类(编码表见 §4.2),标注 JSON 坐标相对 WSI 基底分辨率 |
§3 数据集规格
§3.0 版本抉择矩阵
BCSS 没有传统意义上的"版本号"演进,但存在官方原始发行版与多种第三方重打包版的分化,选择前先对号入座:
| 你的需求 | 推荐获取渠道 | 分辨率/规格 | 理由 |
|---|---|---|---|
| 论文复现、方法学对比 | 官方 GitHub 下载脚本(MPP=0.25) | ROI 原生分辨率(通常 2,000-4,000 px/边),0.25 µm/px | 与论文预处理一致(Reinhard 色归一化 + 原生分辨率),掩模与 RGB 严格对齐 |
| 个人工作站快速上手 | 官方单链接打包(0.25 MPP) | 同上,约 4.9 GB | 无需配置 Girder 环境,解压即用 |
| 算力受限 / 教学演示 | Kaggle 重打包版 | 224×224 或 512×512 固定分辨率 | 体积小、即取即用;但分辨率信息丢失,须注意坑点 4、坑点 6 |
| 需要原始 WSI / 自定 MPP | 官方脚本改 configs.py 或 wsis 下载脚本 | 任意 MPP 或倍率;或 SVS 原始全切片 | 支持自定义 MPP/倍率下载 ROI,或另行下载 151 张原始全切片 |
| 众包标注过程研究 | 官方脚本下载 annotations JSON | 多边形坐标(基底分辨率) | 仅 mask 无法还原标注者级信息,JSON 注释是研究标注质量的原材料 |
§3.1 模态详情
- 成像对象:FFPE 乳腺癌组织 H&E 染色切片,来自 TCGA。
- 切片数量:151 张全切片(WSI),对应 151 例患者,每例 1 张。
- 标注形态:每张 WSI 内 1 个代表性 ROI(矩形区域),ROI 内以多边形勾画 22 类组织区域;掩模与 RGB 图像按设定分辨率导出,文件名编码从 TCGA 提取对应区域所需的全部信息(切片 ID 与 ROI 坐标 xmin/ymin)。
- 工作分辨率:默认 0.25 MPP(微米/像素,约等效 40× 放大倍率);官方脚本亦支持按指定 MAG(倍率)或基底层分辨率导出。
- 标签空间:掩模 PNG 单通道,像素值 0-21 共 22 类(含 don’t care 与管理类别),编码权威定义见官方仓库
meta/gtruth_codes.tsv。
§3.2 按子集样本数
| 子集/统计项 | 数值 | 说明 |
|---|---|---|
| WSI(全切片) | 151 张 | 每例 1 张,组织学确诊乳腺癌 |
| 患者(TCGA 病例) | 151 例 | 全部为 TNBC |
| 代表性 ROI | 151 个 | 每张 WSI 1 个 |
| 标注区域总数 | 20,000+ | 两轮校正后的区域多边形 |
| 标注者 | 25 名 | SP/JP/NP 三级,两两组合 300 对 |
| 论文训练集 | 82 张切片 | 来自 11 家机构 |
| 论文测试集 | 43 张切片 | 来自 7 家机构(与训练集机构不重叠) |
| 模型评估子集 | 125 个 ROI | 浸润性导管癌病例(TNBC 中的主要类型) |
| 掩模类别数 | 22 类(编码 0-21) | 含 outside_roi、exclude、undetermined 管理类别 |
§3.3 数据格式
| 组件 | 格式 | 说明 |
|---|---|---|
| RGB 区域图像 | PNG(3 通道 RGB) | 按设定 MPP/倍率从 TCGA WSI 提取,与 mask 逐像素对齐 |
| 语义分割掩模 | PNG(单通道索引值) | 像素值 0-21 编码类别;0 = ROI 外(don’t care),权威编码表 meta/gtruth_codes.tsv |
| 区域注释 | JSON | 众包多边形坐标,相对 WSI 基底分辨率;每切片一个文件 |
| 原始全切片 | SVS(另行下载) | 官方脚本含 wsis/ 下载步骤(批处理/shell 脚本),或经 GDC 按 TCGA 条码获取 |
| 类别编码表 | TSV | meta/gtruth_codes.tsv,类别码 → 类别名 |
§3.4 存储大小
| 组件/版本 | 体积 | 说明 |
|---|---|---|
| 官方发行物(0.25 MPP,RGB + mask,151 ROI) | 约 4.9 GB | 第三方镜像实测(Hugging Face MedOtter/BCSS 重建版 4.91 GB) |
| 第三方精简打包 | 约 1.3 GB | OpenDataLab 打包版,内容结构相同、压缩率不同 |
| annotations JSON(全集) | 忽略不计 | 多边形坐标文本,数 MB 量级 |
| 151 张 TCGA 原始全切片(SVS,另行下载) | 数十 GB 量级 | 以 GDC 实际文件为准,建议 ≥200 GB 磁盘做全片复现研究 |
- 建议预留磁盘:常规分析 ≥20 GB(含中间产物与虚拟环境);全片复现研究 ≥200 GB。
§3.5 标注方式
BCSS 采用结构化众包(structured crowdsourcing),流程如下:
- 培训:参与者完成入门视频与详细标注指南学习,指南包含各类组织学形态示例与常见陷阱(论文补充材料 Table S1 公开了部分培训材料)。
- 平台:全部标注在 Digital Slide Archive(DSA,Kitware/Emory 开发的病理图像管理平台)网页端完成,支持多边形勾画与图层叠加。
- 协作:以 Slack 频道作为公共反馈渠道——标注者公开提问,资深者公开解答,全部参与者可见并从中学习。
- 审核:研究协调员与资深病理学家(SP)以两种机制审查:向标注者反馈错误;生成"校正叠加注释"直接修补原始标注。共两轮审核与修正(论文 Supplementary Fig. S3)。
- 产出:经校正的区域多边形由 DSA REST API 导出坐标,离线转换为像素级 mask——ROI 内未被任何标注覆盖的区域默认为 stroma(基质是多数切片的最主要成分,被定义为"默认类",见坑点 2)。
§3.6 标注者资质与一致性
| 资质层级 | 缩写 | 定义 | 在流程中的角色 |
|---|---|---|---|
| 资深病理学家 | SP | 资深乳腺病理专家 | 圈定 ROI、审核校错、生成校正注释 |
| 低年资住院医师 | JP | 未完成第二年住院培训的病理住院医师 | 主力标注,聚焦主要类别 |
| 医学生 | NP | 医学院学生 | 参与标注,接受培训与反馈 |
一致性量化:对 25 名参与者两两组合(300 对)在评估集图像上的注释计算逐类 Dice 系数(discordance = 1 - Dice,0 表示完全一致)。核心发现:tumor 与 stroma 两个主要类别标注者间分歧低;主观定义类与罕见类(如 plasma cells、混合炎性浸润、化生性改变、脉管、皮肤附属器、神经、脉管侵犯)分歧显著更高。经验水平与反馈参与度与标注质量正相关(双聚类热图与 MDS 分析支持)。这一结果提示:以 mask 直接训练时,罕见类标签噪声不可忽略(见坑点 3、坑点 7)。
§3.7 采集周期
- 标注工作在论文投稿(2018-07-18 收稿)前完成,经两轮审核后随论文(2019-09-15 刊出)公开发布;标注起止的具体月份未在公开资料中披露。
- 图像来源切片的 TCGA 扫描时间依各提供机构而异,数据集未单独披露每张切片的扫描日期。
- 官方 GitHub 仓库最后修订于 2021-03-09(下载脚本与 README 定稿)。
§3.8 地域覆盖
- 数据来源:TCGA 多中心队列的乳腺癌标本,切片来自 TCGA 各组织提供机构。
- 标注团队:以埃及机构为绝对主力(开罗大学、NCI 埃及、亚历山大大学、Ain Shams、曼苏拉、坦塔等)并含埃及卫生部,另有美国(埃默里大学、Kitware)、叙利亚、孟加拉、沙特阿拉伯机构参与。
§3.9 设备规格
- 工作分辨率:默认 0.25 µm/px(MPP,约等效 40× 物镜)下载 ROI 的 RGB 与 mask;支持自定义 MPP、倍率(MAG)或基底层。
- 平台与工具:Digital Slide Archive(DSA)网页标注平台;DSA REST API 导出注释坐标。
- 扫描仪型号与扫描参数未在公开资料中逐一披露(TCGA 各机构自主扫描)。
§3.10 深度溯源链
TCGA 乳腺癌队列(组织学确诊,FFPE)
└─ 151 张 H&E 全切片(TCGA 各机构扫描,GDC 存档)
└─ 每张 1 个代表性 ROI(资深病理学家圈定)
└─ 25 人众包多边形标注(DSA 平台,2018)
└─ Slack 反馈 + SP 两轮审核校正
└─ DSA REST API 导出 JSON 坐标
└─ 离线光栅化为 22 类 PNG mask(meta/gtruth_codes.tsv)
└─ CC0 1.0 发布(GitHub 下载脚本 + Grand Challenge 主页)
§4 数据结构
§4.0 目录树
用官方下载脚本(MPP=0.25)拉取全部组件后,SAVEPATH 目录结构如下:
SAVEPATH/
├── annotations/ # 每张切片一个 JSON,众包多边形坐标(相对 WSI 基底分辨率)
│ ├── TCGA-A1-A0SB-DX1_XML.json # 文件名含 TCGA 条码与切片标识
│ └── ...
├── masks/ # 训练/验证用真值掩模(PNG,像素值 0-21)
│ ├── TCGA-A1-A0SB-DX1_..._mpp-0.25.png # 文件名编码切片 ID 与 ROI 坐标(xmin/ymin)
│ └── ...
├── images/ # 与 mask 逐像素对齐的 RGB 区域图像(PNG)
│ ├── TCGA-A1-A0SB-DX1_..._mpp-0.25.png
│ └── ...
├── wsis/ # 原始全切片(SVS)下载脚本所在;legacy 模式下为空,见官方 README
│ ├── download_wsis.sh # macOS/Linux 批量下载原始 WSI
│ └── download_wsis.bat # Windows 批量下载
├── logs/ # 下载日志(排错用)
└── (仓库内)/meta/gtruth_codes.tsv # 类别编码权威表:码值 → 类别名
要点:mask 与 images 同名成对;文件名 split("_")[0] 即 case 标识,可直接作为患者级分组键(见 §5.3 泄漏风险);ROI 在 WSI 基底分辨率中的位置(xmin/ymin)同样编码于文件名,用于回溯原始切片。
§4.1 DAIMS 字段字典
| 字段/概念 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差/注意事项 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| mask 文件名 | Text | 编码切片 ID、ROI 坐标与导出分辨率 | TCGA-A1-A0SB-DX1_..._mpp-0.25.png |
样本标识与 WSI 回溯 | 不同 fork 的默认 MPP 曾为 0.23,注意核对文件名后缀 | 无 | 文件系统合法名 |
| 像素类别值 | Integer(Label) | mask 单通道像素值,22 类编码 | 1(tumor)、0(outside_roi) | 分割监督信号 | 0 是 don’t care 而非 “other”(官方 README 加粗警示) | 0(outside_roi)、7(exclude)、15(undetermined) | 0-21 |
| 类别码映射 | TSV | meta/gtruth_codes.tsv 权威定义 |
1 tumor |
重建标签空间、5 类归并 | 第三方镜像偶有旧版编码表,以官方仓库为准 | 无 | 0-21 |
| 注释 JSON | JSON | 每切片一个文件,众包多边形坐标 | 坐标基于 WSI 基底分辨率 | 标注者级研究、自定义光栅化 | 坐标系与导出 mask 分辨率不同,需按 MPP 缩放 | 无 | 结构化 JSON |
| patient/case 标识 | Text | 文件名 split("_")[0] 提取 |
TCGA-A1-A0SB-DX1 |
患者级分组划分(防泄漏) | 每例仅 1 个 ROI,ROI 级随机划分天然不泄漏;patch 化后必须分组 | 无 | TCGA 条码 |
| ROI 坐标 xmin/ymin | Integer | ROI 在 WSI 基底分辨率中的左上角坐标 | 编码于 mask 文件名 | 全片级回溯、多 ROI 扩展研究 | resize 后的第三方版本已丢失此信息 | 无 | 基底分辨率像素 |
| RGB 图像 | Image | 与 mask 同名成对的 3 通道 PNG | 0.25 MPP 导出 | 模型输入 | 官方脚本可改 MPP 重新导出;色偏显著(见 §6.3 色归一化) | 无 | PNG |
| 原始 WSI | SVS | TCGA GDC 原始全切片(另行下载) | 每例 1 个 SVS | 全片推理、弱监督扩展 | 体积大,需 GDC 客户端;文件名与 mask 条码对应 | 无 | GDC 文件 |
§4.2 标签分布与 22 类编码表
官方掩模采用 22 类编码(权威定义 meta/gtruth_codes.tsv);社区惯例将其归并为 5 类训练(论文口径):
| 码值 | 类别名(官方) | 中文释义 | 论文 5 类归并 |
|---|---|---|---|
| 0 | outside_roi | ROI 外区域 | 不参与损失与评估(don’t care) |
| 1 | tumor | 肿瘤(浸润性癌) | Tumor |
| 2 | stroma | 基质(默认类,ROI 内未标注即 stroma) | Stroma |
| 3 | lymphocytic_infiltrate | 淋巴细胞浸润 | Inflammatory |
| 4 | necrosis_or_debris | 坏死或碎片 | Necrosis |
| 5 | glandular_secretions | 腺体分泌物 | Other |
| 6 | blood | 血液 | Other |
| 7 | exclude | 排除区(标注管理类别) | Other / 剔除 |
| 8 | metaplasia_NOS | 化生(非特殊型) | Other |
| 9 | fat | 脂肪 | Other |
| 10 | plasma_cells | 浆细胞 | Inflammatory |
| 11 | other_immune_infiltrate | 其他免疫浸润 | Inflammatory |
| 12 | mucoid_material | 黏液样物质 | Other |
| 13 | normal_acinus_or_duct | 正常腺泡或导管 | Other |
| 14 | lymphatics | 淋巴管 | Other |
| 15 | undetermined | 未定区(标注管理类别) | Other / 剔除 |
| 16 | nerve | 神经 | Other |
| 17 | skin_adnexa | 皮肤附属器 | Other |
| 18 | blood_vessel | 血管 | Other |
| 19 | angioinvasion | 脉管侵犯 | Tumor(或 Other,按研究目的) |
| 20 | dcis | 导管原位癌 | Tumor(或 Other,按研究目的) |
| 21 | other | 其他 | Other |
各类别的像素占比未在官方资料中系统披露;可确认的结构性事实是:tumor 与 stroma 占据绝大多数像素(两者标注一致性也最高),而 plasma_cells、angioinvasion、nerve 等罕见类像素占比极低、标注者分歧大——这是 22 类直接训练不可行的根本原因(IJCV 论文明确将 22 类映射为 5 类,并称之为"common practice due to the sparse representation")。
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| WSI / 患者 / ROI 数 | 151 / 151 / 151 | 论文摘要 |
| 标注区域总数 | 20,000+ | 论文摘要 |
| 标注者数量与两两组合 | 25 名 / 300 对 | 论文方法部分 |
| 论文训练/测试划分 | 82 张(11 机构)/ 43 张(7 机构) | 论文方法部分 |
| 基线模型 | VGG16-FCN8(5 类) | 论文方法部分 |
| 基线性能 | mean AUC 0.945 | 论文摘要 |
| 工作分辨率 | 0.25 MPP(默认) | 官方 README |
| 0.25 MPP RGB+mask 体积 | 约 4.9 GB | 第三方镜像实测 |
§4.4 数据层级
TCGA 项目(GDC)
└─ 患者(case)× 151 # TCGA 条码 TCGA-XX-YYYY,全为 TNBC
└─ 切片(WSI)× 1/患者 # H&E,每例 1 张
└─ ROI × 1/WSI # 代表性区域,坐标编码于文件名
└─ 区域标注 × 20,000+(全集)
└─ 像素级 mask(22 类编码,0.25 MPP 默认导出)
层级含义:患者级 = 切片级 = ROI 级一一对应(各 151),因此按 ROI 划分即按患者划分;一旦把 ROI 切成 patch,patch 数远大于病例数,划分必须回退到患者级分组(§5.3)。
§4.5 缺失值与信息性缺失编码
BCSS 为影像掩模数据,无传统表格缺失值,但存在三类"结构性缺失"必须在训练前显式处理:
| 编码/现象 | 含义 | 正确处理 | 错误处理后果 |
|---|---|---|---|
| 像素值 0(outside_roi) | ROI 矩形外区域,无标注、无意义 | 损失加权置零,评估时排除 | 被当作类间负样本或"other"参与训练,指标被大面积稀释(坑点 1) |
| 像素值 7(exclude) | 标注者判定应排除的区域 | 从损失与指标中剔除 | 误归入 any 类污染训练 |
| 像素值 15(undetermined) | 无法归类的未定区 | 按研究目的归入 Other 或剔除 | 硬编码归入临床类别引入噪声 |
| ROI 内"空白"像素 | 无多边形覆盖 → 默认 stroma | 按 stroma 参与训练(官方设计) | 误认为"未标注待处理",丢掉最大量的监督信号(坑点 2) |
§5 划分与使用建议
§5.1 官方划分
论文的模型评估采用如下划分(写入论文方法与补充材料,未以机器可读文件形式随数据发布):以浸润性导管癌的 125 个 ROI 为对象,82 张切片(来自 11 家机构)为训练集,43 张切片(来自 7 家机构)为测试集,且训练/测试切片的来源机构互不重叠。其余 26 张切片构成评估集,用于 25 名标注者的一致性研究(300 对两两 Dice)。
§5.2 社区惯例划分
- HF 镜像卡片建议:数据集无官方 train/val/test 划分文件,建议下游按
patient_id分组做 group-shuffle 划分。 - Kaggle/论文复现社区:多沿用论文 82/43 机构隔离划分或其近似变体;也有工作(如 IJCV 2025)将 WSI 以 1,000×1,000 滑窗(步长 500)切成 8,741 个 patch 后按 5,873/2,868 划分训练/测试——该划分以切片为单位回溯(见坑点 5)。
- 另一 IJCV 论文:512×512 裁剪为 6,000 张训练 + 2,768 张验证。
§5.2b 划分策略对照
| 策略 | 做法 | 适用场景 | 风险控制 |
|---|---|---|---|
| 论文复现式 | 82 张(11 机构)训练 / 43 张(7 机构)测试,机构隔离 | 与已发表数字对表 | 机构隔离防站点泄漏;无官方文件需按 §8.3 口径自行实现 |
| Case 级随机 | 按文件名 split("_")[0] 分组 GroupShuffleSplit(如 66/34) |
快速原型与模型选型 | 每例 1 ROI,天然无患者级泄漏;建议报告多种子均值 |
| Case 级 K 折 | GroupKFold 5 折(case 为组) | 小样本稳健评估 | 小类指标建议合并折后整体计算 |
| Patch 化 | ROI 内滑窗切块后划分 | 大训练量需求 | 必须按 case 分组划分,否则切片级泄漏(坑点 5) |
| 机构分层 | 以机构代码分层抽样 | 研究站点效应 | 保持训练/测试机构不重叠,报告分层指标 |
无论采用哪种策略,都应在结果中声明:标签空间(22/5 类)、忽略集处理、分辨率与色归一化参数——否则数字不可比(§8.3)。
§5.3 泄漏风险(重点)
| 场景 | 泄漏风险 | 缓解 |
|---|---|---|
| ROI 级随机划分(151 个 ROI) | 无患者级泄漏(每例仅 1 个 ROI) | 可直接随机划分,但建议同时按机构分层 |
| ROI 内滑窗 patch 后随机划分 | 切片级/患者级泄漏:相邻 patch 高度重叠,同例 patch 同时进训练与测试 | 按 文件名 split("_")[0](case ID)分组划分(GroupShuffleSplit / GroupKFold) |
| 忽略机构信息 | 站点效应(固定、包埋与扫描差异)混入 | 论文已按机构隔离训练/测试;复现时保持机构隔离,至少报告按机构分层的结果 |
| 与 NuCLS 或 TCGA 其他数据联合使用 | 同一 TCGA 病例跨数据集重复出现 | 联合建模时按 TCGA 条码全局去重分组 |
§5.4 交叉验证建议
- 以 case 为组做 5 折 GroupKFold,每折内报告逐类 Dice 与 mAUC;小类别(如 angioinvasion、nerve)建议报告合并折后的整体指标而非折均值,避免小样本折内指标不稳定。
- 报告时说明掩模分辨率与 5 类归并方案——不同归并口径的结果不可直接互比(见 §8.3 评测协议)。
§5.5 外部验证建议
- 首选同团队 NuCLS 数据集(TCGA 乳腺癌,细胞核粒度)做跨粒度一致性检查。
- 引入自有或公开的非 TNBC 乳腺癌切片(如 GDC 其余乳腺癌亚型)检验亚型外推;注意 TCGA 染色与扫描的站点效应。
- 跨实验室数据(不同扫描仪/染色协议)验证前,先执行 Reinhard 或 Macenko 色归一化并报告归一化前后的指标差。
§6 AI 就绪指南
§6.0 云端快速启动
BCSS 体积约数 GB,Google Colab(磁盘 ~100 GB)或 Kaggle Notebook(磁盘 ~70 GB)均可直接承载。云端最小路径:
# Colab/Kaggle:克隆官方下载脚本仓库并拉取 0.25 MPP 数据
!git clone https://github.com/CancerDataScience/CrowdsourcingDataset-Amgadetal2019.git /content/bcss_tools
%cd /content/bcss_tools
!pip install girder_client pillow numpy scikit-image imageio
!python download_crowdsource_dataset.py # configs.py 默认 SAVEPATH=./ ,MPP=0.25
# 产出:./annotations、./masks、./images、./logs(首次运行约 20-40 分钟,视网络)
Kaggle 用户也可直接挂载社区重打包数据集(224×224 或 512×512 规格)跳过下载步骤,但需接受分辨率与版本区分上的限制(坑点 6)。
§6.1 快速上手
下面的代码假定如下目录结构(与官方下载脚本产出一致):data_root/ 下有 images/ 与 masks/ 两个平行目录,同名文件一一对应;最小可用子集就是任意一对 RGB+mask PNG——单个 ROI(数千像素见方)即可跑通前向与损失。
# ============ 目录结构预期 ============
# data_root/
# ├── images/ xxx_mpp-0.25.png # RGB,H×W×3,uint8
# ├── masks/ xxx_mpp-0.25.png # mask,H×W 单通道,uint8,取值 0-21
#
# data_root 拼接关系:官方脚本 SAVEPATH 即 data_root;
# 若使用 Kaggle 重打包版,data_root 指向解压后的 images/ 与 masks/ 上级目录。
# 最小可用子集:images/ 与 masks/ 中任意一对同名文件。
import numpy as np
from PIL import Image
from pathlib import Path
data_root = Path("data_root")
img = np.array(Image.open(next((data_root / "images").glob("*.png"))))
msk = np.array(Image.open(next((data_root / "masks").glob("*.png"))))
print("RGB:", img.shape, img.dtype) # 例:(3096, 2664, 3) uint8
print("mask:", msk.shape, msk.dtype) # 例:(3096, 2664) uint8
print("mask 唯一值:", np.unique(msk)) # 注意 0 = outside_roi(don't care),2 = stroma(默认类)
# 官方类别编码表(meta/gtruth_codes.tsv)也可程序化读取:
codes = np.loadtxt(data_root.parent / "bcss_tools" / "meta" / "gtruth_codes.tsv",
dtype=str, delimiter="\t") # 具体分隔符以文件实际内容为准
§6.2 数据获取
| 渠道 | 内容 | 规格 | 获取方式 |
|---|---|---|---|
| 官方 GitHub(推荐) | annotations JSON + masks + RGB | 默认 0.25 MPP,约 4.9 GB | 克隆 CancerDataScience/CrowdsourcingDataset-Amgadetal2019 后运行 download_crowdsource_dataset.py |
| 官方单链接打包 | RGB + mask(0.25 MPP) | 约 4.9 GB | 官方 README “Download (single link)” 链接,解压即用 |
| 官方 wsis 脚本 | 151 张 TCGA 原始全切片(SVS) | 数十 GB | 运行 wsis/download_wsis.sh(或 .bat) |
| Kaggle 重打包 | 224×224 / 512×512 固定分辨率 | 体积较小 | kaggle datasets 检索 whats2000/breast-cancer-semantic-segmentation-bcss |
| Hugging Face 镜像 | RGB + mask(parquet 重建) | 4.91 GB | huggingface.co/datasets/MedOtter/BCSS |
# 官方命令行获取(全组件,MPP 可在 configs.py 中修改)
git clone https://github.com/CancerDataScience/CrowdsourcingDataset-Amgadetal2019
cd CrowdsourcingDataset-Amgadetal2019
pip install girder_client pillow numpy scikit-image imageio
# 可选:编辑 configs.py —— SAVEPATH(保存路径)、MPP(默认 0.25)、PIPELINE(下载哪些组件)
python download_crowdsource_dataset.py
# 产出目录:annotations/(JSON 注释)、masks/(真值掩模)、images/(RGB)、logs/(日志)
# 注意:wsis/ 目录为旧版遗留占位;原始全切片用 wsis/download_wsis.sh 单独下载
无需注册、无需申请、无配额限制(CC0 1.0 公共领域许可)。使用学术惯例:引用 Amgad et al. 2019(BibTeX 见 §9)。
下载完成后先做一次完整性体检(官方脚本会生成 logs/,但以下核对更直接):
# ============ 下载完整性 sanity check ============
# 预期:images/ 与 masks/ 文件一一同名对应(151 个),mask 唯一值 ⊆ [0, 21]。
from pathlib import Path
import numpy as np
from PIL import Image
root = Path("data_root")
imgs = sorted((root / "images").glob("*.png"))
msks = sorted((root / "masks").glob("*.png"))
assert len(imgs) == len(msks) and len(imgs) > 0, "images 与 masks 数量不一致或为空"
mismatch = [i.name for i, m in zip(imgs, msks) if i.name != m.name]
assert not mismatch, f"同名配对失败:{mismatch[:3]}..."
for m in msks[:10]: # 抽样前 10 个
arr = np.array(Image.open(m))
bad = set(np.unique(arr)) - set(range(22))
assert not bad, f"{m.name} 出现 0-21 之外的码值:{bad}"
print(f"OK:{len(imgs)} 对文件,配对一致,抽样 mask 码值合法")
# 通过后再统计全集类别直方图,确定 22/5 类训练方案(见 §4.2)
§6.3 预处理全流程
官方论文管线的三个关键步骤:色归一化(Reinhard)、分辨率对齐、标签归并。以下为可运行实现:
<details>
<summary><strong>完整预处理脚本(Reinhard 色归一化 + 5 类归并 + 安全缩放,约 55 行)</strong></summary>
# ============ 预处理:Reinhard 色归一化 + 5 类标签归并 + 安全缩放 ============
# 目录结构同 §6.1;本脚本展示单对图像的完整预处理,可直接并入 Dataset。
import numpy as np
import cv2
# ---- 1) Reinhard 色归一化(论文采用 Reinhard et al., 2001)----
def reinhard_normalize(img: np.ndarray, ref_stats=None):
"""img: RGB uint8。ref_stats 为参考图 (Lab 均值, Lab 标准差);
实践中先在训练集上统计参考均值/标准差,再统一施加于全部图像。"""
lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB).astype(np.float32)
mean, std = lab.reshape(-1, 3).mean(0), lab.reshape(-1, 3).std(0)
if ref_stats is None: # 首次调用:以当前图作为参考(仅演示)
ref_stats = (mean, std)
rm, rs = ref_stats
lab = (lab - mean) / (std + 1e-8) * rs + rm
out = cv2.cvtColor(np.clip(lab, 0, 255).astype(np.uint8), cv2.COLOR_LAB2RGB)
return out, ref_stats
# ---- 2) 22 类 → 5 类归并(论文口径:tumor/stroma/inflammatory/necrosis/other)----
TO_5CLASS = {
0: 255, # outside_roi -> ignore_index(don't care,损失加权置零)
1: 0, 2: 1, # tumor, stroma
3: 2, 10: 2, 11: 2, # 淋巴浸润/浆细胞/其他免疫 -> inflammatory
4: 3, # necrosis_or_debris -> necrosis
5: 4, 6: 4, 7: 4, 8: 4, 9: 4, 12: 4, # 分泌物/血液/排除/化生/脂肪/黏液 -> other
13: 4, 14: 4, 16: 4, 17: 4, 18: 4, 21: 4, # 正常腺体/淋巴管/神经/附属器/血管/其他 -> other
15: 255, # undetermined -> ignore(可按研究目的改为 4)
19: 4, 20: 0, # angioinvasion->other;dcis->tumor(可按目的调整)
}
def collapse_mask(mask: np.ndarray) -> np.ndarray:
out = np.full_like(mask, 255) # 未知码一律 ignore
for src, dst in TO_5CLASS.items():
out[mask == src] = dst
return out # 取值 {0,1,2,3,4,255}
# ---- 3) 缩放:图像可双线性,mask 必须最近邻 ----
def resize_pair(img, mask, size=(1024, 1024)):
img_r = cv2.resize(img, size, interpolation=cv2.INTER_LINEAR)
mask_r = cv2.resize(mask, size, interpolation=cv2.INTER_NEAREST) # 关键:NEAREST
return img_r, mask_r
# ---- 端到端 ----
# img_n, ref = reinhard_normalize(img) # 训练集首图确定 ref,全数据集复用
# m5 = collapse_mask(msk) # 22 类 -> 5 类 + 255 ignore
# img_r, m5_r = resize_pair(img_n, m5, (1024, 1024))
</details>
工程细节:论文还使用 shift/crop 数据增强提升鲁棒性(见 §6.6);官方下载已把 mask 与 RGB 对齐到同一 MPP,无需自行配准;若从 JSON 注释自行光栅化,注意坐标基于 WSI 基底分辨率,需按目标 MPP 缩放。
§6.4 PyTorch DataLoader 完整实现
<details>
<summary><strong>完整 PyTorch Dataset / DataLoader / 训练步示例(约 95 行)</strong></summary>
# ============ BCSS PyTorch Dataset(22->5 类,忽略 outside_roi)============
# 目录结构预期:
# data_root/images/*.png 与 data_root/masks/*.png 同名成对(官方 0.25 MPP 产出)
import numpy as np
import cv2, torch
from pathlib import Path
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from collections import OrderedDict
TO_5CLASS = OrderedDict(TO_5CLASS) # 复用 §6.3 的映射表
class BCSSDataset(Dataset):
"""BCSS 语义分割数据集。返回 (RGB 图像张量, 5 类标签张量)。
标签中 255 = ignore(outside_roi / undetermined),训练时须配合
nn.CrossEntropyLoss(ignore_index=255) 使用。"""
def __init__(self, data_root: str, split_ids=None, size=(1024, 1024),
ref_stats=None, augment=False):
self.root = Path(data_root)
self.size = size
self.ref_stats = ref_stats # Reinhard 参考统计(训练集统计量)
self.augment = augment
ids = sorted(p.name for p in (self.root / "images").glob("*.png"))
if split_ids is not None: # case 级划分:由调用方传入该 split 的文件名列表
ids = [i for i in ids if i in set(split_ids)]
self.items = ids
@staticmethod
def case_id(filename: str) -> str:
return filename.split("_")[0] # TCGA 条码 = 患者级分组键
def __len__(self):
return len(self.items)
def __getitem__(self, idx):
name = self.items[idx]
img = np.array(Image.open(self.root / "images" / name).convert("RGB"))
msk = np.array(Image.open(self.root / "masks" / name))
# Reinhard 色归一化(ref_stats 为训练集固定统计量)
lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB).astype(np.float32)
if self.ref_stats is not None:
m, s = lab.reshape(-1, 3).mean(0), lab.reshape(-1, 3).std(0)
rm, rs = self.ref_stats
lab = (lab - m) / (s + 1e-8) * rs + rm
img = cv2.cvtColor(np.clip(lab, 0, 255).astype(np.uint8),
cv2.COLOR_LAB2RGB)
m5 = np.full_like(msk, 255)
for src, dst in TO_5CLASS.items():
m5[msk == src] = dst
if self.augment: # 论文风格 shift/crop:随机平移后中心裁剪
dx, dy = np.random.randint(-64, 65, 2)
H, W = img.shape[:2]
img = np.roll(img, (dy, dx), (0, 1))
m5 = np.roll(m5, (dy, dx), (0, 1))
img, m5 = resize_pair(img, m5, self.size) # §6.3:mask 用最近邻
return (torch.from_numpy(img).permute(2, 0, 1).float() / 255.0,
torch.from_numpy(m5.copy()).long())
# ---- 划分:按 case 分组(防泄漏,见 §5.3 / 坑点 5)----
from sklearn.model_selection import GroupShuffleSplit
all_files = sorted(p.name for p in Path("data_root/images").glob("*.png"))
groups = [f.split("_")[0] for f in all_files]
tr_idx, te_idx = next(GroupShuffleSplit(n_splits=1, test_size=0.34, random_state=42)
.split(all_files, groups=groups))
train_ds = BCSSDataset("data_root", [all_files[i] for i in tr_idx], augment=True)
test_ds = BCSSDataset("data_root", [all_files[i] for i in te_idx])
train_loader = DataLoader(train_ds, batch_size=8, shuffle=True,
num_workers=4, pin_memory=True, drop_last=True)
test_loader = DataLoader(test_ds, batch_size=8, shuffle=False, num_workers=4)
# ---- 训练一步的最小示例(DeepLabV3+ResNet50 迁移)----
import torchvision
model = torchvision.models.segmentation.deeplabv3_resnet50(
weights="DEFAULT", num_classes=5).cuda()
criterion = torch.nn.CrossEntropyLoss(ignore_index=255) # don't care 不计损失
opt = torch.optim.AdamW(model.parameters(), lr=1e-4)
for imgs, masks in train_loader:
imgs, masks = imgs.cuda(), masks.cuda()
out = model(imgs)["out"]
loss = criterion(out, masks)
opt.zero_grad(); loss.backward(); opt.step()
break
</details>
§6.5 坑点清单(8 个真实失败模式)
⚠️ 坑点 1:mask 零值是 “don’t care”,不是第 22 个类别(分类:标签理解)
问题:官方 README 以
[CRITICAL]加粗警示——掩模中像素值 0 代表 ROI 矩形之外的区域(outside_roi),它在语义上"不存在",而非一个可学习类别。许多初学者把它当作 “other/background” 参与损失计算。
症状:训练能跑通,但逐类指标异常:除 tumor/stroma 外各类别 Dice 虚低;整体 accuracy 被大片 0 值像素"稀释"得虚高;预测图上模型倾向于把边界区域画成类 0。
解决:
- 简单方法:训练与评估前把 0 值重映射为
ignore_index(如 255),损失用nn.CrossEntropyLoss(ignore_index=255),评估时先mask_valid = (pred_target != 255)再计算混淆矩阵。- 进阶方法:若保留 22 类训练,构建损失权重向量
w[0] = 0,其余类别按逆频率加权;评估器按同样权重聚合。- SOTA 方法:loss 端用 masked focal/Tversky 组合(对前景类加权),并在验证时同时报告"ROI 内指标"与"全图指标"两套口径,显式声明差异。
参考:官方 README[CRITICAL]段(github.com/CancerDataScience/CrowdsourcingDataset-Amgadetal2019);Hugging Face MedOtter/BCSS 数据卡 “Code 0 (outside_roi) is a don’t care region — exclude from any loss”。
⚠️ 坑点 2:stroma 是"默认类"——ROI 内没被标注的地方不是"未标注"(分类:标签理解)
问题:论文将 stroma 定义为"默认类":ROI 内未被任何多边形覆盖的像素即视为基质(基质是多数切片中最主要成分)。不了解这一设计的人会把大片"空白"像素当作无标注噪声剔除,或将整个样本标记为"标注不完整"。
症状:mask 直方图中 stroma 占比高得离谱(动辄过半),有人误判为标签泄漏或编码错误;把"空白"区域丢弃后模型训练样本的有效监督面积骤减,tumor/stroma 边界学习变差。
解决:
- 简单方法:按官方设计直接把 ROI 内非标注区视为 stroma 参与训练(即不做任何特殊处理),只处理 ROI 外的 0 值。
- 进阶方法:若担心"默认 stroma"引入系统性偏倚(低分化肿瘤区被误归为基质),用置信度加权——对显式标注的 stroma 多边形加权 1.0,对默认填充区降权(如 0.5)。
- SOTA 方法:结合 NuCLS 或专家子集做一致性抽样验证"默认 stroma"区域的纯度,训练噪声鲁棒损失(如 generalized cross-entropy)。
参考:Amgad et al. 2019 方法部分(“stroma … considered to be the ‘default’ class and defined by absence of annotations”)。
⚠️ 坑点 3:22 类直接训练几乎必然失败——罕见类稀疏且噪声大(分类:标签理解)
问题:22 类中 plasma_cells、angioinvasion、nerve、skin_adnexa 等类别像素占比极低,且论文证实这类"主观定义或罕见"类别标注者分歧大(tumor/stroma 低分歧、罕见类高分歧)。直接 22 类 softmax 训练时这些类几乎没有有效监督。
症状:罕见类 Dice 接近 0,训练 loss 在主类上快速收敛后停滞;mIoU 被主类支配,类间指标方差极大;混淆矩阵显示罕见类几乎全部被吸入 stroma/other。
解决:
- 简单方法:按论文口径归并为 5 类(tumor/stroma/inflammatory/necrosis/other,映射表见 §4.2/§6.3)——IJCV 论文明确称其为 “common practice due to the sparse representation”。
- 进阶方法:两阶段训练——先 5 类主干,再在 5 类 “other” 内做细粒度(血/脂肪/腺体等)二次分类;或对罕见类用 focal loss + 类别采样。
- SOTA 方法:标签层级建模(hierarchical segmentation head)或 semantic hierarchy 约束,把 22 类组织成 5 类超类的树,同时输出两级预测。
参考:Amgad et al. 2019(discordance 分析);IJCV 2025 使用 BCSS 论文(22 类映射 5 类);官方 README 的 class grouping 提示。
⚠️ 坑点 4:resize mask 用双线性插值会制造"幽灵类别"(分类:预处理陷阱)
问题:mask 是编码图(像素值即类别号),不是自然图像。对 mask 做双线性/面积插值会在类别边界产生中间值(如 1.5 → 截断后成为 1 或 2 之间的假类别,甚至产生 0-21 之外的浮点值),边界处监督信号被系统性破坏。Kaggle 224/512 重打包版若处理不当,此问题被放大。
症状:训练集 mask 唯一值数量异常增多(出现 0.5、1.5 类的取值或 uint8 截断后的错误分布);边界类别(tumor-stroma 交界)指标系统性偏低;np.unique(mask)出现 0-21 之外或非整数值。
解决:
- 简单方法:mask 一律
cv2.resize(..., interpolation=cv2.INTER_NEAREST);图像才允许线性插值。- 进阶方法:大倍率下采样时先对每个目标像素做多数投票(众数池化),保留细小结构(lymphatics、血管壁)。
- SOTA 方法:从 annotations JSON 按目标分辨率重新光栅化多边形(shapely + rasterio/PIL ImageDraw),从根本上避免插值损失。
参考:官方 README(分辨率由 MPP/MAG 控制);gtruth_codes.tsv(类别值语义)。任何分割教科书中的 standard practice。
⚠️ 坑点 5:patch 化后按 patch 随机划分 = 切片级/患者级数据泄漏(分类:数据泄漏)
问题:BCSS 每例仅 1 个 ROI,ROI 级随机划分天然安全;但社区普遍把 ROI 切成 patch(如 IJCV 论文 1,000×1,000 滑窗步长 500 → 8,741 patch),相邻 patch 重叠 50%,若按 patch 随机划分,同一患者的组织几乎必然同时出现在训练与测试中,指标虚高。
症状:测试 Dice 比按切片划分的已发表结果高出 5-15 个百分点;逐切片分析发现测试集 patch 与训练集 patch 来自同一 WSI;换一批 TCGA 外部数据指标骤降。
解决:
- 简单方法:先按
文件名.split("_")[0]提取 case ID,以 case 为组做 GroupShuffleSplit/GroupKFold(代码见 §6.4)。- 进阶方法:在组级划分之上再按机构分层(训练 82 张来自 11 机构、测试 43 张来自 7 机构的论文划分即机构隔离),防止站点效应泄漏。
- SOTA 方法:训练集内做 case 级交叉验证选模型,预留完整机构隔离的外部切片做最终报告;对外部数据(非 TCGA)报告泛化差距。
参考:Hugging Face MedOtter/BCSS 数据卡(“There is no official train/val/test split — group-shuffle by patient_id”);Amgad et al. 2019(82/43 机构隔离划分)。
⚠️ 坑点 6:官方版、Kaggle 版、早期 fork 的分辨率与许可表述不一致(分类:工程陷阱)
问题:BCSS 的分发生态比较混乱:官方默认 0.25 MPP 原生分辨率;Kaggle 重打包版是 224×224/512×512 固定分辨率(2023-12);早期 fork 的 README 曾写 “CC BY 4.0” 且默认 MPP 为 0.23,现行官方 README 为 “CC0 1.0”、MPP 0.25。拿错版本会污染对比实验,引用错许可会有合规隐患。
症状:复现论文精度对不上(输入分辨率/色域不同);论文中引用了错误的许可证;两个"BCSS"数据集训练结果无法互比;mask 文件名后缀 mpp 值对不上(0.23 vs 0.25)。
解决:
- 简单方法:以官方仓库(
CancerDataScience/CrowdsourcingDataset-Amgadetal2019,即PathologyDataScience/BCSS)为准核对文件名 mpp 后缀与 README 许可;第三方版本在论文中单独声明。- 进阶方法:在数据版本管理(DVC/哈希清单)中记录每个文件的 md5 与来源 URL;对比实验统一用官方 0.25 MPP 版重新导出。
- SOTA 方法:用 Croissant/数据卡记录 provenance(本页面 §C 提供),实验配置文件中绑定数据指纹。
参考:官方 README(Licensing:CC0 1.0 数据 / MIT 代码);早期 fork(xiaochengcike/BCSS 等,README 为 CC BY 4.0);Kaggle whats2000 数据卡(2023-12-30 更新说明)。
⚠️ 坑点 7:评估口径不一——don’t care 与 per-patch/per-slice 聚合方式的隐形差异(分类:评估误用)
问题:BCSS 论文的 mean AUC 是在 5 类上按像素级 AUC 平均得到,且排除了 don’t care;社区常见错误有三:把 outside_roi 像素计入分母、把 per-patch 指标当 per-slice 指标、把 22 类与 5 类口径的结果直接比较。
症状:自家模型"超过"论文基线 10+ 点,审稿人指出口径不可比;不同论文间 Dice 从 0.6 到 0.9 跨度巨大却声称同一数据集;类不均衡下 accuracy 虚高(95%+ 但 tumor 边界一团糟)。
解决:
- 简单方法:固定口径——先剔除 ignore_index 像素,再计算混淆矩阵;报告逐类 Dice/mIoU 与 macro 平均,同时注明 5 类归并映射表。
- 进阶方法:除 per-patch 外报告 per-slice 聚合(每张 ROI 先算再平均),并给出 95% 置信区间(case 级 bootstrap)。
- SOTA 方法:补充逐类像素级 AUC(与论文可比)+ 边界指标(boundary IoU/Hausdorff 95),并公开评估脚本与随机种子。
参考:Amgad et al. 2019(AUC=0.945 的计算口径见其方法与补充材料);López-Pérez et al. 2024(CMIG,Dice 0.7827 的口径);§8.3 评测协议。
⚠️ 坑点 8:文件名即元数据——xmin/ymin 与条码解析错误导致全片回溯失败(分类:工程陷阱)
问题:BCSS 的 ROI 坐标(基底分辨率 xmin/ymin)与患者条码都编码在 mask 文件名里,没有独立的 CSV 元数据表。解析方式想当然(按 “-” 或 “_” 乱切)会拿错 case ID 或 ROI 位置,导致从 TCGA/GDC 回溯原始切片、与临床数据对表时错位。
症状:按条码去 GDC 下载 WSI 时 404(把切片后缀 DX1 当成了病例字段);ROI 拼回全片时位置对不上;与 NuCLS/临床表 join 后行数暴涨或为空(条码层级不匹配)。
解决:
- 简单方法:case ID 统一用
filename.split("_")[0](如TCGA-A1-A0SB-DX1),与 TCGA 条码的 patient 层(前 3 段)区分——患者级 join 用前 12 字符(TCGA-XX-YYYY)。- 进阶方法:写一个文件名解析器,抽取 slide、ROI 坐标(xmin/ymin)、mpp 字段并输出结构化 manifest CSV,入库校验唯一性。
- SOTA 方法:直接以 DSA REST API 查询注释元数据(官方流程),或用 GDC API 按 barcode 校验切片存在性后再批量下载 WSI。
参考:官方 README(“The name of each mask encodes all necessary information to extract the corresponding RGB images from TCGA slides”);healthml/active-segmentation 的 BCSSDataset 实现(case_id/institute 解析)。
§6.6 数据增强
| 增强方式 | 安全性 | 说明 |
|---|---|---|
| 水平/垂直翻转 | ✅ 安全 | 病理组织无方向语义,随机翻转等效扩样 |
| 随机旋转 90°/180°/270° | ✅ 安全 | 同上;任意角度旋转需注意旋转后 mask 用最近邻 |
| Shift/crop(随机平移裁剪) | ✅ 安全 | 论文原始做法(“shift and crop data augmentation”),对 ROI 内边界过渡尤其有效 |
| H&E 色彩抖动(HSV/Lab 微扰) | ✅ 安全(小幅度) | 模拟染色批间差异;幅度过大会破坏染色-形态对应 |
| 随机缩放(0.8-1.25) | ✅ 安全 | 配合多尺度训练;mask 最近邻 |
| 直接 RGB 通道交换/强色彩反转 | ❌ 危险 | H&E 的红蓝对应嗜酸/嗜碱结构,色彩语义不可破坏 |
| 弹性形变(大幅度) | ❌ 危险 | 破坏腺体/血管等结构的形态学真实性,与临床判读逻辑冲突 |
| 灰度反转 / 负片 | ❌ 危险 | 病理图像无此物理对应 |
§6.7 模型推荐
| 模型 | 适用场景 | 相对特点 | 实现入口 |
|---|---|---|---|
| VGG16-FCN8 | 论文基线复现 | 官方提供训练好的 TensorFlow 权重,可直接对表 | 官方 README 下载链接 |
| U-Net(ResNet34/50 编码器) | 快速基线与教学 | 数 GB 数据即可收敛;社区复现最多 | segmentation_models_pytorch |
| DeepLabV3+/ResNet50 | 精度与边界质量 | 空洞卷积保留多尺度上下文 | torchvision / MMSegmentation |
| SegFormer-B2/B3 | 当前精度上限路线 | Transformer 编码器,对大 ROI 上下文友好 | Hugging Face transformers |
| nnU-Net(改 2D 配置) | 追求开箱即用 SOTA | 自动配置预处理与训练计划,需适配 22→5 类映射 | nnUNetv2 |
| 半监督/弱监督框架 | 仅少量标注扩展 | 与众包噪声标签研究衔接(§8.5 López-Pérez 2024) | CRowd_Seg 官方仓库 |
§6.8 硬件需求
| 场景 | GPU 显存 | 精度/批大小建议 | 说明 |
|---|---|---|---|
| 单 ROI 原生分辨率训练(裁剪 1,024²) | 8-11 GB | fp16,batch 4-8 | RTX 3060/Colab T4 即可 |
| 1,024² 输入 DeepLabV3+/ResNet50 | 11-16 GB | fp16,batch 8 | 兼顾速度与精度 |
| SegFormer-B3,1,024² | 16-24 GB | fp16/bf16,batch 4-8 | 建议梯度累积 |
| 全片滑窗推理 | 任意 ≥6 GB | 窗口 1,024²,重叠 25% | 显存需求低但 IO 密集 |
| CPU 仅预处理/光栅化 | 无 GPU | 多进程 workers | JSON 光栅化与色归一化可完全离线 |
§6.9 评估指标代码
<details>
<summary><strong>逐类 Dice / mIoU / 像素级 AUC 评估脚本(约 45 行)</strong></summary>
# ============ 5 类分割评估:忽略 don't care,逐类 Dice + mAUC ============
import numpy as np
import torch
NUM_CLASSES = 5
IGNORE = 255
def confusion_matrix(preds: torch.Tensor, targets: torch.Tensor) -> np.ndarray:
"""preds/targets: (N, H, W) long。忽略 IGNORE 像素。"""
valid = targets != IGNORE
p, t = preds[valid], targets[valid]
cm = np.bincount(t.cpu().numpy() * NUM_CLASSES + p.cpu().numpy(),
minlength=NUM_CLASSES ** 2)
return cm.reshape(NUM_CLASSES, NUM_CLASSES) # 行=真实,列=预测
def dice_from_cm(cm: np.ndarray) -> np.ndarray:
tp = np.diag(cm).astype(np.float64)
fp, fn = cm.sum(0) - tp, cm.sum(1) - tp
return 2 * tp / (2 * tp + fp + fn + 1e-9) # 逐类 Dice
def pixel_auc(scores: torch.Tensor, targets: torch.Tensor) -> float:
"""与论文口径对齐的像素级 AUC:对每类计算二分类 AUC 后取平均。
scores: (N, C, H, W) softmax 概率;targets 同 confusion_matrix。"""
from sklearn.metrics import roc_auc_score
valid = targets != IGNORE
t, s = targets[valid].cpu().numpy(), scores.permute(0, 2, 3, 1)[valid].cpu().numpy()
aucs = []
for c in range(NUM_CLASSES):
y = (t == c).astype(int)
if y.sum() == 0 or y.sum() == y.size:
continue # 该类全有/全无时跳过
aucs.append(roc_auc_score(y, s[:, c]))
return float(np.mean(aucs))
@torch.no_grad()
def evaluate(model, loader, device="cuda"):
model.eval()
cm = np.zeros((NUM_CLASSES, NUM_CLASSES), dtype=np.int64)
for imgs, masks in loader:
logits = model(imgs.to(device))["out"]
preds = logits.argmax(1).cpu()
for p, t in zip(preds, masks):
cm += confusion_matrix(p, t)
dices = dice_from_cm(cm)
print("逐类 Dice:", np.round(dices, 4))
print("mIoU:", round(np.trace(cm) / (cm.sum() + cm.trace() - 2 * np.diag(cm).sum() + 1e-9), 4))
print("macro Dice:", round(dices.mean(), 4))
</details>
§6.10 MLOps 笔记
- 数据版本化:官方仓库仍在演化(最后修订 2021-03),第三方镜像随时可能更新;用 DVC/Git LFS 记录文件哈希清单,实验配置绑定数据指纹(参考坑点 6)。
- 预处理确定性:Reinhard 参考统计必须固定为训练集常量并随模型 artifact 一起发布,推理端直接复用,避免"推理色域漂移"。
- 标签方案治理:22→5 类映射表(§6.3)应作为代码而非散落在 notebook 中;映射变更需触发回归评测。
- 监控:线上/新队列推理时监控色统计(Lab 均值/方差)偏移,作为染色漂移的前置告警(与 §7.6 呼应)。
- 可复现性:训练代码固定随机种子并记录
group-shuffle的分组键;评测脚本与口径声明(坑点 7)一起入库。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 亚型偏倚 | 151 例全部为 TNBC,不代表全部乳腺癌谱系(Luminal/HER2 型缺失) | 高 | 结果外推到非 TNBC 前必须做亚型外部验证 |
| 单 ROI 采样偏倚 | 每例仅 1 个代表性 ROI,肿瘤内异质性被低估 | 高 | 结合原始 WSI 自行扩展 ROI;报告"单 ROI 结论"的适用范围 |
| 罕见类稀疏与标注噪声 | 罕见/主观类像素极少且标注者分歧大(论文 discordance 分析) | 高 | 归并 5 类(坑点 3);罕见类指标单独谨慎解读 |
| 默认类偏倚 | stroma 由"无标注"定义,显式标注与默认填充的纯度不同 | 中 | 交叉抽样验证;对默认区降权(坑点 2 进阶方案) |
| 标注者地域构成 | 标注团队以埃及机构为主,判读风格可能带有机构倾向 | 中 | 与不同来源专家注释子集交叉校验 |
| 站点效应 | 训练/测试虽机构隔离,但仅 18 家机构、扫描协议异质 | 中 | 色归一化 + 报告按机构分层指标 |
§7.2 标注质量
BCSS 的标注质量是"公开透明"而非"完美无瑕"的典型。可确认的质量事实:tumor 与 stroma 两类标注者间分歧低(25 人两两 Dice 评估);主观类与罕见类分歧显著更高;资深者反馈与两轮审核将原始众包标注提升为可发布版本(论文称 “low discordance for tumor and stroma, and higher discordance for more subjectively defined or rare tissue classes”)。对使用者的含义:tumor/stroma 标签可当作强真值使用;lymphocytic_infiltrate 及更罕见类别的标签是"有噪声的银标准",在指标解读与损失设计时应显式处理(§6.5 坑点 3、7)。
§7.3 泛化性
| 部署场景 | 失效风险 | 证据/依据 |
|---|---|---|
| 非 TNBC 乳腺癌(Luminal/HER2) | 中-高:肿瘤形态与微环境构成不同 | 数据集全部为 TNBC(论文数据描述) |
| 非 TCGA 扫描仪/染色流程 | 中:色域偏移导致分割边界漂移 | TCGA 多机构扫描异质;论文使用 Reinhard 归一化应对 |
| 全片直接推理 | 中:模型只见过代表性 ROI,取景偏差未知 | ROI 由资深病理学家人工圈定 |
| 其他器官病理 | 高:类别语义(如 dcis、皮肤附属器)失去意义 | 类别定义绑定乳腺组织学 |
| 细胞级任务(核分裂、TIL 细胞计数) | 高:区域标注无细胞粒度 | 需转用 NuCLS 等细胞级数据集 |
§7.4 伦理
BCSS 图像来自 TCGA 公开队列,源数据经 TCGA 的去标识化流程(患者信息以 TCGA 条码表示,无直接标识符);数据以 CC0 1.0 公共领域许可发布,不包含受保护健康信息(PHI)。标注者为自愿参与的医学生/住院医师/病理学家,研究由 NIH 资助(NCI U24 CA194362)。使用建议:不得尝试通过图像与外部身份信息关联反推患者身份;基于 TCGA 条码关联临床数据时遵守 GDC 数据访问政策。
§7.5 公平性
数据集未披露按年龄、性别、种族分层的人群构成,无法直接评估跨人群公平性;TCGA 队列本身的人口学构成(以美国患者为主)决定了泛化人群边界。标注团队以埃及机构为主、参与机构遍布多国,为"标注视角多样性"提供了部分保证,但专家标注基准仍以少数资深者为准。建议:面向临床部署的衍生模型须在新人群(不同种族/地域/医疗层级)上重新校验性能差异。
§7.6 数据漂移
BCSS 静态冻结(2021-03 后无官方更新),漂移风险主要发生在使用端:其一,染色漂移——不同医院 H&E 试剂与扫描仪差异使输入色统计偏离训练分布,建议监控 Lab 通道统计并预置色归一化(§6.10);其二,扫描分辨率漂移——第三方 resize 版(224/512)与官方 0.25 MPP 混用会造成尺度不一致(坑点 6);其三,标注口径漂移——社区衍生版本若私自调整 5 类映射表,指标将不可比(坑点 7)。
§7.7 DAIMS 数据质量评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 影像+掩模成对组织,无宽表设计问题;元数据编码于文件名(有独立 JSON 注释) |
| 2 | 唯一标识 | ✅ | mask 文件名含 TCGA 条码 + ROI 坐标,可唯一索引;split("_")[0] 提供分组键 |
| 3 | 特殊字符 | ✅ | 文件名以 TCGA 条码规范构成;JSON/TSV 均为标准格式 |
| 4 | 重复行 | ✅ | 151 ROI 与 151 WSI 一一对应,无重复样本 |
| 5 | 缺失编码 | ⚠️ | 0(outside_roi)/7(exclude)/15(undetermined)为结构性编码,官方有 [CRITICAL] 警示但需使用者自行处理 |
| 6 | 标签标识 | ⚠️ | 22 类编码权威(gtruth_codes.tsv),但 0 值语义易被误读;无标签分布统计表 |
| 7 | 罕见类分组 | ❌ | 罕见类像素占比极低且无官方重分组/加权建议,仅论文示例 5 类分组 |
| 8 | 偏倚评估 | ✅ | 论文系统量化标注者间分歧(300 对 Dice、双聚类热图、MDS) |
| 9 | 数据字典 | ✅ | gtruth_codes.tsv + README 详细描述掩模语义与文件名编码 |
| 10 | 信息性缺失解释 | ✅ | don’t care 语义在官方 README 显式解释([CRITICAL] 段) |
| 11 | 设备记录 | ⚠️ | MPP/倍率可配置且文件名记录,但扫描仪型号未披露 |
| 12 | 共线性 | ✅ | 不适用(影像数据无表格特征共线性问题) |
| 13 | 编码映射 | ⚠️ | 官方 22 类定义清晰;社区 5 类映射无官方文件,各论文映射细节存在差异(如 dcis/angioinvasion 去向) |
| 14 | 时间戳处理 | ⚠️ | 切片扫描日期未披露;仅仓库提交历史可作时间锚点 |
| 15 | 划分建议 | ⚠️ | 论文有 82/43 机构隔离划分,但无机器可读划分文件,需自行实现 |
| 16 | 泄漏讨论 | ✅ | 论文划分即机构隔离设计;每例 1 ROI 使患者级泄漏在 ROI 级划分下天然不存在 |
| 17 | 标签分布 | ❌ | 未提供逐类像素分布统计,需使用者自行统计 |
| 18 | 测量偏倚 | ✅ | 标注者经验层级与 discordance 数据公开,可分析测量偏倚来源 |
| 19 | 外部验证建议 | ✅ | 绑定 TCGA 条码,可与 NuCLS/GDC 临床数据衔接做外部验证 |
| 20 | 版本记录 | ⚠️ | 无正式版本号;以仓库提交历史与许可表述变化为版本线索(早期 fork 曾标 CC BY 4.0) |
| 21 | 预处理脚本 | ✅ | 官方提供下载/光栅化脚本与训练好的模型权重(TensorFlow VGG16-FCN8) |
| 22 | 合规要求 | ✅ | CC0 1.0 公共领域,无注册/协议门槛;DUO 可视为 NRES |
| 23 | 多模态对齐 | ✅ | RGB 与 mask 逐像素对齐(同一 MPP 导出);JSON 坐标系在 README 说明 |
| 24 | 去标识化 | ✅ | TCGA 条码化去标识,无 PHI;CC0 许可发布 |
DAIMS 评分:17.5 / 24
评分解读:BCSS 在标识唯一性、标注偏倚透明度、去标识化与许可合规上表现优秀——这源于其学术出身(方法学论文 + NIH 资助)与 TCGA 队列的成熟治理。扣分集中在"标签工程"一侧:罕见类分组、逐类分布统计、官方 5 类映射文件、机器可读划分文件的缺失,把相当一部分"数据整理工作"转移给了使用者;这也是其掩模虽"开箱即用"、但直接 22 类训练几乎必然失败的根源。
对你意味着什么:第一,落地时间主要花在标签工程而非数据获取——把 §4.2 归并表与 §6.3 预处理脚本直接入库,可跳过最常见的三天摸索期;第二,任何 benchmark 报告必须同时写明"5 类映射表 + 忽略 outside_roi + per-slice 聚合"三要素,否则不可比;第三,若你的课题依赖罕见类(脉管侵犯、神经侵犯等),应评估其标注噪声是否可接受,或转向多标注者重标注策略;第四,商用与再分发无合规负担(CC0),学术引用 Amgad et al. 2019 即可。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| BCSS 测试切片(43 张,7 机构) | TCGA(机构隔离) | 5 类区域分割(VGG16-FCN8) | mean AUC 0.945 | 论文内部基线 | 机构隔离下仍达高 AUC,说明标注规模有效(Amgad et al. 2019) |
| U-Net(12,000+ 增强 patch) | City, University of London 等 | 5 类区域分割 | Tumor accuracy 0.804→0.913;Inflammatory 0.743→0.8364 | 优于论文基线口径的 accuracy | 色归一化 + 增强可显著提升主类精度(Ortega-Ruiz et al., medRxiv 2022 预印本,未经同行评审定稿) |
| TNBC 多标注者学生标注子集 | Universidad de Granada / Northwestern 等 | 众包分割学习 | Dice 0.7827(众包模型)vs 0.7039(STAPLE)vs 0.7723(专家监督) | 众包建模逼近专家监督 | 单一标注者网络即可建模标注者行为,验证 BCSS 众包范式可扩展(López-Pérez et al. 2024, CMIG) |
| VGG16 特征 + 众包标签分类 | Universidad de los Andes | 像素分类迁移 | 多标注者标签优于多数投票(学位论文级验证) | — | BCSS 标注者级结构可直接支撑噪声标签学习(Buitragox/Crowdsourcing-Thesis) |
注:除 Amgad et al. 2019 外,medRxiv 结果为预印本,学位论文结果未经同行评审;引用时注意标注证据等级。
§8 基准性能与生态
§8.1 排行榜
BCSS 没有官方持续维护的排行榜,以下为公开文献中的代表性结果。数值不可直接比较:各工作在 22 类 vs 5 类、忽略 outside_roi 与否、per-patch vs per-slice 聚合、输入分辨率与色归一化上口径不一(详见 §8.3)。
| 排名* | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | VGG16-FCN8(论文官方) | mean AUC 0.945(5 类,像素级) | 2019 | 结构化众包标注 + Reinhard 色归一化 + shift/crop 增强 | Amgad M, Elfandy H, Hussein H, et al., 2019, Bioinformatics 35(18):3461-3467. DOI: 10.1093/bioinformatics/btz083 | 官方权重(TF) |
| 2 | U-Net(系统调参) | Tumor accuracy 0.913 / Inflammatory 0.8364 | 2022 | 超参系统搜索(batch 8, Adam, 50 epochs) | Ortega-Ruiz M, et al., 2022, medRxiv 2022.08.17.22278889. DOI: 10.1101/2022.08.17.22278889(预印本) | github.com/mauOrtRuiz/Breast_Cancer_Sem_Seg |
| 3 | 分割网络 + 标注者网络(CRowd_Seg 家族) | Dice 0.7827(vs STAPLE 0.7039) | 2024 | 单一标注者网络建模众包噪声,全局特征注入 | López-Pérez M, Morales-Álvarez P, Cooper LAD, et al., 2024, Computerized Medical Imaging and Graphics. DOI: 10.1016/j.compmedimag.2024.102322** | github.com/wizmik12/CRowd_Seg |
* 排名按证据等级与口径可比性示意排列,非同一协议下的严格排序。
** 卷期页码以出版社页面为准,本表 DOI 依检索结果记录。
§8.2 SOTA 总结与选型建议
- 想要可比数字:复现论文官方口径(VGG16-FCN8、5 类、像素 AUC),用官方 TF 权重对表。
- 追求精度:SegFormer/DeepLabV3+ 在 5 类口径上通常优于 FCN 时代模型;但必须按 §8.3 口径自建测试并明确声明,不要与论文数字混排。
- 研究标注噪声:直接使用 annotations JSON 的标注者级结构(BCSS 独有优势),对齐 López-Pérez 2024 的协议。
- 受算力限制:Kaggle 224/512 版可做方法迭代,最终数字须回到官方 0.25 MPP 版确认(坑点 6)。
| 你的目标 | 推荐路线 | 关键配置 | 对标参照 |
|---|---|---|---|
| 复现论文基线 | VGG16-FCN8(TF) | 官方权重 + 5 类 + Reinhard | mean AUC 0.945 |
| 快速可运行基线 | U-Net/ResNet34 | 1,024² 输入、CrossEntropy(ignore_index=255) | Ortega-Ruiz 2022(预印本) |
| 冲击精度 | SegFormer-B2/B3 | 多尺度增强 + case 级 CV + per-slice 报告 | 自建协议(§8.3) |
| 众包噪声研究 | CRowd_Seg 家族 | annotations JSON + 标注者 ID 输入 | López-Pérez 2024 |
| 联合细胞级分析 | BCSS + NuCLS | 条码对齐、患者级去重 | Amgad 2022(GigaScience) |
§8.3 评测协议
一个可复现的 BCSS 评测协议应固定以下六要素:(1) 标签空间(22 类或明确列出映射表的 5 类);(2) 忽略集(outside_roi/undetermined/exclude 是否从损失与指标中剔除);(3) 划分(论文 82/43 机构隔离,或 case 级 GroupShuffleSplit,注明种子);(4) 分辨率与色归一化(0.25 MPP + Reinhard,参考统计量随实验发布);(5) 聚合口径(per-patch 与 per-slice 双报告 + 逐类 Dice/mIoU/像素 AUC);(6) 显著性(case 级 bootstrap 置信区间)。缺少任一要素的结果不建议纳入横向对比。
§8.4 相关数据集
| 数据集 | 关系 | 粒度差异 | 适用衔接 |
|---|---|---|---|
| NuCLS(2022, GigaScience) | 同团队、同平台(DSA)、同众包范式 | 细胞核分类/定位/分割(1,744 + 53 ROI) | 区域分割 → 细胞级精细化;TIL 联合分析 |
| TCGA-BRCA(GDC) | 图像上游来源 | 原始全切片 + 组学/临床 | 全片扩展、生存建模、分子关联 |
| BCSS Kaggle 重打包 | 非官方衍生 | 224/512 固定分辨率 | 教学与快速迭代(注意坑点 4/6) |
| CRowd_Seg 预处理子集 | 社区衍生 | npy 特征 + 多标注者标签 | 众包学习方法复现 |
§8.5 关键论文 Top 5
- Amgad M, Elfandy H, Hussein H, et al. Structured crowdsourcing enables convolutional segmentation of histology images. Bioinformatics, 2019, 35(18):3461-3467. DOI: 10.1093/bioinformatics/btz083 — BCSS 原始论文:提出结构化众包标注流程,151 张 WSI / 20,000+ 区域,VGG16-FCN8 mean AUC 0.945。
- Amgad M, Atteya LA, Hussein H, et al. NuCLS: A scalable crowdsourcing approach and dataset for nucleus classification and segmentation in breast cancer. GigaScience, 2022, 11:giac024. — 姊妹数据集:把同一众包范式推进到细胞核粒度,提供算法预标注对比协议。
- López-Pérez M, Morales-Álvarez P, et al. Learning from crowds for automated histopathological image segmentation. Computerized Medical Imaging and Graphics, 2024. — 在 TNBC 众包标注上提出可扩展标注者网络,Dice 0.7827 逼近专家监督。
- Gutman DA, Khalilia M, Lee S, et al. The Digital Slide Archive: A Software Platform for Management, Integration, and Analysis of Histology for Cancer Research. Cancer Research, 2017, 77(21):e75-e78. DOI: 10.1158/0008-5472.CAN-17-0629 — BCSS 标注所依托的 DSA 平台论文,理解标注工具链的必读文献。
- Ortega-Ruiz M, et al. Multiclass Semantic Segmentation of Immunostained Breast Cancer Tissue with a Deep-Learning Approach. medRxiv, 2022. DOI: 10.1101/2022.08.17.22278889 — U-Net 在 BCSS 上的系统调参报告(预印本),Tumor accuracy 0.804→0.913。
§8.6 社区活跃度
- 论文引用 277+(Semantic Scholar,截至 2026-09),横跨众包标注方法学、分割基准、TIL 定量与噪声标签学习多个方向;NuCLS 论文同为高被引(GigaScience 2022)。
- 官方 GitHub 仓库自 2021-03 定稿后无重大更新,Issues 数量少(数据集本身问题不多),但存在大量活跃 fork 与第三方镜像(Kaggle/Hugging Face/OpenDataLab 均有稳定镜像)。
- 无官方排行榜与常态化竞赛;Grand Challenge 主页保留可视化实例(Digital Slide Archive 公共部署,可在线浏览众包标注叠加层)。
- 社区内容以复现博客、教学 notebook 与 Kaggle notebook 为主,适合新手入门;遇到语义问题优先查官方 README 的 [CRITICAL] 段与论文补充材料。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star/热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| 官方下载仓库 | 数据+脚本 | github.com/CancerDataScience/CrowdsourcingDataset-Amgadetal2019 | 多镜像分发,社区 fork 活跃 | 唯一权威来源,含 gtruth_codes.tsv 与模型权重链接 |
| Grand Challenge 主页 | 官方页面 | bcsegmentation.grand-challenge.org | 论文标准入口 | 在线可视化标注叠加层,理解标注形态的最快途径 |
| Kaggle 重打包版 | 非官方镜像 | kaggle.com/datasets/whats2000/breast-cancer-semantic-segmentation-bcss | Kaggle 检索 BCSS 首选结果之一 | 免下载即用,适合教学(分辨率注意坑点 4) |
| Hugging Face 镜像 | 非官方镜像 | huggingface.co/datasets/MedOtter/BCSS | HF 数据卡完整(含 22 类表) | 与 HF 生态(datasets 库)衔接顺畅 |
| healthml/active-segmentation | 社区代码 | github.com/healthml/active-segmentation | 主动学习研究项目 | BCSSDataset 参考实现(case/机构解析、缓存) |
| CRowd_Seg | 社区代码 | github.com/wizmik12/CRowd_Seg | CMIG 2024 论文官方实现 | 众包分割方法复现入口 |
| Digital Slide Archive | 平台 | digital-slide-archive 相关官方文档 | Kitware/Emory 维护 | 理解标注平台与 REST API 导出机制 |
§9 相关资源与引用
§9.1 官方资源
| 资源 | 说明 | 链接 |
|---|---|---|
| Grand Challenge 项目主页 | 数据集介绍、在线可视化、论文与团队联系入口 | http://bcsegmentation.grand-challenge.org/ |
| 官方 GitHub 仓库 | 下载脚本、gtruth_codes.tsv、README(含 [CRITICAL] 掩模语义说明) | https://github.com/CancerDataScience/CrowdsourcingDataset-Amgadetal2019 |
| Digital Slide Archive 可视化实例 | 在线浏览 151 个 ROI 的众包标注叠加层 | 论文与主页给出的 goo.gl 短链(goo.gl/cNM4EL) |
| 原始论文(OA) | Bioinformatics 35(18):3461-3467,开放获取 | https://doi.org/10.1093/bioinformatics/btz083 |
| PubMed / PMC | PMID 30726865;PMC6748796(全文) | https://pubmed.ncbi.nlm.nih.gov/30726865/ |
| NuCLS 数据集 | 同团队细胞核粒度姊妹数据集 | https://nucls.grand-challenge.org/NuCLS/ |
| TCGA-BRCA(GDC) | 上游队列:原始 WSI、临床与组学数据 | https://portal.gdc.cancer.gov/projects/TCGA-BRCA |
| Kaggle 镜像 | 224/512 固定分辨率重打包(非官方) | https://www.kaggle.com/datasets/whats2000/breast-cancer-semantic-segmentation-bcss |
| Hugging Face 镜像 | parquet 重建镜像(非官方,4.91 GB) | https://huggingface.co/datasets/MedOtter/BCSS |
§9.2 BibTeX 引用
@article{amgad2019structured,
title = {Structured crowdsourcing enables convolutional segmentation of histology images},
author = {Amgad, Mohamed and Elfandy, Habiba and Hussein, Hagar and Atteya, Lamees A. and Elsebaie, Mai A. T. and Abo Elnasr, Lamia S. and Sakr, Rokia A. and Salem, Hazem S. E. and Ismail, Ahmed F. and Saad, Anas M. and Ahmed, Joumana and Elsebaie, Maha A. T. and Rahman, Mustafijur and Ruhban, Inas A. and Elgazar, Nada M. and Alagha, Yahya and Osman, Mohamed H. and Alhusseiny, Ahmed M. and Khalaf, Mariam M. and Younes, Abo-Alela F. and Abdulkarim, Ali and Younes, Duaa M. and Gadallah, Ahmed M. and Elkashash, Ahmad M. and Fala, Salma Y. and Zaki, Basma M. and Beezley, Jonathan and Chittajallu, Deepak R. and Manthey, David and Gutman, David A. and Cooper, Lee A. D.},
journal = {Bioinformatics},
volume = {35},
number = {18},
pages = {3461--3467},
year = {2019},
doi = {10.1093/bioinformatics/btz083}
}
@article{amgad2022nucls,
title = {NuCLS: A scalable crowdsourcing approach and dataset for nucleus classification and segmentation in breast cancer},
author = {Amgad, Mohamed and Atteya, Lamees A. and Hussein, Hagar and Mohammed, Kareem Hosny and Hafiz, Ehab and Elsebaie, Maha A. T. and others},
journal = {GigaScience},
volume = {11},
pages = {giac024},
year = {2022},
doi = {10.1093/gigascience/giac024}
}
@article{gutman2017dsa,
title = {The Digital Slide Archive: A Software Platform for Management, Integration, and Analysis of Histology for Cancer Research},
author = {Gutman, David A. and Khalilia, Mohammed and Lee, Sanghoon and others},
journal = {Cancer Research},
volume = {77},
number = {21},
pages = {e75--e78},
year = {2017},
doi = {10.1158/0008-5472.CAN-17-0629}
}
§9.3 引用指南
- 使用数据集:引用 Amgad et al. 2019(第一个 BibTeX 条目);若在线浏览或使用 DSA 标注工具链,同时引用 Gutman et al. 2017。
- 引用本页面:千方病案医数集编者. BCSS(乳腺癌语义分割)AI-Ready Wikipedia. qianfanghub.com,2026。
- 引用数字的时效:本页面所有动态数字(引用数、镜像大小、社区热度)均标注"截至"日期;转引时请核对原始来源的最新值。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 模型 | 用途 | 参与范围 |
|---|---|---|
| 大语言模型(CodeBuddy) | 初稿生成与结构化 | §1-§10 初稿、代码示例、JSON-LD 构建 |
| WebSearch 检索代理 | 事实核验 | 6 组检索:官方主页、论文出处与引用数、许可与下载、基准结果、社区坑点、版本历史 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从 Grand Challenge 主页、官方 GitHub README、Bioinformatics 原始论文摘要与正文公开版本、Hugging Face/Kaggle 数据卡、Semantic Scholar 引用记录中整理结构化信息;(2) 生成 §6 的 Python/bash 代码示例与 8 个坑点的解决方案框架;(3) 构建 §4.1 DAIMS 数据字典与 §7.7 DAIMS 评估表;(4) 执行中英文排版规范与 G3 纯净度自检;(5) 构建 §C JSON-LD @graph。所有规模数字、日期与许可信息均以检索到的原始来源为准,未经来源支持的数字一律省略。
§10.3 输入来源
- Amgad M, Elfandy H, Hussein H, et al. (2019), Bioinformatics 35(18):3461-3467 — BCSS 原始论文(DOI: 10.1093/bioinformatics/btz083;PMID 30726865;PMC6748796)
- Breast Cancer Semantic Segmentation 官方主页(bcsegmentation.grand-challenge.org)
- 官方 GitHub 仓库 README(CancerDataScience/CrowdsourcingDataset-Amgadetal2019,即 PathologyDataScience/BCSS)
- Hugging Face 数据卡 MedOtter/BCSS(22 类编码表、4.91 GB、patient_id 分组建议)
- healthml/active-segmentation 的 BCSSDataset 源码(case ID/机构解析、22 类注释)
- Kaggle 数据卡 whats2000/breast-cancer-semantic-segmentation-bcss(224/512 重打包,2023-12-30)
- Semantic Scholar 论文页(引用数 277 快照,截至 2026-09)
- Weill Cornell VIVO 出版记录(Scopus global citation frequency 278、PMID/PMC/Scopus ID)
- questionsmedicales.fr 论文镜像页(收稿/修回/接收/刊出日期、NIH 资助号 U24 CA194362)
- SciXplorer 摘要页(卷期页码 35(18):3461-3467、作者全表)
- 万方数据知识服务平台镜像页(作者机构全表、被引记录)
- Ortega-Ruiz et al. (2022), medRxiv 2022.08.17.22278889(U-Net 基准,预印本)
- López-Pérez et al. (2024), Computerized Medical Imaging and Graphics(CRowd_Seg,Dice 0.7827)
- IJCV 论文两篇对 BCSS 的使用描述(8,741 patch 划分;22→5 类 common practice 表述)
- junqiangchen/CrowdsourcingDataset-Amgadetal2019 fork 页面(upstream 2021-03-09 提交历史、wsis 下载脚本)
- 早期 fork xiaochengcike/BCSS(README 曾标 CC BY 4.0,与现行 CC0 1.0 对照)
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(ICD-11 映射、TNBC 流行病学、金标准) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §3 数据集规格(样本数、格式、许可、下载流程) | 千方病案医学编辑部 | 与官方 README 及论文摘要交叉比对 | ✅ 已验证 |
| §4 数据结构(22 类编码、目录树、DAIMS 字段字典) | 千方病案医学编辑部 | 与 meta/gtruth_codes.tsv 及官方 README 交叉比对 | ✅ 已验证 |
| §5 数据划分策略与泄漏风险 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §6 代码示例与 8 个坑点 | 千方病案医学编辑部 | 逻辑审查 + 与官方 README/论文方法部分比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与 Semantic Scholar 快照及原始论文比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.1 排行榜与生态快照、§C JSON-LD。
§10.6 最后审核
最后一次人工审核日期:2026-09-05
页面状态:published(全部内容已完成审核并发布)
