CMMD — 中国乳腺钼靶良恶性分类 AI-Ready Wikipedia

1,775 名患者 5,202 幅钼靶图像,活检证实良恶性与分子亚型标注

来源 The Cancer Imaging Archive(TCIA) url: https://www.cancerimagingarchive.net/collection/cmmd/发布时间: 2026-09-18最后更新: 2026-09-25 阅读 27
CMMD — 中国乳腺钼靶良恶性分类 AI-Ready Wikipedia

信息速览

数据集名称CMMD — 中国乳腺钼靶良恶性分类 AI-Ready Wikipedia
数据类型5,202 幅 DICOM 图像,1,775 名患者,22.86 GB 影像,CC BY 4.0 开放获取,活检病理证实标注
规模1,775 名患者
接入方式The Cancer Imaging Archive(TCIA) url: https://www.cancerimagingarchive.net/collection/cmmd/
AI 就绪度

CMMD(中国乳腺钼靶数据库)— 活检证实的乳腺良恶性分类 AI-Ready Wikipedia

INFOBOX

字段 内容
数据集名称 CMMD(中国乳腺钼靶数据库)
英文全称 The Chinese Mammography Database (CMMD)
别名/简称 CMMD、China Mammography Database、中国乳腺钼靶数据库
疾病分类(ICD-11 编码+中文名) 2C60 乳腺恶性肿瘤 / 2F30 乳腺良性肿瘤(详见 §2.1)
SNOMED CT 254837009 乳腺恶性肿瘤 / 399264000 乳腺肿块(详见 §2.1b)
数据模态 乳腺钼靶 X 线(FFDM 数字乳腺摄影,MG 模态)
AI 任务类型 良恶性分类、分子亚型影像预测、跨数据集泛化与外部验证
样本总数 1,775 名患者 / 3,728 次钼靶检查(TCIA 收录 5,202 幅 DICOM 图像)
数据大小 影像 22.86 GB(DICOM)+ 临床表 70.25 kB(XLSX)
数据格式 DICOM(MG)+ XLSX 临床表
许可证 CC BY 4.0
访问级别 开放(TCIA 直接下载,无需注册或审批)
DUO 标签 NRES(无限制使用)、GRU(通用研究使用)
语言 影像无文本语言;临床表为英文
首发日期 2021-04-06
最后更新 2021-04-06(v1,截至 2026-09 无后续版本)
发布机构 南方医科大学(与中山大学肿瘤防治中心、华南理工大学合作)
官方主页 TCIA 收藏页
下载地址 .tcia 清单(需 NBIA Data Retriever)
DOI 10.7937/tcia.eqde-4b16(数据集);10.1038/s41597-023-02025-1(论文)
引用次数 67+(Semantic Scholar,截至 2026-09;TCIA 门户另记录 19 次数据引用)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— DICOM 规范统一、临床表齐备;扣分项:无官方划分、无 ROI 标注、标签需自行按侧重建
页面状态 published

§0 重要声明与审核信息

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、乳腺良恶性病变与分子亚型定义、金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CMMD 以 CC BY 4.0 在 The Cancer Imaging Archive(TCIA)开放发布,直接下载即可,无需注册或签署协议;使用时须同时引用数据集 DOI(10.7937/tcia.eqde-4b16)与 Scientific Data 论文。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。

§1 数据集概览

§1.0 📌 30 秒速览

这是什么? CMMD(The Chinese Mammography Database,中国乳腺钼靶数据库)是托管在 The Cancer Imaging Archive 上的开放乳腺 X 线影像数据库:1,775 名中国女性乳腺疾病患者的钼靶检查,在 TCIA 以 5,202 幅标准 DICOM 图像(22.86 GB)发布,采集于 2012 年 7 月至 2016 年 1 月的广东两所医院。每一名患者都有穿刺活检病理给出的良性或恶性结论,其中 749 名恶性患者还带四种分子亚型标注。

为什么重要? 在 CMMD 出现之前,公开钼靶数据几乎全部来自欧美人群:MIAS、DDSM 是几十年前的屏片胶片扫描,来自欧美人群:MIAS、DDSM 是几十年前的屏片胶片扫描,CBIS-DDSM 亦源自胶片数字化,而亚洲女性普遍乳腺致密度更高、发病年龄更 亦源自胶片数字化,而亚洲女性普遍乳腺致密度更高、发病年龄更早,模型在中国人群上的表现无法由这些数据代表。CMMD 是第一个以西方同等数据标准发布的中国人群钼靶库,且每个样本都有病理金标准,弥补了「人群多样性 + 活检证实」的双重缺口。

我能用它做什么? 最直接的用法是训练和评估乳腺良恶性整图分类模型(CADx);也可以用它做跨数据集泛化研究——先在 CBIS-DDSM 或 可以用它做跨数据集泛化研究——先在 CBIS-DDSM 或 VinDr-Mammo 上训练,再到 CMMD 上外部验证;749 例分子亚型标注 上训练,再到 CMMD 上外部验证;749 例分子亚型标注则支持「影像组学预测 Luminal/HER2/三阴」这类影像标志物挖掘;由于 CC BY 4.0 开放获取,它也常被用作联邦学习、预训练与教学演示数据。

§1.1 摘要

CMMD 由南方医科大学、中山大学肿瘤防治中心与华南理工大学团队构建,于 2021 年 4 月在 TCIA 发布(v1),2023 年 3 月在 Scientific Data 发表数据描述论文(Cai et al., 2023)。数据库按患者编号分为两个分支:D1 系列(CMMD1,1,026 例,论文口径 2,214 幅图像)覆盖活检证实的良性或恶性病例;D2 系列(CMMD2,749 例,1,498 幅图像)全部为恶性并附加分子亚型。影像在 GE Senographe DS 上以 CC(头足位)与 MLO(内外斜位)双视图采集,原始 TIFF 经 TCIA 标准流程去标识化并转为 DICOM。临床信息以 XLSX 表交付,按「乳腺侧」而非「患者」组织,共约 1,872 行,包含 ID1/ID2、年龄、异常类型(肿块、钙化或两者兼有)与良恶性标签。论文明确自述两点局限:样本量不大、未标注 ROI。截至 2026-09,数据集停留在 v1,未追加新数据。

§1.2 战略价值

维度一:人群与设备多样性。 公开钼靶库长期由欧美数据主导,East-Asian 人群的乳腺密度分布(以 C/D 类为主)、肿瘤影像表现与年龄结构与之显著不同。CMMD 提供了单一机型(GE Senographe DS)、双中心(广州、佛山)的中国南方人群样本,使「中国人群上的钼靶 AI 表现」第一次可以被公开复现。跨库研究已证明其价值:在同一模型下,CMMD 作为外部验证集得出的结论与欧美内部测试集显著不同(Velarde et al., 2024)。

维度二:病理金标准的完整性。 与部分仅有影像学分级、无病理结果的数据集不同,CMMD 的每一条乳腺侧记录都有穿刺活检病理(HE 染色 + 免疫组化)背书的良恶性标签;恶性子集进一步带 ER/PR/HER2/Ki-67 决定的四类分子亚型。这使得 CMMD 既能做分类基准,又能支撑「影像 → 分子表型」的关联研究,后者是 CBIS-DDSM、影像 → 分子表型」的关联研究,后者是 CBIS-DDSM、INbreast 均不具备的差异化能力。

维度三:许可与获取成本。 均不具备的差异化能力。

维度三:许可与获取成本。 CC BY 4.0、免注册、22.86 GB 的体积使 CMMD 成为入门成本最低的真实病理标注钼靶库之一:一次 NBIA 下载即可复现论文级实验,这与需要凭证审批的私有数据库形成鲜明对比,也让它成为国内教学与课程实验的常用选择。

§1.3 同类数据集横向对比

数据集 规模 模态与来源 标注 与 CMMD 的差异化
CMMD 1,775 名患者 / 5,202 幅 DICOM FFDM,GE Senographe DS,中国广东两院 活检证实良恶性(按乳腺侧)+ 异常类型 + 749 例分子亚型 唯一的中国人群 + 分子亚型开放库
CBIS-DDSM 2,620 例 屏片胶片数字化(DDSM 精选),美国 病理证实 + 病灶级 ROI(钙化/肿块)+ BI-RADS 有 ROI 可做检测/分割,但人群老旧
INbreast 410 例 FFDM,Siemens,葡萄牙 BI-RADS + 部分病灶轮廓 量小但标注细,常作外部测试集
VinDr-Mammo 5,000 例检查 / 20,000 幅 FFDM 多机型,越南筛查项目 BI-RADS 1-5 + 六类异常(多数为医生分级而非病理) 规模大、有官方划分,但病理证实比例低
MIAS 322 幅 屏片胶片数字化(50 μm),英国 影像学良恶性与背景组织 历史基准,仅用于轻量验证
RSNA Screening Mammography 约 1.37 万名患者 / 5.49 万幅 FFDM 多机构(美国) 恶性标签(患者级,随访/病理混合来源) 规模最大,适合筛查类任务与预训练

读表要点:CMMD 在「病理金标准 × 活检证实 × 中国人群」三条件同时满足的公开钼靶库中仍是唯一档位;它的规模不是最大的、标注粒度不是最细的,但它的标签终点(活检病理)和人群代表性(中国南方)组合没有替代品。按任务选库而不是按规模选库,是使用这张表的正确方式。

§1.4 版本时间轴

时间 版本/事件 说明
2021-04-06 TCIA v1 首发数据 DICOM 22.86 GB + 临床表,DOI 10.7937/tcia.eqde-4b16
2023-02-14 官方数据处理脚本开源 scutbioinformatics/CMMD 仓库(单文件 CMMD_dataprocess.py)
2023-03-07 Scientific Data 论文上线 DOI 10.1038/s41597-023-02025-1,给出 Table 2 官方统计
2023-2024 Kaggle 社区镜像 alexnguyen10、tommyngx 等镜像(22.86 GB,附 metadata.csv)
2024 NCI IDC 云托管 经 IDC 门户按 collection_id=cmmd 过滤访问
截至 2026-09 停留 v1 无 v2;TCIA 状态为 Clinical Complete

§1.5 典型应用场景

  1. 乳腺良恶性 CADx 分类:以整幅或单侧乳腺图像为输入,训练二分类器并以 AUC/AUC-PR 评估,是该库最主流用法(见 §8.1 排行榜)。
  2. 跨数据集泛化与外部验证:把 CMMD 作为欧美模型的外部测试集(Velarde et al. 2024 用 826 次检查完成该实验),或反向以 CBIS-DDSM、VinDr-Mammo 验证 CMMD 训练模型。
  3. 影像-分子亚型关联研究:用 CMMD2 的 749 例 Luminal/HER2/三阴标签训练影像组学或深度模型,探索可预测分子表型的影像生物标志物。
  4. 联邦学习与数据孤岛研究:CMMD 与 VinDr-Mammo、私有数据组合为非 IID 客户端,评估跨中心聚合策略。
  5. 教学与课程实验:22.86 GB 体积适中、免注册获取,适合作为医学影像深度学习课程的实战数据。
  6. 去标识化与数据治理教学案例:CMMD 的 ID1/ID2 规则、重复图像公告与镜像许可漂移,是讲授「医学影像数据发布治理」的现成案例集。

