信息速览

CoNSeP — 结直肠癌核实例分割基准 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | CoNSeP(结直肠核分割与表型数据集) |
| 英文全称 | Colorectal Nuclear Segmentation and Phenotypes |
| 别名/简称 | HoVer-Net 配套数据集;consep_dataset;CoNSeP |
| 疾病分类 | ICD-11 2B92(结直肠癌) |
| SNOMED CT | 363406005(Malignant tumour of colon) |
| 数据模态 | 病理 H&E 全切片图像瓦片(40×,0.25 μm/px) |
| AI 任务类型 | 细胞核实例分割 + 核型分类(7 类) |
| 样本总数 | 41 张 1,000×1,000 瓦片;24,319 个标注细胞核(来源) |
| 数据大小 | 官方 ZIP 约 146 MB;OpenDataLab 镜像显示约 289.2 MB |
| 数据格式 | PNG 图像 + MAT 标注(inst_map / inst_type / inst_centroid) |
| 许可证 | 官方未随数据附正式许可证文本(第三方托管标注 Apache 2.0) |
| 访问级别 | 开放(官方直链直接下载,无需注册) |
| DUO 标签 | NRES(无限制;数据直接开放下载,未附带受控访问协议) |
| 语言 | 英文(README 说明文档与论文) |
| 首发日期 | 2018-12(arXiv 预印本随附承诺发布) |
| 最后更新 | 2019-12(Medical Image Analysis 正式出版版) |
| 发布机构 | 华威大学 TIA 实验室 / 考文垂及沃里克郡大学医院(UHCW) |
| 官方主页 | https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/ |
| 下载地址 | https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/consep_dataset.zip |
| DOI | 10.1016/j.media.2019.101563 |
| 引用次数 | 1,475+(Google Scholar,arXiv 条目,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方 27/14 划分与全流程训练评测脚本齐全;扣分项:无官方验证集、MAT 需自行转码、官方未发布逐类统计 |
| 页面状态 | published |
§0 E-E-A-T 审核与免责声明
- 医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(结直肠癌流行病学与 ICD-11 / SNOMED CT 映射)、§7 偏倚分析。
- 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CoNSeP 通过华威大学官方页面开放直链下载,未设置注册、凭证或数据使用协议(DUA)门槛,官方亦未随数据附正式许可证文本;第三方托管方 kaiko-ai/eva 标注 Apache 2.0,MONAI 官方教程明确提示「每位使用者应自行核查数据内容与适用许可证」。使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? CoNSeP(Colorectal Nuclear Segmentation and Phenotypes,结直肠核分割与表型数据集)是一套来自英国华威大学的结直肠腺癌病理图像数据集。它包含 41 张 1,000×1,000 像素、40× 放大的 H&E 染色组织瓦片,全部取自 16 位结直肠腺癌患者的全切片(原始论文)。图中的每一个细胞核都被逐个描边并标注了 7 类核型中的一种,总共 24,319 个细胞核。
为什么重要? 在数字病理中,「看清每一个细胞核并判断它是什么细胞」是量化肿瘤微环境的基础一步,但细胞核经常挤在一起、边界模糊。CoNSeP 是最早提供像素级实例分割 + 表型分类双标注的结直肠癌数据集之一,也是 HoVer-Net(引用 1,475+,Google Scholar,截至 2026-09)等经典方法的诞生地,至今仍是核分割新方法的标准试金石。
我能用它做什么? 你可以用它训练和评测「分割 + 分类」一体的核实例分割模型、研究拥挤核的分离策略、做结直肠肿瘤微环境的细胞组成分析,或为病理基础模型微调解码头。它开放直链下载(ZIP 约 146 MB),单卡即可开展实验,非常适合作为算法对比与教学的标准基准。
§1.1 技术摘要
CoNSeP 由华威大学 Tissue Image Analytics(TIA)实验室联合考文垂及沃里克郡大学医院(UHCW)病理科构建:从 16 例结直肠腺癌(CRA)全切片图像(WSI)中裁取 41 张 1,000×1,000 像素、40× 物镜放大(0.25 μm/px)的 H&E 瓦片,扫描设备为 Omnyx VL120(HoVer-Net 论文)。每张瓦片内的全部细胞核由两位病理专家之一进行像素级穷尽式标注,标注完成后双人交叉复审,共得到 24,319 个带 7 类核型标签的实例(ScienceDirect 论文页)。官方按 tile 级划分 27 张训练 / 14 张测试,不设验证集。标注以 MATLAB .mat 文件分发(实例掩码、逐实例类别与质心),图像为 PNG。该数据集随 HoVer-Net 论文(Medical Image Analysis,2019 年 12 月,DOI 10.1016/j.media.2019.101563)发布,配套官方训练、推理与评测代码(GitHub 仓库),是核实例分割 + 分类联合任务最常用的基准之一。
§1.2 战略价值
维度一:任务难度与标注质量的双重标杆。 CoNSeP 官方明确选择单一癌种(结直肠腺癌),以呈现同一种癌症内部真实的组织异质性——基质、腺体、肌肉、胶原、脂肪与肿瘤区域并存,且刻意纳入大量显著重叠、边界不清的细胞核与墨迹等伪影(论文 §V-A)。相比从多癌种拼接少量视野的数据集,它在「同域高难度样本」维度上更具挑战性:2026 年 3 月聚合榜上,最优方法的 AJI 也仅 58.2%(sota2 榜单),说明该基准至今仍有充足改进空间,适合作为方法创新的试金石。
维度二:生态位承上启下。 CoNSeP 向前承接 MoNuSeg(Kumar 等的多器官分割挑战)与 CPM 系列竞赛数据,向后衍生出 Lizard(约 50 万核、6 类,ICCV Workshops 2021)与 CoNIC 2022 挑战(Graham 学者主页)。其 7 类核型体系(尤其是区分正常上皮与恶性/异型增生上皮)是 PanNuke、Lizard 等后续数据集类别设计的直接参照;NVIDIA MONAI 官方亦基于它发布 NuClick、核分类与核分割分类三个预训练模型包(NVIDIA NGC),工程生态成熟。
维度三:小团队与教学场景的高性价比。 ZIP 约 146 MB 的体积、单张消费级 GPU 即可训练的规模、以及官方开源的全流程脚本,使 CoNSeP 成为数字病理方向课程作业、算法原型验证与工程管线教学的事实标准素材。对资源有限的研究组而言,它提供了「一天内走通分割-分类-评测全链路」的最短路径,而这一路径的每一步(patch 裁剪、类别映射、AJI/PQ 评测)都有官方参考实现可对照,显著降低了新手误入评测歧途的概率。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注类型 | 与 CoNSeP 的差异化 |
|---|---|---|---|---|
| CoNSeP(本篇) | 41 张瓦片 / 24,319 核 | 结直肠腺癌 H&E,40× | 像素级实例 + 7 类核型 | 单癌种高难度同域基准;实例+分类双标注先驱 |
| MoNuSeg(Kumar) | 30 张 1,000×1,000 / 21,623 核 | 8 种癌器官 H&E,40× | 像素级实例分割(无类别) | 多器官泛化评测首选,不含核型分类(论文表 II) |
| PanNuke(Gamper 等) | 约 7,901 张 256×256 / 约 20 万核 | 19 种组织类型 | 半自动实例 + 5 类核型 | 规模大、类别粗、含大量弱标注,适合预训练(arXiv:2003.10778) |
| Lizard(Graham 等) | 约 50 万核 / 233 张 WSI 衍生瓦片 | 结肠 H&E,20×/40× | 像素级实例 + 6 类核型 | CoNSeP 的规模化后继,含跨中心数据(ICCV Workshops 2021) |
| MoNuSAC2020(Verma 等) | 多器官多扫描仪 | H&E 多倍率 | 实例 + 4 类核型 | 强调跨器官、跨倍率泛化(IEEE TMI 40(12):3413-3423, 2021) |
| CRCHistoPhenotypes | 50 张 500×500 / 4,056 核 | 结直肠 H&E,20× | 点标注 + 4 类核型 | 弱监督(点标注)路线代表(论文表 II) |
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2018-12-16 | arXiv v1(arXiv:1812.06499) | HoVer-Net 预印本上线,宣布数据集将随论文录用发布 |
| 2019-09/11 | arXiv v4/v5 更新 | 补充实验与数据集细节(arXiv 记录) |
| 2019-12 | Medical Image Analysis Vol 58, 101563 正式出版 | 数据集与官方代码同步开放(DOI 10.1016/j.media.2019.101563) |
| 2020-2022 | PyTorch 复现与 MONAI 生态接入 | 官方 PyTorch 版、MONAI 教程与预训练模型包发布 |
| 2023-2026 | 持续作为基准 | SONNET、CellViT、APSeg、NuNext 等持续刷新榜单;官方数据链接一度不可用,社区依赖 OpenDataLab 等镜像 |
§1.5 典型应用场景
- 核实例分割算法研发与对比:在统一 27/14 划分上复现并对比 HoVer-Net、StarDist、CellViT 等方法,AJI/PQ/Dice 全指标报告。
- 分割 + 分类联合建模:利用 7 类核型标签研究多分支网络与联合损失,输出逐核表型。
- 结直肠肿瘤微环境定量:将逐核表型聚合为细胞组成特征,用于肿瘤分级、预后标志物研究的原型验证。
- 病理基础模型评测与解码头微调:以 ViT/SAM 编码器(CellViT 系)在 CoNSeP 上微调解码头,检验基础模型对密集实例分割的迁移能力。
- 教学与工程训练:数据量小(ZIP 约 146 MB)、单卡可跑,是数字病理课程与 pipelines 工程化教学的高性价比素材。
§2 医学背景
§2.1 ICD-11 编码映射
CoNSeP 的来源疾病为结直肠腺癌(colorectal adenocarcinoma,CRA),是结直肠癌最主要的组织学类型。官方材料未提供疾病编码,下表为编辑部依据 WHO ICD-11 MMS 术语体系整理。
| 概念 | ICD-11 编码 | ICD-11 中文名称 |
|---|---|---|
| 数据来源疾病:结直肠癌 | 2B92 | 结直肠癌 |
| 主要组织学类型:腺癌 | 归属于 2B92 结直肠癌之下的腺癌组织学亚型 | 结直肠癌(腺癌亚型) |
| 相关章节:消化系统恶性肿瘤 | 2A00-2F9Z | 消化系统恶性肿瘤 |
说明:ICD-11 对结直肠癌的组织学细分通过形态学编码(Morphology)配合肿瘤学编码使用;本数据集不携带患者级诊断编码,上表仅用于帮助 AI 工程师理解数据来源疾病的术语定位。
§2.1b SNOMED CT 映射
| 术语 | SNOMED CT 编码 | 概念说明 |
|---|---|---|
| Malignant tumour of colon(结肠恶性肿瘤) | 363406005 | 数据来源疾病的临床疾病概念 |
| Adenocarcinoma of colon(结肠腺癌) | 719395000 | 主要组织学类型 |
| Colon structure(结肠结构) | 302548006 | 标本来源解剖部位 |
| Cell nucleus(细胞核) | 87064002 | 标注对象(核实例)的结构概念 |
§2.2 疾病简介与流行病学
结直肠癌(colorectal cancer,CRC)是全球最常见的恶性肿瘤之一:根据 IARC 的 GLOBOCAN 2022 估计,全球新发病例约 190 万、死亡约 90 万,发病率居所有恶性肿瘤第三位(GLOBOCAN 2022)。腺癌是最主要的组织学类型,其诊断与分级高度依赖常规 H&E 切片中细胞与细胞核的形态学评估——核异型性、核分裂象与肿瘤细胞密度都是分级与鉴别诊断的核心线索。
从病理形态学角度看,结直肠 H&E 切片中可辨认的核类型正是 CoNSeP 的 7 类标注体系所对应的对象:恶性/异型增生上皮核(体积大、染色质深染、核膜不规则)、正常上皮核(排列规则的腺管上皮)、炎性核(小而圆、染色质致密的淋巴细胞与浆细胞等)、成纤维细胞核(细长梭形,散布于间质)、平滑肌核(更长的杆状,成束排列)、内皮核(衬附血管腔的扁平核)以及难以归类的其他核(坏死碎屑、核分裂象、退变核等)。在肿瘤微环境层面,这些核的数量与空间分布共同构成「肿瘤-间质」定量分析的基础。这正是 CoNSeP 把核实例与 7 类核型同时作为标注对象的原因:让算法能够把一张 H&E 图像还原为可统计的细胞级图谱。
§2.3 临床任务定义
CoNSeP 支持的 AI 任务在临床工作流中的定位如下:
- 诊断辅助(形态定量):核实例分割把组织图像分解为逐核对象,是核异型性自动量化(大小、形状、染色质纹理)的前提。在常规病理报告中,核级评估依赖病理医生的主观判读;逐核定量特征为分级一致性研究提供了客观化基础。
- 分级相关研究:恶性/异型增生上皮核(类 4)与正常上皮核(类 3)的显式区分,为腺管结构异常与核级定量提供直接素材。类 4 与类 3 的比例、空间混布程度等特征,是肿瘤异质性研究中的高频候选变量。
- 肿瘤微环境分析(预后相关):统计 7 类核的组成与空间共定位(如肿瘤上皮与成纤维细胞的空间关系),支撑 TME 特征与预后关联的研究假设生成。在结直肠癌中,肿瘤出芽与间质反应已被证明与预后相关,逐核定量是这类特征的自动化前提。
- 筛查/科研流水线组件:作为 WSI 分析流水线中的核级前端模块,向下游特征提取与弱监督预测器输送细胞图谱。HoVer-Net 流水线已被应用于炎症性肠病活动性评估等下游临床研究(见 §2.5)。
需要注意:CoNSeP 是科研基准而非临床验证数据,任何诊断用途都需要在独立外部队列上完成临床验证。
§2.4 患者人群
| 属性 | 描述 |
|---|---|
| 来源机构 | University Hospitals Coventry and Warwickshire(UHCW)病理科,英国考文垂(论文) |
| 疾病 | 结直肠腺癌(CRA),单一癌种 |
| 患者数 | 16 例,每例 WSI 来自一名独立患者 |
| 样本形式 | 41 张 1,000×1,000 瓦片(40×,0.25 μm/px),取自 16 张 WSI |
| 扫描设备 | Omnyx VL120 全切片扫描仪 |
| 组织构成 | 基质、腺体、肌肉、胶原、脂肪与肿瘤区域并存;含墨迹等伪影 |
| 采集时间 | 官方未公开 |
| 人口学细节(年龄/性别/种族) | 官方未公开 |
§2.5 临床价值
CoNSeP 的临床价值体现在三个层面。第一,可复现的核级定量:7 类核型覆盖了结直肠 H&E 中绝大多数可见核类型(含恶性与正常上皮的区分),使「细胞组成比例」这类潜在预后特征可以在统一口径下计算。第二,算法临床转化的中间跳板:在 CoNSeP 上验证的分割-分类架构(HoVer-Net 系)已被用于炎症性肠病活动性评估、核分裂定量等后续临床研究流程(如 American Journal of Pathology 2025 的 IBD 研究即采用 HoVer-Net 流水线做细胞组成分析),说明该基准训练出的技术路线可迁移至真实临床问题。第三,标注协议的示范意义:两位专家分别标注、双人交叉复审的穷尽式标注协议,为后续 Lizard、CoNIC 等更大规模数据集提供了质量范式。
对临床研究者的额外提示:CoNSeP 的瓦片经过人工挑选以覆盖多样的组织成分与拥挤核场景,因此由它估计的「每核平均面积」「类别占比」等绝对量不能直接当作结直肠癌人群的流行病学参数使用;正确用法是在同一批样本内做相对比较(组间差异、模型排序),人群级推断需要队列级的全切片采样设计。
§2.6 金标准标注体系
| 维度 | 做法 |
|---|---|
| 标注范围 | 瓦片内全部细胞核穷尽式标注(24,319 个实例,逐像素轮廓) |
| 标注方式 | 像素级实例分割掩码 + 逐实例 7 类核型标签 |
| 标注者 | 两位病理专家(A.A. 与 Y-W.T.)分别承担不同瓦片 |
| 质控 | 每张标注样本由两位病理专家交叉复审(论文 §V-A) |
| 性质 | 人工穷尽式标注,可作为核实例分割与分类的金标准 |
| 类别体系 | 1=其他(Miscellaneous)、2=炎性、3=正常上皮、4=恶性/异型增生上皮、5=成纤维细胞、6=肌肉、7=内皮(NVIDIA NGC 文档) |
7 类核型的形态学定义与在肿瘤微环境中的角色(依据论文描述与病理常识整理,供工程侧理解标签语义):
| 类别值 | 英文名 | 中文名 | 形态学线索 | TME 角色 |
|---|---|---|---|---|
| 1 | Miscellaneous | 其他/杂类 | 坏死核、核分裂象、退变核等难归类对象 | 兜底类;论文指出样本少且变异大 |
| 2 | Inflammatory | 炎性细胞核 | 小而圆、染色质致密(淋巴细胞、浆细胞等) | 免疫浸润定量对象 |
| 3 | Healthy/normal epithelial | 正常上皮核 | 腺管排列规则、核大小均一 | 良性对照结构与癌旁定量 |
| 4 | Dysplastic/malignant epithelial | 恶性/异型增生上皮核 | 大、深染、核膜不规则、多形性 | 肿瘤细胞主体,核级量化核心对象 |
| 5 | Fibroblast | 成纤维细胞核 | 细长梭形,间质散在 | 间质反应/肿瘤-间质比特征 |
| 6 | Muscle | 肌肉核 | 杆状,成束平行排列 | 肌层侵犯界定辅助 |
| 7 | Endothelial | 内皮核 | 扁平,衬附血管腔 | 微血管密度相关特征 |
§3 数据集规格
§3.0 版本抉择矩阵
CoNSeP 官方只有一个论文随附版本,但获取渠道与派生形态多样。没有官方多版本演进记录,因此不存在「新旧版本选择」问题,真正需要选择的是获取渠道:
| 你的需求 | 推荐渠道 | 体积 | 理由 |
|---|---|---|---|
| 复现 HoVer-Net 论文基准 | 华威官方直链 ZIP | 约 146 MB | 与论文完全一致的原始 41 瓦片与 .mat 标注 |
| 中国大陆境内快速获取 | OpenDataLab/OpenXLab 镜像 | 约 289.2 MB | 官方链接境外访问不稳或失效时的替代(镜像页) |
| 开箱即用的预训练模型 | NVIDIA NGC MONAI 模型包 | 模型另计 | 提供 NuClick、核分类、核分割分类三个基于 CoNSeP 的 bundle(NGC) |
| 大规模预训练/多类扩展 | 转用 Lizard 或 PanNuke | 更大 | CoNSeP 规模小,扩展需求应使用后继数据集 |
§3.1 模态详情
- 成像对象:结直肠腺癌手术标本的 FFPE H&E 染色切片。
- 数字化方式:Omnyx VL120 全切片扫描仪,40× 物镜放大,空间分辨率 0.25 μm/px(kaiko-ai/eva 数据页)。
- 数据形态:以 1,000×1,000 像素瓦片(tile)为单位发布,而非整张 WSI;共 41 张,源自 16 张患者级 WSI。每张瓦片对应约 250 μm × 250 μm 的组织区域,在 40× 下通常包含数百个细胞核。
- 标注模态:像素级实例分割掩码(逐核轮廓)+ 逐实例类别标签,以 MATLAB
.mat文件与 PNG 图像配对分发。 - 可选派生:官方与 MONAI 流水线均将瓦片进一步滑窗裁剪为 patch(如 256×256、相邻重叠约 128 px,共得约 2,009 个 patch,NGC);HoVer-Net 论文的 original 模式则使用 270×270 输入 / 80×80 输出的训练口径(仓库 README)。
- 瓦片选取策略:论文明确说明 41 张瓦片经过人工挑选,以覆盖基质、腺体、肌肉、胶原、脂肪与肿瘤多种组织成分,并刻意纳入大量显著重叠、边界不清的核与墨迹等伪影——这意味着瓦片分布不等同于常规 WSI 的均匀采样分布(论文 §V-A)。
§3.2 子集与样本数
| 子集 | 瓦片数 | 文件编号 | 用途 |
|---|---|---|---|
| Train | 27 | train_1 – train_27 | 训练(官方无验证子集) |
| Test | 14 | test_1 – test_14 | 测试/基准评测(issue #29 清单) |
| 合计 | 41 | — | 24,319 个标注核全量分布在这 41 张瓦片内 |
§3.3 数据格式
| 内容 | 格式 | 说明 |
|---|---|---|
| 图像 | PNG(1,000×1,000×3,RGB) | train_N.png / test_N.png |
| 实例掩码与类别 | MATLAB v7 .mat |
至少含 inst_map、inst_type、inst_centroid 键(仓库 README) |
| 可视化叠加 | PNG(Overlay 目录) | 带核轮廓/边界框的可视化,仅供人工检查 |
| 说明文档 | README.txt | 数据描述与类别定义 |
| 交付打包 | ZIP | consep_dataset.zip |
§3.4 存储大小
官方 ZIP 包约 146 MB(MONAI 教程下载日志);OpenDataLab/OpenXLab 镜像页面标注约 289.2 MB(OpenXLab),差异主要来自镜像打包方式与是否包含 Overlay 可视化。解压后训练实验的峰值磁盘占用(含 patch 缓存)建议预留 2 GB 以上。
§3.5 标注方式
人工像素级穷尽式标注:每张瓦片内的每一个细胞核均以像素级轮廓勾画,并赋予 7 类核型之一。这是「逐像素、逐实例、逐类别」的最高强度标注(区别于点标注与半自动弱标注),可直接支撑实例分割、语义分割与计数三类监督信号的生成。总标注量 24,319 个实例(论文 Highlights)。
与点标注数据集(如 CRCHistoPhenotypes)相比,穷尽式像素标注带来三点实质差异:其一,分割监督信号完整,无需从点标签弱监督重建实例;其二,实例边界明确,AJI/PQ 等边界敏感指标的计算有可靠依据;其三,标注成本高企决定了规模上限(41 张瓦片即为此权衡的结果),这也是它常被用作「高质量小数据基准」而 PanNuke/Lizard 走「大规模弱/半自动」路线的根本原因。
§3.6 标注者资质与一致性
- 资质:两位具有资质的病理专家 A.A. 与 Y-W.T.(均为 HoVer-Net 论文作者)。
- 分工:每张瓦片由其中一位完成全部标注。
- 质控:标注完成后由两位专家交叉复审每张样本(论文)。
- 一致性量化:官方未公布 per-annotator 一致性系数(如 kappa 或 AJI 交叉评分),引用时应说明这一点。
§3.7 采集周期
官方论文与数据页均未公开切片扫描与标注的具体起止时间。数据集首次随 2018-12 arXiv 预印本公布、2019-12 正式发布。涉及「采集周期」的引用建议写为「官方未公开」。
§3.8 地域覆盖
单一地域:英国考文垂,UHCW 病理科。全部 16 例患者、41 张瓦片均来自该中心同一台 Omnyx VL120 扫描仪,构成典型的单中心、单扫描仪数据集(论文)。
§3.9 设备与成像规格
| 项目 | 规格 |
|---|---|
| 扫描仪 | Omnyx VL120 |
| 放大倍率 | 40× 物镜 |
| 空间分辨率 | 0.25 μm/px |
| 瓦片尺寸 | 1,000×1,000 像素(约 250 μm × 250 μm 组织区域) |
| 染色 | H&E |
| 标本类型 | 结直肠腺癌 FFPE 切片 |
§3.10 深度溯源链
完整溯源链为:结直肠腺癌患者手术标本(UHCW,16 例)→ 病理科 FFPE H&E 切片制作 → Omnyx VL120 全切片扫描(40×)→ 研究者从 16 张 WSI 中选取组织形态多样的 41 个 1,000×1,000 区域(刻意覆盖基质/腺体/肌肉/胶原/脂肪/肿瘤并纳入墨迹伪影与重叠核)→ 两位病理专家像素级穷尽式标注 + 双人交叉复审 → 2019-12 随 Medical Image Analysis 论文发布(DOI 10.1016/j.media.2019.101563)→ 官方 TIA 数据页与 GitHub 仓库托管。衍生分发渠道包括 NVIDIA NGC MONAI 模型包、OpenDataLab/OpenXLab 镜像与 kaiko-ai/eva 等框架数据加载器。
§4 数据结构
§4.0 目录树
解压 consep_dataset.zip 后的标准目录结构如下(kaiko-ai/eva 描述):
consep/
├── Train/
│ ├── Images/ # train_1.png ... train_27.png(1,000×1,000 H&E)
│ ├── Labels/ # train_1.mat ... train_27.mat(实例掩码+类别+质心)
│ └── Overlay/ # train_*.png 叠加可视化(核轮廓/边界框)
├── Test/
│ ├── Images/ # test_1.png ... test_14.png
│ ├── Labels/ # test_1.mat ... test_14.mat
│ └── Overlay/ # test_*.png 叠加可视化
└── README.txt # 数据描述与类别定义
§4.1 DAIMS 数据字典(核心字段)
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| tile 文件名 | string | 瓦片唯一标识,Train/Test 目录即划分 | train_8.png | 划分控制、结果对齐 | 无 | 无 | train_1–27 / test_1–14 |
| image(PNG) | uint8 数组 | H&E RGB 图像,40× | 1,000×1,000×3 | 模型输入 | 染色/扫描差异 | 无 | 0–255 |
| inst_map | int 数组 | 实例掩码;像素值为核实例 ID,0 为背景 | 3×3 区域值 47 | 实例分割监督、AJI/PQ 评估 | 边界像素归属存在标注者差异 | 0=背景 | 0–单瓦片实例数 |
| inst_type | int 数组 | 逐实例核型类别(与实例 ID 对齐) | 47 → 4 | 核型分类监督 | 类 1 兜底类别含异质对象 | 无 | 1–7 |
| inst_centroid | float 数组 | 逐实例质心坐标 | [512.0, 383.5] | 检测式方法、NuClick 类交互式模型 | 无 | 无 | 0–999 |
| split | string | 官方划分(目录名隐含) | Train / Test | 基准评测 | 无 | 无 | Train, Test |
| label 合并映射 | 约定 | 社区 4 类合并:{3,4}→epithelial、{2}→inflammatory、{5,6,7}→spindle、{1}→misc | — | 与官方 F1d/e/i/s/m 对齐 | — | — | 4 类 |
| Overlay PNG | uint8 数组 | 叠加可视化(非训练数据) | — | 人工质检 | — | — | — |
§4.2 标签分布
- 官方发布了总实例数 24,319,但未随数据发布逐类核计数表;逐类分布需用户自行统计
.mat文件得到。 - 论文明确指出:Miscellaneous(类 1)样本量显著少于其他类别且类内变异大,是分类指标中最差的一类(官方 TF 实现 F1m 仅 0.426,仓库)。
- 从论文的类别描述可推断:恶性/异型增生上皮核与成纤维细胞核在肿瘤区瓦片中占比高,内皮核相对少见;精确数字请以本地统计为准,避免引用二手分布。
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 瓦片总数 | 41(27 训练 + 14 测试) | 论文 |
| 标注核总数 | 24,319 | 论文 Highlights |
| 患者数 | 16(每 WSI 一人) | 论文 |
| 核类别数 | 7(官方)→ 4(社区合并口径) | 仓库 |
| MONAI patch 产出 | 约 2,009 个 patch | NVIDIA NGC |
| 平均每瓦片标注核数 | 约 593 个(24,319 / 41,编辑部计算) | 派生自上两项 |
§4.4 数据层级
数据层级为四层:患者(16 人)→ 全切片 WSI(16 张,与患者一一对应)→ 图像瓦片(41 张 tile)→ 细胞核实例(24,319 个)。MONAI 训练流水线在这之下还有第五层 patch(约 2,009 个滑窗片段)。特别提醒:官方未发布 tile 与患者的对应关系,因此「同一患者的多张瓦片」在现有公开信息下无法被识别——这对划分策略(见 §5)有直接影响。
§4.5 缺失值与特殊编码
| 情形 | 是否存在 | 处理约定 |
|---|---|---|
| 图像缺失/损坏 | 官方包内无 | 下载后需校验 27+14 张齐全(ZIP 损坏是真实高频问题,见坑点 1) |
| 标注缺失 | 无缺失标注 | 每瓦片均含完整 inst_map/inst_type |
| 背景/非核像素 | inst_map 值 0 | 0=背景,参与分割损失时按背景处理 |
| 忽略编码 | MONAI 派生口径存在 | NuClick/分类预处理把 patch 内非目标核设为 label 255(ignore index,HF MONAI 文档) |
| 患者级元数据 | 缺失 | 官方不发布患者年龄/性别/分期等,属结构性缺失而非数据缺陷 |
数据完整性自检清单(下载后逐项执行):
from pathlib import Path
root = Path("data/CoNSeP")
train_imgs = sorted((root / "Train/Images").glob("*.png"))
test_imgs = sorted((root / "Test/Images").glob("*.png"))
assert len(train_imgs) == 27 and len(test_imgs) == 14, "瓦片数量不符,ZIP 可能损坏"
for split, imgs in (("Train", train_imgs), ("Test", test_imgs)):
for p in imgs:
mat = root / split / "Labels" / f"{p.stem}.mat"
assert mat.exists(), f"标注缺失:{mat}"
overlay = root / split / "Overlay" / f"{p.stem}.png"
# Overlay 仅为可视化,部分打包渠道可能省略,缺失不阻塞训练
_ = overlay.exists()
print("完整性检查通过:27 训练 + 14 测试,标注全部存在")
.mat 标注的读取要点(MATLAB v7 格式,scipy.io.loadmat 可直接读取):
import scipy.io as sio
mat = sio.loadmat("CoNSeP/Train/Labels/train_1.mat")
inst_map = mat["inst_map"] # 像素级实例掩码:0=背景,k=第 k 个核实例
inst_type = mat["inst_type"] # 逐实例类别数组,索引与实例 ID 对齐
inst_centroid = mat["inst_centroid"] # 逐实例质心 (N, 2)
# 注意:键名与结构以官方仓库 loader 代码为准;type_map(逐像素类别图)
# 可由 inst_map + inst_type 在内存中导出,官方不单独分发。
.mat 键的语义速查(与官方 loader/评测代码交叉验证):
| 键名 | 形状 | 语义 | 使用方 |
|---|---|---|---|
| inst_map | (1000, 1000) | 实例掩码,0=背景、k=第 k 个核 | 分割训练与 AJI/PQ 评测 |
| inst_type | (N,) 或含冗余维 | 第 k 个实例的核型类别(1–7) | 分类训练与 F1 评测 |
| inst_centroid | (N, 2) | 逐实例质心坐标 | 检测式/交互式方法、TP 半径匹配 |
| loadmat 自带键 | — | __header__ 等 MATLAB 元数据 |
读取时用 mat 字典过滤 |
提醒:
scipy.io.loadmat返回的数组常带冗余维度(如 (1, N)),squeeze 处理不当是实例-类别错位的常见根源(见坑点 8)。
§5 划分与使用建议
§5.1 官方划分
官方按 tile 级划分:27 张训练(train_1–train_27)/ 14 张测试(test_1–test_14),不设验证集(论文;测试图清单见 issue #29)。所有公开榜单数字默认在该 14 张测试瓦片上按 patch/tile 协议计算。
§5.2 社区惯例划分
- kaiko-ai/eva:直接把官方 test 兼作 validation 使用(数据页)。
- NVIDIA MONAI bundles:按官方划分训练 27 张、验证/测试 14 张(NGC)。
- PanNuke/MoNuSAC 社区:与 CoNSeP 划分无关,跨数据集论文常在 CoNSeP 上做零样本评测(如 CellViT++ 系列,CM&PBM 2025)。
§5.3 划分策略建议与泄漏风险
由于 tile 与患者的对应关系未公开,患者级分组划分无法由下游用户重建,这是本数据集最重要的结构性限制:
- 坚持官方 tile 级 27/14:报告基准数字时不要重新划分,否则与榜单不可比。
- 需要调参时:从 27 张训练瓦片中按 tile 切出 4–6 张作为内部验证集,切勿动用 14 张测试瓦片;kaiko 用 test 兼作 val 的做法便于复现但有污染测试集之嫌,引用其结果时须注明。
- patch 级随机划分 = 泄漏:滑窗 patch 相邻重叠约 128 px,同一场景会同时出现在训练与验证 patch 中;任何 patch 级随机切分都会显著虚高指标。正确做法是始终以 tile(乃至患者,若自行获得对应关系)为单位聚合。
- 交叉验证:若要做 5 折交叉验证,只能在 27 张训练瓦片内按 tile 分折,且报告时应说明该数字不可与官方 27/14 榜单直接比较。
- 外部验证:建议将训练好的模型在 Lizard(同为结肠但跨中心、含 6 类体系)或 MoNuSeg(多器官)上做零样本/微调评测,检验单中心过拟合程度。
推荐的内部调参划分配置(可直接落盘复用):
from pathlib import Path
stems = sorted(p.stem for p in Path("data/CoNSeP/Train/Images").glob("*.png"))
assert len(stems) == 27
# 固定随机种子的 tile 级划分:22 张内训 + 5 张内部验证(仅用于调参/选 epoch)
SEED = 20260905
rng = __import__("random").Random(SEED)
val_stems = set(rng.sample(stems, 5))
train_stems = [s for s in stems if s not in val_stems]
Path("splits").mkdir(exist_ok=True)
Path("splits/train_22.txt").write_text("\n".join(sorted(train_stems)))
Path("splits/val_5.txt").write_text("\n".join(sorted(val_stems)))
# 官方 14 张测试瓦片永远单独成集,仅最终报告使用一次
test_stems = sorted(p.stem for p in Path("data/CoNSeP/Test/Images").glob("*.png"))
assert len(test_stems) == 14
Path("splits/test_14.txt").write_text("\n".join(test_stems))
§5.4 外部验证建议
在 CoNSeP 上训练的模型建议按以下梯度逐级外推,每级都先看零样本表现再做微调:
| 外推层级 | 目标数据 | 预期表现 | 需要处理的差异 |
|---|---|---|---|
| 同域换病例 | 其他中心的结直肠腺癌 H&E | 中-高 | 染色域差异;建议开/关染色归一化对照 |
| 同器官跨标注体系 | Lizard(6 类) | 中 | 类别映射需重新定义(4 类 vs 6 类不可直接对齐) |
| 跨器官 | MoNuSeg / MoNuSAC | 低-中 | 单癌种先验失效;建议只用分割分支评估 |
| 跨倍率 | 20× 扫描数据 | 低 | 需重标定分类匹配半径(12 px → 6 px) |
报告规范:外部验证结果应与 CoNSeP 内部 14 张测试瓦片的结果并排呈现,并明确标注「内部 / 外部」;只报外部数字或只报内部数字都是常见的乐观偏置来源。
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
CoNSeP 体积小(ZIP 约 146 MB),无需专门云端平台:任意一台带 12 GB 显存 GPU 的实例(或 Google Colab T4)即可完成训练级实验。NVIDIA NGC 提供基于 MONAI 的现成 bundle,可直接在 NGC 目录中拉取并跳过自建流水线(NGC 核分割分类 bundle)。
使用 NGC/MONAI bundle 的最小命令序列(先备好数据,再两阶段训练):
# 1) 数据准备(bundle 期望的目录见其 configs/train.json 的 dataset_dir)
wget https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/consep_dataset.zip
unzip -q consep_dataset.zip
python scripts/prepare_patches.py --root /path/to/data # MONAI 复现的 patch 预处理
# 2) 两阶段训练(stage 0 冻结 encoder 仅训 decoder,stage 1 全量微调)
python -m monai.bundle run --config_file configs/train.json --stage 0 --dataset_dir /path/to/data
python -m monai.bundle run --config_file configs/train.json \
--network_def#freeze_encoder False --stage 1 --dataset_dir /path/to/data
# 3) 多 GPU(如 2 卡)
torchrun --standalone --nnodes=1 --nproc_per_node=2 -m monai.bundle run \
--config_file "['configs/train.json','configs/multi_gpu_train.json']" \
--dataset_dir /path/to/data
该命令序列对应 MONAI 官方 bundle 文档的训练配置(Adam、lr 1e-4、HoVerNetLoss、50 epoch 两阶段);直接使用它可绕开 §6.3/§6.4 的自建流水线,但代价是需要按 bundle 的目录约定组织数据。
§6.1 快速上手
下面的最小验证脚本完成「下载 → 校验 → 读一张图和它的标注 → 可视化一张实例掩码」。目录结构预期与 data_root 拼接关系:下载的 ZIP 解压后得到 CoNSeP/ 目录,data_root 应指向其父目录,即 os.path.join(data_root, "CoNSeP", "Train", "Images") 才能命中训练图。最小可用子集:先只用 Train/train_1.png + Train/Labels/train_1.mat 走通全链路,再扩展到 41 张。
import os
import zipfile
import urllib.request
import numpy as np
import scipy.io as sio
from PIL import Image
data_root = "./data" # 解压后 CoNSeP/ 位于 ./data/CoNSeP/
zip_path = os.path.join(data_root, "consep_dataset.zip")
if not os.path.exists(os.path.join(data_root, "CoNSeP")):
urllib.request.urlretrieve(
"https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/consep_dataset.zip",
zip_path,
)
with zipfile.ZipFile(zip_path) as zf:
zf.extractall(data_root)
img = np.array(Image.open(os.path.join(data_root, "CoNSeP/Train/Images/train_1.png")))
mat = sio.loadmat(os.path.join(data_root, "CoNSeP/Train/Labels/train_1.mat"))
inst_map, inst_type = mat["inst_map"], mat["inst_type"]
print(img.shape, inst_map.max(), "个实例") # 期望 (1000, 1000, 3),实例数应 > 0
# 类别合法性检查:inst_type 的取值必须都落在 1–7
assert set(np.unique(inst_type)).issubset(set(range(1, 8)))
§6.2 数据获取
| 渠道 | 链接 | 大小 | 说明 |
|---|---|---|---|
| 华威官方直链 | https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/consep_dataset.zip | 约 146 MB | wget/curl 直接下载,无需注册;境外网络偶尔不稳 |
| OpenDataLab 镜像 | https://opendatalab.com/OpenDataLab/CoNSeP | 约 289.2 MB | 官方链接失效时使用(页面) |
| NVIDIA NGC bundle | https://catalog.ngc.nvidia.com/orgs/nvidia/monaitoolkit/models/monai_pathology_nuclei_segmentation_classification | 模型另计 | 附带预处理与训练配置 |
申请流程说明:CoNSeP 无需注册、无需申请、无需签署协议,官方直链即下即用——这与 PhysioNet 类临床数据库的凭证化申请流程完全不同,也是它适合教学场景的原因。但两点合规注意:其一,官方未随数据附正式许可证文本(见 §7.7 第 22 项),商业化前应联系版权方确认;其二,下载后请记录来源 URL 与日期,便于在论文数据可得性声明中写明渠道。
# 官方渠道(与 HoVer-Net 论文一致的原始包)
wget https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/consep_dataset.zip
unzip -q consep_dataset.zip
# 校验完整性:Train/Images 应有 27 张 PNG,Test/Images 应有 14 张 PNG,
# 两侧 Labels 目录应各有同名 .mat 文件(数量不符说明 ZIP 损坏,见坑点 1)
ls CoNSeP/Train/Images | wc -l # 期望 27
ls CoNSeP/Test/Images | wc -l # 期望 14
§6.3 预处理全流程
从原始瓦片到可训练样本的四步流水线:格式读取 → patch 裁剪 → 类别映射 → 归一化/增强。以下脚本从 1,000×1,000 瓦片滑窗裁出 256×256 patch(相邻重叠 128 px,与 MONAI 复现口径一致,产出约 2,009 个 patch),并把 7 类映射为官方分类评测使用的 4 类口径。
import numpy as np
import scipy.io as sio
from PIL import Image
from pathlib import Path
ROOT = Path("data/CoNSeP")
PATCH, STRIDE = 256, 128 # 256×256 窗口,重叠 128 px
# 官方分类评测的 4 类合并映射:{3,4}→3上皮 {2}→2炎性 {5,6,7}→4梭形 {1}→1其他
MERGE = {1: 1, 2: 2, 3: 3, 4: 3, 5: 4, 6: 4, 7: 4}
def extract_tiles(split: str):
for img_path in sorted((ROOT / split / "Images").glob("*.png")):
stem = img_path.stem
img = np.array(Image.open(img_path)) # (1000,1000,3)
mat = sio.loadmat(ROOT / split / "Labels" / f"{stem}.mat")
inst_map, inst_type = mat["inst_map"], mat["inst_type"]
# 逐像素类别图:先建 0 图,再把每个实例 ID 处填入其类别
type_map = np.zeros_like(inst_map, dtype=np.uint8)
for k, t in enumerate(np.atleast_1d(inst_type.squeeze()), start=1):
type_map[inst_map == k] = MERGE.get(int(t), 1)
ys = xs = range(0, 1000 - PATCH + 1, STRIDE)
n = 0
for y in ys:
for x in xs:
patch_img = img[y:y + PATCH, x:x + PATCH]
patch_lab = type_map[y:y + PATCH, x:x + PATCH]
if patch_lab.max() == 0: # 跳过全背景 patch
continue
n += 1
out = ROOT / "Prepared" / split
out.mkdir(parents=True, exist_ok=True)
Image.fromarray(patch_img).save(out / f"{stem}_{y}_{x}_img.png")
Image.fromarray(patch_lab).save(out / f"{stem}_{y}_{x}_lab.png")
print(stem, "patches:", n)
extract_tiles("Train")
extract_tiles("Test")
说明:如需逐实例(而非逐像素类别)监督,把上面
type_map换成inst_map的窗口切片即可;HoVer-Net 官方extract_patches.py与 MONAIprepare_patches.py的落盘结构略有差异,复现论文数字时建议直接使用官方脚本。
染色归一化(可选但推荐验证):跨扫描仪/跨中心部署时的域差异主要来自 H&E 染色。CoNSeP 是单扫描仪数据,训练内不必强行归一化;但在把 CoNSeP 模型推向外部数据前,应先验证染色归一化的有效性。以下是一个无需第三方依赖的 RGB 统计量匹配式归一化(比 Macenko 更简单,适合作为基线对照):
import numpy as np
def percentile_normalization(img: np.ndarray, ref_stats: dict,
lo: float = 1.0, hi: float = 99.0) -> np.ndarray:
"""按参考统计量(目标域瓦片的分位数)逐通道拉伸。
ref_stats 来自一张或多张目标域参考瓦片的逐通道 [lo, hi] 分位。"""
out = img.astype(np.float32).copy()
for c in range(3):
src_lo, src_hi = np.percentile(out[..., c], [lo, hi])
dst_lo, dst_hi = ref_stats["rgb"][c]
out[..., c] = (out[..., c] - src_lo) / max(src_hi - src_lo, 1e-6)
out[..., c] = np.clip(out[..., c], 0, 1) * (dst_hi - dst_lo) + dst_lo
return np.clip(out, 0, 255).astype(np.uint8)
# 参考统计量建议从 CoNSeP 训练瓦片批量统计并缓存:
# ref_stats = {"rgb": [[p1_c0, p99_c0], [p1_c1, p99_c1], [p1_c2, p99_c2]]}
工程结论:CoNSeP 上训练、同域测试时不要加染色归一化(它只能引入额外方差);只有当评测或部署对象是其他扫描仪/中心的数据时才启用,且应报告「开/关归一化」两组结果(见 §7.6 漂移监控)。
§6.4 PyTorch DataLoader(完整可运行)
<details>
<summary>展开完整 Dataset + DataLoader 代码(约 50 行)</summary>
import numpy as np
import scipy.io as sio
import torch
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from pathlib import Path
class CoNSePDataset(Dataset):
"""结直肠核实例分割数据集。
目录结构预期:
data/CoNSeP/{Train,Test}/{Images,Labels}/
data_root 应指向包含 CoNSeP/ 的父目录;返回逐实例掩码 inst_map
(0=背景,k=第 k 个核)与逐像素类别图 type_map(1–7 类)。
"""
def __init__(self, data_root: str, split: str = "Train",
crop_size: int = 256, augment: bool = True):
self.root = Path(data_root) / "CoNSeP" / split
self.stems = sorted(p.stem for p in (self.root / "Images").glob("*.png"))
self.crop, self.augment = crop_size, augment
def __len__(self):
return len(self.stems)
def _random_crop(self, img, inst_map, type_map):
H, W = img.shape[:2]
y = np.random.randint(0, H - self.crop + 1)
x = np.random.randint(0, W - self.crop + 1)
return (img[y:y+self.crop, x:x+self.crop],
inst_map[y:y+self.crop, x:x+self.crop],
type_map[y:y+self.crop, x:x+self.crop])
def __getitem__(self, idx):
stem = self.stems[idx]
img = np.array(Image.open(self.root / "Images" / f"{stem}.png"))
mat = sio.loadmat(self.root / "Labels" / f"{stem}.mat")
inst_map = mat["inst_map"].astype(np.int32)
inst_type = np.atleast_1d(mat["inst_type"].squeeze()).astype(np.int32)
type_map = np.zeros_like(inst_map, dtype=np.uint8)
for k, t in enumerate(inst_type, start=1):
type_map[inst_map == k] = t
if self.augment:
img, inst_map, type_map = self._random_crop(img, inst_map, type_map)
if np.random.rand() < 0.5: # 水平翻转(三图同步)
img, inst_map, type_map = (np.ascontiguousarray(a[:, ::-1])
for a in (img, inst_map, type_map))
img = torch.from_numpy(img.transpose(2, 0, 1)).float() / 255.0
return (img,
torch.from_numpy(type_map.astype(np.int64)),
torch.from_numpy(inst_map))
ds = CoNSePDataset("data", split="Train")
loader = DataLoader(ds, batch_size=8, shuffle=True, num_workers=4,
pin_memory=True, drop_last=True)
imgs, type_maps, inst_maps = next(iter(loader))
print(imgs.shape, type_maps.shape, inst_maps.shape) # (8,3,256,256) (8,256,256) (8,256,256)
</details>
训练循环骨架(接上面的 DataLoader,展示三类监督信号如何同时喂给多分支损失):
import torch.nn as nn
import torch.nn.functional as F
model = build_your_model(nr_types=7).cuda() # 例:HoVer-Net 结构
opt = torch.optim.Adam(model.parameters(), lr=1e-4) # MONAI/官方均用 Adam 1e-4
seg_loss, cls_loss = nn.functional.cross_entropy, nn.functional.cross_entropy
for epoch in range(50): # MONAI bundle 口径:50 epoch 两阶段
for imgs, type_maps, inst_maps in loader:
imgs, type_maps = imgs.cuda(), type_maps.cuda()
pred_np, pred_hv, pred_tp = model(imgs) # NP/HoVer/类型三分支
loss_np = seg_loss(pred_np, (inst_maps.cuda() > 0).long())
loss_tp = cls_loss(pred_tp, type_maps) # 7 类;4 类口径见坑点 3
loss_hv = F.mse_loss(pred_hv, hv_distance_map(inst_maps)) # HoVer 回归
loss = loss_np + loss_tp + loss_hv
opt.zero_grad(); loss.backward(); opt.step()
注:
hv_distance_map需按论文定义计算「核内像素到自身质心的水平/垂直距离图」;官方loader/与 MONAIHoVerNetLoss均提供参考实现,建议直接复用而不是手写。
§6.5 坑点(8 个真实失败模式)
⚠️ 坑点 1:官方 ZIP 下载损坏与链接漂移(分类:工程陷阱)
问题:华威官方直链历经多个 URL 变体(
warwick.ac.uk/TIA/data/hovernet、fac/sci/dcs/research/tia/data/hovernet、fac/cross_fac/tia/data/hovernet),境外网络下载易中断出坏包,官方下载页还曾整体不可用;有用户解压后仅得到 2 张测试图并误以为数据集本身如此(issue #29)。
症状:解压报错、Train/Images不足 27 张、推理某张测试图时报实例类型为背景或产出 NaN。
解决:
- 简单方法:下载后立即
ls CoNSeP/Train/Images | wc -l(期望 27)与ls CoNSeP/Test/Images | wc -l(期望 14),数量不符直接重下。- 进阶方法:脚本里把 14 张测试图文件名清单写死做存在性断言(清单见 issue #29),坏包一秒暴露。
- SOTA 方法:官方直链不可用时切换 OpenDataLab/OpenXLab 镜像(约 289.2 MB,镜像页),并记录实际使用的镜像哈希以便复现。
参考:hover_net issue #29;kaiko-ai/eva 数据页的下载可用性说明
⚠️ 坑点 2:类 1(Miscellaneous)是「兜底类」而不是第六类之外的未知类(分类:标签理解)
问题:类 1 汇集了无法归入 6 个明确核型的对象(论文指出其中包含坏死核与核分裂核等),样本量显著偏少且类内变异极大,官方 TF 模型的 F1m 仅 0.426、PyTorch 复现更低至 0.348(仓库对比表)。
症状:总体分类指标被类 1 拖垮;把它当「背景」丢弃会改变评估口径,当正常类别训练又几乎学不出来。
解决:
- 简单方法:训练时保留 7 类,但报告指标时按官方惯例单列 F1m,不与其他类混平均。
- 进阶方法:按社区 4 类合并口径({3,4}→上皮、{2}→炎性、{5,6,7}→梭形、{1}→其他)重映射后再训练分类分支,loss 中给类 1 更低权重。
- SOTA 方法:对类 1 内部做核分裂/坏死的二次细分研究,或参考 Lizard 的 6 类体系重新设计类别空间(Lizard, ICCVW 2021)。
参考:HoVer-Net 论文 future work 段落;SciSpace 论文问答
⚠️ 坑点 3:分类 F1 的 4 类重映射缺失导致指标不可比(分类:评估误用)
问题:官方分类指标 F1d/F1e/F1i/F1s/F1m 建立在 7 类→5 个报告口径的映射上(上皮含 3、4 两类;梭形含 5、6、7 三类);不重映射直接算 F1,数字与所有论文不可比。
症状:自算 F1e/F1s 明显低于论文;或把 7 类 macro-F1 误当成官方口径报告。
解决:
- 简单方法:评测前执行
true_inst_type[(true_inst_type==3)|(true_inst_type==4)]=3与true_inst_type[(true_inst_type==5)|(true_inst_type==6)|(true_inst_type==7)]=4(与官方compute_stats.py逻辑一致)。- 进阶方法:以官方仓库的
run_nuclei_type_stat为唯一评测入口,禁止自行实现分类匹配逻辑;TP 判定用质心半径法(40× 下 12 px,论文 §IV)。- SOTA 方法:在结果表中同时报告 4 类合并口径与 7 类原始口径,并注明匹配半径,消除跨论文歧义。
参考:issue #29 中的重映射讨论;官方仓库 README
⚠️ 坑点 4:跳过 process.py 后处理直接算指标,报 KeyError 或全 NaN(分类:工程陷阱)
问题:HoVer-Net 推理脚本输出的是网络原始预测(NP/HoVer 分支图),必须先跑
process.py把分支图解码为实例.mat(含inst_map键),才能进入compute_stats.py;顺序错了就崩溃。
症状:compute_stats.py抛KeyError: 'inst_map',或指标输出 NaN;旧版 NumPy 还会伴随np.dtype的 FutureWarning 刷屏(issue #29)。
解决:
- 简单方法:严格按
infer.py → process.py → compute_stats.py顺序执行三段脚本。- 进阶方法:升级 NumPy/SciPy 至当前版本消除 dtype 警告;检查输出目录路径是否为绝对路径(issue #29 中相对路径导致读不到中间结果)。
- SOTA 方法:把三段脚本封装成带依赖检查的单一 pipeline(先断言中间产物存在再评测),杜绝顺序错误。
参考:hover_net issue #29 全过程
⚠️ 坑点 5:checkpoint 与模型模式错配(original vs fast)(分类:工程陷阱)
问题:官方提供两种输入口径:
original模式 270×270 输入 / 80×80 输出,fast模式 256×256 输入 / 164×164 输出;CoNSeP 训练的 checkpoint 属于 original 模式,PanNuke/MoNuSAC 的属于 fast 模式。用 fast 模式加载 CoNSeP checkpoint 会静默产出劣化结果(官方 README 明确说明)。
症状:加载他人权重复现论文数字时 AJI/PQ 明显低于报告值,且无任何报错。
解决:
- 简单方法:从 checkpoint 文件名确认模式(官方命名含模式后缀),推理脚本使用对应模式。
- 进阶方法:在加载权重处断言
model mode与nr_types配置(CoNSeP 分类模型nr_types=7?注意官方分类口径为 5/7 类差异,见下),以 fail-fast 取代静默劣化。- SOTA 方法:MONAI bundle 用户直接使用其
configs/infer.json的既定模式配置,避免手写推理参数。
参考:hover_net README 的 Model mode 说明;NVIDIA NGC bundle 文档
⚠️ 坑点 6:没有官方验证集,把 test 当 val 用造成隐性过拟合(分类:偏倚陷阱)
问题:官方只有 27/14 两个子集;不少复现(含框架默认配置,如 kaiko-ai/eva 直接用 test 兼作 validation)反复在 14 张测试瓦片上选超参/选 epoch,测试集被隐性污染。
症状:报告的测试指标随实验次数单调上升;换一个随机种子数字大幅波动(14 张瓦片方差极大)。
解决:
- 简单方法:从 27 张训练瓦片中固定切 4–6 张作内部验证集,测试集只允许在最终报告时使用一次。
- 进阶方法:在训练瓦片内做 5 折 tile 级交叉验证选超参,最后在官方 27 张训练瓦片全量重训再测一次。
- SOTA 方法:引入 Lizard 或 MoNuSeg 的一部分作为外部「验证域」,只看跨域指标稳定性而非绝对值。
参考:kaiko-ai/eva 的 split 说明;HoVer-Net 论文实验设置
⚠️ 坑点 7:patch 级随机划分制造重叠泄漏(分类:数据泄漏)
问题:滑窗裁 patch(如 256×256、重叠 128 px,MONAI 口径产出约 2,009 个 patch)意味着同一组织区域几乎同时存在于相邻 patch 中;如果把 patch 随机分为训练/验证,模型实际在「背答案」。
症状:patch 级验证 Dice 高达 0.9+,换到 tile 级或跨瓦片评测立刻掉十几个点。
解决:
- 简单方法:任何 train/val 切分都以 tile 为最小单位(27 张训练瓦片内部再切),patch 只做训练样本扩展。
- 进阶方法:记录 patch 的来源 tile ID 并在 Dataset 层做分组断言,防止第三方 datalist 混入跨 tile 样本(MONAI NuClick 的 dataset.json 即带 tile 来源命名,可参照)。
- SOTA 方法:若能通过原始中心重建 tile→患者映射(官方未提供,见 §5.3),进一步做患者级分组切分。
参考:NVIDIA NGC 的 prepare_patches 流程;本页 §5.3
⚠️ 坑点 8:.mat 读取与实例-类别对齐的静默错误(分类:预处理陷阱)
问题:标注是 MATLAB v7
.mat,逐实例类别数组inst_type的第 k 个元素对应inst_map中值为 k 的实例;但 squeeze 后维度退化、MATLAB 1-based 与 Python 0-based 错位、以及把inst_map==k的填充循环写成 0-based,都会让类别掩码整体错位——不报错、只是标签悄悄错了。
症状:可视化叠加图中核的颜色与真实核型对不上;分类分支训练不收敛或 F1e/F1s 与论文差距悬殊。
解决:
- 简单方法:写一个单元测试,随机抽 3 个实例,断言
type_map[inst_map==k]的唯一值等于inst_type[k-1]。- 进阶方法:用官方
loader/目录的数据加载器作为唯一入口,避免手写loadmat解析;fromarray前对翻转后的掩码做ascontiguousarray防止负 stride 引发的静默拷贝问题。- SOTA 方法:把
.mat一次性转换为自描述的 HDF5/NPY 缓存(含实例数、类别直方图元数据),并缓存校验和;NVIDIA MONAI 的data_process.py思路即属此类。
参考:hover_net 仓库 loader 目录;HF MONAI 分类 bundle 预处理
§6.6 数据增强(安全与危险)
| 类别 | 操作 | 说明 |
|---|---|---|
| 安全 ✅ | 随机水平/垂直翻转、90° 旋转 | 病理形态学上等变;图像与掩码必须同步变换 |
| 安全 ✅ | 小幅亮度/对比度抖动 | 模拟染色轻度差异;幅度建议控制在 ±10% 内 |
| 安全 ✅ | 90° 内随机旋转 + 转置 | HoVer-Net 官方训练即采用旋转与翻转组合 |
| 危险 ❌ | 大幅 H&E 通道非线性染色增强(未经验证) | 会破坏核型分类依赖的染色线索,恶性上皮与正常上皮的判别可能失效 |
| 危险 ❌ | 弹性形变过强 | 核的形状先验(近椭圆)被破坏,StarDist 类形状先验模型尤其敏感 |
| 危险 ❌ | 对分类标签(逐核类别)独立做几何变换 | 标签与实例错位,产生静默标签噪声;几何变换必须图像+实例掩码+类别数组三者联动 |
| 危险 ❌ | 改变像素物理尺度(重采样到非 0.25 μm/px 等效) | 跨倍率泛化会被破坏;跨倍率实验应显式声明并重标定 40× 判定半径(12 px) |
同步变换的参考实现要点(图像 + 实例掩码 + 类别图三者必须共用同一随机参数):
def sync_augment(img, inst_map, type_map):
# 1) 同步翻转:一次采样,三个数组共用
if np.random.rand() < 0.5:
img, inst_map, type_map = (np.ascontiguousarray(a[:, ::-1])
for a in (img, inst_map, type_map))
# 2) 同步 90° 旋转:k 必须三个数组一致
k = np.random.randint(0, 4)
img, inst_map, type_map = (np.rot90(a, k) for a in (img, inst_map, type_map))
# 3) 仅图像的染色抖动:掩码不动
if np.random.rand() < 0.5:
img = np.clip(img.astype(np.float32) *
np.random.uniform(0.9, 1.1) +
np.random.uniform(-10, 10), 0, 255).astype(np.uint8)
return img, inst_map, type_map
关键原则:任何几何变换都要作用到实例掩码(且翻转/旋转不改变实例 ID 与类别数组的对应关系),任何光度变换只作用到图像。把几何变换错误地只加在图像上是本数据集最常见的静默标签噪声来源。
§6.7 模型推荐
| 模型 | 类型 | CoNSeP 参考 performance | 适用场景 |
|---|---|---|---|
| HoVer-Net(官方) | 分割+分类多分支 CNN | AJI 57.1 / DICE 85.3 / PQ 54.7(榜单口径) | 论文复现与强基线 |
| CellViT(ViT/SAM-H 编码器) | 基础模型编码器+解码头 | AJI 56.0 / PQ 52.5 | 预训练迁移、数据高效场景 |
| StarDist | 星凸形状先验实例分割 | AJI 47.8 | 推理速度敏感、核形态规整场景 |
| NuClick(MONAI) | 点击式交互分割 | Train Dice 0.89 / Val Dice 0.85(NGC) | 人工校验/半自动标注工具 |
| APSeg | SAM/CLIP 自动提示 | AJI 55.8(arXiv:2504.02222) | 提示学习与多模态先验研究 |
| NuNext / CellNuc-DETR | 2026 新方法 | AJI 58.2 / 57.7(sota2 榜) | 追踪 SOTA 时关注 |
选型时的三条经验法则:第一,先定评测协议再选模型——若要进入 §8.1 榜单对比,选带官方 checkpoint 的 HoVer-Net 或其 MONAI 复现;若做产品原型,推理速度与部署链路(TensorRT、ONNX)权重更高。第二,分类分支按需取舍——只做组成统计时可在 4 类合并口径训练(更稳),做核型精细研究才上 7 类。第三,编码器升级是当前最省力的增益来源——CellViT 系的 SAM/ViT 编码器在同数据量下显著优于从头训练的 ResNet 编码器(CellViT++ 在数据高效实验中以 5% 数据即超过参考方法,CM&PBM 2025)。
§6.8 硬件需求
| 实验 | 最低配置 | 推荐配置 | 依据 |
|---|---|---|---|
| NuClick 类 patch 级训练 | 12 GB 显存 | 16 GB | MONAI bundle 训练配置(NGC) |
| HoVer-Net 分割+分类训练 | 24 GB 显存 | A100 级 | MONAI 复现的显存要求(NGC) |
| 推理/评测(14 张测试瓦片) | 8 GB 显存 | 12 GB | 瓦片级滑窗推理 |
| WSI 级推理 | 16 GB 显存 + 大内存 | SSD 缓存盘 | 官方 WSI 脚本需要中间缓存空间(仓库说明) |
显存紧张的降级路径:把训练口径从 original(270×270 输入)换成 fast(256×256 输入,batch 更小)——但注意 CoNSeP 官方 checkpoint 属 original 模式(坑点 5),自训模型才可自由选择;进一步可把 batch 减半并相应放大学习率 warmup。MONAI bundle 官方提示:CacheDataset 内存吃紧时把 cache_rate 降到 [0, 1] 区间的较低值即可,不必换 Dataset 类(NGC 文档)。
§6.9 评估指标代码
核实例分割的核心指标为 AJI(Aggregated Jaccard Index)与 PANOPTIC 质量(PQ = DQ × SQ)。下面的参考实现覆盖 AJI 的标准定义,可直接与预测实例掩码对接:
<details>
<summary>展开 AJI 参考实现(约 30 行)</summary>
import numpy as np
def aggregated_jaccard_index(pred: np.ndarray, gt: np.ndarray) -> float:
"""AJI:对每个 GT 实例取 IoU 最大的预测实例做并集累加。
pred, gt:实例掩码,0 为背景,k 为第 k 个实例。"""
pred_ids = np.unique(pred)[1:]
gt_ids = np.unique(gt)[1:]
if len(gt_ids) == 0:
return float(len(pred_ids) == 0)
C, U = 0.0, 0.0
# 预测实例与各 GT 实例的交集表
for g in gt_ids:
gt_mask = gt == g
if len(pred_ids) == 0:
U += gt_mask.sum()
continue
inter = np.bincount(pred[gt_mask].astype(np.int64), minlength=int(pred_ids.max())+1)
union = np.array([ (pred == p).sum() + gt_mask.sum() - inter[p]
for p in pred_ids ])
best = pred_ids[np.argmax([inter[p] / union[i] for i, p in enumerate(pred_ids)])]
C += inter[best]
U += union[list(pred_ids).index(best)]
pred_ids = pred_ids[pred_ids != best] # 已匹配的预测不再复用
U += sum((pred == p).sum() for p in pred_ids) # 未匹配预测计入并集
return C / max(U, 1.0)
</details>
工程建议:跨论文比较时优先复用官方
metrics/目录的评测代码;PQ 按 DQ(IoU>0.5 的检测质量)× SQ(匹配实例的平均 IoU)分解报告,分类指标 F1 用质心半径匹配(40× 下 12 px)。不同论文对 patch 级/tile 级统计口径不同,这是 CoNSeP 数字难直接比较的最大来源(见 §8.3)。
PQ(DQ × SQ)的参考实现(与 AJI 配合使用):
<details>
<summary>展开 PQ 参考实现(约 28 行)</summary>
import numpy as np
def panoptic_quality(pred: np.ndarray, gt: np.ndarray,
iou_thr: float = 0.5) -> tuple:
"""返回 (DQ, SQ, PQ):先以 IoU>0.5 贪心匹配,再计算检测质量与分割质量。"""
pred_ids = list(np.unique(pred)[1:])
gt_ids = list(np.unique(gt)[1:])
if not gt_ids:
return 0.0, 0.0, 0.0
matched, ious = 0, []
used_pred = set()
for g in gt_ids:
gm = gt == g
best_iou, best_p = 0.0, None
for p in pred_ids:
if p in used_pred:
continue
pm = pred == p
inter = np.logical_and(gm, pm).sum()
union = np.logical_or(gm, pm).sum()
iou = inter / max(union, 1)
if iou > best_iou:
best_iou, best_p = iou, p
if best_iou > iou_thr:
matched += 1
ious.append(best_iou)
used_pred.add(best_p)
dq = matched / len(gt_ids) # 检测质量
sq = float(np.mean(ious)) if ious else 0.0 # 分割质量
return dq, sq, dq * sq
</details>
注意:以上两段为教学级参考实现(O(N²) 匹配,41 张瓦片评测可接受);逐行对照官方
metrics/实现后再报告论文级数字,特别是 AJI 的「已匹配预测不重复使用」与「未匹配预测计入并集」两处细节。
§6.10 MLOps 笔记
- 依赖固定:
numpy/scipy/PIL/torch版本入 requirements;旧 NumPy 的np.dtype弃用警告是真实故障信号(issue #29),升级后再跑评测。 - 确定性:MONAI 官方声明其 HoVer-Net bundle 因双线性插值不可完全确定性复现(NGC 说明);论文级复现请固定种子并接受 ±0.5 个点内的波动。
- 监控口径:训练监控用训练瓦片内部验证集的 AJI + 四类合并 F1,绝不把测试瓦片接进训练循环。
- 数据版本:记录 ZIP 来源 URL(官方或镜像)与文件哈希,因为官方链接存在漂移史(坑点 1)。
- 模型卡片:发布模型时引用 rai:dataLimitations(单中心、单扫描仪、无 tile→患者映射)作为声明基础。
- 评测产物归档:把
infer → process → compute_stats三段产物(预测 .mat、逐指标 JSON)按 run ID 归档;CoNSeP 评测链条长,任何一段静默失败(如坑点 4)都能通过对比历史 run 快速定位。 - CI 冒烟测试:在持续集成中放一张最小瓦片子集(如 train_1 + test_1)跑通「读数据 → 训练 10 步 → 评测出数」的冒烟链路,防止依赖升级破坏管线。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 单中心偏倚 | 16 例患者全部来自英国 UHCW 一家医院 | 高 | 外部数据(Lizard/MoNuSeg)上验证后再下结论 |
| 单扫描仪偏倚 | 全部由 Omnyx VL120 扫描,扫描器域固定 | 高 | 训练时加强染色/扫描域增强;跨扫描仪评测 |
| 单癌种偏倚 | 仅结直肠腺癌,多器官泛化无保证 | 高 | 明确声明适用域;泛化需求改用 PanNuke/MoNuSAC |
| 规模偏倚 | 仅 41 张瓦片,易过拟合 | 中 | 强正则、基础模型编码器、少样本协议 |
| 类别不平衡 | 类 1(Miscellaneous)样本显著偏少且异质 | 高 | 见坑点 2;分类指标单列 F1m |
| 选择偏倚 | 瓦片被刻意选中以覆盖多样组织与拥挤核 | 中 | 明确其「高难度基准」定位,勿当常规 WSI 分布使用 |
使用提示:这些偏倚并非缺陷清单,而是适用域声明。CoNSeP 的单中心单扫描仪特性使「同域对比实验」极其干净(所有方法共享同一域),这恰是它作为基准的价值所在;一旦离开该域(跨中心、跨器官、跨染色),所有数字都需要重新校准。
§7.2 标注质量
标注为两位病理专家像素级穷尽式勾画 + 双人交叉复审(论文),在核分割数据集中属于最高质量档。局限是:官方未公布一致性系数,且论文承认肿瘤细胞核类内变异大、部分核边界不清本身即存在模糊地带。使用建议:对边界像素级的微小差异不敏感的应用(组成统计)可放心使用;对边界精度极端敏感的方法研究,应在论文中报告边界容差。
两个值得引用者注意的细节:其一,标注分工是「每张瓦片由一位专家完成」,因此瓦片间的标注风格差异与标注者差异混杂在一起,无法在现有信息下分离;其二,类 1(Miscellaneous)的边界判定最主观(何为坏死、何为核分裂、何为退变),跨数据集合并类别时该类一致性最差。这两点都属于官方材料未系统讨论、但工程上真实存在的标注方差来源。
§7.3 泛化性
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 同为结直肠腺癌的新病例 | 低(论文声称模型对未见 CRA 病例大概率表现良好) | HoVer-Net 论文 §V-A |
| 跨中心/跨扫描仪 H&E | 高(染色与扫描域漂移) | 单中心单扫描仪构成;无官方跨中心验证 |
| 其他癌种/器官 | 高 | 单癌种设计;多器官需 MoNuSeg/MoNuSAC |
| 其他染色(IHC 等) | 极高 | 训练分布仅 H&E |
| 跨倍率(20× 等) | 高 | 全部数据为 40×;分类匹配半径需重标定 |
§7.4 伦理
数据为临床病理切片的数字化图像,不包含患者身份信息、面部或基因序列;官方论文与数据页未公布具体伦理批件编号与知情同意细节,使用者在论文中应注明数据来源(UHCW / 华威大学)并遵守其机构政策。CoNSeP 无受控访问门槛(开放直链下载),这同时意味着使用者对合规性负自我审查责任(MONAI 免责声明口径)。
§7.5 公平性
官方未公开 16 例患者的人口学信息(年龄、性别、种族),无法评估人群代表性;同时仅覆盖英国单一医疗中心,医疗资源与人群结构的代表性有限。涉及临床公平性的研究不应把 CoNSeP 单独作为证据来源。
§7.6 数据漂移
部署层面最大的漂移源是染色协议与扫描仪域:H&E 染色试剂、扫描时长与扫描仪代际变化都会改变输入分布。建议在流水线中加入核密度、染色熵等无参考监控指标;当输入分布的染色熵显著偏离训练瓦片时触发告警。跨中心部署前,务必执行 stain normalization 的有效性验证(而非盲目套用 Macenko 等方法)。
针对 CoNSeP 的漂移监控落地建议:先在 41 张瓦片上统计三个无参考基线量——逐通道 RGB 分位(1%/99%)、每瓦片实例核数分布、7 类核型直方图;部署后按批次计算同样的统计量并做卡方或 KS 检验。其中「7 类核型直方图漂移」最具诊断价值:恶性上皮核占比异常升高可能提示切片分布偏离(如样本多为肿瘤区),而核总密度骤降通常指向扫描对焦或染色变浅问题。由于 CoNSeP 训练于 40× 单倍率,输入倍率本身也应作为受监控的元数据。
§7.7 DAIMS 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 每瓦片一个 PNG + 一个 .mat,结构扁平对齐 |
| 2 | 唯一标识 | ✅ | 瓦片名(train_N/test_N)+ 实例 ID 双层唯一 |
| 3 | 特殊字符 | ✅ | 文件名仅字母数字下划线,跨平台安全 |
| 4 | 重复行 | ✅ | 41 张瓦片无重复;实例 ID 在瓦片内唯一 |
| 5 | 缺失编码 | ✅ | 无缺失标注;背景以 0 编码,MONAI 派生口径用 255 作忽略 |
| 6 | 标签标识 | ⚠️ | 7 类标签随 .mat 分发,但官方未附逐类统计与完整类别定义文档 |
| 7 | 罕见类分组 | ⚠️ | 类 1 为兜底类(含坏死/核分裂),样本少且异质 |
| 8 | 偏倚评估 | ⚠️ | 官方未提供偏倚分析章节;单中心单扫描仪偏倚需用户自查 |
| 9 | 数据字典 | ⚠️ | .mat 键名语义散落在仓库代码中,官方字典极简 |
| 10 | 信息性缺失解释 | ✅ | 图像数据无信息性缺失概念 |
| 11 | 设备记录 | ✅ | Omnyx VL120、40×、0.25 μm/px 明确记录 |
| 12 | 共线性 | ✅ | 不适用(非表格回归数据) |
| 13 | 编码映射 | ⚠️ | 7 类→4 类合并映射由社区/仓库代码约定,官方文档未系统化 |
| 14 | 时间戳处理 | ✅ | 静态图像,不适用;采集时间官方未公开 |
| 15 | 划分建议 | ✅ | 官方提供 27/14 tile 级划分 |
| 16 | 泄漏讨论 | ⚠️ | 官方未讨论患者级泄漏;tile→患者映射未发布导致无法分组 |
| 17 | 标签分布 | ⚠️ | 官方未发布逐类核计数 |
| 18 | 测量偏倚 | ⚠️ | 两位标注者分别标注,未公布按标注者分层的一致性 |
| 19 | 外部验证建议 | ⚠️ | 官方未提供外部验证协议 |
| 20 | 版本记录 | ❌ | 无官方版本号与更新日志(仅论文随附首发版) |
| 21 | 预处理脚本 | ✅ | 官方仓库提供 extract_patches/train/infer/eval 全流程脚本 |
| 22 | 合规要求 | ⚠️ | 未随附正式许可证文本;第三方托管标注 Apache 2.0 |
| 23 | 多模态对齐 | ✅ | 图像与标注逐像素对齐(同一坐标框架) |
| 24 | 去标识化 | ✅ | 病理切片无直接标识信息;无患者级元数据分发 |
DAIMS 评分:18.0 / 24(13 项 ✅、10 项 ⚠️、1 项 ❌)
评分解读:CoNSeP 在「数据本体质量」维度表现优秀——结构扁平、标识唯一、设备信息完整、图像与标注逐像素对齐,且附带全流程官方脚本;失分集中在「治理与元数据」维度:无版本管理、无逐类统计、无 tile→患者映射、无正式许可证文本,这些都不影响单机实验,但会显著抬升跨机构复现与合规审查的成本。
对你意味着什么:(1) 直接把官方 27/14 划分与官方评测脚本当作不可更改的协议,不要自造划分;(2) 动手第一天先自己统计逐类核数并落盘为版本化元数据,补上官方缺失的标签分布;(3) 任何跨中心或临床方向的结论必须配外部数据验证,本数据集的治理缺口(无版本、无患者映射)决定了它只适合做算法基准,不适合做注册级研究的数据源;(4) 商业化前先解决许可证不确定性(联系版权方或仅使用 Apache 2.0 口径的托管版本)。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| PanNuke 预训练 → CoNSeP 零样本 | 波恩大学等(CellViT++ 团队) | 核分割+分类 | HoVer-Net F1 0.691 / Dice 0.802;CellViTSAM-H++ F1 0.772 / Dice 0.845 | — | 基础模型编码器显著提升零样本迁移(CM&PBM 2025) |
| CoNSeP 训练 → 同域未见 CRA 病例 | 华威大学(作者声明) | 核分割 | 定性声明(未给数字) | — | 论文声称单癌种内的组织多样性使模型对未见 CRA 病例大概率表现良好(论文) |
注:除上表外,社区尚缺乏「CoNSeP 训练 → 其他中心结直肠数据」的同行评审定量报告;这正是该数据集作为单中心基准需要补足的证据链。
§8 基准性能与生态
§8.1 排行榜(核实例分割,官方 27/14 协议)
| 排名 | 模型 | AJI | DICE | PQ | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|---|---|
| 1 | NuNext | 58.2 | — | 58.6 | 2026 | 聚合榜收录的新一代检测式方法(细节见榜单) | NuNext, 2026(sota2 聚合榜,截至 2026-09) | 未见公开 |
| 2 | HoVer-Net(TF 官方) | 57.1 | 85.3 | 54.7 | 2019 | HoVer 水平/垂直距离图分支分离拥挤核 | Graham S, Vu QD, Raza SEA, Azam A, Tsang YW, Kwak JT, Rajpoot N. Hover-Net. Medical Image Analysis 58:101563, 2019. DOI 10.1016/j.media.2019.101563 | GitHub |
| 3 | SONNET | 56.4 | 84.1 | 49.6 | 2023 | 多任务统一分割-分类架构 | Graham S, Vu QD, Jahanifar M, Raza SEA, Minhas F, Snead D, Rajpoot N. One model is all you need. Medical Image Analysis 83:102685, 2023 | 官方仓库 |
| 4 | CellViT-H | 56.0 | — | 52.5 | 2024 | SAM/ViT-H 基础模型编码器 + 解码头 | Hörst F, Rempe M, et al. CellViT: Vision Transformers for Precise Cell Segmentation and Classification. Medical Image Analysis, 2024 | GitHub |
| 5 | Micro-Net | 52.7 | 79.4 | 44.9 | 2019 | 多尺度多分支集成 | Raza SEA, Cheung L, Shaban M, et al. Micro-Net. Medical Image Analysis 52:160-173, 2019 | — |
| 6 | U-Net + 分水岭 | 48.2 | 72.4 | 32.8 | 2015/2019 | 编解码 + 形态学后处理 | Ronneberger O, Fischer P, Brox T. U-Net. MICCAI 2015. DOI 10.1007/978-3-319-24574-4_28 | — |
| 7 | StarDist | 47.8 | 60.1 | 43.3 | 2018 | 星凸多边形形状先验 | Schmidt U, Weigert M, Broaddus C, Myers G. Cell Detection with Star-Convex Polygons. MICCAI 2018. DOI 10.1007/978-3-030-00934-2_30 | GitHub |
| 8 | Mask R-CNN | 47.4 | 74.0 | 46.0 | 2017/2019 | 检测 + 掩码头 | He K, Gkioxari G, Dollár P, Girshick R. Mask R-CNN. ICCV 2017. DOI 10.1109/ICCV.2017.106 | 官方实现 |
数值不可直接比较的原因:(1) 各方法的后处理(分水岭、NMS 参数)与匹配阈值实现不一;(2) 部分论文在 patch 级、部分在 tile 级统计;(3) CellNuc-DETR(AJI 57.7,2026)与 PointNu-Net(DQ 71.4,APSeg 论文口径)等新方法的评测实现细节需回溯原文;(4) PyTorch 复现与 TF 原版存在微小差异(CoNSeP 上 TF 0.8525 / PyTorch 0.8504 Dice,官方对比表)。
核型分类榜(官方 HoVer-Net 口径,7 类映射后的 5 个报告指标;来源同上):
| 平台 | F1d(恶性/异型增生上皮) | F1e(上皮合并) | F1i(炎性) | F1s(梭形合并) | F1m(其他) |
|---|---|---|---|---|---|
| TensorFlow(论文原版) | 0.748 | 0.635 | 0.631 | 0.566 | 0.426 |
| PyTorch(官方复现) | 0.756 | 0.636 | 0.559 | 0.557 | 0.348 |
分类侧的解读:上皮与炎性核的 F1 稳定在 0.56–0.75 区间,而 F1m(杂类)显著落后——这与 §7.7 DAIMS 第 7 项的「罕见类」警示一致:类 1 样本少且内部异质(坏死、核分裂、退变混杂),是分类任务的主要失分点,也是 SONNET 之后多任务方法重点改进的方向。
§8.2 SOTA 总结与选型建议
截至 2026-09,CoNSeP 核实例分割的公开最优 AJI 在 58% 左右(NuNext 58.2 / CellNuc-DETR 57.7,sota2 榜),与 2019 年 HoVer-Net 的 57.1 差距不足 1.5 个点,说明该基准已进入平台期,边际改进越来越依赖拥挤核分离与后处理细节。选型建议:追求复现与可比性选 HoVer-Net 官方代码;追求部署效率选 StarDist 或 MONAI bundle;追求分类与零样本能力选 CellViT 系;研究提示/多模态先验关注 APSeg、PointNu-Net(APSeg:Dice 82.3 / AJI 55.8,arXiv:2504.02222;CellViT++ 的 CellViTSAM-H++ 在 mPQ+ 口径达 0.461,超过 HoVer-Net 的 0.429,CM&PBM 2025)。
§8.3 评测协议
- 划分:27 训练 / 14 测试瓦片,评测只在 14 张测试瓦片上做。
- 分割指标:AJI、Dice、PQ(= DQ × SQ,DQ 为 IoU>0.5 的检测质量、SQ 为匹配实例平均 IoU)。
- 分类指标:F1d/F1e/F1i/F1s/F1m(7 类映射至报告口径),TP 以预测质心落入真值质心 12 px(40×)半径内判定(论文 §IV)。
- 官方工具:
compute_stats.py(仓库 metrics/),必须先经process.py生成实例后处理产物(坑点 4)。 - 注意事项:每张测试瓦片都含大量拥挤核,任何裁边、缩放或滑窗重叠差异都会改变实例数量进而改变指标,评测脚本应逐行对照官方实现。
- 结果聚合层级:官方在 tile 级聚合(14 张测试瓦片汇总);patch 级评测(如部分消融实验)产出的数字系统性偏高,论文中必须显式声明统计层级。跨论文复现时,先确认对方在
compute_stats.py的哪个 mode(inst实例分割还是type分类)上运行。 - 分类匹配半径:TP 判定用真值质心 12 px(40×)半径;若做跨倍率实验(如 20×),半径按论文约定折半为 6 px,且需在结果表中注明,否则 F1 不可比。
§8.4 相关数据集
| 数据集 | 关系 | 规模 | 适用 |
|---|---|---|---|
| MoNuSeg(Kumar 等) | 同期多器官基准 | 30 瓦片 / 21,623 核 | 多器官泛化(IEEE TMI 39(5):1380-1391) |
| CPM-15 / CPM-17 | 同作者团队竞赛数据 | 15 + 32 瓦片 | 脑肿瘤核分割历史基准 |
| TNBC | 同作者团队 | 50 瓦片 / 4,056 核 | 三阴性乳腺癌 |
| PanNuke | 类别设计参照 | 约 20 万核 / 19 组织 | 大规模预训练 |
| Lizard | CoNSeP 后继 | 约 50 万核 / 6 类 | 结肠核大规模基准(ICCVW 2021) |
| CoNIC 2022 | Lizard 衍生挑战 | 约 50 万核 / 6 类 | 检测/分割/分类/计数综合挑战 |
§8.5 关键论文 Top 8
- Graham S, Vu QD, Raza SEA, Azam A, Tsang YW, Kwak JT, Rajpoot N. Hover-Net: Simultaneous segmentation and classification of nuclei in multi-tissue histology images. Medical Image Analysis 58:101563, 2019. DOI 10.1016/j.media.2019.101563 — 数据集与同名方法的原始论文。
- Graham S, Vu QD, Raza SEA, et al. HoVer-Net 预印本. arXiv:1812.06499, 2018 — 数据集设计与标注协议细节最全的版本(arXiv)。
- Kumar N, Verma R, et al. A multi-organ nucleus segmentation challenge. IEEE TMI 39(5):1380-1391, 2019 — MoNuSeg 基准,CoNSeP 的多器官对照系。
- Gamper J, Koohbanani NA, Benes K, Graham S, et al. PanNuke dataset extension, insights and baselines. arXiv:2003.10778, 2020 — 大规模弱监督方向(arXiv)。
- Graham S, Jahanifar M, Azam A, et al. Lizard: a large-scale dataset for colonic nuclear instance segmentation and classification. ICCV Workshops, 2021 — CoNSeP 的规模化后继(pp 684-693)。
- Verma R, Kumar N, Patil A, et al. MoNuSAC2020: A multi-organ nuclei segmentation and classification challenge. IEEE TMI 40(12):3413-3423, 2021 — 跨器官跨倍率分类基准。
- Graham S, Vu QD, Jahanifar M, et al. One model is all you need: multi-task learning enables simultaneous histology image segmentation and classification. Medical Image Analysis 83:102685, 2023 — SONNET 架构,CoNSeP 强基线。
- Hörst F, Rempe M, et al. CellViT++: Energy-efficient and adaptive cell segmentation and classification using foundation models. Computer Methods and Programs in Biomedicine, 2025 — 基础模型时代 CoNSeP 数据高效与零样本评测(ScienceDirect)。
§8.6 社区活跃度
- 学术热度:HoVer-Net 论文引用 1,475+(Google Scholar,arXiv 条目,截至 2026-09,学者主页),2025-2026 年仍有 APSeg、NuNext、CellNuc-DETR 等新工作以 CoNSeP 为评测场。
- 工程生态:官方
vqdang/hover_net仓库持续维护并提供 PyTorch 复现与 checkpoint;NVIDIA MONAI 官方收录 3 个基于 CoNSeP 的模型 bundle;OpenDataLab/OpenXLab 镜像收录(页面显示 33.3k 浏览 / 2.1k 下载热度,截至 2026-09)。 - 维护状态:官方数据页为静态页,kaiko-ai/eva 曾记录官方下载一度不可用;社区依赖镜像与官方 GitHub 双通道。
- 讨论渠道:官方仓库 Issues 是该数据集最活跃的问题讨论区(数据加载、评测口径、checkpoint 使用等),遇到评测数字对不上时,应先检索 Issues 历史再发新帖——大量常见问题的答案(如坑点 3/4/5)已在 2020 年前后的讨论中给出。
- 衍生基准:CoNIC 2022 挑战赛与 Lizard 数据集延续了 CoNSeP 的任务定义并扩大了规模,社区对「结直肠核分割」这一赛道的持续投入使 CoNSeP 的数字即使不更新也仍然具有参照意义。
§8.7 生态快照
| 资源 | 类型 | 链接 | 热度/状态 | 推荐理由 |
|---|---|---|---|---|
| vqdang/hover_net | 官方代码仓库 | https://github.com/vqdang/hover_net | 活跃维护,MIT License | 官方训练/评测/WSI 推理全流程 |
| NVIDIA NGC 分割分类 bundle | 预训练模型 | NGC 页 | 官方出品 | 快速起步与 TensorRT 部署参考 |
| NVIDIA NGC NuClick bundle | 交互式标注模型 | NGC 页 | 官方出品 | 半自动标注工具链 |
| kaiko-ai/eva CoNSeP 加载器 | 框架数据接口 | 文档 | 维护中 | 标准化数据加载与 4 类口径 |
| OpenDataLab 镜像 | 数据镜像 | https://opendatalab.com/OpenDataLab/CoNSeP | 可用 | 官方链接失效时的替代 |
| CellViT 仓库 | 基础模型代码 | https://github.com/TIO-IKIM/CellViT | 活跃 | 基础模型解码头微调范式 |
| sota2/WizWand 榜单 | 聚合排行榜 | 榜单 | 截至 2026-09 更新 | 快速了解 SOTA 变化 |
§9 相关资源与引用
§9.1 官方资源
- 官方数据页:https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/(含 CoNSeP、Kumar、CPM-15/17、TNBC 各数据集入口)
- 官方直链下载:https://warwick.ac.uk/fac/cross_fac/tia/data/hovernet/consep_dataset.zip
- 官方代码仓库:https://github.com/vqdang/hover_net(训练、推理、评测、WSI 处理脚本与 checkpoint)
- 论文(开放获取):https://www.sciencedirect.com/science/article/pii/S1361841519301045;预印本 https://arxiv.org/abs/1812.06499
- MONAI 教程与 bundle:https://catalog.ngc.nvidia.com/orgs/nvidia/monaitoolkit/models/monai_pathology_nuclei_segmentation_classification
- 镜像:https://opendatalab.com/OpenDataLab/CoNSeP(OpenDataLab)/ https://openxlab.org.cn/datasets/OpenDataLab/CoNSeP(OpenXLab)
§9.2 BibTeX 完整引用
@article{graham2019hover,
title = {Hover-net: Simultaneous segmentation and classification of nuclei
in multi-tissue histology images},
author = {Graham, Simon and Vu, Quoc Dang and Raza, Shan E Ahmed and
Azam, Ayesha and Tsang, Yee Wah and Kwak, Jin Tae and
Rajpoot, Nasir},
journal = {Medical Image Analysis},
volume = {58},
pages = {101563},
year = {2019},
publisher = {Elsevier},
doi = {10.1016/j.media.2019.101563}
}
@article{graham2018hover_arxiv,
title = {HoVer-Net: Simultaneous Segmentation and Classification of Nuclei
in Multi-Tissue Histology Images},
author = {Graham, Simon and Vu, Quoc Dang and Raza, Shan E Ahmed and
Azam, Ayesha and Tsang, Yee Wah and Kwak, Jin Tae and
Rajpoot, Nasir},
journal = {arXiv preprint arXiv:1812.06499},
year = {2018}
}
@inproceedings{graham2021lizard,
title = {Lizard: A Large-Scale Dataset for Colonic Nuclear Instance
Segmentation and Classification},
author = {Graham, Simon and Jahanifar, Mostafa and Azam, Ayesha and
Nimir, Mohammed and Tsang, Yee Wah and Dodd, Katherine and
Hero, Emily and others},
booktitle = {Proceedings of the IEEE/CVF International Conference on
Computer Vision Workshops (ICCVW)},
pages = {684--693},
year = {2021}
}
§9.3 引用指南
- 使用数据集:引用
graham2019hover(正式版),如需引用标注协议细节可同时引用 arXiv 版。 - 使用官方代码或 checkpoint:按官方仓库要求引用
graham2019hover;使用 PanNuke 派生权重时需同时遵守 CC BY-NC-SA 4.0(仓库许可说明)。 - 引用基准数字:注明评测口径(官方 27/14、tile 级、AJI/Dice/PQ/F1d-e-i-s-m),并区分论文原版 TF 数字与 PyTorch 复现数字。
- 引用本页:本页属于千方病案医数集的 AI-Ready 二次整理,引用页面本身时应同时给出原始论文 DOI(10.1016/j.media.2019.101563);涉及数据规模、划分与基准数字的断言,请优先核对 §10.3 所列原始来源。
- 镜像渠道引用:若通过 OpenDataLab 等镜像获取数据,论文的数据可得性声明仍应写官方华威页面地址,镜像仅作为获取通道记录。
§10 AI 使用声明卡
§10.1 本页使用的 AI 模型
| 模型 | 用途 |
|---|---|
| 大语言模型(千方医数集写作 agent) | 检索事实整理、正文撰写、格式化 |
§10.2 AI 参与范围
AI 完成事实检索汇总(3-6 次 WebSearch)、FACTS 简报整理、正文初稿与格式合规。全部章节经人工审核流程(见 §10.4);医学编码映射(ICD-11 / SNOMED CT)为编辑部依据公开术语体系整理,官方数据集本身不携带疾病编码。
AI 介入的边界声明:代码块为按官方接口整理的参考实现,未经大规模运行验证,交付前已在 §6 各节标注与官方脚本的差异点;基准数字全部转录自榜单或论文原文并逐条附带来源链接,AI 未做任何数值外推;对官方未公开的信息(采集时间、逐类计数、tile→患者映射),本页一律标注「官方未公开」而非填充估计值。
§10.3 输入来源(本页事实与数字的完整引用)
- Graham S, Vu QD, Raza SEA, Azam A, Tsang YW, Kwak JT, Rajpoot N. Hover-Net: Simultaneous segmentation and classification of nuclei in multi-tissue histology images. Medical Image Analysis 58:101563, 2019. DOI 10.1016/j.media.2019.101563
- Graham S, et al. HoVer-Net(预印本 v4). arXiv:1812.06499, 2018-2019. https://arxiv.org/html/1812.06499v4
- vqdang/hover_net 官方仓库 README 与对比表. https://github.com/vqdang/hover_net
- hover_net issue #29「Issues testing data with certain images」. https://github.com/vqdang/hover_net/issues/29
- NVIDIA NGC:monai_pathology_nuclei_segmentation_classification. https://catalog.ngc.nvidia.com/orgs/nvidia/monaitoolkit/models/monai_pathology_nuclei_segmentation_classification
- NVIDIA NGC:monai_pathology_nuclick_annotation. https://catalog.ngc.nvidia.com/orgs/nvidia/monaitoolkit/models/monai_pathology_nuclick_annotation
- MONAI tutorials PR #1691(CoNSeP 下载与预处理,146 MB 记录). https://github.com/Project-MONAI/tutorials/pull/1691
- Hugging Face MONAI pathology_nuclei_classification README. https://huggingface.co/monai-test/pathology_nuclei_classification
- kaiko-ai/eva CoNSeP 数据页(划分、license、可用性). https://kaiko-ai.github.io/eva/main/datasets/consep
- OpenXLab/OpenDataLab CoNSeP 镜像页(289.2 MB、发布信息). https://openxlab.org.cn/datasets/OpenDataLab/CoNSeP
- sota2/WizWand:Nuclear Instance Segmentation on CoNSeP 榜单. https://www.sota2.com/research/sota/nuclear-instance-segmentation-on-consep
- APSeg: Auto-Prompt Model for Nuclear Instance Segmentation and Classification. arXiv:2504.02222, 2025. https://ar5iv.arxiv.org/html/2504.02222
- Hörst F, et al. CellViT++: Energy-efficient and adaptive cell segmentation and classification using foundation models. Computer Methods and Programs in Biomedicine, 2025. https://www.sciencedirect.com/science/article/pii/S0169260725006212
- Simon Graham Google Scholar 主页(引用数与论文清单). https://scholar.google.cat/citations?user=KMkGt1YAAAAJ
- Raza SEA, et al. Micro-Net. Medical Image Analysis 52:160-173, 2019(引自学者主页)
- SciSpace:HoVer-Net 论文问答(Miscellaneous 类局限性). https://scispace.com/papers/hover-net-simultaneous-segmentation-and-classification-of-b3qab79fdo
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(疾病/编码映射) | 千方病案医学编辑部 | 逐条核对 ICD-11/SNOMED 公开术语与 GLOBOCAN 口径 | ✅ 已通过/已验证 |
| §1/§3/§4 全部数字与事实 | 千方病案医学编辑部 | 逐条对照 FACTS.md 来源 URL | ✅ 已通过/已验证 |
| §6 代码块 | 千方病案医学编辑部数据工程 | 逻辑走查 + 接口核对官方仓库 | ✅ 已通过/已验证 |
| §6.5 坑点 8 个 | 千方病案医学编辑部数据工程 | 逐条溯源 GitHub issue 与官方 README | ✅ 已通过/已验证 |
| §7 DAIMS 与偏倚分析 | 千方病案医学编辑部 | 24 项逐项复核评分 | ✅ 已通过/已验证 |
| §8 基准数字 | 千方病案医学编辑部 | 与榜单/论文原文逐值核对 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
本页正文各章节均由 AI 辅助生成初稿,并全部经过 §10.4 所列人工审核;无未审核的 AI 生成章节。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
