Montgomery CXR — 肺结核 X 光基准集 AI-Ready Wikipedia | 千方病案医数集

138 张 PA 胸片 + 双肺手工掩膜的肺结核筛查经典基准

来源 name: "美国国家医学图书馆 Lister Hill 生物医学传播中心(LHNCBC, NLM/NIH)" url: "https://www.lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayDatasets.html"发布时间: 2026-09-08最后更新: 2026-09-08 阅读 6

信息速览

数据集名称Montgomery CXR — 肺结核 X 光基准集 AI-Ready Wikipedia | 千方病案医数集
数据类型- "138 张 PA 胸片(单张 2.1-7.2 MB)" - "80 正常/58 结核" - "12-bit PNG 约 0.6 GB" - "左右肺手工掩膜各 138 张" -
规模138 名受检者(按影像计)
接入方式name: "美国国家医学图书馆 Lister Hill 生物医学传播中心(LHNCBC, NLM/NIH)" url: "https://www.lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayDatasets.html"
AI 就绪度

数据集封面

Montgomery County CXR Set — 肺结核 X 光筛查基准集 AI-Ready Wikipedia


INFOBOX

数据集名称 Montgomery County CXR Set
英文全称 Montgomery County chest X-ray Set(官方目录名 MontgomerySet)
别名/简称 MC set、Montgomery County X-ray Set、MCUCXR、蒙哥马利县结核病 X 光集
疾病分类 呼吸系统结核(ICD-11:1B10 呼吸系统结核;影像筛查标签建议映射 1B10.Z)
SNOMED CT 56717001 Tuberculosis (disorder) / 700272008 Respiratory tuberculosis / 427099000 Active tuberculosis(详见 §2.1b)
数据模态 胸部 X 光影像(PA 位)+ 二值肺掩膜 + 非结构化读片文本 + 病灶 ROI 表格
AI 任务类型 肺结核筛查分类(TB/正常)、肺分割、TB 病灶定位/分割、跨数据集域偏移研究
样本总数 138 张 PA CXR(80 正常 / 58 结核)+ 左右肺掩膜各 138 张 + 读片文本 138 份
数据大小 约 0.6 GB(影像单张 2.1-7.2 MB,PNG 无损)
数据格式 PNG(12-bit 灰度,16-bit 容器)+ TXT 读片 + CSV(共识 ROI)
许可证 免费学术使用(NLM 使用条款:归属 NLM 并引用论文;不得在研究小组/机构外转发)
访问级别 开放(免费下载,无需注册申请)
DUO 标签 GRU(通用研究使用,等效:禁组外分发 + 归属要求)
语言 英文(读片文本)
首发日期 2014-09(ReadMe 文档 2014-09-11;数据论文 2014-12 刊出)
最后更新 2024-08-28(官方目录迁移并新增共识 ROI CSV)
发布机构 Lister Hill National Center for Biomedical Communications(LHNCBC),美国国家医学图书馆(NLM/NIH)
官方主页 Tuberculosis Chest X-ray Datasets
下载地址 MontgomerySet 官方目录
DOI 10.3978/j.issn.2223-4292.2014.11.20(数据集论文)
引用次数 1,095+(Semantic Scholar,截至 2026-09;OpenAlex 同期记录 624 次)
AI 就绪度评分 ⭐⭐⭐(3/5)— 掩膜/标签/文本齐全、文件名严格对齐;扣分项:无官方划分、12-bit PNG 需专用读入、读片文本非结构化、规模仅 138 张
页面状态 published

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

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

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(12-bit PNG 读入、左右掩膜合并、文件名主键体系)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

审核方式:交叉审核

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

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。Montgomery County CXR Set 免费下载供学术研究使用,NLM 要求使用者不得在研究小组/机构之外转发数据集,发表成果须归属 NLM(Bethesda, MD, USA)并引用 Jaeger et al. 2014 与标注论文。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

这是什么? Montgomery County CXR Set(下称 MC 集)是美国国家医学图书馆(NLM)于 2014 年正式发布的肺结核胸部 X 光数据集。138 张后前位(PA)胸片全部来自马里兰州蒙哥马利县卫生与公共服务部的结核控制筛查项目,其中 80 张正常、58 张有结核表现。每张影像配有三样东西:两位放射科医生监督下手工描绘的左/右肺二值掩膜、一份含年龄/性别/异常描述的读片文本,以及后来补充的病灶边界框共识标注(CSV)。

为什么重要? 在 2014 年之前,做肺分割或结核筛查研究的学者几乎没有带"金标准掩膜"的公开胸片可用。MC 集是 JSRT 之后十余年里第一个公开的 CXR 肺分割数据,也是第一个明确面向结核筛查的公开胸片集,与深圳集(Shenzhen Hospital CXR Set)合称 TB CXR benchmark——十年来几乎所有结核 X 光论文都会与之对比。它的数据集论文已被引用超过 1,000 次(Semantic Scholar,截至 2026-09)。

我能用它做什么? 三类典型任务:一是肺结核筛查分类(TB/正常二分类);二是肺分割算法的定量评估(用手工掩膜算 Dice/ IoU);三是病灶定位(用共识 ROI 做弱监督或全监督检测)。它只有 138 张,不适合当"训练大集",但作为小样本方法学试验田、分割评测基准和跨数据集域偏移研究的测试集,价值极高。

§1.1 技术摘要

MC 集由 NLM Lister Hill 生物医学传播中心(LHNCBC)与马里兰州蒙哥马利县卫生与公共服务部结核控制项目合作建成:在多年筛查服务中收集后前位胸片,经提供方脱敏并由 NIH 伦理审查豁免(No. 5357)后开放。影像以 Eureka 固定式 X 光机(CR,计算机 X 线摄影)采集,12-bit 灰度存储于 PNG 无损容器,分辨率 4,020×4,892 或 4,892×4,020 像素(两种方向并存)。标注分三层:文件名后缀给出 TB/正常二分类标签;放射科医生监督下按心脏、主动脉弓、膈肌等解剖标志手工描绘的左右肺掩膜;2021 年起补充的两位放射科医生 TB 病灶共识 ROI(以 CSV 提供 55 张 TB 影像的 109 个边界框,对应 1024×1024 缩放图)。官方公布相关联的肺分割基准(Candemir 2014 在 MC 上 overlay accuracy 94.1%)与分类基线(Jaeger 2014),是十年间结核 X 光研究的方法学起点。

§1.2 战略价值

维度一:方法学"标尺"价值。 MC 集的稀缺性在于"小而精":138 张全部带手工掩膜与读片文本,且全程同一设备、同一筛查流程,协变量高度可控。这使它成为检验算法稳定性而非吞吐量的理想标尺——分割算法在异常肺(空洞、粟粒影、胸腔积液)上的失效模式、小样本下的评估方差、以及跨数据集域偏移,都能在这 138 张上被干净地量化。Google Health 2021 年的大模型外部验证也把 MC 集选作结核泛化测试集之一,说明小基准在"考试"职能上不可替代。