§2 医学背景

§2.1 ICD-11 编码映射

CMMD 的标签体系是「按乳腺侧的良性/恶性二分类」,映射到 ICD-11 的主体是乳腺恶性肿瘤与乳腺良性疾患两大类:

数据集标签 ICD-11 编码 ICD-11 中文名 对应数据记录
Malignant(恶性) 2C60 乳腺恶性肿瘤 CMMD1 恶性 563 例 + CMMD2 全部 749 例(论文 Table 2 口径)
Benign(良性) 2F30 乳腺良性肿瘤 CMMD1 良性 544 例(含炎性、纤维囊性等良性病变)
分子亚型(仅恶性) 2C60 组内 按分子分型的乳腺恶性肿瘤 Luminal A 152 / Luminal B 376 / HER2 富集 135 / 三阴性 86

§2.1b SNOMED CT 映射

数据集标签 ICD-11 SNOMED CT 术语名称
Malignant 2C60 254837009 Malignant tumor of breast(乳腺恶性肿瘤)
Benign 2F30 399264000 Mass of breast(乳腺肿块,良性病变主体)
Type = Calcifications — 行内无独立 SNOMED 码 微钙化影像表现,归入对应病变编码
分子亚型四类 2C60 内 无一一对应码 由 ER/PR/HER2/Ki-67 表型组合定义,SNOMED 无单一代码

§2.2 疾病简介与流行病学

乳腺癌是全球女性中第二大高发恶性肿瘤(论文原文),也是中国女性最常见的恶性肿瘤之一,其发病率随城市化与生育模式变化持续上升。钼靶(乳腺 X 线摄影)因成本低、无创、灵敏度较高,仍是各国指南推荐的主流筛查与诊断影像手段;早期检出被证实可显著提高生存率。

CMMD 人群有两个流行病学特征值得注意。其一,中位年龄约 45-49 岁(CMMD1 均值 45.92、CMMD2 均值 49.82),明显低于欧美筛查人群(通常 50-70 岁为主),更接近中国实际发病谱;其二,团队与后续研究均指出该人群以致密型乳腺为主——东亚女性中 BI-RADS C/D 类比例通常超过七成,这既是模型难点(致密腺体会掩盖病灶),也是该库作为 East-Asian 代表样本的价值所在。需强调:CMMD 全部为已行活检的有症状或影像阳性患者,不含筛查阴性的正常人群。

从影像征象看,该人群的异常构成以肿块为主(约六成),钙化单独出现约占一成四、肿块伴钙化约四分之一——这与欧美库中微钙化占比较高的结构不同,也解释了为什么 CMMD 上「钙化型恶性」的识别往往更难(样本相对少)。对模型开发者而言,这意味着仅按整体 AUC 优化可能掩盖类型层面的失败,应按 Type 分层看敏感度(见坑点 8)。

§2.3 临床任务定义

  • 诊断性分类(CADx):对已发现异常的乳腺侧影像判定良性或恶性,是 CMMD 的核心任务。与筛查任务不同,这里不需要在正常背景中「大海捞针」,但要求对致密腺体背景下的细微恶性征象(毛刺、微钙化簇、结构扭曲)足够敏感。
  • 异常类型判别:临床表提供肿块(Mass)、钙化(Calcifications)、两者兼有(Both)三类异常构成,可用于多标签辅助任务或分层评估。
  • 分子亚型预测(影像组学):对恶性病例,从四视图影像预测 Luminal A/B、HER2 富集与三阴性——这是论文明确提出的应用方向之一,属于「影像生物标志物」研究。
  • 不适用任务:因无 ROI 标注与正常对照,CMMD 不适合直接做病灶检测/分割基准,也不能模拟真实筛查(含大量阴性召回)场景。

从临床决策流看,CMMD 对应的是「影像发现异常 → 穿刺活检 → 病理确诊」链条中的第二环:模型的角色是术前辅助判读(帮助估计恶性概率、辅助活检决策),而不是替代活检,更不是在筛查场景中首诊。写论文或申报时把这一定位写清楚,可避免大量「为何没有特异度 95%+ 筛查表现」的无效审稿往返。

§2.4 患者人群构成

属性 取值 来源说明
来源机构 南方医科大学南海医院(佛山)、中山大学肿瘤防治中心(广州) 论文与跨库研究交叉印证
采集时间 2012 年 7 月 - 2016 年 1 月 论文与 TCIA 描述
年龄 CMMD1 均值 45.92(中位 45);CMMD2 均值 49.82(中位 49);社区统计子集 47.4±10.9(17-87 岁) 论文 Table 2;MPE-DiGA-Net 表 1
性别 女性(乳腺疾病研究人群,论文 MeSH 标注含 Female) 论文
病理构成 乳腺侧口径:良性 556 / 恶性 1,316(合计 1,872 侧) MPE-DiGA-Net 表 1 与官方脚本行数
异常类型 肿块 1,149(61.4%)/ 兼有 461(24.6%)/ 仅钙化 262(14.0%) MPE-DiGA-Net 表 1
就医类型 门诊诊断性检查(全部进入活检流程),非筛查 论文方法学

§2.5 临床价值

对临床 AI 而言,CMMD 的价值在于三点:第一,它提供了中国南方真实诊疗流程下的钼靶-病理配对数据,可作为「模型在本院数据之外是否仍然可靠」的第一块试金石;第二,活检证实的标签把「影像表现的生物学本质」锚定在病理上,使良恶性边界不依赖某位放射科医生的主观判断;第三,分子亚型字段让「影像先验的肿瘤生物学」研究成为可能——例如三阴性乳腺癌常表现为不伴钙化的致密肿块,这类影像-表型假说可在 CMMD 上定量检验。需要提醒的是:CMMD 不能替代大规模筛查数据(如 RSNA 或 VinDr-Mammo)来评估召回率与假阳性负担,两者是互补关系。

§2.6 金标准参考表

维度 内容
划分 官方未提供训练/测试划分(见 §5)
标注方式 穿刺活检(core needle biopsy)→ FFPE 石蜡包埋 → HE 染色镜检 → 免疫组化(ER/PR/HER2/Ki-67);HER2 评分为 2+ 时以 FISH 检测基因扩增确认;Ki-67 以 20% 为高/低表达阈值
标注者 两名医生分别读片并判定异常类型,意见不一致时结合病理报告裁定;良恶性最终以病理为准
标注粒度 乳腺侧(per breast side)良恶性 + 异常类型;恶性者附四类分子亚型;无病灶级 ROI
标签性质 病理金标准(非影像学分级);不提供 BI-RADS 评估类别

§3 数据集规格

§3.0 版本抉择矩阵

CMMD 有一个官方版本与多条社区镜像/衍生版本,动手前先按需求选对入口:

你的需求 推荐版本 大小 理由
复现论文/正式研究 TCIA 官方 v1(DICOM + XLSX) 22.86 GB 唯一有 DOI 与官方维护的版本,临床表为 revision 修正版
快速跑通/教学 demo Kaggle 镜像 alexnguyen10 22.86 GB 一条 kaggle CLI 命令下载,含 metadata.csv 方便过滤
轻量分类实验(无 DICOM 依赖) openmedlab PNG 转换版 约 3 GB 量级 统一 2,294×1,914 PNG、自带 train/val 列表,但数字口径与其余版本不同(5,334 幅)
云端/大规模流水线 NCI IDC 门户 按需过滤 可按 collection_id=cmmd 在云端拉取,免本地存储

§3.1 模态详情

CMMD 为全野数字乳腺钼靶(FFDM,DICOM 模态 MG)。每名受检侧常规采集两个投照体位:CC(头足位)与 MLO(内外斜位);D2 系列患者常规双侧检查,因此一名 D2 患者通常有 4 幅图像(左右乳腺 × CC/MLO),D1 患者则可能只有单侧 2 幅。图像以 TIFF 格式在院内采集、由 TCIA 标准流程转换为 DICOM(保留 8-bit 灰度量级),并完成去标识化。这是单一设备厂商(GE Senographe DS)数据集,与多机型混合的 VinDr-Mammo 形成对照:域偏移风险更可控,但机型泛化能力无从验证。需要特别指出:原始 TIFF 源决定了 CMMD 的灰度动态范围停留在 8-bit 量级,这与 16-bit 原生 DICOM 的现代 FFDM 库(如 VinDr-Mammo)在预处理上不可通用,跨库实验必须重建强度归一化策略(见坑点 6)。

§3.2 按子集样本数

子集 患者/例数 图像数(论文口径) 良性 恶性 异常构成(肿块/钙化/兼有) 特征
CMMD1(D1-xxxx) 1,026 2,214 544 563 726 / 158 / 223 活检证实良恶性,年龄均值 45.92
CMMD2(D2-xxxx) 749 1,498 0 749 417 / 98 / 234 全部恶性 + 分子亚型,年龄均值 49.82
合计 1,775 3,712 544 1,312 — TCIA 统计实际收录 5,202 幅 DICOM

注意表内「图像数」采用论文 Table 2 口径;TCIA 门户统计的 5,202 幅包含 D2 患者双侧乳腺的额外图像,两种口径的详细辨析见坑点 4。一个实用的核对关系:1,775 个患者文件夹、每文件夹 1-6 幅图像,全库合计 5,202 幅;论文的 3,712 幅则是「统计进各子集分析」的图像数。复现任何一篇论文前,先确认它声明的是哪一口径,再把实验样本量对齐到该口径,否则连 DataLoader 的长度断言都会失败。

§3.3 数据格式

内容 格式 说明
影像 DICOM(MG) TCIA 标准去标识化处理;文件名形如 1-1.dcm、1-2.dcm
临床数据 XLSX CMMD_clinicaldata_revision.xlsx,70.25 kB,含 ID1/ID2、Age、Type、Classification 与分子亚型列
Kaggle 镜像元数据 CSV metadata.csv(684 kB),TCIA DICOM 元数据导出,24 列
官方处理代码 Python CMMD_dataprocess.py,演示 xlsx 行遍历与左右乳腺判别逻辑

§3.4 存储大小

TCIA 官方 DICOM 包 22.86 GB(网页页面亦标 22.9 GB,四舍五入差异);临床表 70.25 kB;Kaggle 镜像解压后同为 22.86 GB(5,205 个文件)。若按 openmedlab 的 PNG 重编码版本使用,体积约降至 3 GB 量级,但会损失原始 DICOM 头信息,且不能再与 TCIA 版本逐字节对齐。规划存储时建议预留三倍空间:原始包 23 GB + 解压 23 GB + 预处理产物(1,024² uint8 约 2-3 GB),合计 50 GB 以内可在任何入门级云盘完成全流程。

§3.5 标注方式

标注为人工、病理金标准型:良恶性由穿刺活检病理确定(而非影像分级),异常类型(肿块/钙化/兼有)由两名医生读片判定、不一致时结合病理报告裁定;恶性病例的分子亚型由免疫组化(必要时 FISH)确定。没有任何自动或弱监督标签。数据集不含病灶级标注(无框、无轮廓、无 BI-RADS 类别),论文将此列为第二条局限。