维度二:跨数据集科研基础设施价值。 MC(美国/CR/12-bit/筛查人群)与 Shenzhen(中国/DR/8-bit/门诊人群含儿科)构成一对天然的"孪生对照"。两者文件命名模板同构(MCUCXR_####X.png 与 CHNCXR####_X.png)、标签语义一致,合并即得 800 张的中等规模池;而设备、分辨率、位深、类别先验的系统性差异,又让"合并后性能虚高"与"跨库泛化骤降"成为可复现的教学案例。近年的域偏移与捷径学习实证研究多以这一对数据集为试验台。

维度三:历史锚点价值。 NLM 在 MC 集上同时定义了"数据 + 掩膜 + 读片文本 + 基线算法 + 使用条款"的完整发布形态,这套发布范式(命名编码标签、掩膜当金标准、文本随影像分发、公开使用条款)影响了此后包括 PadChest、CheXpert 在内的众多公开 CXR 集的设计。理解 MC 集即理解公开医疗影像数据集十年演化的起点,这也是把它称为"经典基准"的原因——它同时是研究对象与研究方法学的教科书。

§1.3 同类数据集横向对比

数据集 规模 模态/位深 标注 与 MC 集的差异化
Montgomery County CXR(本条目) 138 张 PA PNG 12-bit,4,020×4,892 或反向 TB 标签 + 左右肺手工掩膜 + 读片文本 + 55 张病灶 ROI 唯一带"左右肺分文件掩膜"的结核集;同一筛查项目、同一设备
Shenzhen Hospital CXR 662 张(326 正常/336 TB) PNG 8-bit,约 3K×3K,含儿科 AP TB 标签 + 读片文本;仅 566 张有第三方掩膜;68 张共识标注 中国门诊人群,DR 设备,规模大 5 倍但掩膜覆盖不全
JSRT 247 张 PNG 12-bit,2048×2048 肺结节良恶性 + 公认金标准肺掩膜 面向结节而非结核;掩膜金标准最完善
PadChest 160,000+ 张 DICOM 8/16-bit 174 种放射学标签(含 TB) 规模大、多疾病,但 TB 例数稀少且无肺掩膜
CheXpert 224,316 张 PNG 8-bit 14 项概率标签 大规模多病种,结核非核心标签,无掩膜

§1.4 版本时间轴

时间 事件 说明
2013-11 / 2014-02 Candemir et al. 肺分割论文(IEEE TMI)投稿与刊出,MC 掩膜随论文公开 JSRT 之后十余年首批公开 CXR 肺分割数据
2014-09-11 官方 ReadMe 文档制作(PDF 元数据日期) 随数据目录分发至今
2014-12 Jaeger et al. 数据集论文刊出(QIMS 4(6):475-7) 与 Shenzhen 集同文宣布,DOI 10.3978/j.issn.2223-4292.2014.11.20
2021-03 Rajaraman et al. 共识标注论文刊出(Diagnostics 11(4):616) 两位放射科医生 TB 病灶共识标注的来源
2024-08-28 官方目录迁移至 data.lhncbc.nlm.nih.gov 并新增 montgomery_consensus_roi.csv 影像、掩膜、读片同日统一重新挂载

§1.5 典型应用场景

  1. 肺结核筛查分类基准:以文件名后缀为标签做 TB/正常二分类,5 折交叉验证报告均值±标准差;与 Shenzhen 集合并可扩到 800 张池。
  2. 肺分割定量评测:138 张全有手工掩膜,可计算 Jaccard(JSC)、Dice(DC)、平均轮廓距离(ACD)、平均表面距离(ASD)等指标,与 Candemir 2014 的 94.1% overlay accuracy 对标。
  3. 弱监督/全监督病灶定位:用 55 张 TB 影像的 109 个共识边界框训练或验证检测器(Faster RCNN、YOLO 系列、U-Net 分割均可行)。
  4. 域偏移与捷径学习教学案例:MC↔Shenzhen 互为训练/测试集,量化设备、位深、人群差异带来的性能漂移。
  5. 小样本学习与评估方法学研究:138 张的规模天然适合展示过拟合、交叉验证方差、置信区间等"小数据生存技能"。
  6. 教学与课程实验:从下载、读入、对齐到训练的完整链路可以在一节课内跑通,是"医疗影像 AI 入门第一课"的高频素材;配套的掩膜还支持"分割 → 分类"两段式 CAD 架构复现。

§2 医学背景

§2.1 ICD-11 编码映射

标签 ICD-11 编码 中文名称 说明
TB(文件名后缀 _1) 1B10.Z 呼吸系统结核(未提及病原学或组织学确认) 本数据集标签来自影像学读片,多数 TB 例未经每例病原学确认口径发布,映射 1B10.Z 更严谨
TB(读片文本含 “active TB”) 1B10.0 呼吸系统结核(确认型) 部分读片明示活动性结核;确认手段(痰涂片/培养)未见逐例说明
正常(文件名后缀 _0,读片 “normal”) 无对应编码 健康对照/筛查阴性 ICD-11 为疾病分类学,正常筛查结果无编码;分析时以标签 0 表示
读片中的空洞/浸润/粟粒影等描述 1B10.0 之下按表现细化 结核相关影像表现 官方未提供表现级结构化标签,仅见于自由文本

§2.1b SNOMED CT 映射

概念 SNOMED CT 码 完全指定名称(FSN) 用法说明
结核病(总类) 56717001 Tuberculosis (disorder) 标签 _1 的上位概念映射
呼吸系统结核 700272008 Respiratory tuberculosis 与 ICD-11 1B10 对应,最贴近本数据集标签语义
活动性结核 427099000 Active tuberculosis 读片文本中 “active TB” 的映射
结核性肺炎 80003002 Tuberculous pneumonia 读片文本中 caseous pneumonia 类描述的候选映射
UMLS / MeSH 辅助 C0041327 / D014397 Tuberculosis / Tuberculosis, Pulmonary 文献检索与知识库互链用

§2.2 疾病简介与流行病学

结核病(Tuberculosis, TB)由结核分枝杆菌(Mycobacterium tuberculosis)引起,经呼吸道传播,最常累及肺(肺结核)。胸部 X 光是结核筛查的核心工具:典型表现为上叶尖后段的浸润影、空洞形成、粟粒样结节、胸腔积液与纤维收缩等。MC 集的读片文本即覆盖了这些表现(如 “cavitary nodular infiltrate in RUL”、“effusions”、“miliary patterns”,官方对后两者有明确提及)。

流行病学层面,WHO《全球结核病报告 2023》估计 2022 年全球约 1,060 万人新患结核病、约 130 万人死于该病,结核仍是单一传染病致死的主要病因之一。中低收入地区 radiologist 资源稀缺,正是 NLM 开发低成本自动化 CXR 筛查系统(并公开 MC 与 Shenzhen 两集)的原始动机。

读片自由文本中的常见表现术语对照(供解析与弱标签构建,非官方词表):

读片术语 中文含义 影像学要点 候选 SNOMED 锚点
cavitary / cavity 空洞 上叶好发,洞壁多厚壁,可伴气液平 56717001 下按表现细化
nodular infiltrate / infiltration 结节样浸润 斑片状渗出,边界模糊,好发尖后段 700272008 语境
miliary patterns 粟粒样影 弥漫分布 1-3 mm 结节,血行播散标志 56717001 语境
effusion(s) 胸腔积液 肋膈角变钝至大片致密影 446986002 Tuberculous pleural effusion
active TB 活动性结核 提示有治疗紧迫性的活动期表现 427099000 Active tuberculosis
normal 正常 筛查阴性(正常例第 3 行固定写法)

注意:上表是"解析辅助"而非官方标注体系——官方没有对这些表现提供结构化标签,同义词与缩写也未统一,任何表现级统计都要先做术语归一(见 §6.5 坑点 6)。

§2.3 临床任务定义

任务 输入 输出 本数据集支撑
结核筛查(screening) PA 胸片 二分类:TB / 正常 文件名后缀标签(80/58)
肺分割(segmentation) PA 胸片 左右肺掩膜 138 张手工掩膜(左右分文件)
病灶定位(lesion detection) PA 胸片 病灶边界框/掩膜 55 张 TB 影像的 109 个共识 ROI
报告要素抽取(信息抽取) 读片文本 性别/年龄/异常术语 138 份非结构化读片

注意临床定位:该数据集面向筛查(screening)而非诊断(diagnosis)——读片标签反映放射科医生对"是否有结核一致表现"的判断,不等于微生物学确诊,也不含治疗决策所需的完整临床信息。

§2.4 患者人群

维度 内容
来源 马里兰州蒙哥马利县卫生与公共服务部结核控制项目(筛查门诊)
采集时间 多年度累积(官方论文与 ReadMe 均未公布确切起止年份)
年龄 逐例记录于读片 TXT(格式如 “027Y”);官方未发布汇总分布
性别 逐例记录于读片 TXT(M/F);官方未发布汇总比例
种族/民族 未提供
就医类型 公共卫生筛查项目受检者(非住院患者);TB 例与正常例来自同一筛查流程
地域 美国马里兰州蒙哥马利县(华盛顿特区近郊,人口结构多元)

提示:网上流传的两集汇总人口学数字常互相矛盾,部分二手文献甚至将 MC 与 Shenzhen 的样本构成对调、位深标错(如 Pol J Radiol 2022, DOI 10.5114/PJR.2022.113435 的表 1)。任何人群统计都应以本页给出的官方一手来源与逐例读片文本自行为准。

§2.5 临床价值

对 AI 研究者,MC 集的价值在于提供了"筛查场景"的完整闭环样本:从影像、掩膜、读片文本到病灶框,覆盖了筛查工作流中放射科医生实际输出的全部中间产物。以它训练/验证的模型可直接对标"自动初筛 + 人工复核"的真实部署形态;其掩膜亦支持"先分割肺、再判 TB"的两段式 CAD 系统研究——这正是 NLM 自身系统(Jaeger et al., IEEE TMI 2014)采用的架构。

§2.6 金标准参考

维度 内容
划分 官方无 train/test 划分;全部 138 张面向研究社区整体发布
标注方式 人工:肺掩膜在放射科医生监督下按解剖标志手工描绘;TB 标签来自读片结论;病灶 ROI 为两位放射科医生共识
标注者 LHNCBC 研究团队(掩膜);两位放射科医生(共识 ROI,见 Rajaraman et al. 2021)
性质 参考标准(reference standard):掩膜作为分割金标准使用;TB 标签为读片级参考标准,非微生物学确诊
掩膜约定 沿心脏、心包、主动脉弓边界与膈肌描绘,勾画肋膈角;排除心脏与膈肌后方区域;病理严重处采用推断边界

§3 数据集规格

§3.0 版本抉择矩阵

MC 集无多版本,但存在多个分发渠道与衍生包,按需求选择:

你的需求 推荐渠道 体量 理由
原始全分辨率影像 + 官方左右掩膜 + 读片文本 NLM 官方目录 MontgomerySet 约 0.6 GB 唯一一手来源;含 ReadMe 与共识 ROI CSV
DICOM 格式 向 NLM(Open-i FAQ 所列渠道)书面申请 官方按需提供 官方明确"可应请求提供 DICOM"
MC + Shenzhen 一起的 Kaggle 便捷包 Kaggle TB_Chest_Radiography_Database(Rahman et al.) 数 GB(混入其他来源) 下载方便,但已混入额外正常集、分辨率与标签口径被改动,勿用于复现 MC 原始基准
1024×1024 共识病灶标注 官方 montgomery_consensus_roi.csv + Rajaraman 2021 4 KB 坐标对应 1024×1024 缩放图,需与原片按比例换算

§3.1 模态详情

  • 影像:138 张后前位(PA)胸片,Eureka 固定式 X 光机(CR 技术)采集,12-bit 灰度(4,096 灰阶)以 PNG 无损格式存储。PNG 容器按 16-bit 通道保存像素值,取值范围 0-4,095。
  • 掩膜:左右肺分文件的手工二值 PNG(0 = 背景,255 = 肺区),命名与影像一一对应;描绘约定见 §2.6。
  • 文本:每张影像一份同名 TXT 读片(性别/年龄/自由文本异常描述)。
  • 表格:montgomery_consensus_roi.csv,6 列(patientId, x_dis, y_dis, width_dis, height_dis, Labels),109 行数据、覆盖 55 张 TB 影像,坐标对应 1024×1024 缩放图。

§3.2 子集样本数

子集 样本数 占比 说明
正常(_0.png) 80 57.97% 编号主要落在 0001-0103 区间
结核(_1.png) 58 42.03% 编号主要落在 0104-0399 区间
有共识 ROI 的 TB 影像 55 占 TB 集 94.83% 共 109 个边界框,部分影像多框
合计 138 100% 文件 4 位 ID 非连续,存在跳号

§3.3 格式规格

对象 格式 关键参数
胸片 PNG(灰度) 12-bit 灰度值存于 16-bit 通道;尺寸 4,020×4,892 或 4,892×4,020
肺掩膜 PNG(二值) 0/255;左右分文件夹(leftMask/rightMask);与同名影像对应
读片 TXT(UTF-8/ASCII 文本) 三行式:Sex 行 / Age 行 / 异常自由文本(正常例第三行为 “normal”)
病灶 ROI CSV patientId, x_dis, y_dis, width_dis, height_dis, Labels;109 行
文档 PDF NLM-MontgomeryCXRSet-ReadMe.pdf(2 页,2014-09 制作)

位深技术注释:PNG 容器的位深(16-bit 通道)与影像的实际灰度深度(12-bit 有效位)是两个概念。这意味着:像素值域为 0-4,095 而非 0-65,535;直接按 16-bit 满量程归一(/65535)会把图像整体压暗约 16 倍;直接按 8-bit 逻辑处理(/255 且截断)则丢失高亮区细节。正确做法是以 12-bit 满量程(/4095)归一,或用训练折内统计的百分位窗转 8-bit(§6.3)。

§3.4 存储大小

组成 体量
CXR_png 目录(138 张) 单张 2,154,503-7,186,551 字节(约 2.1-7.2 MB),合计约 0.6 GB
ManualMask 目录(276 张掩膜) 二值 PNG 压缩率高,体量远小于影像(数十 MB 量级)
ClinicalReadings 目录(138 个 TXT) 每份不足 100 字节,可忽略
ReadMe PDF + ROI CSV 约 0.1 MB
整包 约 0.6 GB(开发环境 2 GB 磁盘即可)

§3.5 标注方式

三层标注全部为人工:① 分类标签由读片结论编码进文件名后缀(0/1);② 肺掩膜为研究者在放射科医生监督下逐张手工描绘(非半自动分割后处理,描绘遵循解剖标志并排除心脏/膈肌后方);③ 病灶 ROI 为两位放射科医生独立标注后的共识结果(consensus),仅覆盖 TB 影像。无任何自动预标注环节被官方披露。

§3.6 标注者资质与一致性

官方论文未披露掩膜描绘者的具体人数与资质层级(仅述"在放射科医生监督下");共识 ROI 明确由两位放射科医生完成(其中标注论文述及资深胸部放射科医生参与),并在 Rajaraman et al. 2021 中给出一致性分析框架。官方未公布掩膜级的标注者间一致性系数(如 Dice@inter-rater)——使用时应把掩膜视为"参考标准"而非"无误差真值"。

§3.7 采集周期

官方材料仅表述为结核控制项目下的"多年累积采集"(collected over many years),未公布确切起止年份。ReadMe 制作于 2014-09-11,数据论文于 2014-12 刊出,可确认不晚于 2014 年完成整编。任何按年份分层的分析在本数据集上不可行(见 §6.5 坑点 8)。

§3.8 地域覆盖

单一地理单元:美国马里兰州蒙哥马利县(Washington DC 都会区)。无多中心分布。

§3.9 设备规格

项目 规格
采集设备 Eureka 固定式 X 光机(CR,计算机 X 线摄影)
体位 全部后前位(PA)
灰度深度 12-bit(4,096 灰阶)
分辨率 4,020×4,892 或 4,892×4,020 像素(方向不定)
像素间距 0.0875 mm(横纵两向)
换算视野 约 352 mm × 428 mm(按分辨率 × 像素间距推算)
对照组(Shenzhen) Philips DR 数字化 X 光机,8-bit,约 3K×3K,含儿科 AP 位

§3.9b 与 Shenzhen 集的设备级对照(合并使用前必读,对应坑点 4):

维度 Montgomery(MC) Shenzhen(SZ) 合并影响
成像技术 CR(计算机 X 线摄影) DR(直接数字化摄影) 噪声谱、对比度曲线不同
位深 12-bit 8-bit 归一化口径必须分集处理
分辨率 4,020×4,892 或反向 宽 1,130-3,001、高 948-3,001(可变) 统一 resize 目标不同,细节损失不同
体位 全 PA 以 PA 为主,含儿科 AP 位 混入 AP 后解剖先验变化
人群 美国县级筛查项目 中国门诊常规(含儿科) 年龄结构、病情谱不同
类别先验 80 正常 / 58 TB 326 正常 / 336 TB 合并后 406:394,但分集先验差异大
采集周期 多年累积 约 1 个月(2012-09 为主) 时间聚集性完全不同
掩膜 官方 138 张全配(左右分文件) 仅 566 张有第三方(Kaggle)掩膜 分割评测不要跨集混用掩膜

§3.10 深度溯源链

层级 实体 证据
L1 官方数据页 NLM LHNCBC Tuberculosis Chest X-ray Datasets 页 数据集描述、引用要求、下载入口
L2 官方数据目录 data.lhncbc.nlm.nih.gov/.../MontgomerySet/ 逐文件索引:138 张影像、掩膜双目录、138 份读片、ReadMe、ROI CSV
L3 数据集论文 Jaeger et al., QIMS 2014;4(6):475-7(PMID 25525580,PMCID PMC4256233) 命名模板、位深、设备、读片格式、伦理豁免号
L4 分割掩膜论文 Candemir et al., IEEE TMI 2014;33(2):577-90(DOI 10.1109/TMI.2013.2290491) 掩膜描绘协议与首次基准
L5 共识 ROI 论文 Rajaraman et al., Diagnostics 2021;11(4):616(DOI 10.3390/diagnostics11040616) 双放射科医生共识标注来源
L6 伦理 NIH Office of Human Research Protections Programs No. 5357 数据使用与公开的 IRB 豁免

§4 数据结构

§4.0 目录树

MontgomerySet/
├── CXR_png/                          # 138 张 PA 胸片,12-bit 灰度 PNG
│   ├── MCUCXR_0001_0.png             #   后缀 0 = 正常(80 张)
│   ├── MCUCXR_0002_0.png
│   ├── ...
│   ├── MCUCXR_0104_1.png             #   后缀 1 = 结核(58 张)
│   └── ...                           #   4 位 ID 非连续,有跳号
├── ManualMask/                       # 手工二值肺掩膜(左右分文件)
│   ├── leftMask/                     #   患者左肺(影像中的右侧)
│   │   ├── MCUCXR_0001_0.png
│   │   └── ...
│   └── rightMask/                    #   患者右肺(影像中的左侧)
│       ├── MCUCXR_0001_0.png
│       └── ...
├── ClinicalReadings/                 # 138 份读片文本,与影像同名
│   ├── MCUCXR_0001_0.txt             #   正常例第三行为 normal
│   │                                 #   本例内容:
│   │                                 #   Patient's Sex: F
│   │                                 #   Patient's Age: 027Y
│   │                                 #   normal
│   └── MCUCXR_0104_1.txt             #   TB 例第三行为异常描述
├── NLM-MontgomeryCXRSet-ReadMe.pdf   # 官方 2 页说明(2014-09 制作)
└── montgomery_consensus_roi.csv      # 2024 新增:109 个 TB 病灶共识边界框

§4.1 DAIMS 字段字典

字段 类型 说明 示例值 AI 用途 观测误差/注意事项 信息性缺失编码 取值范围
文件名主干 字符串 MCUCXR_####_X,主键;#### 为 4 位非连续伪 ID MCUCXR_0104_1 关联影像/掩膜/文本/ROI 的唯一键 ID 无时间顺序含义,勿当序数特征 0001-0399 跳号
标签后缀 X 整数 0=正常,1=结核,编码于文件名末位 1 分类目标变量 与读片文本语义一致但独立编码
影像 PNG 图像 12-bit 灰度值存于 16-bit 通道 uint16 数组 max≈4,095 分类/分割/检测输入 OpenCV/PIL 默认读法各异,须 IMREAD_UNCHANGED 0-4,095
影像尺寸 整数对 4,020×4,892 或 4,892×4,020,方向不定 (4020, 4892) 预处理对齐 反方向图若按 (W,H) 硬编码会旋转错位 两种
像素间距 浮点 0.0875 mm(横/纵) 0.0875 物理尺度校准(ROI 面积换算) 元数据不随 PNG 存储,须外部传入 0.0875 mm
leftMask PNG 二值图像 患者左肺掩膜,0/255 255=肺 分割金标准(左) 患者左肺位于影像右侧
rightMask PNG 二值图像 患者右肺掩膜,0/255 255=肺 分割金标准(右) 与 leftMask 合并得全肺
Sex 行 字符串 读片 TXT 第 1 行,“Patient’s Sex: F/M” F 人口学协变量 行尾偶有空白;个别文件需容错解析 缺行视为缺失
Age 行 字符串 读片 TXT 第 2 行,“Patient’s Age: 027Y” 027Y 年龄协变量(去掉 Y 转 int) 三位数字 + Y;解析失败须回退 缺行视为缺失 3 位数字
异常描述 文本 第 3 行自由文本;正常例为 “normal” cavitary nodular infiltrate in RUL; active TB 弱监督/信息抽取/标签校验 非结构化、无本体编码,术语不统一 “normal” 表示阴性 自由文本
ROI patientId 字符串 CSV 第 1 列,对应影像文件名 MCUCXR_0104_1.png 病灶检测监督信号 坐标基于 1024×1024 缩放图 55 个 TB 文件
ROI x/y/w/h 整数 CSV 2-5 列,边界框左上角与宽高(1024 尺度) 565, 104, 140, 86 检测框 需按目标分辨率等比放大 0-1023

§4.2 标签分布

标签 数量 占比 来源
正常(_0) 80 57.97% 文件名后缀(官方目录逐文件核实)
结核(_1) 58 42.03% 同上
其中带共识 ROI 的 TB 55 占 TB 94.83% montgomery_consensus_roi.csv(109 框)

类别比 80:58 ≈ 1.38:1,轻度不均衡;合并 Shenzhen 后整体变为 406:394(近均衡),但两集内部先验差异显著——这正是分层划分必须以"数据集 × 标签"为分层键的原因。

§4.3 关键统计

统计项 数值 备注
影像总数 138 官方目录实测
单张文件大小 2.1-7.2 MB PNG 无损,随内容复杂度浮动
位深 12-bit(0-4,095) 存于 16-bit PNG 通道
像素间距 0.0875 mm 来自 NLM 项目报告
视野换算 约 35 × 43 cm 分辨率 × 像素间距
ROI 总数 109 框 / 55 张影像 全部标签为 TB
采集设备 1 台(Eureka CR) 无设备多样性
汇总人口学 官方未发布 逐例见读片 TXT

§4.4 数据层级

筛查项目(Montgomery County TB Control Program,多年度)
└── 受检者(伪 ID,无患者级字段)
    └── 一次检查 = 1 张 PA 影像(138 项)
        ├── CXR_png/MCUCXR_####_X.png        (影像)
        ├── ManualMask/{left,right}Mask/…    (左右掩膜各一)
        ├── ClinicalReadings/MCUCXR_####_X.txt(读片)
        └── montgomery_consensus_roi.csv 行  (0-N 个病灶框,仅 TB)

官方未提供"受检者 → 多次检查"的映射字段;若同一人跨年复查两次,两张影像将表现为两个独立伪 ID,无法识别(对划分策略的影响见 §5.3)。

§4.5 缺失值与信息性缺失

情形 表现 处理建议
读片缺 Sex/Age 行 TXT 不足三行 解析器按行数容错,缺字段记 NaN,勿臆测
TB 影像无 ROI 58 - 55 = 3 张 TB 无边界框 检测任务中按"未标注"处理,勿当"无病灶"负样本
正常例第三行 统一为 “normal” 该行为阴性指示,本身不是缺失
采集日期/年份 全数据集无时间戳 时间相关特征/切分不可用(信息性缺失:年份不可得本身说明"跨年累积")
种族、病史、实验室结果 不存在 勿在论文中声称可控制这些变量

§5 划分与使用建议

§5.1 官方划分

官方不提供 train/val/test 划分,也未发布划分文件。这是 MC 集最大的使用摩擦点之一(详见 §6.5 坑点 7)。

§5.2 社区惯例

惯例 代表文献 特点
5 折交叉验证(仅 MC) Nafisah & Muhammad 2022(Neural Comput Appl) 报告 5 折均值,Montgomery 子集 85.5%-89.9%
3:1 训练/测试随机划分(MC+S 池 800 张) Ahsan et al.(VGG16,81.25%) 划分文件未公开,结果难复现
7:3 随机划分(MC+S+更多池) 多篇 2018-2022 论文 数字从 84.6% 到 96.42% 不等,互不可比
MC 全集作外部测试 域偏移与泛化研究 训练在 JSRT/Shenzhen,MC 只做"考场"

§5.2b 合并 MC+S 的两种实验设计对照——设计决定结论,二者不可混用:

设计 切分方式 回答的问题 结论解读要点
设计 A:合并池同分布评测 800 张按"数据集 × 标签"分层随机切分,两集在训练/测试同比例出现 在"与训练分布同源的样本"上模型能到什么上限 高分含数据集协变量红利;不可据此声称临床泛化能力
设计 B:跨库域偏移评测 整集切割:train MC → test SZ(或反向),或加 JSRT 作第三方考场 模型对设备/人群/协议迁移的鲁棒性 分数下降幅度即域偏移强度;这是最接近真实部署的读法
设计 C:MC 单集 5 折 CV 仅 138 张内部分层 5 折 小样本上限 + 方差刻画 报告均值±标准差;对照 Nafisah 2022 的 89.9% 锚点

§5.3 泄漏风险与推荐划分

  1. 患者级泄漏:官方无患者 ID 字段,理论上不能排除同一受检者跨年两次入集。稳妥做法是在论文中声明"按影像划分,假设一人一图"(与社区一致),或做最坏情况敏感性分析。
  2. 预处理泄漏:直方图均衡/CLAHE 等统计型预处理若在全库上拟合参数(如全局百分位窗),会把测试集信息带进训练。所有统计量只能在训练折内计算。
  3. 合并池泄漏:MC+S 合并后若按"数据集"分层使两集在训练/测试中同比例出现,模型可借数据集相关伪迹提高分数;若按整集切割(train MC / test SZ 或反之),则是严格的域偏移实验——两种设计回答的问题完全不同,须在论文中明示。
  4. 推荐方案:固定随机种子的分层 5 折 CV(分层键 = 数据集 × 标签)+ 公开划分文件(JSON/CSV 随代码发布);另留一版"train MC → test SZ"的跨库方案作为泛化压力测试。
import json, numpy as np
from sklearn.model_selection import StratifiedKFold

# files: [(file_stem, dataset, label)],dataset ∈ {MC, SZ}
files = [("MCUCXR_0001_0", "MC", 0), ("CHNCXR_0429_1", "SZ", 1)]  # 示意
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
strata = [f"{d}_{y}" for _, d, y in files]          # 数据集 × 标签 双键分层
splits = {}
for k, (tr, te) in enumerate(skf.split(files, strata)):
    splits[f"fold{k}"] = {"train": [files[i][0] for i in tr],
                          "test":  [files[i][0] for i in te]}
with open("split_montgomery_shenzhen_5fold.json", "w") as f:
    json.dump({"seed": 42, "stratify": "dataset_x_label", "folds": splits}, f, indent=2)

§5.4 交叉验证与外部验证建议

  • 小样本报告规范:138 张上单次 70/30 切分的波动可达数个百分点,必须报告多折均值±标准差,并给出每折的敏感度/特异度而非仅 accuracy(类别先验 58/80 下 accuracy 有误导性)。
  • 外部验证:优先把 MC 用作外部测试集(训练 JSRT/Shenzhen/PadChest),或反过来在 MC 训练、到 Shenzhen/JSRT 测试;"训练即测试"式内部分数只作参考。Candemir 2014(JSRT→MC 体系)与 Nafisah 2022(MC→MC+S)提供了两类对照锚点,见 §7.8。

§6 AI 就绪指南 ⭐

§6.0 云端快速启动

MC 集体量约 0.6 GB,任何一台免费档 CPU 云实例/Colab 都能放下并完成全部实验(含训练小网络)。无需专用云数据服务,直接下载官方目录即可;若使用 Kaggle 平台,可直接挂载 Kaggle 上的整合包快速试验,但正式实验请回到官方原始目录(理由见 §3.0)。

§6.1 快速上手

目录结构预期:以下代码假设你已把官方目录下载为 data_root/MontgomerySet/,内部保持 CXR_png/ManualMask/leftMask/ManualMask/rightMask/ClinicalReadings/ 四个子目录与根下两个官方文件不变。

data_root 拼接关系:所有路径 = data_root + "MontgomerySet/" + 子目录 + 文件名;影像、掩膜、读片三者靠同名文件主干对齐(如 MCUCXR_0001_0)。

最小可用子集:仅 CXR_png/ + ClinicalReadings/ 即可做分类;ManualMask/ 用于分割;ROI CSV 用于检测。下载约 0.6 GB,5 分钟内可跑通第一个加载数。

# 下载与校验(任意 POSIX 环境)
DATA_ROOT=./data
mkdir -p $DATA_ROOT && cd $DATA_ROOT
# 1) 官方说明文档(先读再动手)
curl -LO https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Montgomery-County-CXR-Set/MontgomerySet/NLM-MontgomeryCXRSet-ReadMe.pdf
# 2) 官方病灶共识 ROI 表(109 框 / 55 张 TB 影像)
curl -LO https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Montgomery-County-CXR-Set/MontgomerySet/montgomery_consensus_roi.csv
# 3) 影像/掩膜/读片:官方目录为逐文件索引页,用 wget 镜像三个子目录
BASE=https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Montgomery-County-CXR-Set/MontgomerySet
wget -r -np -nH --cut-dirs=6 -A "*.png" $BASE/CXR_png/
wget -r -np -nH --cut-dirs=7 -A "*.png" $BASE/ManualMask/leftMask/
wget -r -np -nH --cut-dirs=7 -A "*.png" $BASE/ManualMask/rightMask/
wget -r -np -nH --cut-dirs=6 -A "*.txt" $BASE/ClinicalReadings/
# 4) 校验:应得到 138 + 138 + 138 + 138 = 552 个数据文件
find . -name "*.png" | wc -l; find . -name "*.txt" | wc -l
# 最小加载数:读一张 12-bit 影像 + 双肺掩膜 + 标签 + 读片
import numpy as np, cv2
root = "data/MontgomerySet"
stem = "MCUCXR_0104_1"                       # 一张 TB 影像
img = cv2.imread(f"{root}/CXR_png/{stem}.png", cv2.IMREAD_UNCHANGED)
print(img.dtype, img.shape, img.min(), img.max())   # 期望 uint16,max ≤ 4095
lm = cv2.imread(f"{root}/ManualMask/leftMask/{stem}.png",  cv2.IMREAD_UNCHANGED)
rm = cv2.imread(f"{root}/ManualMask/rightMask/{stem}.png", cv2.IMREAD_UNCHANGED)
lung = np.maximum(lm, rm)                    # 左右掩膜取并集 = 全肺
label = int(stem.split("_")[-1])             # 1 = TB(来自文件名后缀)
reading = open(f"{root}/ClinicalReadings/{stem}.txt").read()
print(label, reading)

目录完整性自检脚本(下载后先跑,5 秒钟发现镜像不全/损坏问题):

from pathlib import Path
import cv2

root = Path("data/MontgomerySet")
cxr   = sorted((root / "CXR_png").glob("*.png"))
lm    = sorted((root / "ManualMask/leftMask").glob("*.png"))
rm    = sorted((root / "ManualMask/rightMask").glob("*.png"))
txt   = sorted((root / "ClinicalReadings").glob("*.txt"))
assert len(cxr) == len(lm) == len(rm) == len(txt) == 138, \
    f"文件数异常: {len(cxr)}/{len(lm)}/{len(rm)}/{len(txt)}"
for stem_check in [p.stem for p in cxr]:
    assert (root / "ClinicalReadings" / f"{stem_check}.txt").exists()
    img = cv2.imread(str(root / "CXR_png" / f"{stem_check}.png"), cv2.IMREAD_UNCHANGED)
    assert img is not None and img.shape in [(4892, 4020), (4020, 4892)], stem_check
n_tb = sum(int(p.stem.split("_")[-1]) for p in cxr)      # 后缀求和 = TB 数
print(f"OK: 138 影像(TB={n_tb},正常={138 - n_tb}),掩膜与读片齐备")

§6.2 数据获取

事项 内容
渠道 NLM 官方目录(免费、免注册),见 INFOBOX 下载地址
体量 约 0.6 GB;552 个数据文件 + ReadMe + ROI CSV
申请流程 无需申请;但使用条款要求不向研究小组/机构外转发,发表须归属 NLM 并引用
DICOM 版本 官方可按需提供(联系 Open-i FAQ 所列 NLM 渠道)
整合包 Kaggle TB_Chest_Radiography_Database 含 MC 子集,但混入其他来源与改动口径,正式研究避免使用

引用义务(官方页原文要求):使用数据集时引用 Jaeger et al. 2014(数据集论文);使用共识标注时引用 Rajaraman et al. 2021;使用肺掩膜对标分割时引用 Candemir et al. 2014。

§6.3 预处理全流程

第 1 步:正确读入 12-bit PNG。 关键在 cv2.IMREAD_UNCHANGED / IMREAD_ANYDEPTH:默认 flag 会把 16-bit 通道压到 8-bit(除以 256),高密度区细节直接丢失;PIL 则读成 I/I;16 模式,matplotlib 直接显示常呈全黑。

import numpy as np, cv2
from PIL import Image

def load_mc_xray(path: str) -> np.ndarray:
    """读取 Montgomery 12-bit PNG,返回 float32 [0,1](按 12-bit 满量程归一)。"""
    img = cv2.imread(path, cv2.IMREAD_UNCHANGED)     # uint16,不缩放
    if img is None:
        img = np.array(Image.open(path))             # 兜底:PIL 的 I/I;16 模式
    img = img.astype(np.float32)
    if img.max() > 255:                              # 确认确实超过 8-bit 动态范围
        img = np.clip(img / 4095.0, 0, 1)            # 12-bit 满量程归一
    else:                                            # 个别镜像可能已转 8-bit
        img = np.clip(img / 255.0, 0, 1)
    return img

def window_8bit(img01: np.ndarray, lo_pct=0.5, hi_pct=99.5) -> np.uint8:
    """固定百分位窗(阈值只能在训练折内统计!):转 uint8 供常用 backbone。"""
    lo, hi = np.percentile(img01, [lo_pct, hi_pct])  # 统计自当前训练折
    return (np.clip((img01 - lo) / max(hi - lo, 1e-6), 0, 1) * 255).astype(np.uint8)

第 2 步:几何对齐。 MC 影像存在 4,020×4,892 与 4,892×4,020 两种方向;掩膜与同名影像尺寸一致,但合并左右掩膜前必须先按影像实际 shape 校准轴序(见坑点 3)。

第 3 步:标准化与清洗。 统一 resize 到模型输入(如 512×512,短边对齐后裁剪);标签以文件名后缀为唯一真值,用读片文本交叉抽检(第三行含 “normal” 而后缀为 1 的文件若存在即为异常数据点,应单独核查——官方未报告此类冲突,抽检脚本仍建议常备)。

第 4 步:掩膜与 ROI 生成。 分割任务用 np.maximum(left, right) 合并;检测任务把 ROI CSV 的 1024 尺度框按目标边长等比放大。

import pandas as pd

def merge_lung_mask(stem: str, root: str, target_hw=(512, 512)) -> np.ndarray:
    """合并左右掩膜 → 单通道全肺 0/1 掩膜,并 resize 到模型尺度。"""
    lm = cv2.imread(f"{root}/ManualMask/leftMask/{stem}.png",  cv2.IMREAD_UNCHANGED)
    rm = cv2.imread(f"{root}/ManualMask/rightMask/{stem}.png", cv2.IMREAD_UNCHANGED)
    assert lm.shape == rm.shape
    lung = (np.maximum(lm, rm) > 127).astype(np.uint8)      # 0/255 → 0/1
    return cv2.resize(lung, target_hw[::-1], interpolation=cv2.INTER_NEAREST)

def load_roi_boxes(csv_path: str, target_size=512) -> dict:
    """1024 尺度共识 ROI → {stem: [(x1,y1,x2,y2), ...]}(target_size 尺度)。"""
    df = pd.read_csv(csv_path)                               # patientId,x_dis,y_dis,width_dis,height_dis,Labels
    s = target_size / 1024.0
    out = {}
    for _, r in df.iterrows():
        stem = r["patientId"].rsplit(".", 1)[0]
        x1, y1 = r["x_dis"] * s, r["y_dis"] * s
        out.setdefault(stem, []).append([x1, y1, x1 + r["width_dis"] * s, y1 + r["height_dis"] * s])
    return out

第 5 步:增强 见 §6.6;标准化统计量(窗宽窗位百分位、均值方差)一律在训练折内计算。

第 6 步:读片文本结构化解析。 138 份 TXT 全部可被下面的容错解析器覆盖(性别/年龄缺失时记 None,不做任何臆测填充):

import re
from pathlib import Path

def parse_reading(txt_path: str) -> dict:
    """解析 ClinicalReadings TXT → {sex, age, finding};字段缺失记 None。"""
    lines = [l.strip() for l in Path(txt_path).read_text(errors="replace").splitlines() if l.strip()]
    out = {"sex": None, "age": None, "finding": None}
    for l in lines:
        m = re.match(r"(?i)patient'?s?\s*sex\s*:\s*([MF])", l)
        if m:
            out["sex"] = m.group(1)
        m = re.match(r"(?i)patient'?s?\s*age\s*:\s*(\d{1,3})\s*Y?", l)
        if m:
            out["age"] = int(m.group(1))
    rest = [l for l in lines if not l.lower().startswith("patient")]
    out["finding"] = " ".join(rest) if rest else None   # 正常例为 "normal"
    return out

§6.4 PyTorch DataLoader 完整代码

<details>
<summary>完整 Dataset 类 + transform + DataLoader 实例化(点击展开,约 50 行)</summary>

import json, re
import numpy as np, cv2, torch
from torch.utils.data import Dataset, DataLoader
from pathlib import Path

class MontgomeryTB(Dataset):
    """Montgomery County CXR TB 分类数据集。
    目录预期:root/CXR_png、root/ManualMask/{leftMask,rightMask}、root/ClinicalReadings。
    返回:(image uint8 [1,H,W], label int, stem str);segmentation=True 时另返回全肺掩膜。
    """
    def __init__(self, root, stems=None, size=512, segmentation=False,
                 win_pct=(0.5, 99.5), train=True):
        self.root, self.size, self.seg = Path(root), size, segmentation
        self.win = win_pct if train else (0.5, 99.5)     # 测试折沿用训练折统计量
        all_stems = sorted(p.stem for p in (self.root / "CXR_png").glob("*.png"))
        self.stems = stems if stems is not None else all_stems
        self.train = train

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

    def _load_img01(self, p: Path) -> np.ndarray:
        img = cv2.imread(str(p), cv2.IMREAD_UNCHANGED)
        img = img.astype(np.float32)
        img = np.clip(img / 4095.0, 0, 1)                # 12-bit 满量程
        return img

    def __getitem__(self, i):
        stem = self.stems[i]
        img01 = self._load_img01(self.root / "CXR_png" / f"{stem}.png")
        lo, hi = np.percentile(img01, self.win)          # 训练折内统计窗
        img = (np.clip((img01 - lo) / max(hi - lo, 1e-6), 0, 1) * 255).astype(np.uint8)
        img = cv2.resize(img, (self.size, self.size), interpolation=cv2.INTER_AREA)
        img = torch.from_numpy(img)[None].float() / 255.0
        if self.train:                                    # 训练期轻量几何增强
            if torch.rand(1).item() < 0.5:                # 水平翻转保持 PA 解剖近似对称
                img = torch.flip(img, dims=[2])
        label = int(stem.split("_")[-1])                  # 0/1 标签来自文件名后缀
        if not self.seg:
            return img, label, stem
        lm = cv2.imread(str(self.root / "ManualMask/leftMask" / f"{stem}.png"), cv2.IMREAD_UNCHANGED)
        rm = cv2.imread(str(self.root / "ManualMask/rightMask" / f"{stem}.png"), cv2.IMREAD_UNCHANGED)
        lung = (np.maximum(lm, rm) > 127).astype(np.uint8)
        lung = cv2.resize(lung, (self.size, self.size), interpolation=cv2.INTER_NEAREST)
        return img, torch.from_numpy(lung)[None].float(), label, stem

# 实例化:分层 5 折划分文件由 §5.3 脚本生成
ds_tr = MontgomeryTB("data/MontgomerySet", stems=json.load(open("split.json"))["fold0"]["train"], train=True)
ds_te = MontgomeryTB("data/MontgomerySet", stems=json.load(open("split.json"))["fold0"]["test"],  train=False)
dl_tr = DataLoader(ds_tr, batch_size=8, shuffle=True,  num_workers=2, pin_memory=True)
dl_te = DataLoader(ds_te, batch_size=8, shuffle=False, num_workers=2)
for img, label, stem in dl_tr:                            # 形状检查
    print(img.shape, label[:4], stem[:2]); break

</details>

§6.5 坑点 8 个

⚠️ 坑点 1:138 张的规模——过拟合与评估方差被系统性低估(分类:评估误用)

问题:全集仅 138 张(TB 类仅 58 张),单次随机 70/30 切分意味着测试集不足 30 张 TB,单折指标的抽样方差极大;深度模型在这个量级上极易记忆训练集。
症状:同一模型换个随机种子,accuracy 从 85% 跳到 95%;训练 loss 降到 0 而验证分数停滞;文献报告的"最优结果"无法复现。
解决

  1. 简单方法:分层 5 折(或 10 折)交叉验证,报告均值±标准差和每折敏感度/特异度;冻结随机种子并发布划分文件。
  2. 进阶方法:迁移学习 + 强正则(ImageNet 预训练 backbone 冻结浅层、小学习率、早停、权重衰减、MixUp);用 MC+S 合并池扩到 800 张,但保持"数据集 × 标签"分层(见坑点 8)。
  3. SOTA 方法:把 MC 集只当外部测试集——在 JSRT/PadChest/Shenzhen 上训练、MC 上一次性评测(Google Health 2021 的泛化范式);或用贝叶斯/bootstrap 给出置信区间而非点估计。
    参考:Nafisah & Muhammad 2022(5 折 CV 协议);跨论文 81.25%-98.9% 的分数带(§8.2)即为方差实证。

⚠️ 坑点 2:12-bit PNG 的读入陷阱——四类库四种结果(分类:预处理陷阱)

问题:像素真值范围 0-4,095,但存储在 16-bit PNG 通道里。OpenCV 默认 flag 会把 16U 压成 8U(近似除以 256,暗部信息骤减),PIL 读成 I/I;16 模式,matplotlib 直显常为全黑,不同库读出的数值口径互不相同。
症状:直方图只集中在 0-15;图像预览全黑或过曝;同一份代码在两个环境跑出的指标差好几个点;拿 8-bit 预训练 ImageNet 归一化参数(mean≈0.45)直接套会整体偏暗。
解决

  1. 简单方法cv2.imread(path, cv2.IMREAD_UNCHANGED),断言 dtype == uint16max > 255,再按 /4095.0 归一到 [0,1]。
  2. 进阶方法:固定百分位窗(如 0.5-99.5)转 uint8,窗参数只在训练折内统计;保存预处理中间件时记录 min/max 元数据。
  3. SOTA 方法:管线级单测——把"读入 → 归一 → 窗口化"封装成可复现函数并断言输出直方图覆盖范围;团队内禁用裸 imread 默认 flag(lint/CI 检查)。
    参考:16-bit PNG 读入库行为(Stack Overflow: pixel encoding using PIL, 60889085);本数据集位深与像素间距官方口径见 NLM 项目报告 pub9126。

⚠️ 坑点 3:左右肺掩膜分文件——合并方向与两态尺寸(分类:工程陷阱)

问题:掩膜按患者左/右肺分存于 ManualMask/leftMask/rightMask/;患者左肺出现在影像的右侧(放射学约定,X线片如面对患者)。同时影像存在 4,020×4,892 与 4,892×4,020 两种方向,尺寸/轴序硬编码会在部分样本上静默错位。
症状:掩膜叠加后左右肺"镜像对调";全肺掩膜只有一半或出现两块错位肺形;resize 后掩膜与肺缘偏移数毫米,Dice 被无声拉低。
解决

  1. 简单方法:读入后先断言 mask.shape == img.shape[:2],再 np.maximum(left, right) 合并;可视化 5 张叠加图人工确认方向。
  2. 进阶方法:统一转"患者解剖视角"(左右翻转与否定死一个约定并写进配置);对两种方向分别处理后再 resize(INTER_NEAREST),避免线性插值把二值掩膜糊成灰边。
  3. SOTA 方法:把"影像-掩膜对齐校验"做成 CI 步骤:对每个样本计算掩膜质心相对影像中线的符号,断言 leftMask 质心在影像右半、rightMask 质心在影像左半,不符即报错。
    参考:掩膜描绘协议与排除区域约定(Jaeger 2014 QIMS;Candemir 2014 IEEE TMI)。

⚠️ 坑点 4:与 Shenzhen 合并——CR/DR、12/8-bit、4.9K/3K、先验全错位(分类:偏倚陷阱)

问题:MC(美国筛查人群,Eureka CR,12-bit,4,020×4,892,80:58)与 Shenzhen(中国门诊人群含儿科 AP 位,Philips DR,8-bit,约 3K×3K,326:336)在设备、位深、分辨率、体位、人群、类别先验上全面不同;"合并 = 同分布"是错觉。Shenzhen 的肺掩膜仅 566 张且来自第三方(Kaggle),质量口径与 MC 官方掩膜不同。
症状:合并训练后测试分数显著高于单一数据集内部分数;把"数据集来源"作为特征加入后性能不降反升;从合并池随机划分的模型在真实部署数据上骤降。
解决

  1. 简单方法:两集各自独立预处理(各自窗位/标准化统计量);划分键强制"数据集 × 标签"分层;报告中始终给出"仅 MC / 仅 SZ / 合并"三行结果。
  2. 进阶方法:把 Shenzhen 当训练扩充、MC 当测试(或反之),明确作为域偏移实验设计;或在合并训练时按来源做 balanced batch sampling + 来源条件化(domain conditioning)。
  3. SOTA 方法:加入域对抗/IRM 类不变学习,并报告跨库矩阵(train∈{MC,SZ}×test∈{MC,SZ} 四格全报);对照文献中 CXR 跨数据集域偏移的系统实证设计。
    参考:Cross Dataset Analysis of Domain Shift in CXR Lung Region Detection(PMID 36980375);Sogancioglu et al., Med Image Anal 2021;72:102125 综述。

⚠️ 坑点 5:伪 ID 与年龄/性别——轻隐私字段的重隐私用法(分类:工程陷阱)

问题:文件名内嵌 4 位伪 ID 与疾病标签;读片 TXT 提供年龄与性别。单看无直接标识符(数据源已脱敏、IRB 豁免),但"影像 + 年龄 + 性别 + 县级项目 + 时间近似区间"组合仍是准标识符;NLM 明确要求不得向研究小组/机构外转发数据集。
症状:Demo 网页/博客截图带原始文件名与读片全文;训练日志把 stem + 年龄 写进公开实验记录;把数据重新分发到公开网盘"方便同学"——这些都直接违反使用条款并抬高重识别风险。
解决

  1. 简单方法:代码层把 stem 视为敏感字段:日志/可视化输出统一映射为内部序号(如 case_000),展示读片时打码年龄。
  2. 进阶方法:数据卡(datasheet)中明示准标识符清单与再分发禁令;合作分发走 NLM 官方入口引荐(把需求方直接导流给 NLM),不私下传包。
  3. SOTA 方法:发布模型/权重前做成员推断与再识别风险评估;论文图表统一用重映射 ID;把合规检查写进 CI(扫描日志文件中的 MCUCXR 字符串)。
    参考:NLM Open-i FAQ 使用条款;Jaeger 2014 QIMS 中的分发与归属要求。

⚠️ 坑点 6:临床读片是非结构化自由文本(分类:标签理解)

问题:138 份 TXT 的前三行是"性别行 / 年龄行 / 自由文本",异常描述(如 “cavitary nodular infiltrate in RUL; active TB”、“effusions”、粟粒影等)无本体编码、术语与缩写不统一;官方 2024 年补的 ROI CSV 只覆盖病灶位置(55 张 TB 影像、109 框,1024 尺度),不是表现级结构化标签。
症状:正则解析把 “027Y” 读成字符串排序出错;把 “normal” 当异常词;把 ROI 缺失的 3 张 TB 影像误当"无病灶负样本"混进检测训练;跨影像聚合"空洞发生率"时因措辞不同而漏检。
解决

  1. 简单方法:标签永远以文件名后缀为准,读片文本只做交叉校验;解析器按行数与 key(Patient's Sex: / Patient's Age:)容错,缺行记 NaN。
  2. 进阶方法:建小型术语词典把 opacity/infiltrate/cavity/effusion/miliary 等映射到 SNOMED CT 概念(56717001/700272008/427099000/80003002,见 §2.1b),做表现级弱标签。
  3. SOTA 方法:用 LLM/命名实体识别批量抽取异常术语 + 人工抽检 100%;检测结果训练时对"无 ROI 的 TB"排除或用软标签,杜绝把未标注当负例。
    参考:读片格式官方定义(Jaeger 2014);ROI 列结构见官方 montgomery_consensus_roi.csv。

⚠️ 坑点 7:无官方划分——同一批 800 张,论文间 81%-99% 不可比(分类:评估误用)

问题:官方零划分。社区各论文自行 3:1、7:3、5 折、跨库切分,预处理(是否分割肺、是否 CLAHE、resize 尺寸)也各异,导致 MC+S 池上报告的准确率横跨 81.25%(VGG16)到 98.9%,几乎完全由协议差异驱动。
症状:文献对比表里"你的方法比 SOTA 低 15 个点"可能只是划分不同;审稿人要求复现基线时无划分文件可循;在同一测试集上"刷赢"的增益小于种子方差。
解决

  1. 简单方法:论文只引用协议相同的数字做对比;报告中写明划分种子、折数、预处理链,并发布划分 JSON。
  2. 进阶方法:固定一个社区可复现协议(如 5 折分层 CV + 公开划分文件),把历史结果按协议重跑一遍再进对比表。
  3. SOTA 方法:采用"外部测试集"范式(训练库与考试库分离),并报告多库外部矩阵;用统计检验(DeLong/bootstrap)替代裸点比较。
    参考:分数带证据见 medcentral 2023 综述表(DOI 10.1016/j.imed.2023.06.001)与 Engineering Reports 2022 汇总表(DOI 10.1002/eng2.12906);二手文献人口学张冠李戴实例见 Pol J Radiol 2022(DOI 10.5114/PJR.2022.113435)。

⚠️ 坑点 8:同源采集背景差异——标签与"拍片语境"相关,捷径学习温床(分类:偏倚陷阱)

问题:MC 全部来自同一台 CR、同一筛查项目;TB 例与正常例虽同源,但筛查项目内"正常例"更接近例行体检影像质量/体位分布,而确诊 TB 者常因症状复查、摆位与体态不同;合并 Shenzhen 后"数据集来源"与标签的相关性更强。卷积网络会优先学习这些与病灶无关的协变量。
症状:Grad-CAM 高亮区在肺外(肩关节、锁骨、胶片边缘、文字铅标位置);把影像下采样到 32×32 分数依然很高;换一台设备的真实数据上性能塌方。
解决

  1. 简单方法:训练前做"背景消融"检查——把肺外区域涂黑重训,若分数几乎不掉即为捷径实锤;例行可视化解释(Grad-CAM)并人工审读高亮区。
  2. 进阶方法:肺区裁剪/掩膜屏蔽后再分类(本集掩膜天然支持);按设备/来源分组的 balanced sampling;数据增强中加纹理/对比度扰动打破 CR 质感线索。
  3. SOTA 方法:域不变表示学习(IRM/域对抗/元学习跨域折),并强制外部验证(JSRT 或真实临床流);报告"内部 vs 外部"性能落差作为泛化证据。
    参考:Sogancioglu et al., Med Image Anal 2021;72:102125(CXR 深度学习偏倚综述);CXR 跨数据集域偏移实证(PMID 36980375)。

坑点快速自查清单(立项 10 分钟版):

# 一句话自查 对应坑点
1 我报的是多折均值±标准差,还是单次切分点估计? 坑点 1
2 我的 imread flag 是否 UNCHANGED,max 是否 ≤4,095? 坑点 2
3 左右掩膜合并前是否断言了 shape 与左右质心方向? 坑点 3
4 合并 Shenzhen 后是否三行结果(MC/SZ/合并)都报了? 坑点 4
5 日志与图表里是否还有 MCUCXR 原始 ID + 年龄的组合? 坑点 5
6 标签是否只信文件名后缀、文本只做交叉校验? 坑点 6
7 对比文献时是否核对了对方的划分与预处理协议? 坑点 7
8 Grad-CAM 高亮是否落在肺内?肺外高亮是否做了消融检查? 坑点 8

§6.6 数据增强:安全与危险清单

操作 判定 说明
水平翻转 ✅ 安全 PA 胸片左右大体对称;翻转后左右掩膜需同步交换或翻转
小角度旋转(±10°)、平移(≤10%)、缩放(≤10%) ✅ 安全 模拟摆位差异,文献标配
亮度/对比度抖动(限训练折内统计的窗位附近) ✅ 安全 缓解 CR 曝光差异;配合坑点 2 的窗口化
高斯噪声/轻度模糊 ✅ 安全 小正则效应,注意别掩盖细微粟粒影
CLAHE/直方图均衡(参数全库拟合) ❌ 危险 统计泄漏进测试折;参数必须逐折在训练集上拟合
垂直翻转 ❌ 危险 破坏解剖(膈肌在下、肺尖在上),标签语义失真
弹性形变/大角度旋转 ❌ 危险 歪曲空洞/积液形态,筛查任务中属于造假式增强
Cutout 遮挡病灶区(无 ROI 指引随机大块遮挡) ❌ 危险 138 张的小样本上极易把唯一病灶抹掉、标签失真

§6.7 模型推荐

任务 推荐模型 理由
TB 分类(首选) ImageNet 预训练 DenseNet-121 / EfficientNet-B0(224-512 输入) 138 张上迁移学习显著优于从零训练;参数量适中不易过拟合
TB 分类(轻量) ResNet-18 + 冻结浅层 单卡 CPU 亦可微调,适合教学与消融
肺分割 U-Net(ImageNet encoder)或预训练 MedSAM 类基础模型微调 官方掩膜即金标准,可对标 Candemir 2014 的 94.1% overlay accuracy
病灶检测 Faster RCNN / YOLOv8(1024 尺度 ROI 框) 55 张、109 框仅够概念验证,建议 5 折 CV
读片文本 规则 + 词典先行,LLM 抽取为辅 138 条文本规模下人工可全检,模型仅提效

§6.8 硬件需求

配置 规格 适用场景
CPU only 4 核 / 8 GB 内存 / 2 GB 磁盘 数据探查、特征方法、U-Net 推理
入门 GPU 4-8 GB 显存(如 RTX 3050 / Colab T4) DenseNet-121 512×512 微调,5 折 CV 半天内可完成
稳妥配置 16 GB 显存 大输入(1024×1024)检测任务 + 多折并行

§6.9 评估指标代码

import numpy as np, torch
from sklearn.metrics import roc_auc_score, confusion_matrix

def cls_metrics(y_true, y_prob):
    """分类:AUC + 固定 0.5 阈值的敏感度/特异度(TB 为正类)。"""
    y_pred = (np.asarray(y_prob) >= 0.5).astype(int)
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred, labels=[0, 1]).ravel()
    return {"auc": roc_auc_score(y_true, y_prob),
            "sensitivity": tp / (tp + fn + 1e-9),
            "specificity": tn / (tn + fp + 1e-9)}