§3.6 标注者资质与一致性

论文未公布读片医生的资历与一致性统计(如 Kappa 值),仅说明「两名医生意见不一致时结合病理报告确定异常类型」。良恶性标签以病理为终点,实际不存在观察者间一致性问题;需要警惕的是异常类型三分类的观察者一致性未经报告,做该字段监督任务时应自行抽样复核。

§3.7 采集周期

2012 年 7 月至 2016 年 1 月,连续约 3.5 年的院内诊断性检查。数据集无逐例检查日期字段,无法做严格的时间外(out-of-time)验证;时间漂移分析只能依赖 DICOM 头内的机构级线索或按患者编号近似分组。另一个隐性后果是:采集期早于数字化乳腺摄影普遍升级的 2016 年后浪潮,图像风格相对「老一代」,用近年设备数据做部署评估时要预留风格差余量。

§3.8 地域覆盖

中国广东省两所三级医院:广州市中山大学肿瘤防治中心(肿瘤专科)与佛山市南方医科大学南海医院(综合)。两院病例混合发布,未按医院提供分层标签,因此「按中心划分」的稳健性检验无法直接实现,只能在论文层面提示该混杂。作为补偿手段,可以在患者编号前缀(D1/D2)之外,用图像风格聚类近似估计中心归属,再做敏感性分析——这属于低成本、可公开的稳健性检查。

§3.9 设备规格

全库统一使用 GE Senographe DS 数字乳腺机采集,CC + MLO 双体位。原始 TIFF 经 TCIA 转换为 DICOM,灰度量级保留 8-bit。像素矩阵尺寸未在官方文档中逐一公布;社区 PNG 版统一为 2,294×1,914 量级,个别原始 DICOM 因投照差异尺寸略有不同。压缩厚度、曝光参数等物理元数据在去标识化后已不可恢复,后续研究只能从像素层面近似推断。MPE-DiGA-Net 的作者明确指出:由于严格的公开去标识化流程,压缩厚度与曝光时间等物理参数已丢失或移除,他们的做法是在图像层面用 Gabor 与频域特征做补偿建模——这可以作为同类问题的参考方案。

§3.10 深度溯源链

  1. 院内采集:佛山/广州两院在临床诊断流程中以 GE Senographe DS 采集并输出 TIFF;
  2. 团队整理:华南理工大学生物信息学团队(论文通讯作者 Hongmin Cai)清理临床与影像数据,志愿者参与核对(NSFC 61771007 等资助);
  3. TCIA 策展:经标准 curation 工作流去标识化、转换为规范 DICOM,2021-04-06 发布为 CMMD collection(DOI 10.7937/tcia.eqde-4b16);
  4. 论文发表:2023-03-07 Scientific Data 数据描述论文提供官方统计(Table 2)与处理脚本(GitHub);
  5. 云端整合:NCI Imaging Data Commons(IDC/CRDC)将影像纳入云端托管,支持标准 DICOM 查询。

§4 数据结构

§4.0 目录树

以 Kaggle 镜像解压结果为例(TCIA NBIA 直下下载结构相同,仅少 metadata.csv):

TheChineseMammographyDatabase/
├── CMMD/                                  # 影像根目录
│   ├── D1-0001/                           # 每名患者一个文件夹,共 1,775 个
│   │   ├── 1-1.dcm                        # 第 1 次检查第 1 幅(CC 或 MLO)
│   │   └── 1-2.dcm                        # 单侧患者常见 2 幅
│   ├── D1-0002/
│   │   └── ...
│   ├── D2-0001/
│   │   ├── 1-1.dcm                        # D2 患者常规双侧 4 幅(CC+MLO × 左右)
│   │   ├── 1-2.dcm
│   │   ├── 1-3.dcm
│   │   └── 1-4.dcm
│   └── ...
├── CMMD_clinicaldata_revision.xlsx        # 临床表(1,775 名患者 / 约 1,872 个乳腺侧行)
└── metadata.csv                           # 仅 Kaggle 镜像附带(DICOM 元数据导出)

要点:患者文件夹名即 TCIA PatientID(D1-xxxx / D2-xxxx);同一患者所有图像在一个文件夹内;临床表的一行对应一个乳腺侧,双侧受检的患者在表中出现两行。

§4.1 DAIMS 字段字典

字段 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
PatientID(文件夹名) 文本 TCIA 患者标识;行内同时有 ID1 与 ID2 时只存 ID2 D1-0202 分组划分的主键(防泄漏) 无 — D1-0001 至 D2-xxxx,1,775 个
文件名 文本 「检查序号-图像序号」命名 1-3.dcm 定位视图与侧别线索 同侧多视图需自行解析 — 每文件夹 1-6 幅
ID1 / ID2 文本 临床表中的乳腺侧标识;双侧受检行同时含两个值 ID2 = D1-0202 把影像文件夹映射到具体受检侧 双侧行的 ID1 格式需以 release 为准 — 与 PatientID 同域
Age 整数 活检时年龄(岁) 47 年龄分层评估、偏倚分析 缺失行未见官方统计 空值需过滤 17-87
Type 分类型 异常构成 Mass / Calcifications / Both 多标签辅助任务、分层评估 两名医生裁定,一致性未报告 无 3 类
Classification 分类型 该乳腺侧的病理结论 Benign / Malignant 主标签(二分类) 病理终点,误差可忽略 无 2 类
分子亚型(仅 CMMD2) 分类型 IHC/FISH 确定的四类亚型 Luminal B 影像-分子关联研究 仅恶性有值 良性/CMMD1 为空 4 类(152/376/135/86)
视图/侧别 未显式提供 CC/MLO 与左右需从 DICOM 标签或图像推断 官方脚本以首列像素判 L/R 视图级建模、多视图融合 无官方字段,推断有误判风险 — L/R × CC/MLO

§4.2 标签分布

同一数据集在不同计数层级下的标签分布(全部有来源,注意口径差异):

计数层级 良性 恶性 合计 来源
患者级(D1/D2 编号) — 749 例恶性亚型(D2) 1,775 论文 Table 2
论文乳腺侧级(Table 2) 544 1,312(563+749) 1,856 论文 Table 2
社区乳腺侧级(xlsx 行) 556 1,316 1,872 MPE-DiGA-Net 表 1;官方脚本 range(1,1872)
图像级(PNG 社区版) 1,232 4,102 5,334 openmedlab 词条

论文与社区口径相差 16 个良性侧(544 vs 556):临床表 revision 更新过标签所致,属正常现象,但复现数字时必须声明口径。

解读这张表的方法:四层口径各有用途——患者级用于划分与安全声明,乳腺侧级用于训练标签,图像级用于 DataLoader 断言,论文口径用于对照原文。把它们写进实验记录的四行表头,是防止「复现时少 300 个样本」这类事故最便宜的办法。

§4.3 关键统计

统计项 数值 备注
患者数 / 检查数 / series 数 1,775 / 1,775 / 1,775 TCIA 门户,每患者合并为一个 series
图像总数 5,202 幅 DICOM 平均每患者 2.93 幅
恶性亚型分布 Luminal A 152 / Luminal B 376 / HER2 富集 135 / 三阴 86 合计 749
年龄中位数 45(CMMD1)/ 49(CMMD2) 论文 Table 2
官方公告重复图对 2 组(D1-0202↔D2-0284;D1-0808↔D1-1292) 像素哈希相同,划分前必须处理
许可 CC BY 4.0 TCIA 官方页面

§4.4 示例记录

临床表(CMMD_clinicaldata_revision.xlsx,示意结构;一行 = 一个乳腺侧)
┌─────────┬─────────┬─────┬────────────┬────────────────┬───────────┐
│ ID      │ ID1     │ Age │ Type       │ Classification │ 分子亚型  │
├─────────┼─────────┼─────┼────────────┼────────────────┼───────────┤
│ D1-0202 │ D1-0202 │ 47  │ Mass       │ Benign         │ (空)    │
│ D2-0284 │ D2-0284 │ 55  │ Both       │ Malignant      │ Luminal B │
└─────────┴─────────┴─────┴────────────┴────────────────┴───────────┘

影像侧(pydicom 关键标签,示意)
Modality = MG
PhotometricInterpretation = MONOCHROME1     # 读图需先反转(坑点 6)
PatientID = D2-0284                          # TCIA 规则:双侧行只存 ID2
文件组织 = D2-0284/1-1.dcm ... 1-4.dcm       # CC+MLO × 左右,共 4 幅

两行示例正好对应 TCIA 公告的一组重复图对(D1-0202 与 D2-0284 的四幅影像像素级相同):一个是良性侧、一个是恶性侧却共享同一组像素,这也是官方「无法判定哪份更正确」的原因,处理方式见坑点 2。

§4.5 数据层级

患者(1,775)
└── 检查/Study(1,775,每患者 1 次)
    └── Series(1,775,TCIA 将同一患者全部图像合并为 1 个 series)
        └── 图像(5,202 幅,CC/MLO × 单/双侧)
            └── 标签(乳腺侧级:Benign/Malignant + Type + 亚型)

关键结构特征:标签挂在「乳腺侧」上,图像挂在「患者」上,两者通过临床表 ID1/ID2 与文件夹名对接——这正是泄漏与标签错配的根源(见坑点 1、坑点 3)。

§4.6 缺失值与信息性缺失

字段 缺失情况 处理建议
分子亚型 良性与 CMMD1 全部为空 信息性缺失:空值即「非恶性」,禁止用均值/众数填充
检查日期 无字段 放弃 out-of-time 验证,改用编号近似分组
逐例设备/体位参数 去标识化后不可恢复 从像素统计推断(密度、边框)
视图/侧别标签 无显式字段 读 DICOM 头(ViewPosition/ImageLaterality,若保留)或用官方脚本的首列像素法
异常类型一致性 未报告 Kappa 用前抽样人工复核 50-100 行

§5 划分与使用建议

§5.1 官方划分

官方不提供任何训练/验证/测试划分,论文与 TCIA 均按全库发布。任何论文报告的 CMMD 成绩都隐含一次自定义划分(见 §8.3 评测协议),跨论文比较必须先核对划分方式。这不是 CMMD 独有的问题,却是它在方法学上最容易踩空的地方:TCIA 数据库的收藏以「完整发布」为惯例,划分留给使用者,好处是划分可自由设计(例如留出特定年龄段做域外验证),代价是每个数字都自带一套私有协议。

§5.2 社区惯例划分

  1. 患者级 7:1:2 随机分组(MPE-DiGA-Net, 2025):严格按患者隔离划分,97 例双侧患者的左右乳腺、全部视图强制进入同一子集,是目前最严谨的可复现协议;
  2. openmedlab PNG 版 train/val 列表:提供 train.txt/val.txt 的轻量划分,图像级组织,适合教学快速跑通,但不宜用于发表级结论;
  3. IEEE Access LCVT-GR 研究(Wu et al., 2024)自定义乳腺癌侧级划分并报告置信区间;
  4. Kaggle Notebook 惯例:不少公开 notebook 直接对图像做随机 8:2 划分——这种做法在 CMMD 上几乎必然泄漏(同患者视图分属两侧),仅可作代码教学演示,严禁进入发表流程。

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