def dice_iou(pred: torch.Tensor, gt: torch.Tensor, eps=1e-7):
    """分割:二值掩膜的 Dice 与 IoU(输入 [B,1,H,W],取值 0/1)。"""
    pred, gt = pred.float(), gt.float()
    inter = (pred * gt).sum(dim=(1, 2, 3))
    dice = (2 * inter + eps) / (pred.sum(dim=(1, 2, 3)) + gt.sum(dim=(1, 2, 3)) + eps)
    union = ((pred + gt) > 0).float().sum(dim=(1, 2, 3))
    iou = (inter + eps) / (union + eps)
    return dice.mean().item(), iou.mean().item()

def report_folds(per_fold):
    """5 折结果汇报:均值±标准差(小样本必报)。"""
    for k in per_fold[0]:
        vals = [f[k] for f in per_fold]
        print(f"{k}: {np.mean(vals):.4f} ± {np.std(vals):.4f}")

§6.10 MLOps 笔记

  • 版本三元组:数据快照(官方目录下载日期)+ 划分文件哈希 + 代码 commit 一起入库;MC 集官方无版本号,以目录日期 2024-08-28 为准并写入实验元数据。
  • 可复现门槛:固定种子(numpy/torch/CUDA 全套)、deterministic=True、记录库版本;138 张上"复现失败"几乎总是管线差异而非玄学。
  • 评测防腐:把测试折挂只读权限;任何窗位/归一化统计都从训练折生成后作为常量传入。
  • 监控漂移:若模型进入试点,监控输入影像的位深/尺寸/直方图分布——CR 与 DR 混流是最常见的静默漂移源(对应坑点 4)。
  • 审计留痕:保留每张推理结果的原始 stem 映射(内部加密存储),满足 NLM 归属与可追溯要求。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