CMMD 的泄漏风险集中在三层,任何一层没堵住都会让指标虚高:

  1. 患者层:同一患者的 CC 与 MLO 视图、左右乳腺高度相关,随机按图像或按侧划分即泄漏;
  2. 重复图像层:TCIA 官方公告 2 组像素完全相同的图像(D1-0202 与 D2-0284、D1-0808 与 D1-1292),若恰好分属训练与测试集,等于在测试集里「背答案」;
  3. 标签层:D2 患者一侧恶性、对侧良性,若按患者聚合标签,会把对侧正常乳腺错误卷入恶性样本(见坑点 1)。

推荐协议:先按官方公告剔除或标记重复图对 → 以 PatientID 为分组键做 GroupShuffleSplit(7:1:2)→ 在训练集内做 GroupKFold 交叉验证 → 全流程固定随机种子并公开划分文件。划分落盘示例:

import json

tr_idx, te_idx = mf.split(seed=42)
splits = {"train": [mf.rows[i][0] for i in tr_idx],
          "test": [mf.rows[i][0] for i in te_idx]}
with open("cmmd_split_v1.json", "w") as f:
    json.dump(splits, f, ensure_ascii=False, indent=1)
# MLOps 门禁:训练脚本只读 cmmd_split_v1.json,禁止运行时重新划分

§5.4 交叉验证建议

以 5 折或 10 折 GroupKFold(groups=PatientID,stratify=Classification 的组级标签)为默认;每折报告 AUC 与 AUC-PR 的均值 ± 标准差;D2 的分子亚型任务在恶性子集内另行分层抽样,保证每折四类亚型可见。两个实操细节:其一,GroupKFold 本身不支持分层,可先给每个患者打组级标签(该患者任一侧恶性即为恶性)再借助分层采样库或自定义分配实现;其二,若同时训练 Type 多标签辅助任务,每折内三类异常(Mass/Calc/Both)都应保有足够样本,折前打印分布。

§5.5 外部验证建议

首选方向:在 CMMD 训练 → CBIS-DDSM/INbreast/VinDr-Mammo 外部测试(跨机型、跨人群、跨标注体系);反向方向(欧美数据训练 → CMMD 测试)已有 Velarde et al. 2024 的 826 次检查先例(AUC 0.90,见 §7.8)。跨库时注意像素位深与窗宽窗位差异(CMMD 为 8-bit 量级、VinDr 为 16-bit),先做强度归一化对齐再迁移。

§6 AI 就绪指南 ⭐

§6.0 云端快速启动

不经本地下载的两条路径:其一,NCI IDC 门户(portal.imaging.datacommons.cancer.gov)按 collection_id=cmmd 过滤,用其 Python 客户端直接拉取 DICOM;其二,Kaggle Notebook 平台已内置 alexnguyen10 镜像,挂载路径 /kaggle/input/the-chinese-mammography-database/,零下载成本,适合首个实验。

两条路径的取舍:IDC 适合正式研究与联合查询(数据与官方 DOI 同源、可与其他 IDC collection 混算),Kaggle 适合教学与原型(GPU 白嫖、加载快,但镜像非官方渠道,发表引用仍回官方 DOI)。在 Kaggle 上起步的最小验证:挂载数据后先运行 §6.1 的健全性检查脚本,确认目录挂载点、患者文件夹数与临床表列名都符合预期,再开 GPU 会话,避免浪费配额。

§6.1 快速上手

下面的脚本预期目录结构为 data_root/CMMD/<PatientID>/<文件>.dcm(与 §4.0 目录树一致,data_root 即解压根目录),并用临床表建立「患者文件夹 → 标签」的最小映射;最小可用子集是任一 D2 文件夹(4 幅图,标签恒为 Malignant,便于先验证管线)。

import pydicom, pandas as pd, glob, os

data_root = "/data/TheChineseMammographyDatabase"   # 解压根目录
clinical = pd.read_excel(
    os.path.join(data_root, "CMMD_clinicaldata_revision.xlsx"))

# 每行 = 一个乳腺侧;ID 列(TCIA 规则:双侧时只存 ID2)对应患者文件夹
print(clinical.columns.tolist())
print(clinical["Classification"].value_counts().to_frame().T)

# 读取某患者的一幅图并检查关键 DICOM 标签
files = sorted(glob.glob(os.path.join(data_root, "CMMD", "D2-0001", "*.dcm")))
ds = pydicom.dcmread(files[0])
print(ds.Modality, ds.PhotometricInterpretation,
      ds.pixel_array.shape, ds.pixel_array.min(), ds.pixel_array.max())

先跑这段代码确认三件事:临床表列名与预期一致、PhotometricInterpretation 是否为 MONOCHROME1(灰度反转,见坑点 6)、像素值域是否为 8-bit 量级。

第二步建议立刻做一次「表-图对齐健全性检查」,这段脚本会暴露坑点 1/2 的绝大多数问题:

import glob, os

# 1) 患者文件夹数断言
folders = sorted(glob.glob(os.path.join(data_root, "CMMD", "D*")))
assert len(folders) == 1775, f"患者文件夹数异常: {len(folders)}"

# 2) 每患者图像数分布(2-4 幅为常态,1 或 5-6 幅需目检)
from collections import Counter
counts = Counter(len(glob.glob(os.path.join(d, "*.dcm"))) for d in folders)
print("图像数分布:", dict(sorted(counts.items())))

# 3) 临床表 ID 与文件夹名交集断言
ids_sheet = set()
for col in ("ID", "ID2", "ID1"):
    if col in clinical.columns:
        ids_sheet |= set(clinical[col].dropna().astype(str))
ids_disk = {os.path.basename(d) for d in folders}
print("表中有图无行:", len(ids_disk - ids_sheet),
      "行中有图无盘:", len(ids_sheet - ids_disk))

# 4) 重复图对黑名单断言(坑点 2)
BLACKLIST = {"D1-0202", "D2-0284", "D1-0808", "D1-1292"}
assert BLACKLIST.issubset(ids_disk), "官方重复图对文件夹缺失,版本不对?"

§6.2 数据获取

渠道 方式 大小 前置条件
TCIA 官方(DICOM) 下载 .tcia 清单并用 NBIA Data Retriever 拉取 22.86 GB 安装 NBIA Data Retriever,免注册
TCIA 在线检索 NBIA 检索页 按患者挑选 按需 浏览器即可
Kaggle 镜像 kaggle datasets download 22.86 GB Kaggle 账号 + API token
NCI IDC 云端 IDC 门户/API,collection_id=cmmd 按需 Google 账号(BigQuery 计费额度)
临床表 TCIA 页面直接下载 XLSX 70.25 kB 无
# 方式 A:Kaggle 镜像(最快)
pip install kaggle
kaggle datasets download -d alexnguyen10/the-chinese-mammography-database
unzip the-chinese-mammography-database.zip -d /data/cmmd

# 方式 B:TCIA 官方(研究发布首选)
# 1) 从 TCIA 收藏页下载 The Chinese Mammography Database.tcia 清单
# 2) 安装 NBIA Data Retriever 后打开清单文件即可批量下载

# 方式 C:Python 内调用 TCIA API(tcia_utils,需本机可访问 NBIA 服务)
pip install tcia_utils
python - <<'PY'
from tcia_utils import nbia
series = nbia.getSeries(collection="CMMD")   # 查询全部 series 清单
print(len(series), "series")                 # 预期 1,775 个(每患者 1 个)
# 批量下载可继续调用 nbia 包的下载接口,或将输出导出为 .tcia 清单
# 交给 NBIA Data Retriever 执行,稳定性和断点续传更佳
PY

云端路径(NCI IDC):IDC 将 CMMD 纳入 NCI CRDC 云托管,可直接用其 Python 客户端按 collection_id = "cmmd" 过滤并通过 BigQuery/Google Cloud Storage 拉取 DICOM;适合在 Colab/Vertex 等云端环境免下载做全库实验,也便于与 IDC 内其他影像数据集联合查询。

§6.3 预处理全流程

流程:DICOM 读取 → 灰度方向校正(MONOCHROME1 反转)→ 乳腺区域裁剪(去黑边与标签)→ 统一尺寸 → 强度归一化。完整脚本如下。

<details>
<summary>展开完整预处理脚本(约 45 行)</summary>

import cv2, numpy as np, pydicom, os

def load_mammogram(path):
    """读取 DICOM 钼靶并返回方向正确的 float32 灰度图(0-1)。"""
    ds = pydicom.dcmread(path)
    img = ds.pixel_array.astype(np.float32)
    if getattr(ds, "PhotometricInterpretation", "") == "MONOCHROME1":
        img = img.max() - img            # 灰度反转:MONOCHROME1 中亮=高值需翻转
    img /= max(img.max(), 1.0)
    return img

def crop_breast(img, pad=0.02):
    """阈值分割乳腺区域并裁剪黑边(保留 2% 边距)。"""
    thr = img > 0.05 * img.max()         # 低阈值找出非空气区域
    mask = thr.astype(np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE,
                            cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15)))
    num, _, stats, _ = cv2.connectedComponentsWithStats(mask)
    if num > 1:                          # 取最大连通域(乳腺主体)
        i = int(stats[1:, cv2.CC_STAT_AREA].argmax()) + 1
        x = int(stats[i, cv2.CC_STAT_LEFT])
        y = int(stats[i, cv2.CC_STAT_TOP])
        w = int(stats[i, cv2.CC_STAT_WIDTH])
        h = int(stats[i, cv2.CC_STAT_HEIGHT])
        px, py = int(pad * w), int(pad * h)
        return img[max(y - py, 0):y + h + py, max(x - px, 0):x + w + px]
    return img

def preprocess(path, out_dir, size=1024):
    img = load_mammogram(path)
    img = crop_breast(img)
    img = cv2.resize(img, (size, size), interpolation=cv2.INTER_AREA)
    pid = os.path.basename(os.path.dirname(path))
    os.makedirs(out_dir, exist_ok=True)
    np.save(os.path.join(out_dir, f"{pid}_{os.path.basename(path)}.npy"),
            (img * 255).astype(np.uint8))

if __name__ == "__main__":
    import glob
    for f in glob.glob("/data/cmmd/CMMD/*/*.dcm"):
        preprocess(f, "/data/cmmd_proc")

</details>

注意:crop_breast 的连通域选择逻辑在标签贴纸贴于乳腺本体时可能误裁,处理后应目检 20-30 张抽样图;8-bit 源数据禁止再压缩动态范围(见坑点 6)。

批量驱动建议带断点续跑与失败清单,全库 5,202 幅在普通 CPU 上数分钟到数十分钟可完成:

import glob, os, traceback

done = {os.path.basename(f) for f in glob.glob("/data/cmmd_proc/*.npy")}
failures = []
all_files = sorted(glob.glob("/data/cmmd/CMMD/*/*.dcm"))
for f in all_files:
    name = os.path.basename(os.path.dirname(f)) + "_" + os.path.basename(f)
    if name in done:
        continue                          # 断点续跑
    try:
        preprocess(f, "/data/cmmd_proc")
    except Exception:
        failures.append(f)
        traceback.print_exc()
print(f"processed {len(all_files) - len(failures)}/{len(all_files)}",
      f"failed {len(failures)}")

跨库对齐(迁移到/来自 16-bit 库时)追加两步:其一,统一到 float32 后按 2%-98% 百分位裁剪再归一化,防止极值拉伸;其二,对每个数据集各采样 200 幅估计强度直方图,做分位数对齐后再训练,可显著降低域差(AIMS 跨库研究正是因 16-bit 位深问题专门处理了 VinDr-Mammo 的装载方式)。

质检三查:一查输出尺寸分布(应统一为 1,024×1,024);二查灰度均值直方图(异常突变多为裁剪失败,标签贴纸被并入乳腺区域);三查每患者产出图像数与源文件夹一致(2-4 幅为常态,1 或 6 幅的文件夹需人工目检)。

§6.4 PyTorch DataLoader 完整代码

<details>
<summary>展开完整 Dataset 与划分代码(约 60 行)</summary>

import glob, os, numpy as np, pandas as pd, torch
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import GroupShuffleSplit

LABEL_MAP = {"Benign": 0, "Malignant": 1}

class CMMDManifest:
    """把临床表与 DICOM 文件夹对齐,产出 (图像路径, 侧级标签, 患者组) 三元组。"""
    def __init__(self, data_root, proc_dir="/data/cmmd_proc"):
        self.clinical = pd.read_excel(
            os.path.join(data_root, "CMMD_clinicaldata_revision.xlsx"))
        self.clinical = self.clinical.dropna(
            subset=["Classification"]).reset_index(drop=True)
        self.proc_dir = proc_dir
        # PatientID -> 标签:按 TCIA 规则取 ID2;D2 全恶性、D2 对侧良性需按行处理
        self.rows = []
        for _, r in self.clinical.iterrows():
            pid = str(r.get("ID") or r.get("ID2"))
            for f in sorted(glob.glob(os.path.join(
                    proc_dir, f"{pid}_*.npy"))):
                self.rows.append((f, LABEL_MAP[r["Classification"]], pid))

    def split(self, seed=42):
        groups = [g for _, _, g in self.rows]
        labels = [l for _, l, _ in self.rows]
        gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=seed)
        tr, te = next(gss.split(groups, groups=groups, y=labels))
        return tr, te

class CMMDDataset(Dataset):
    def __init__(self, rows, train=True):
        self.rows, self.train = rows, train
        self.mean, self.std = 0.5, 0.25     # 钼靶灰度经验值,可按子集重算
    def __len__(self):
        return len(self.rows)
    def __getitem__(self, i):
        path, label, _ = self.rows[i]
        x = np.load(path).astype(np.float32) / 255.0
        if self.train:                      # 训练期轻度增强(见 §6.6)
            if torch.rand(1).item() < 0.5:
                x = x[:, ::-1].copy()       # 水平翻转(注意左右侧语义,见坑点 7)
            k = np.random.uniform(0.9, 1.1)
            x = np.clip(x * k, 0, 1)
        x = (x - self.mean) / self.std
        return torch.from_numpy(x[None].copy()), label

if __name__ == "__main__":
    mf = CMMDManifest("/data/TheChineseMammographyDatabase")
    tr_idx, te_idx = mf.split()
    tr_loader = DataLoader(CMMDDataset([mf.rows[i] for i in tr_idx]),
                           batch_size=16, shuffle=True, num_workers=4)
    te_loader = DataLoader(CMMDDataset([mf.rows[i] for i in te_idx], False),
                           batch_size=16, shuffle=False, num_workers=4)
    for x, y in tr_loader:
        print(x.shape, y.sum().item(), "/", len(y), " malignant in batch")
        break

</details>

设计说明:CMMDManifest 保持「一行一乳腺侧」的标签粒度(不按患者聚合,规避坑点 1);split() 以患者 ID 为分组键(规避坑点 3);正式实验请在此基础上先执行重复图对剔除(坑点 2)。

在此之上接一个最小训练循环即可跑通端到端(正式实验把占位卷积网替换为预训练 EfficientNet-B2/ResNet-101):

# 最小训练循环(二分类,BCEWithLogitsLoss)
import torch.nn as nn
from sklearn.metrics import roc_auc_score

model = nn.Sequential(
    nn.Conv2d(1, 16, 3, stride=2, padding=1), nn.ReLU(),
    nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Linear(16, 1))
opt = torch.optim.AdamW(model.parameters(), lr=1e-3)
lossf = nn.BCEWithLogitsLoss()

for epoch in range(3):
    model.train()
    for x, y in tr_loader:
        opt.zero_grad()
        loss = lossf(model(x).squeeze(1), y.float())
        loss.backward()
        opt.step()
    model.eval()
    ys, ps = [], []
    with torch.no_grad():
        for x, y in te_loader:
            ps.append(torch.sigmoid(model(x).squeeze(1)))
            ys.append(y)
    print(f"epoch {epoch}: test AUC = "
          f"{roc_auc_score(torch.cat(ys), torch.cat(ps)):.4f}")

如果训练 AUC 快速逼近 0.99 而验证 AUC 明显更低,先不要调参——回去检查是否触发了坑点 1/2/3 中的任何一条,CMMD 上「好得离谱」几乎总是泄漏的信号。

§6.5 坑点清单(8 个)

⚠️ 坑点 1:标签挂在乳腺侧而不是患者上(分类:标签理解)

问题:临床表一行对应一个受检乳腺侧,D2 患者一侧恶性、对侧良性;同时 TCIA 明确规则:行内同时有 ID1 与 ID2 时,影像数据库只把 ID2 存为 PatientID。直接按文件夹名(患者 ID)聚合标签,会把对侧良性乳腺错标成恶性。
症状:同一患者文件夹内的部分图像被判「恶性」,但目检为正常乳腺;或按患者聚合后样本量对不上论文数字(1,775 vs 1,872)。
解决:

  1. 简单方法:保持行级标签,模型输入只裁剪该受检侧乳腺(用左右判别或 DICOM 标签定位),绝不把对侧喂进同侧标签的批次;
  2. 进阶方法:解析 ID1/ID2 双值行,显式构建「患者-侧别-标签」三元表,再与文件夹内图像逐一对齐,对齐后打印每侧图像数分布做断言;
  3. SOTA 方法:按侧训练、按患者聚合评估(同患者多视图/双侧结果融合后再算 AUC),这也是 MPE-DiGA-Net 等研究的协议。
    参考:TCIA Detailed Description;MPE-DiGA-Net 数据协议

⚠️ 坑点 2:官方公告的像素级重复图像(分类:数据泄漏)

问题:TCIA 在页面上公告两组图像的像素哈希完全相同:D1-0202(series 尾号 31072)与 D2-0284(尾号 98151)的四幅图互相重复,D1-0808 与 D1-1292 亦然,且官方声明无法判定哪份「更正确」。
症状:重复图对若落入训练/测试两侧,测试成绩异常好看;跨镜像复现时样本量对不齐。
解决:

  1. 简单方法:划分前直接按官方公告的 4 个 PatientID 组剔除或归并到同一侧;
  2. 进阶方法:对全库做像素级 md5/sha 去重(预处理后按 .npy 哈希),输出重复清单并入划分逻辑;
  3. SOTA 方法:把去重做成可复现脚本(固定排序、固定哈希算法)随论文发布,审稿时可一键核验。
    参考:TCIA CMMD 页面重复公告

⚠️ 坑点 3:无官方划分 + 同患者视图强相关(分类:数据泄漏)

问题:官方不提供划分;同一患者的 CC/MLO 视图与双侧乳腺在像素与病理层面高度相关,图像级或乳腺侧级随机划分都会把「同一个答案」同时放进训练集和测试集。
症状:随机划分的 AUC 比患者级划分高出一大截;论文间数字差异悬殊且无法解释。
解决:

  1. 简单方法:GroupShuffleSplit(groups=PatientID) 一行完成患者级划分;
  2. 进阶方法:患者级 7:1:2 + 分层(按组级恶性比例)+ GroupKFold 交叉验证,输出划分文件随论文发布;
  3. SOTA 方法:复用 MPE-DiGA-Net 的协议(患者级隔离 7:1:2、双侧患者强制同子集),使结果可与文献直接对话。
    参考:MPE-DiGA-Net 划分协议;本条目 §5.3

⚠️ 坑点 4:规模数字五套口径(分类:工程陷阱)

问题:同一数据集存在五个「官方」数字:论文摘要 3,712、TCIA 描述 3,728、TCIA 统计 5,202 幅、PNG 社区版 5,334 幅、乳腺侧 1,872。论文内部 Table 2(良性 544/恶性 1,312)与临床表 revision(556/1,316)也相差 16 个良性侧。
症状:复现论文时样本量对不上;综述引用规模张冠李戴。
解决:

  1. 简单方法:写代码时只信「自己数出来的数」,并把口径(患者/侧/图像)写进实验记录;
  2. 进阶方法:用 §4.2 的四层分布表做核对表,每引用一个数字标注层级与来源;
  3. SOTA 方法:在论文方法节用一句话固定口径(如「breast-side level per revision xlsx」),审稿人与复现者不再歧义。
    参考:论文 Table 2;TCIA 页面

⚠️ 坑点 5:镜像版本与许可标注漂移(分类:工程陷阱)

问题:Kaggle 多个镜像并存,其中 tommyngx/cmmd2022 页面把许可标为 CC BY-NC 4.0,与官方 CC BY 4.0 不一致;临床表存在旧版与 revision 修正版之分,老 notebook 常引用旧文件。
症状:用旧临床表训练的模型标签比 revision 少 16 个良性侧修正;许可合规审查时被镜像页误导。
解决:

  1. 简单方法:只从 TCIA 官方页下载临床表,认准文件名含 revision;
  2. 进阶方法:镜像仅作加速下载用,元数据(许可、DOI、统计)一律回链 TCIA 收藏页核验;
  3. SOTA 方法:发布成果时同时引用数据集 DOI 与论文 DOI,并在仓库中记录下载日期与文件哈希。
    参考:tommyngx 镜像页;TCIA 官方页

⚠️ 坑点 6:MONOCHROME1 灰度反转与 8-bit 动态范围(分类:预处理陷阱)

问题:部分钼靶 DICOM 采用 MONOCHROME1(像素值越大越亮/白),与常规 MONOCHROME2 相反;源图像为 8-bit TIFF 转制,动态范围远低于 VinDr-Mammo 的 16-bit。
症状:预览图黑白反转(乳腺发黑、背景发白);直方图均衡后出现色带;跨库迁移时强度分布完全错位。
解决:

  1. 简单方法:读取时检查 PhotometricInterpretation,MONOCHROME1 就地反转(§6.3 的 load_mammogram);
  2. 进阶方法:统一转 float32 后按百分位裁剪(2%-98%)再归一化,防止极值拉伸;跨库时对每个数据集估计强度直方图并做分位数对齐;
  3. SOTA 方法:训练强度增广(gamma、对比度抖动)覆盖两套灰度约定,让模型对方向不敏感。
    参考:AIMS 跨库研究对位深的处理