单中心/单设备偏倚 全部影像来自蒙哥马利县一台 Eureka CR 外部验证(JSRT/Shenzhen/PadChest);报告跨库性能落差
选择偏倚(筛查场景) 受检者为筛查项目人群,病情谱与住院门诊不同 明确"筛查级标签"定位;不做诊断级声明
类别先验偏倚 80:58 不反映真实患病率 报告敏感度/特异度与 AUC,勿只报 accuracy
少数亚型稀缺 粟粒、积液等表现无结构化标签,仅见自由文本 表现级分析前先建术语映射(§6.5 坑点 6)
人口学不透明 官方无汇总统计,二手文献互相矛盾甚至张冠李戴 以逐例 TXT 自行统计并报告口径
标签噪声残留 读片级标签非微生物学确诊 低-中 敏感性分析;用 ROI/掩膜做一致性检查

§7.2 标注质量

肺掩膜:放射科医生监督下按解剖标志手工描绘,明确排除心脏与膈肌后方区域、严重病灶处用推断边界——这些约定既是优点(协议透明)也是边界(掩膜不含被排除区域,做"全胸廓肺容积"类分析会低估)。官方未发布标注者间一致性数值,掩膜应作参考标准而非无误差真值。共识 ROI:两位放射科医生共识,仅覆盖 55/58 张 TB 影像(109 框,1024 尺度);正常例与 3 张 TB 例无 ROI 属未标注而非无病灶

掩膜接入管线前的 30 秒抽查代码(可视化 + 统计双重校验):

import numpy as np, cv2
from pathlib import Path

root = Path("data/MontgomerySet")
for stem in ["MCUCXR_0001_0", "MCUCXR_0104_1", "MCUCXR_0207_1"]:
    img = cv2.imread(str(root / "CXR_png" / f"{stem}.png"), cv2.IMREAD_UNCHANGED)
    lm = cv2.imread(str(root / "ManualMask/leftMask" / f"{stem}.png"), cv2.IMREAD_UNCHANGED)
    rm = cv2.imread(str(root / "ManualMask/rightMask" / f"{stem}.png"), cv2.IMREAD_UNCHANGED)
    assert lm.shape == rm.shape == img.shape[:2], f"尺寸不一致: {stem}"
    union = (np.maximum(lm, rm) > 127)
    xs = np.where(union.any(axis=0))[0]
    print(stem, "肺区占比 %.1f%%" % (100 * union.mean()),
          "左右掩膜像素和是否相接:", abs(xs[0]) >= 0 and xs[-1] < img.shape[1])
    # 质心方向检查:leftMask 质心应在影像右半(患者左肺),rightMask 反之
    def cx(m):
        ys, xs2 = np.nonzero(m > 127);  return xs2.mean() if len(xs2) else -1
    assert cx(lm) > img.shape[1] / 2 > cx(rm), f"左右方向可疑: {stem}"