⚠️ 坑点 7:没有 ROI 就不要做检测任务,翻转增强要分侧(分类:预处理陷阱)

问题:论文局限节明确「ROI 未标注」,整库无病灶框/轮廓;同时乳腺分左右,水平翻转若不换侧语义,会把左侧图像「伪装」成右侧。
症状:把 CMMD 当检测数据集用导致方法学错误被审稿人指出;翻转增强后模型把侧别相关特征(如乳沟方向)学错。
解决:

  1. 简单方法:任务限定为整图/整侧分类;翻转增强时同时交换侧别编码(若有)或在临床表中标注翻转事件;
  2. 进阶方法:先做乳腺分割裁剪(§6.3),把「侧别」从图像几何中剥离,再统一方向(如全部转为胸壁在右);
  3. SOTA 方法:需要病灶级监督时改用 CBIS-DDSM(自带 ROI),把 CMMD 留作外部验证集。
    参考:论文 Limitations

⚠️ 坑点 8:诊断性人群 + 类别不平衡,准确率与筛查指标全都会骗人(分类:评估误用)

问题:CMMD 全部为活检患者(无筛查阴性对照),且乳腺侧良恶性约 556:1,316 不平衡;在诊断人群中调出的准确率/敏感度不能外推为筛查性能。
症状:报告 accuracy 约 0.68-0.70 就宣称「接近临床可用」;跨库迁移后模型在正常人群中假阳性爆炸(Velarde 等发现多个公开模型外部表现骤降)。
解决:

  1. 简单方法:主指标用 AUC 与 AUC-PR,附按类敏感度/特异度与 bootstrap 95% CI(§6.9);
  2. 进阶方法:按年龄、异常类型(Mass/Calc/Both)分层报告,检验亚组稳定性;
  3. SOTA 方法:在论文中明确「diagnostic population, biopsy-confirmed」的定位,与筛查数据集(RSNA、VinDr-Mammo)互补使用,不做越界声明。
    参考:Velarde et al. 2024 外部验证;AIMS 类不平衡讨论

§6.6 数据增强

类别 操作 说明
✅ 安全 水平翻转(统一侧别后)、小角度旋转(±10°)、平移、亮度/对比度抖动、gamma 抖动 模拟投照与曝光差异,不改变病理语义
✅ 安全 弹性形变(低强度)、CutOut 小块遮挡 提升对腺体重叠的鲁棒性
⚠️ 谨慎 网格伪影模拟、压缩伪影模拟 只有在评估目标包含伪影鲁棒性时使用
❌ 危险 大角度旋转(>20°)、垂直翻转 破坏胸壁/乳头方向等解剖先验
❌ 危险 病灶粘贴/拷贝增强(copy-paste) 无 ROI 标注,无可靠粘贴位置,会引入假象
❌ 危险 放大位深或直方图均衡至跨库风格 会让模型依赖目标域风格,削弱跨库评估有效性

关于水平翻转再多说一句:钼靶图像的左右侧没有独立的侧别元数据字段时(CMMD 的情况),翻转增强等于「左侧图像变成右侧图像」,这在病理语义上无害(两侧发病机制相同),但若你的模型带有侧别编码或使用了「统一胸壁方向」的预处理(把所有图像转成胸壁在右),翻转就会破坏该约定,必须放在方向统一之前执行,或者干脆改用垂直对称轴上的小位移与旋转。

§6.7 模型推荐

场景 推荐模型 理由
单视图基线 EfficientNet-B2 / ResNet-101(ImageNet 预训练) 文献对照充分,CMMD 上 AUC 0.84-0.86 量级
视图融合 LCVT-GR(局部交叉视图 Transformer + 全局表示) CMMD 公开最优区间(AUC-ROC 0.8712)
双侧/双视图协同 双流 CNN + 注意力融合、Breast-wide-model 消除视图信息损失,优于单视图 PHResNet18
预训练底座 自监督(MoCo/DINO)先在 RSNA/VinDr 大库预训练,再 CMMD 微调 弥补 CMMD 体量不足
分子亚型任务 ResNet 系 + 多实例学习(MIL,按侧聚合) 亚型信号弱,需要侧级聚合降低噪声
校准与不确定性 温度缩放 + 深度集成 诊断辅助场景需要可靠的概率输出而非仅排序
轻量部署 MobileNetV3-large / EfficientNet-B0 MobileNetV3-large 在 CMMD 上 AUC 0.8558,可作边缘端候选

Backbone 选择的经验法则:CMMD 体量(1,775 名患者)不足以从头训练大容量 Transformer,ImageNet 预训练 CNN 或在更大钼靶库上自监督预训练的 backbone 是性价比最高的起点;视图融合带来的增益(单视图约 0.85 → 双视图协同约 0.87-0.89,LCVT-GR 论文内一致呈现)大于换 backbone 的增益。

§6.8 硬件需求

阶段 最低配置 推荐配置
数据预处理(5,202 幅) 8 核 CPU + 32 GB 内存,1 小时内完成 16 核 CPU,SSD 缓存处理产物
单视图分类微调 1× RTX 3060(12 GB),batch 8,224² 输入 1× RTX 4090(24 GB),batch 32,512² 输入
视图融合/Transformer 2× 16 GB 显存 4× A100-40G 或 2× A100-80G
全库 10 折交叉验证 单卡约 1-2 天(224²) 多卡并行数小时

§6.9 评估指标代码

import numpy as np
from sklearn.metrics import roc_auc_score, average_precision_score

def aggregate_by_patient(df):
    """侧级预测 → 患者级决策:任一侧恶性即判恶性(max 聚合)。"""
    return (df.groupby("PatientID")
              .agg(y_true=("y_true", "max"), y_score=("y_score", "max"))
              .reset_index())

def evaluate(y_true, y_score, n_boot=2000, seed=42):
    """侧级评估:AUC / AUC-PR + bootstrap 95% CI(按患者聚合请先在调用侧完成)。"""
    rng = np.random.default_rng(seed)
    y_true, y_score = np.asarray(y_true), np.asarray(y_score)
    aucs, aprs = [], []
    idx = np.arange(len(y_true))
    for _ in range(n_boot):
        b = rng.choice(idx, size=len(idx), replace=True)
        if len(np.unique(y_true[b])) < 2:
            continue                      # 重采样内单类时跳过
        aucs.append(roc_auc_score(y_true[b], y_score[b]))
        aprs.append(average_precision_score(y_true[b], y_score[b]))
    report = {
        "AUC": roc_auc_score(y_true, y_score),
        "AUC_CI": (np.percentile(aucs, 2.5), np.percentile(aucs, 97.5)),
        "AUC-PR": average_precision_score(y_true, y_score),
        "AUCPR_CI": (np.percentile(aprs, 2.5), np.percentile(aprs, 97.5)),
    }
    return report

报告模板:AUC 0.87(95% CI 0.84-0.90),AUC-PR 0.89(0.86-0.92),患者级划分,重复图对已剔除——一句话说清口径,避免坑点 8。

调用示例(把验证集预测汇总成 DataFrame 后一行得到完整报告):

import pandas as pd

model.eval()
rows = []
with torch.no_grad():
    for x, y in te_loader:
        p = torch.sigmoid(model(x).squeeze(1))
        rows.extend(zip(y.tolist(), p.tolist()))
df = pd.DataFrame(rows, columns=["y_true", "y_score"])
print(evaluate(df["y_true"], df["y_score"]))
# 如需患者级结论:evaluate 前先跑 aggregate_by_patient(df.assign(PatientID=...))

§6.10 MLOps 笔记

  1. 版本锚定:在配置文件中记录数据集 DOI(10.7937/tcia.eqde-4b16)、下载日期与全库文件数断言(5,202 幅 DICOM、1,775 个患者文件夹),数据变更即失败;
  2. 划分文件入库:把患者级划分(7:1:2)落盘为 JSON 并纳入 git,训练脚本只读文件,禁止运行时随机划分;
  3. 重复图对黑名单:TCIA 公告的 4 个 PatientID 写进配置常量并加单元测试;
  4. 口径仪表盘:训练/评估日志同时输出「图像数/侧数/患者数」三个口径,防止坑点 4 的错位;
  5. 外部验证门禁:模型晋级流程要求至少通过一个外部数据集(CBIS-DDSM 或 VinDr-Mammo)非劣性检查后再进入报告环节;
  6. 评估快照可复现:每次评估记录库 commit、数据哈希、种子与划分文件哈希四元组,保证任何时候都能重出同一张指标表;
  7. 报告模板化:把 §6.9 的一句话模板做成卡片,写作时填空而不是即兴措辞,杜绝「准确率 0.7 接近临床」式的越界表述。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
入选偏倚 全部为活检证实的诊断性病例,无筛查阴性人群 高 定位为诊断 CADx 研究;筛查问题用 RSNA/VinDr 数据
类别不平衡 乳腺侧约 556 良性 vs 1,316 恶性 中 AUC/AUC-PR 主指标 + 类平衡采样或 focal loss
机型单一 仅 GE Senographe DS 中 跨机型外部验证(Velarde 协议)
地域集中 广东两院,中国南方人群 中 报告地域信息;多中心验证
年龄结构偏年轻 中位 45-49 岁 中 年龄分层评估
标签粒度粗 仅侧级良恶性,无病灶级 高 检测/分割任务改用 CBIS-DDSM
重复图像 官方公告 2 组像素级重复 中 划分前按公告剔除并做哈希复查
亚型选择偏倚 分子亚型仅恶性 749 例有值 低 亚型任务限定在恶性子集内评估

这八类偏倚按「影响结论方向」排序:入选偏倚决定结果能不能外推到筛查,粒度粗决定能不能做检测,其余主要影响量级而非方向。立项前先问自己一句话——「我要的结论是否恰好落在这八条的高危区」,是则换库补数据,否则放心用 CMMD。

§7.2 标注质量

良恶性标签以穿刺活检病理为终点,属于数据集中最高等级的标签来源;异常类型由两名医生判定、分歧时结合病理,但观察者间一致性未量化公开。分子亚型依赖 IHC(ER/PR/HER2/Ki-67,Ki-67 阈值 20%)与必要时的 FISH,符合临床通行流程。总体判断:标签可信度高,粒度粗是主要短板而非正确性问题。三点操作建议:第一,把 Type 字段当作「弱标注」使用,监督任务前抽样复核;第二,良性类内部混有炎性、纤维囊性等异质病变,不要假设良性特征单一;第三,亚型四分类的样本量从 152 到 376 不等,类别均衡性中等,报告宏平均而非微平均。

§7.3 泛化性

场景 失效风险 证据
欧美筛查人群(外部部署) 中:人群年龄与密度结构不同 Velarde et al. 2024 的跨库复制显示外部表现两极分化
多机型(Siemens/Planmed 等) 中:单机型训练的纹理先验失配 CMMD 单一 GE 机型,无法内部验证
正常人群筛查召回 高:无阴性样本,假阳性率不可估 论文 Limitations;AIMS 跨库讨论
像素位深差异(16-bit 库迁移) 中:强度分布错位 AIMS 研究专门按 16-bit 装载 VinDr 以防精度损失
时间外推 未知:无逐例日期字段 §3.7

§7.4 伦理

数据经 TCIA 标准去标识化流程处理,受试者以 4 位编号(D1-xxxx/D2-xxxx)标识,仅保留以岁计的年龄。研究获相关机构伦理批准并在论文中说明(具体批件号未公开)。影像与临床数据的整理由华南理工大学团队志愿者协助完成,论文致谢中亦说明了资助来源(NSFC 61771007、广东省重点领域研发计划等)。使用者须遵守 CC BY 4.0 署名要求,引用数据 DOI 与论文;不建议尝试从 DICOM 头或像素水印反推受试者身份,也不应将影像重发布至弱许可环境。

§7.5 公平性

CMMD 全部为女性乳腺疾病患者,无男性病例统计;年龄段 17-87 岁覆盖但向中青年集中;地域限于中国广东。这些属性既是公平性研究的素材(训练 East-Asian 代表性模型),也是风险(不能宣称全人群代表)。分子亚型子集(749 例)进一步收窄人群,做亚型模型时须声明其选择偏倚。若做跨人群公平性对比,建议与 VinDr-Mammo(越南)和 RSNA(美国)构成三极对照,按年龄带 × 乳腺密度分桶比较敏感度/特异度,这比单点 AUC 对比更能暴露亚组差异。

§7.6 数据漂移

2012-2016 采集期内无逐例时间戳,无法定量分析时间漂移;设备单一使跨机型漂移也不可内测。可行的漂移监控:对新增外部数据做像素级密度分布与腺体占比对比,或用 Domain-Adversarial 训练观察特征分布位移。TCIA 状态为 Clinical Complete 且截至 2026-09 无 v2,数据端漂移风险主要来自「使用者自己混入其他版本/镜像」而非数据集自身更新。换句话说:给 CMMD 做版本治理的第一优先级不是等官方更新,而是在团队内部锁定「TCIA v1 + revision 临床表」这一组合,并把其他镜像明确标记为不可入模。

§7.7 DAIMS 数据质量评估(24 项)

# 检查项 状态 说明
1 宽格式 ✅ 临床表单表组织,影像与标签经患者 ID 关联
2 唯一标识 ✅ PatientID(D1/D2 四位编号)+ 文件级命名唯一
3 特殊字符 ⚠️ 文件夹名含连字符,跨平台路径需引号处理;无空格与中文
4 重复行 ⚠️ 双侧患者两行、同 ID1/ID2 双值行需显式处理;另有 2 组重复图像
5 缺失编码 ⚠️ 分子亚型空值即非恶性(信息性缺失),无统一缺失码
6 标签标识 ✅ Classification 字段直接可用,二分类语义清晰
7 罕见类分组 ⚠️ 良性无病理细分(炎性/纤维囊性等混在 Benign 内)
8 偏倚评估 ✅ 官方 Limitations 明确;本条目 §7.1 系统梳理
9 数据字典 ✅ 论文 Table 2 + TCIA 页面描述构成官方字典
10 信息性缺失解释 ⚠️ 亚型缺失含义明确,但官方未逐项说明其他字段缺失策略
11 设备记录 ⚠️ 仅厂商型号级别(GE Senographe DS),无逐例曝光参数
12 共线性 ✅ 特征维度极低(年龄+类型+标签),无共线性风险
13 编码映射 ✅ Benign/Malignant 与 ICD-11/SNOMED 映射直接(见 §2.1)
14 时间戳处理 ⚠️ 无采集日期字段,仅 2012-2016 区间级信息
15 划分建议 ✅ 患者级协议已在社区形成共识(7:1:2)
16 泄漏讨论 ✅ 视图相关性与官方重复公告均有据可查
17 标签分布 ✅ 论文 Table 2 提供子集×标签交叉统计
18 测量偏倚 ⚠️ 异常类型双人读片但一致性未量化
19 外部验证建议 ✅ 已有跨库验证先例(826 次检查外部 AUC 0.90)
20 版本记录 ✅ TCIA v1(2021-04-06)唯一版本,状态明确
21 预处理脚本 ✅ 官方 GitHub 提供 CMMD_dataprocess.py 清洗脚本
22 合规要求 ✅ CC BY 4.0,免注册,署名+引用即可
23 多模态对齐 ⚠️ 影像与临床表需手工 join,无统一索引文件
24 去标识化 ✅ TCIA 标准流程,头信息清洗+编号化

DAIMS 评分:19.5 / 24(✅ 计 1 分、⚠️ 计 0.5 分、❌ 计 0 分:15✅ + 9⚠️ = 19.5)

评分解读:CMMD 的短板集中在「元数据与标注粒度」(时间戳、设备参数、ROI、罕见类细分),而非数据本身的正确性。15 项满分覆盖了标识、标签、合规与版本这些决定项目成败的底座项;9 项半分几乎全部属于「可以靠使用者自行补齐」的工程性质。

对你意味着什么:把 CMMD 当作「高可信标签、低元数据」的诊断性数据库来规划项目——第一天就写好患者级划分与重复剔除脚本(坑点 2/3),把亚型空值当作信息性缺失处理(不要填充),并准备一个外部数据集作为晋级门禁;不要期待它能直接支持检测、分割或时间漂移分析,这些需求请换用 CBIS-DDSM 或 VinDr-Mammo。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
CMMD 作为外部测试集(826 次检查) NYU 团队(内部 AUC 0.88) 良恶性分类 外部 AUC 0.90 内部 0.88 → 外部 0.90(不降反升) 原位癌检出优于浸润癌;不对称影偏弱(Velarde et al. 2024)
CMMD + VinDr-Mammo 联合训练 AIMS 跨库研究 良恶性分类 AUC 0.85 CMMD 单库 0.77 → 联合 0.85 多中心联合缓解单库不平衡,联邦学习可部分替代
其他 3 个公开模型 → CMMD Velarde et al. 2024 良恶性分类 表现差(未达发表阈值) 显著下降 外部验证必要性最强实证之一

§8 基准性能与生态

§8.1 排行榜

⚠️ 各行来自不同论文与划分协议(患者级/侧级/外部测试不一),数值不可直接横向比较,仅供量级参考:

排名 模型 性能(CMMD) 年份 关键技术 完整引用 代码
1 NYU 模型(外部验证口径) AUC 0.90(826 次检查) 2024 大规模内部预训练 + 跨库外部测试 Velarde, O.M. et al., 2024, Journal of Imaging Informatics in Medicine 37:536-546. DOI 10.1007/s10278-023-00943-5 论文公开模型
2 LCVT-GR AUC-ROC 0.8712 / AUC-PR 0.8903 2024 局部交叉视图 Transformer + 全局表示协作 Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 论文附录
3 ResNet-101(单视图) AUC 0.8577 2024 ImageNet 预训练 backbone Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 论文附录
4 MobileNetV3-large(单视图) AUC 0.8558 2024 轻量 backbone Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 论文附录
5 EfficientNet-B2(单视图) AUC 0.8442 2024 复合缩放 backbone Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 论文附录
6 DenseNet-121(单视图) AUC 0.8321 2024 密集连接 backbone Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 论文附录
7 Breast-wide-model(多视图基线) AUC 0.7657 2024 全乳宽视野聚合 Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 论文附录
8 ResNet-101(联邦跨库口径) AUC 0.77±0.02(单库)/ 0.85(VinDr+CMMD 联合) 2025 跨库联合与联邦学习 AIMS Press 跨库研究, 2025. 论文页 未公开

§8.2 SOTA 总结与选型建议

CMMD 上公开可复现的最好量级在 AUC 0.85-0.90 之间:单视图 CNN 约 0.83-0.86,视图融合方法约 0.87-0.89,外部验证口径(大库预训练模型)可达 0.90。选型建议:基线阶段直接用 EfficientNet-B2/ResNet-101 微调即可逼近单视图上限;冲击上限时把精力花在视图融合与患者级聚合,而非更换 backbone;若目标是发表跨库结论,先跑通「内部 CMMD → 外部 CBIS-DDSM」的迁移评估,这一维度的空白比刷高内部 AUC 更有价值。另一个值得注意的现象是单视图与多视图基线的巨大差距:LCVT-GR 论文里多视图朴素基线(PHResNet18、Breast-wide-model)反而低于单视图模型,说明视图融合做对了是增益、做错了是噪声——双视图信息如何对齐是 CMMD 上真正的方法学难题。

§8.3 评测协议

社区已收敛出的公平协议四要素:患者级划分(7:1:2 或 GroupKFold)、重复图对剔除、AUC/AUC-PR + 95% CI 报告、口径声明(图像/侧/患者三级)。LCVT-GR 研究额外报告了乳腺癌侧级估计与置信区间,可作为报告模板。任何只报告 accuracy 或未声明划分层级的 CMMD 结果都不应进入对比。若投稿审稿被问「为什么不用别人论文的划分」,标准答案是:CMMD 无官方划分,各论文划分互不兼容,唯一可比的方式是在自己的划分上重跑对方公开的模型——所以划分文件与随机种子必须随论文发布。

数据集 相对 CMMD 的定位 建议组合用法
CBIS-DDSM 病灶级 ROI 标注库(美国胶片数字化) CMMD 分类训练 + CBIS ROI 检测互验
INbreast 小而精的欧洲 FFDM 库 通用外部测试集
VinDr-Mammo 大规模筛查分级库(越南) 预训练底座 + 跨人群验证
RSNA Screening Mammography 最大规模筛查标签库 自监督预训练 + 筛查式评估
MIAS/DDSM 历史基准 仅用于与方法学文献对齐

组合时的一个通用模式是「大库预训练 → CMMD 精调 → 第三库外部测试」:CMMD 的体量不足以支撑从头预训练,但其活检金标准标签又比纯筛查库更适合做最后的精调与校准,这正好把它放进流水线的中段而非头部。

§8.5 关键论文 Top 8

  1. Wang, J. et al., 2016, Scientific Reports 6:27327. DOI 10.1038/srep27327 —— 深度学习判别微钙化乳腺癌,CMMD 前身数据的早期验证。
  2. Wang, J., Yang, Y., 2018, Pattern Recognition 78:12-22. DOI 10.1016/j.patcog.2018.01.009 —— 上下文敏感的微钙化检测深度方法。
  3. Cai, H. et al., 2019, Computational and Mathematical Methods in Medicine 2019:2717454. DOI 10.1155/2019/2717454 —— 微钙化 DCNN 诊断,CMMD1 数据的系统应用。
  4. Clark, K. et al., 2013, Journal of Digital Imaging 26:1045-1057. DOI 10.1007/s10278-013-9622-7 —— TCIA 平台原始论文,引用 CMMD 时应同时引用。
  5. Cai, H. et al., 2023, Scientific Data 10:123. DOI 10.1038/s41597-023-02025-1 —— CMMD 数据描述论文,官方统计(Table 2)与局限的唯一权威来源。
  6. Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260 —— LCVT-GR 视图融合框架,CMMD 公开最完整的模型对比表。
  7. Velarde, O.M., Lin, C., Eskreis-Winkler, S., Parra, L.C., 2024, Journal of Imaging Informatics in Medicine 37:536-546. DOI 10.1007/s10278-023-00943-5 —— 四模型 × 四数据集外部复制研究,CMMD 作外部验证集的标杆实验。
  8. MPE-DiGA-Net, 2025, Journal of Computational Design and Engineering. DOI 10.1093/jcde/qwag071 —— 物理感知 + 证据驱动双视图框架,给出最严谨的患者级 7:1:2 协议与人群统计表。