§7.3 泛化性

部署场景 失效风险 证据
DR 设备/不同数字化链 高:位深、分辨率、噪声谱全变 MC(12-bit CR) vs SZ(8-bit DR) 系统差异;跨库域偏移实证(PMID 36980375)
儿科患者 高:MC 无儿科样本(SZ 含儿科 AP) Shenzhen 集构成(Jaeger 2014)
高患病率流行区 中:先验漂移 + 表现谱更重 筛查人群与流行区临床人群差异;WHO 报告的流行病学背景
合并池训练 → 真实部署 高:捷径学习与域混淆 合并池分数虚高现象(§8.2 分数带);Sogancioglu 2021 综述
时间推移 未知:数据无时间戳,无法内部评估时间漂移 官方未公布采集年份(§3.7)

§7.4 伦理

数据在提供方完成脱敏,使用与分享经伦理委员会审查豁免,NIH OHRP 审查号 No. 5357(Jaeger 2014)。使用条款:免费供研究社区使用;不向研究小组/机构外转发;成果归属 NLM 并引用相应论文。个人层面字段仅年龄与性别;文件名为伪 ID。任何衍生公开成果应延续"伪 ID 化展示 + 不再分发原始数据"的约定(见坑点 5)。

§7.5 公平性

官方未发布种族/民族/语言等公平性相关维度,无法做子组审计——这本身是局限:在 MC 上训练的模型对人群子组的差异化表现不可测。性别与年龄可从读片文本逐例解析,可做粗粒度子组评估,但需先解决个别文本解析容错问题。跨人群泛化(美国县筛查人群 → 其他国家人群)应交由外部验证而非本集内部结论。

§7.6 数据漂移

数据冻结、无时间戳:无法评估时间维度的表示漂移(采集年份未知是硬约束,见坑点 8 与 §3.7)。设备维度漂移可量化:CR 12-bit 4,020×4,892 对 DR 8-bit 约 3K×3K,在直方图分布、有效分辨率、噪声音频谱上系统性不同——以 MC 训练的模型接入 DR 流水线前,必须做直方图/位深分布监控(PSI/KS 检验)与再校准。

§7.7 DAIMS 24 项数据质量评估

# 检查项 状态 说明
1 宽格式 影像-掩膜-文本-ROI 靠同名主干一一对应,宽表化仅需文件名解析
2 唯一标识 MCUCXR_####_X 主键全局唯一(官方目录实测 138 唯一文件)
3 特殊字符 文件名/读片均为 ASCII,读片行尾偶有空白已可容错
4 重复行 ⚠️ 文件级无重复;但无患者字段,无法排除同一受检者跨年两次入集
5 缺失编码 ⚠️ 读片缺行、TB 无 ROI 均为"未标注"型缺失,官方无显式缺失编码
6 标签标识 疾病标签编码于文件名末位(0/1),与读片语义一致
7 罕见类分组 ⚠️ TB 亚型(空洞/粟粒/积液)无结构化分组,仅自由文本
8 偏倚评估 ⚠️ 单设备/单县/筛查人群偏倚明确但需研究者自行量化
9 数据字典 官方 ReadMe PDF + 数据页描述完整覆盖命名与格式
10 信息性缺失解释 ⚠️ "无年份/无患者 ID"本身信息量有限,官方未解释不可得原因
11 设备记录 设备(Eureka CR)、位深、像素间距均有官方一手记载
12 共线性 影像数据无结构化特征表,共线性风险不适用
13 编码映射 ICD-11/SNOMED 映射本页 §2.1/§2.1b 提供并核验
14 时间戳处理 全数据集无任何时间戳,采集年份官方未公布
15 划分建议 ⚠️ 官方无划分;本页给出分层 5 折与跨库两套方案
16 泄漏讨论 §5.3 完整讨论患者级/预处理/合并池三类泄漏
17 标签分布 80/58 与 ROI 覆盖率官方可核(§4.2)
18 测量偏倚 ⚠️ 筛查项目测量协议与临床诊断流程差异未量化
19 外部验证建议 §7.8 给出有同行评审支撑的外部验证锚点
20 版本记录 ⚠️ 无正式版本号;仅可追溯 2014 发布与 2024-08-28 目录迁移
21 预处理脚本 ⚠️ 官方不提供脚本;本页 §6.3/§6.4 给出可运行实现
22 合规要求 使用条款、归属与再分发限制明确(Open-i FAQ + 论文)
23 多模态对齐 文件名主键严格对齐影像/掩膜/读片/ROI 四模态
24 去标识化 数据源已脱敏且 IRB 豁免;仅剩年龄/性别准标识符

DAIMS 评分:18.5 / 24

评分解读:MC 集在"结构纪律"维度接近满分——命名主键、标签编码、格式文档、设备记录、合规条款都有一手书面依据,这在 2014 年发布的公开医疗影像集中属于第一梯队。扣分集中在三类先天约束:其一,时间戳与患者级标识完全缺失(第 14 项为 0),使时间漂移与患者级泄漏检测在本数据集上原理性不可行;其二,划分、脚本、亚型分组等"面向 AI 工程化"的配套设施缺位(5 个 ⚠️),需要使用者按本页方案自行补齐;其三,规模(138 张)不是 DAIMS 直接扣分项,却放大了上述所有 ⚠️ 的后果。

对你意味着什么:① 直接拿本页 §5.3 划分脚本与 §6.3/§6.4 预处理代码起步,可把 21 号项的 ⚠️ 升级为你的项目内 ✅;② 任何涉及"时间趋势""患者轨迹"的研究问题请换数据集,MC 集原理上无法回答;③ 把"假设一人一图"写进论文限制小节,并优先把 MC 用作外部测试集——这是它相对风险最低、价值最高的用法;④ 引用与再分发合规(22/24 号项)不要自由发挥,严格按 NLM 条款执行。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
JSRT(247 张)→ MC 日本放射技术学会(JSRT)+ NLM 肺分割 MC 上 overlay accuracy 94.1%(JSRT 自身 95.4%) -1.3 pp 首个跨库锚点:异常肺(TB 表现)是主要性能损失源(Candemir et al., IEEE TMI 2014, DOI 10.1109/TMI.2013.2290491)
MC → MC+S 合并池 Nafisah & Muhammad, King Saud University TB 分类(EfficientNetB3 + 肺分割,5 折 CV) 仅 MC 89.9% → 合并 98.7% +8.8 pp 合并后大幅跃升须警惕数据集协变量捷径,不能解释为"泛化更好"(DOI 10.1007/s00521-022-07258-6;另见 §8.2 分数带)

§8 基准性能与生态

§8.1 排行榜

排名不分先后,按任务分组;不同行之间协议不同、不可直接比较(原因统一见 §8.3 与坑点 7)。

排名 模型 任务与性能 年份 关键技术 完整引用 代码
1 CBIR + 解剖图谱非刚性配准 + 图割 肺分割:MC overlay accuracy 94.1%(JSRT 95.4%、India 91.7%) 2014 Radon 轮廓检索 + SIFT-flow 形变配准 + 定制能量图割 Candemir S, et al., 2014, IEEE Trans Med Imaging 33(2):577-90. DOI: 10.1109/TMI.2013.2290491 NLM 论文 PDF
2 多特征 BoW + 筛查系统(首个基线) TB 分类:MC+S 首个系统评测基线(最优特征组合见论文) 2014 HOG/强度/形状/曲率特征组合 + 非刚性肺配准 Jaeger S, et al., 2014, IEEE Trans Med Imaging 33(2):233-45. DOI: 10.1109/TMI.2013.2284099 PMC 免费全文
3 EfficientNetB3 + 肺分割前端 TB 分类:MC 5 折 CV 89.9%(无分割 85.5%);MC+S 合并 98.7% 2022 迁移学习 + 分割引导 + Grad-CAM 可解释性 Nafisah SI, Muhammad G., 2022, Neural Computing and Applications. DOI: 10.1007/s00521-022-07258-6 论文未公开官方仓库
4 Faster RCNN 病灶检测 TB 检测:MC+S+西安交大集 6,144 张,acc 92.60%、AUC 0.98 2019 病灶级定位替代整图分类 Xie Y, et al., 2019, 检测式 TB 筛查(转引自 Intelligent Medicine 2023 综述表 2,DOI: 10.1016/j.imed.2023.06.001) 论文未公开官方仓库

不可比性说明:第 1 行是掩膜级分割指标(overlay accuracy),第 2-4 行是影像级分类/检测指标;第 2-4 行的训练/测试划分、是否合并 Shenzhen、是否用肺掩膜裁剪、输入尺寸与增强全部不同。把四行放进同一列比大小是本数据集文献中最常见的错误。

§8.2 SOTA 总结与选型建议

在"仅 MC"设置下,文献可复现的合理区间是:分类 85%-90%(5 折 CV、迁移学习 + 分割前端)、分割 overlay 94% 上下(传统配准系)与 Dice 0.96-0.98 量级(U-Net 系,协议各异)。MC+S 合并池上的 96%-99% 数字包含数据集协变量红利(坑点 4/8),请勿作为"接近临床可用"的证据。选型建议:研究分割算法鲁棒性 → 用 MC 全集 + 官方掩膜 + Candemir 协议;研究小样本分类方法学 → 5 折 CV + 公开划分;展示泛化 → MC 只做考场。

同一方法体系在不同协议下的"同源数字对照"(均出自可查证文献,注意协议列的差异):

方法体系 协议 结果 出处
EfficientNetB3 + 肺分割 仅 MC,5 折 CV 89.9% acc Nafisah & Muhammad 2022, DOI 10.1007/s00521-022-07258-6
EfficientNetB3 无分割 仅 MC,5 折 CV 85.5% acc 同上
EfficientNetB3 + 肺分割 MC+S 合并,5 折 CV 98.7% acc 同上(含协变量红利,解读见坑点 4)
VGG16 MC+S 800 张,3:1 随机切分 81.25% acc Ahsan et al.(转引自 Intelligent Medicine 2023 综述表 2,DOI 10.1016/j.imed.2023.06.001)
B-CNN MC+S 800 张,3:1 随机切分 96.42% acc Abideen et al.(同上综述表 2)
解剖图谱 + 图割 MC 全集掩膜评测 94.1% overlay acc Candemir et al. 2014, DOI 10.1109/TMI.2013.2290491

同一方法(EfficientNetB3)从 89.9% 跳到 98.7% 的唯一变量是"加入了 Shenzhen"——这 8.8 个百分点主要来自数据集协变量而非病灶识别能力,是全数据集文献里最直观的"协议敏感性"演示。

§8.3 评测协议

  1. 分类:分层 5 折 CV(键 = 数据集 × 标签),报告 AUC、敏感度、特异度的折均值±标准差;阈值固定 0.5 或由训练折内 Youden 指数确定。
  2. 分割:对左右掩膜合并后的全肺计算 JSC/Dice(或沿用 Candemir 2014 的 overlay accuracy 口径),距离类指标(ACD/ASD)建议一并报告;左右肺分别报告可暴露"左侧(含心影遮挡)更难"的系统性差异。
  3. 检测:109 个 1024 尺度框按目标分辨率等比换算,IoU=0.5 的 mAP;对无 ROI 的 3 张 TB 影像从评测集中排除并注明。
  4. 跨库协议:任何"合并池"结果必须同时给出"仅 MC / 仅 SZ"两个内部基线,否则视为协议不完整。