§8.6 社区活跃度

截至 2026-09:论文在 Semantic Scholar 记录 67 次引用、ResearchGate 显示 113 次(两口径并行参考);TCIA 门户记录约 11k 次浏览与 19 次数据引用。Kaggle 镜像累计数千次下载(alexnguyen10 镜像约 3.9k 下载、tommyngx 镜像约 2.7k 下载,截至 2026-09)。官方 GitHub 仓库仅 1 个提交(数据清洗脚本),无活跃 issue 区;社区讨论主要发生在 Kaggle Notebook 与论文复现仓库中。总体属于「稳定成熟、缓速增长」的资源型数据集:引用增速集中在 2024-2025 年的跨库泛化与视图融合方法论文,官方不维护排行榜,社区也尚未形成单一的权威复现仓库——这意味着「把自己的划分与代码随论文发布」在 CMMD 生态里仍是一种稀缺品,做对了就是贡献。

§8.7 生态快照

资源 类型 链接 状态(截至 2026-09) 推荐理由
TCIA 收藏页 官方主页 cancerimagingarchive.net/collection/cmmd 在线,v1 唯一权威入口
Scientific Data 论文 数据描述论文 doi.org/10.1038/s41597-023-02025-1 开放获取 Table 2 官方统计
scutbioinformatics/CMMD 官方代码 github.com/scutbioinformatics/CMMD 静态(1 commit) xlsx 结构与 L/R 判别的官方参考
Kaggle 镜像 alexnguyen10 社区镜像 kaggle.com/datasets/alexnguyen10/the-chinese-mammography-database 在线 一键下载 + metadata.csv
NCI IDC 门户 云端托管 portal.imaging.datacommons.cancer.gov(collection_id=cmmd) 在线 云端查询与批量导出
openmedlab CMMD 词条 社区整理 Awesome-Medical-Dataset 在线 PNG 版统计与可视化样例
PubMed/PMC 论文页 文献入口 PMID 36882402 在线 引文管理与全文获取

§9 相关资源与引用

§9.1 官方与社区资源

§9.2 BibTeX 完整引用

@article{cai2023cmmd,
  title   = {An Online Mammography Database with Biopsy Confirmed Types},
  author  = {Cai, Hongmin and Wang, Jinhua and Dan, Tingting and Li, Jiao and
             Fan, Zhihao and Yi, Weiting and Cui, Chunyan and Jiang, Xinhua and
             Li, Li},
  journal = {Scientific Data},
  volume  = {10},
  pages   = {123},
  year    = {2023},
  doi     = {10.1038/s41597-023-02025-1}
}

@data{cui2021cmmd,
  author = {Cui, Chunyan and Li, Li and Cai, Hongmin and Fan, Zhihao and
            Zhang, Ling and Dan, Tingting and Li, Jiao and Wang, Jinghua},
  title  = {The Chinese Mammography Database (CMMD): An online mammography
            database with biopsy confirmed types for machine diagnosis of breast},
  year   = {2021},
  publisher = {The Cancer Imaging Archive},
  doi    = {10.7937/tcia.eqde-4b16}
}

@article{clark2013tcia,
  title   = {The Cancer Imaging Archive (TCIA): Maintaining and Operating a
             Public Information Repository},
  author  = {Clark, Kenneth and Vendt, Bruce and Smith, Kirk and
             Freymann, Jeremy and Kirby, Justin and Koppel, Paul and
             Moore, Stephen and Phillips, Stanley and Maffitt, David and
             Pringle, Michael and Tarbox, Lawrence and Prior, Fred},
  journal = {Journal of Digital Imaging},
  volume  = {26},
  number  = {6},
  pages   = {1045--1057},
  year    = {2013},
  doi     = {10.1007/s10278-013-9622-7}
}

@article{wu2024lcvt,
  title   = {Local Cross-View Transformers and Global Representation
             Collaborating for Mammogram Classification},
  author  = {Wu, Wenna and Rong, Qi and Lu, Zhentai},
  journal = {IEEE Access},
  year    = {2024},
  doi     = {10.1109/ACCESS.2024.3402260}
}

@article{velarde2024robustness,
  title   = {Robustness of Deep Networks for Mammography: Replication Across
             Public Datasets},
  author  = {Velarde, Osvaldo M. and Lin, Clarissa and Eskreis-Winkler, Sarah
             and Parra, Lucas C.},
  journal = {Journal of Imaging Informatics in Medicine},
  volume  = {37},
  pages   = {536--546},
  year    = {2024},
  doi     = {10.1007/s10278-023-00943-5}
}

@article{wang2016microcalc,
  title   = {Discrimination of Breast Cancer with Microcalcifications on
             Mammography by Deep Learning},
  author  = {Wang, Jinhua and Yang, Xujiong and Cai, Hongmin and Tan, Wuzheng
             and Jin, Chuan and Li, Li},
  journal = {Scientific Reports},
  volume  = {6},
  pages   = {27327},
  year    = {2016},
  doi     = {10.1038/srep27327}
}

§9.3 引用指南

使用 CMMD 发表成果时,最低引用组合为:数据集 DOI(cui2021cmmd)+ 数据描述论文(cai2023cmmd)+ TCIA 平台论文(clark2013tcia)。若使用了 TCIA 托管基础设施或 IDC 云端服务,按其数据使用政策追加对应引用;若复现了排行榜结果,请引用对应方法论文(wu2024lcvt、velarde2024robustness 等)。两点惯例:其一,在数据声明节写明下载日期与版本(v1,2021-04-06),防止审稿人质疑版本漂移;其二,若使用了社区镜像而非官方渠道,仍应引用官方 DOI,镜像本身不出现在引用列表中。

§10 AI 使用声明卡

§10.1 AI 模型列表

模型 版本 用途
检索增强问答模型 2026-09 在线版本 文献检索、事实核对、初稿生成
代码助手模型 2026-09 在线版本 §6 代码示例的编写与自查

§10.2 AI 参与范围

AI 负责检索并汇总公开来源(论文、TCIA 页面、Kaggle、GitHub)、起草章节文本与代码示例;章节结构、数字取舍、口径辨析与坑点筛选由编辑规范(写作宪法)约束并经人工审核。所有关键数字均回溯至带 URL 的来源(见 FACTS 事实清单与 §10.3)。AI 未参与任何入库、发布或写库操作;本页面仅交付 Markdown 与 FACTS 两个文件,不执行任何管线命令。

§10.3 输入来源列表

  1. Cai, H. et al., 2023, Scientific Data 10:123. DOI 10.1038/s41597-023-02025-1
  2. Cui, C. et al., 2021, The Cancer Imaging Archive. DOI 10.7937/tcia.eqde-4b16
  3. TCIA CMMD Wiki 页(统计、许可、重复公告),https://wiki.cancerimagingarchive.net/pages/viewpage.action?pageid=70230508
  4. TCIA 门户 CMMD 页(11k views / 19 citations),https://www.cancerimagingarchive.net?p=44389/
  5. PubMed 36882402(论文摘要与统计),https://pubmed.ncbi.nlm.nih.gov/36882402/
  6. PMC 全文(方法、IHC、Table 2),https://pmc.ncbi.nlm.nih.gov/articles/pmid/36882402/
  7. scutbioinformatics/CMMD 官方仓库(CMMD_dataprocess.py),https://github.com/scutbioinformatics/CMMD
  8. Kaggle 镜像 alexnguyen10(体积、文件数、许可),https://www.kaggle.com/datasets/alexnguyen10/the-chinese-mammography-database
  9. Kaggle 镜像 tommyngx/cmmd2022(许可标注漂移证据),https://www.kaggle.com/datasets/tommyngx/cmmd2022/data
  10. Wu, W., Rong, Q., Lu, Z., 2024, IEEE Access. DOI 10.1109/ACCESS.2024.3402260
  11. Velarde, O.M. et al., 2024, J Imaging Inform Med 37:536-546. DOI 10.1007/s10278-023-00943-5
  12. MPE-DiGA-Net, 2025, J Comput Des Eng. DOI 10.1093/jcde/qwag071
  13. AIMS Press 跨库研究(ResNet-101 基线、机构构成),https://aimspress.com/article/id/6942121eba35de55f26bf4fa
  14. openmedlab Awesome-Medical-Dataset CMMD 词条(PNG 版统计),https://github.com/openmedlab/Awesome-Medical-Dataset/blob/6de990be43a991f3da272a6814c811b2d856eb0c/resources/CMMD.md
  15. Semantic Scholar API(引用计数 67,2026-09-18 查询),https://api.semanticscholar.org/graph/v1/paper/DOI:10.1038/s41597-023-02025-1

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§1 概览与规模口径 千方病案医学编辑部 对照 TCIA 页与论文 Table 2 逐数核对 ✅ 已通过
§2 医学背景与术语映射 千方病案医学编辑部 ICD-11/SNOMED 标准库对照 ✅ 已通过
§3-§4 规格与字段字典 千方病案医学编辑部 官方脚本与 TCIA 描述交叉验证 ✅ 已通过
§5-§6 划分与代码 千方病案医学编辑部 泄漏逻辑复推与代码走查 ✅ 已验证
§7-§8 质量与基准 千方病案医学编辑部 原文数字与引用逐条回溯 ✅ 已通过

§10.5 AI 生成章节标注

§1-§10 初稿由 AI 依据上述来源起草;§2.1/§2.1b 术语映射、§4.1 字段字典、§6.5 坑点与 §7.7 DAIMS 评分为人工主导的判断性内容,AI 输出仅作底稿。风格与口径以写作宪法为准:数字全部回溯来源、中文简体维基口吻、代码示例可运行优先。

§10.6 最后人工审核

最后人工审核日期:2026-09-05(与 §0 审核日期一致)。

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



相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • cbis-ddsm — 共享标签:医学影像 / 乳腺影像 / X光影像 / 图像分类 / 乳腺癌
  • busi — 共享标签:医学影像 / 乳腺影像 / 图像分类 / 乳腺癌
  • inbreast — 共享标签:医学影像 / 乳腺影像 / 图像分类 / 乳腺癌
  • vindr-mammo — 共享标签:医学影像 / 乳腺影像 / X光影像 / 乳腺癌
  • odelia — 共享标签:医学影像 / 乳腺影像 / 图像分类 / 乳腺癌
  • bus-bra — 共享标签:医学影像 / 乳腺影像 / 图像分类 / 乳腺癌
  • chexpert — 共享标签:医学影像 / X光影像 / 图像分类
  • nih-chestx-ray14 — 共享标签:医学影像 / X光影像 / 图像分类
  • image-embeddings-mimic-cxr — 共享标签:医学影像 / X光影像 / 图像分类
  • mimic-cxr-jpg — 共享标签:医学影像 / X光影像 / 图像分类

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集