数据集 关系 说明
Shenzhen Hospital CXR Set 姊妹集(同批发布) 662 张(326/336),Philips DR,与 MC 合称 TB CXR benchmark;文件命名同构(CHNCXR_####_X)
JSRT 上游/对照 247 张 + 公认金标准肺掩膜;MC 掩膜协议与之衔接(Candemir 2014)
India 集(Candemir 2014) 同源发布 138 张印度 CXR,与 MC 在同一论文中作为分割评测集发布(91.7% overlay accuracy)
Kaggle TB_Chest_Radiography_Database 衍生整合 Rahman et al. 整合多源 4,200 张(3500 正常/700 TB),含 MC 图像;口径已改,勿用于复现 MC 原始基准
PadChest / CheXpert 大规模邻居 大规模多病种 CXR 集,可作预训练库,再以 MC 做小样本评测

§8.5 关键论文 Top 8

  1. Jaeger S, Candemir S, Antani S, Wáng YXJ, Lu PX, Thoma G. Two public chest X-ray datasets for computer-aided screening of pulmonary diseases. Quantitative Imaging in Medicine and Surgery, 2014, 4(6):475-477. DOI: 10.3978/j.issn.2223-4292.2014.11.20 —— 数据集发布论文,命名模板/设备/读片格式的权威出处。
  2. Candemir S, Jaeger S, Palaniappan K, et al. Lung segmentation in chest radiographs using anatomical atlases with nonrigid registration. IEEE Transactions on Medical Imaging, 2014, 33(2):577-590. DOI: 10.1109/TMI.2013.2290491 —— MC 掩膜的诞生论文与分割基准(94.1%)。
  3. Jaeger S, Karargyris A, Candemir S, et al. Automatic tuberculosis screening using chest radiographs. IEEE Transactions on Medical Imaging, 2014, 33(2):233-245. DOI: 10.1109/TMI.2013.2284099 —— MC+S 上首个端到端筛查系统基线。
  4. Rajaraman S, Folio LR, Dimperio J, Alderson PO, Antani SK. Improved semantic segmentation of tuberculosis-consistent findings in chest X-rays using augmented training of modality-specific U-Net models with weak localizations. Diagnostics, 2021, 11(4):616. DOI: 10.3390/diagnostics11040616 —— 双放射科医生共识 ROI 标注的来源论文。
  5. Nafisah SI, Muhammad G. Tuberculosis detection in chest radiograph using convolutional neural network architecture and explainable artificial intelligence. Neural Computing and Applications, 2022. DOI: 10.1007/s00521-022-07258-6 —— MC/MC+S 5 折 CV 现代迁移学习锚点。
  6. Sogancioglu E, Calli E, van Ginneken B, van Leeuwen KG, Murphy K. Deep learning for chest X-ray analysis: a survey. Medical Image Analysis, 2021, 72:102125. DOI: 10.1016/j.media.2021.102125 —— 系统梳理含 MC 在内的 CXR 深度学习偏倚与评测问题。
  7. Hansun S, Argha A, Liaw ST, et al. Machine and deep learning for tuberculosis detection on chest X-rays: systematic literature review. Journal of Medical Internet Research, 2023, 25:e43154. DOI: 10.2196/43154 —— TB CXR 检测的系统综述,可定位 MC 的使用全景。
  8. Jaeger S, Karargyris A, Candemir S, Siegelman J, Folio L, Antani S, Thoma G. Automatic screening for tuberculosis in chest radiographs: a survey. Quantitative Imaging in Medicine and Surgery, 2013, 3(2):89-99. DOI: 10.3978/j.issn.2223-4292.2013.04.03 —— 筛查任务医学背景与方法谱系的先导综述。

§8.6 社区活跃度

MC 集以"基准资产"形式长期存在于文献中:数据集论文 1,095+ 引用(Semantic Scholar,截至 2026-09)且每年仍稳定新增;Kaggle 整合包(含 MC 图像)有活跃的 notebook 社区;官方无独立 GitHub 仓库与 issue 渠道,问题反馈走 NLM/Open-i 联系渠道。无官方排行榜,社区基准以论文对比表形态存在。

§8.7 生态快照

资源 类型 链接 推荐理由
NLM 数据集官方页 一手文档 Tuberculosis Chest X-ray Datasets 使用条款、引用要求、双集入口
官方数据目录 数据入口 MontgomerySet 唯一一手下载渠道(552 个数据文件 + ReadMe + ROI CSV)
Jaeger 2014 论文 PDF 方法出处 pub9356.pdf 命名/格式/读片样例的原始定义
Candemir 2014 论文 PDF 分割协议 pub6960.pdf 掩膜描绘协议与首个基准
Open-i FAQ 使用条款 openi.nlm.nih.gov/faq TB 集条款原文与 DICOM 申请渠道
Kaggle TB 整合包 便捷试验 TB_Chest_Radiography_Database notebook 生态活跃;正式研究需回到官方原始目录
Semantic Scholar 条目 引文计量 DOI 页 追踪引用与相关新作

§9 相关资源与引用

§9.1 官方资源清单

§9.2 BibTeX 完整引用

@article{jaeger2014two,
  title   = {Two public chest X-ray datasets for computer-aided screening of pulmonary diseases},
  author  = {Jaeger, Stefan and Candemir, Sema and Antani, Sameer and W{\'a}ng, Y{\`i}-Xi{\'a}ng J. and Lu, Pu-Xuan and Thoma, George},
  journal = {Quantitative Imaging in Medicine and Surgery},
  year    = {2014},
  volume  = {4},
  number  = {6},
  pages   = {475--477},
  doi     = {10.3978/j.issn.2223-4292.2014.11.20},
  pmid    = {25525580}
}

@article{candemir2014lung,
  title   = {Lung segmentation in chest radiographs using anatomical atlases with nonrigid registration},
  author  = {Candemir, Sema and Jaeger, Stefan and Palaniappan, Kannappan and Musco, Jonathan P. and Singh, Rahul K. and Xue, Zhiyun and Karargyris, Alexandros and Antani, Sameer and Thoma, George and McDonald, Clement J.},
  journal = {IEEE Transactions on Medical Imaging},
  year    = {2014},
  volume  = {33},
  number  = {2},
  pages   = {577--590},
  doi     = {10.1109/TMI.2013.2290491}
}

@article{jaeger2014automatic,
  title   = {Automatic tuberculosis screening using chest radiographs},
  author  = {Jaeger, Stefan and Karargyris, Alexandros and Candemir, Sema and Folio, Les and Siegelman, Jane and Callaghan, Fiona and Xue, Zhiyun and Palaniappan, Kannappan and Singh, Rahul K. and Antani, Sameer and Thoma, George and Wang, Yi-Xiang J. and Lu, Pu-Xuan and McDonald, Clement J.},
  journal = {IEEE Transactions on Medical Imaging},
  year    = {2014},
  volume  = {33},
  number  = {2},
  pages   = {233--245},
  doi     = {10.1109/TMI.2013.2284099}
}

@article{rajaraman2021improved,
  title   = {Improved semantic segmentation of tuberculosis-consistent findings in chest X-rays using augmented training of modality-specific U-Net models with weak localizations},
  author  = {Rajaraman, Sivaramakrishnan and Folio, Les R. and Dimperio, Jane and Alderson, Perry O. and Antani, Sameer K.},
  journal = {Diagnostics},
  year    = {2021},
  volume  = {11},
  number  = {4},
  pages   = {616},
  doi     = {10.3390/diagnostics11040616}
}

§9.3 引用指南

  • 只用影像与分类标签 → 引 jaeger2014two
  • 用肺掩膜做分割 → 加引 candemir2014lung
  • 用共识 ROI/病灶标注 → 加引 rajaraman2021improved
  • 任何情况下按官方要求归属 “National Library of Medicine, National Institutes of Health, Bethesda, MD, USA”,并遵守不外转分发条款。

§9.4 常见问题 FAQ

Q1:可以把它当训练集训练生产模型吗?
不建议。138 张、单设备、单县,只能支撑方法学实验与教学;生产模型请在大规模多源数据上训练,把 MC 用作外部测试集。

Q2:网上说这个集是 4092×3132 像素,到底哪个对?
官方一手材料(NLM 项目报告 pub9126、多篇经同行评审的论文)一致记载为 4,020×4,892 或 4,892×4,020 像素、0.0875 mm 像素间距。请以官方目录实际文件为准,并警惕二手来源的数字漂移。

Q3:读片文本里的 “active TB” 可以直接当微生物学确诊吗?
不可以。它是放射科医生读片结论的一部分;官方未逐例公布病原学确认状态,ICD-11 映射默认建议用 1B10.Z(未提及病原学确认)。

Q4:为什么我的图一读出来是全黑/指标偏低?
九成是 12-bit 读入问题(坑点 2):检查 imread flag、dtype、max 值与归一化基准(/4095 而非 /65535 或 /255)。

Q5:能否与 Shenzhen 集混合训练?
能,但必须按 §5.2b 明确设计 A/B 两种实验中的目标,并永远同时报告"仅 MC / 仅 SZ / 合并"三行结果(坑点 4、坑点 8)。

Q6:三个 TB 影像没有 ROI 框,是漏标吗?
官方共识 ROI 覆盖 55/58 张 TB 影像(109 框)。缺框的 3 张应视为"未标注",在检测评测中排除并注明;绝不可当"无病灶负样本"使用。


§10 AI 使用声明卡

§10.1 AI 模型列表

模型 用途 版本/说明
大语言模型(CodeBuddy Code,fast-model) 资料检索整理、结构起草、代码示例生成 2026-09 页面生成期使用

§10.2 AI 参与范围

AI 参与:文献检索与要点提炼、章节初稿撰写、代码示例编写、表格整理。人工参与:事实核验(官方一手来源逐条比对)、医学与数据工程交叉审核、最终定稿。所有硬数字均要求可回溯到 §9.1 所列一手来源。

§10.3 输入来源列表

  1. Jaeger S, et al., 2014, Quant Imaging Med Surg 4(6):475-477. DOI: 10.3978/j.issn.2223-4292.2014.11.20(PMID 25525580)
  2. Candemir S, et al., 2014, IEEE Trans Med Imaging 33(2):577-590. DOI: 10.1109/TMI.2013.2290491(PMID 24239990)
  3. Jaeger S, et al., 2014, IEEE Trans Med Imaging 33(2):233-245. DOI: 10.1109/TMI.2013.2284099(PMID 24108713)
  4. Rajaraman S, Folio LR, Dimperio J, Alderson PO, Antani SK, 2021, Diagnostics 11(4):616. DOI: 10.3390/diagnostics11040616(PMID 33808240)
  5. NLM LHNCBC, Tuberculosis Chest X-ray Datasets 官方页. https://www.lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayDatasets.html
  6. NLM 官方数据目录索引(CXR_png / ManualMask / ClinicalReadings / ReadMe / ROI CSV,2024-08-28 挂载). https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Montgomery-County-CXR-Set/MontgomerySet/index.html
  7. NLM-MontgomeryCXRSet-ReadMe.pdf(官方 ReadMe,PDF 元数据 2014-09-11)
  8. montgomery_consensus_roi.csv(官方共识 ROI 表,109 行 / 55 张 TB 影像)
  9. Open-i FAQ, NLM. https://openi.nlm.nih.gov/faq?download=true
  10. NLM 项目报告 pub9126(设备、位深、像素间距). https://lhncbc.nlm.nih.gov/LHC-publications/PDF/pub9126.pdf
  11. Nafisah SI, Muhammad G., 2022, Neural Computing and Applications. DOI: 10.1007/s00521-022-07258-6(PMID 35462630)
  12. Cross Dataset Analysis of Domain Shift in CXR Lung Region Detection, 2023. https://pmc.ncbi.nlm.nih.gov/articles/pmid/36980375/
  13. Sogancioglu E, et al., 2021, Medical Image Analysis 72:102125. DOI: 10.1016/j.media.2021.102125
  14. Intelligent Medicine 综述(MC+S 汇总表), 2023. DOI: 10.1016/j.imed.2023.06.001;Engineering Reports 汇总表, 2022. DOI: 10.1002/eng2.12906
  15. WHO, Global Tuberculosis Report 2023. https://www.who.int/teams/global-tuberculosis-programme/tb-reports/global-tuberculosis-report-2023
  16. ICD-11(1B10 系列,Find-A-Code 镜像核验)与 SNOMED CT(56717001 等,FHIR tx.fhir.org lookup 核验,2026-09)
  17. Semantic Scholar 引文计数 API(1,095 次,截至 2026-09);OpenAlex/Rankless(624 次,2026-09)

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§2 医学背景与 ICD-11/SNOMED 映射 千方病案医学编辑部 逐码对照 WHO ICD-11 镜像与 SNOMED CT FHIR lookup ✅ 已通过
§3-§4 规格数字与目录结构 千方病案医学编辑部 逐项对照官方目录索引与论文原文 ✅ 已通过
§5 划分策略与泄漏讨论 千方病案医学编辑部(数据工程) 复核划分代码可运行性与分层键设计 ✅ 已通过
§6 预处理代码与 8 坑点 千方病案医学编辑部(数据工程) 代码逻辑走查;坑点逐条对照官方文档与文献 ✅ 已通过
§7 DAIMS 24 项与偏倚分析 千方病案医学编辑部 逐项证据回溯 ✅ 已通过
§8-§9 基准数字与引用 千方病案医学编辑部 DOI/PMID 逐一解析验证 ✅ 已通过

§10.5 AI 生成章节标注

全页面由 AI 辅助起草;§1.0/§1.2/§6.5 的叙事与解法框架、§7.7 的解读段为 AI 生成后人工修订;所有表格数字在人工核验表中留有对应记录。

§10.6 最后人工审核日期

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

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

返回 AI-Ready 数据集