Shenzhen TB CXR Set — 深圳结核病胸片基准 AI-Ready Wikipedia | 千方病案医数集

662 张深圳临床常规胸片:326 正常 vs 336 结核,含肺掩膜

来源 National Library of Medicine(NLM/NIH)× 深圳市第三人民医院 url: https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Shenzhen-Hospital-CXR-Set/index.html发布时间: 2026-09-08最后更新: 2026-09-08 阅读 6

信息速览

数据集名称Shenzhen TB CXR Set — 深圳结核病胸片基准 AI-Ready Wikipedia | 千方病案医数集
数据类型662 张 PNG 胸片,约 3.8 GB,免费直接下载,双肺掩膜+19 类病灶像素级标注
规模662 例受检者(约 2012 年,深圳市第三人民医院门诊)
接入方式National Library of Medicine(NLM/NIH)× 深圳市第三人民医院 url: https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Shenzhen-Hospital-CXR-Set/index.html
AI 就绪度

数据集封面

Shenzhen TB CXR Set — 深圳结核病胸片基准 AI-Ready Wikipedia

INFOBOX

字段 内容
数据集名称 深圳结核病胸片数据集(深圳医院胸部 X 光集)
英文全称 Shenzhen Hospital Chest X-ray (CXR) Set / Shenzhen Tuberculosis CXR Set
别名/简称 Shenzhen Set、ChinaSet_AllFiles、SZ-CXR、深圳胸片集
疾病分类 ICD-11 1B10.0 肺结核(正常组:无结核表现)
SNOMED CT 55887006 Pulmonary tuberculosis(肺结核)
数据模态 胸部 X 光平片(CXR,数字化 DR 摄影)
AI 任务类型 TB 二分类筛查、肺分割、病灶分割/定位、域自适应
样本总数 662 张(326 正常 / 336 有结核表现,含少量儿童 AP 片)
数据大小 约 3.8 GB(单图 PNG 约 3.5-6.5 MB)
数据格式 PNG(12-bit 灰度)+ TXT 放射科读片 + JSON/CSV(2022 标注)
许可证 免费研究用途(须署名 NLM/NIH 并引用 Jaeger et al. 2014)
访问级别 开放(官方服务器直接下载,无需注册申请)
DUO 标签 NRES、GRU
语言 中文语境采集(读片文本为英文简写格式)
首发日期 2014-12(Jaeger et al., QIMS 4(6):475-477)
最后更新 2024-08-28(官方 ReadMe 与共识 ROI 文件更新)
发布机构 NLM/NIH Lister Hill 中心 × 深圳市第三人民医院(广东医学院)
官方主页 data.lhncbc.nlm.nih.gov
下载地址 官方目录直链(Kaggle 有社区镜像)
DOI 10.3978/j.issn.2223-4292.2014.11.20(描述论文)
引用次数 1,095+(Semantic Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐(3/5)— 免费即下、掩膜与像素级标注齐全;但无官方划分、12-bit PNG 需转换、读片为自由文本需解析(扣分项:划分/格式/标注结构化)
页面状态 published

§0 E-E-A-T 审核声明

医学审核者:[千方病案医学编辑部] 交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、结核流行病学)、§7 偏倚分析。

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

审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。Shenzhen TB CXR Set 免费用于研究用途,要求在成果中署名 National Library of Medicine, NIH 并引用 Jaeger et al. 2014 与 Candemir et al. 2014。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? 这是美国国家医学图书馆(NLM/NIH)与深圳市第三人民医院合作发布的一套胸部 X 光片数据集:662 张临床上照出来的真实胸片,其中 336 张有肺结核的表现、326 张没有。每张图都带放射科医生写的读片记录(患者性别、年龄、看到什么异常),并配有肺部轮廓掩膜,2022 年 NLM 又补发了 336 张结核片中 19 类病灶的像素级描边标注。

为什么重要? 在 2014 年之前,想训练结核病影像 AI 的团队几乎找不到公开数据。NLM 一次性放出深圳与 Montgomery 两套数据集,成为全球结核病 CXR 研究的起点性基准,描述论文已有 1,095+ 次引用(Semantic Scholar,截至 2026-09)。它至今仍是检验"小数据 + 域差异"下模型真实泛化能力的试金石。

我能用它做什么? 训练结核筛查二分类器、训练肺部自动分割模型(有双肺掩膜)、训练病灶级分割与定位(有 19 类像素标注)、做跨机构域自适应研究(与 Montgomery 组成设备/人群双差异对),以及教学演示。全部免费直接下载,无需申请。

§1.1 摘要

Shenzhen Hospital CXR Set 由 Lister Hill 生物医学通信中心(NLM/NIH)联合深圳市第三人民医院(广东医学院)发布,Jaeger 等人于 2014 年 12 月在 Quantitative Imaging in Medicine and Surgery 上正式描述。数据为门诊日常工作中采集的正面胸片,采集窗口约 1 个月(主要在 2012 年 9 月),设备为 Philips DR Digital Diagnost 数字化 X 光机。图像以 PNG 格式提供,12-bit 灰度,尺寸不一(约 989×1,225 至 3,001×3,001 像素),标签直接编码在文件名后缀(_0 正常 / _1 异常)。每图配同名 TXT 读片文件(性别、年龄、异常描述)。官方渠道提供放射科医生指导描绘的左右肺分文件二元掩膜;Yang 等 2022 年在 Data 期刊发布 336 张结核片的 19 类病灶像素级标注(JSON + PNG 掩膜 + CSV 汇总,CC-BY 4.0)。该集与 Montgomery County CXR Set(138 张)共同构成 Jaeger et al. 2014 提出的双数据集结核 CXR 基准。

一句话技术画像:小规模(662 张)、单中心(深圳三院)、单设备(Philips DR)、多层级标注(文件名二分类 → 自由文本读片 → 双肺掩膜 → 19 类像素级病灶)、零申请门槛、划分自建——"麻雀虽小五脏俱全"型经典基准。它的分量不在数据量,而在十余年研究积累形成的可比基线链条与真实世界噪声场景。

§1.2 战略价值

基准史价值维度:这是深度学习医学影像时代最早、被引用最广的公开结核 CXR 数据集之一(1,095+ 次引用,Semantic Scholar,截至 2026-09)。2017 年 Lakhani & Sundaram 的 AUC 0.99、2020 年 Liu 等在 CVPR 提出 TBX11K 时的对照基线、2021 年 EfficientNet ensemble 系列研究,全部以本集为训练或验证数据。任何声称在结核筛查上有效的模型,都绕不开与这条历史基线序列的比较。

域差异研究维度:深圳集与 Montgomery 集构成一对天然"域对"——设备(中国 DR 数字机 vs 美国 CR)、人群(门诊患者 vs 筛查项目人群)、临床流程(日常Routine vs 专门筛查)三重差异。Heliyon 2020 与 Diagnostics 2023 的研究均以这对数据集实证:跨数据集分布偏移会显著削弱模型泛化。这使它成为域自适应(Domain Adaptation)、联邦学习与泛化性评估研究不可替代的实验素材。

§1.3 同类数据集横向对比

数据集 规模 模态 标注 差异化定位
Shenzhen TB CXR Set 662 张 CXR(DR) 二分类 + 读片文本 + 双肺掩膜 + 19 类像素级病灶 临床常规采集,含儿童 AP 片,真实世界噪声大
Montgomery County CXR Set 138 张 CXR(CR) 二分类 + 读片文本 + leftMask/rightMask 人工分割 筛查项目采集,图像质量统一,掩膜质量标杆
TBX11K(Liu et al. 2020) 11,200 张 CXR TB/非 TB/病但非 TB/健康四分类 + 病灶框 大规模、标签更细,弥补小数据时代局限
NIH ChestX-ray14 112,120 张 CXR 14 类胸 textual 挖掘标签(弱监督) 规模大但 TB 标签噪声高
Belarus TB 集(Rahman et al. 2020) 306 张 CXR 全 TB 阳性 耐药 TB 人群,仅作外验

§1.4 版本时间轴

时间 事件 说明
约 2012-09 图像采集 深圳市第三人民医院门诊,约 1 个月窗口,Philips DR
2014-02 相关方法论文 Jaeger et al. 自动 TB 筛查(IEEE TMI 33(2):233-245)
2014-12 数据集正式发布 Jaeger et al. 描述论文(QIMS 4(6):475-477),两集同步公开
2020 前后 Kaggle 社区镜像 raddar 重打包版(8-bit + CSV 元数据)广泛流传
2022-11 像素级病灶标注 Yang et al. 19 类异常标注发布(Data 7(7):95,CC-BY 4.0)
2024-08-28 官方仓库更新 ReadMe 文档更新,新增 shenzhen_consensus_roi.csv
2026-09(本页) 生态快照整理 引用 1,095+(Semantic Scholar);活跃度详见 §8.6

§1.5 典型应用场景

  1. 结核筛查二分类器:以 326/336 均衡样本快速原型化 CNN/Transformer 筛查模型,是课程作业与论文消融实验的标准配置。
  2. 肺自动分割:左右肺分文件掩膜 + Montgomery 人工分割,可训练并交叉验证 U-Net 系列分割网络。
  3. 病灶级分割与可解释性:2022 年 19 类像素级标注支持从"有没有病"深入到"病灶在哪、什么形态"的细粒度建模。
  4. 跨域泛化与域自适应:深圳↔Montgomery 双向迁移是验证域自适应算法(如 DANN、风格迁移)的经典最小实验场。
  5. 医学影像教学:读片文本含 19 类异常的中文/英文对照描述,适合构建教学看片库与报告生成演示。

§2 医学背景

§2.1 ICD-11 编码映射

标签 ICD-11 编码 ICD-11 名称 备注
结核表现(_1 1B10.0 肺结核(Pulmonary tuberculosis) 影像学表现符合结核,非微生物学确诊分层
结核表现(_1 1B10.2 呼吸系统结核(Respiratory tuberculosis, bacteriologically or histologically not confirmed) 部分病例适用
正常(_0 1C30 或非编码 无结核表现 门诊人群,非健康查体,不排除其他心肺异常

数据集标签是影像学读片标签而非诊断标签:_1 表示"影像可见结核表现",_0 表示"未见结核表现"。二者均不能直接映射为 ICD-11 确诊编码,上表仅供对照检索。

§2.1b SNOMED CT 映射

标签 SNOMED CT 码 术语 层级
结核表现 55887006 Pulmonary tuberculosis(肺结核) Disorder
结核表现 10293001 Cavity of lung(肺空洞) 读片常见征象
结核表现 267036007 Pleural effusion(胸腔积液) 19 类标注类别之一

正常组无对应疾病码;SNOMED 映射建议仅对结核片使用 55887006 及其子码,正常片建议在自有 schema 中标记为 finding_absent 自定义码而非硬套 SNOMED。上表征象码覆盖 19 类标注中出现频率最高的类别,其余类别(粟粒性结核、腺病、钙化淋巴结等)可在 SNOMED 浏览器按 Disorder 层级逐类检索后补充映射。

§2.2 疾病简介与流行病学

结核病由结核分枝杆菌引起,以肺结核最常见,是全球单一传染病致死主因之一,每年导致约 140 万人死亡(García Seco de Herrera et al., 2026, Scientific Reports. DOI: 10.1038/s41598-025-30792-x)。胸部 X 光因其低成本、高可及性,是 WHO 推荐的结核筛查工具,尤其适用于高负担、放射科医生短缺地区。影像学上,肺结核典型表现为上叶尖后段浸润、空洞、粟粒样结节、胸腔积液与纤维收缩等,但上述征象与非结核肺炎、肺癌、真菌感染存在重叠——这正是深圳集"读片标签≠确诊标签"的医学根源,也解释了为何该数据集 336 张"结核表现"片中经二次细读仅 330 张可见明确 TB 征象(Yang et al., 2022, Data. DOI: 10.3390/data7070095)。

确诊金标准与影像的关系:结核的微生物学确诊依赖痰涂片/培养或分子检测(GeneXpert),影像学仅提供"提示 + 定位 + 严重度"信息。这决定了任何基于本数据集的模型都属于"影像学筛查器"而非"诊断器":模型高敏感低特异的输出应进入病原学确认流程,而不能直接作为治疗依据。理解这一层级关系,是正确使用本数据集做临床叙事的前提。

本集读片文本中可见的主要征象谱(与 2022 年 19 类标注类别对应):

征象类别(节选) 影像学含义 与结核的关系
浸润(小/中度/严重) 肺实质渗出性改变 活动性结核最常见表现
空洞 实变内含气腔隙 提示活动性/传染性强
粟粒样结节 弥散微小结节 提示血行播散
胸腔积液 胸膜腔积液 结核性胸膜炎可能
钙化结节/钙化淋巴结 陈旧性钙化 提示既往感染(非活动)
聚集性结节(2-5 mm) 局部结节簇 需与转移/真菌鉴别

完整 19 类见 §3.5;阳性片中征象可并存,这正是把读片文本重构为多标签的医学依据。

§2.3 临床任务定义

任务 定义 在本数据集上的形态
筛查(Screening) 从大量就诊者中快速识别可疑结核者,敏感性优先 文件名 _0/_1 二分类
诊断辅助(CADe) 对可疑病灶定位并提示 2022 年 19 类像素级标注
分割(Segmentation) 勾画肺野/病灶边界,为量化分析提供基础 双肺掩膜(左右分文件)+ 病灶掩膜
报告结构化 将自由读片文本转为结构化字段 TXT 读片 → 性别/年龄/征象词典

读片文本的标准格式:官方示例读片为 male 46yrs bilateral PTB,含义为"46 岁男性,双肺结核表现"。文本高度缩写化(PTB = Pulmonary Tuberculosis),且异常描述词汇与 2022 年 19 类标注类别并非一一对应——把 TXT 解析为多标签时,建议直接对齐 Yang et al. 2022 的类别表(见 §6.5 坑点 5 的 SOTA 方法)。

§2.4 患者人群

维度 描述 来源
来源机构 深圳市第三人民医院(原广东医学院附属深圳三院,传染病专科)门诊 Jaeger et al. 2014
采集时间 约 1 个月窗口,主要在 2012 年 9 月 Jaeger et al. 2014
年龄 跨度大,含儿童(少量 AP 位儿童片);多数为成人 Jaeger et al. 2014;社区统计
性别 男性约 69%、女性约 31%(社区解析的 662 例元数据) Kaggle raddar 镜像
种族/民族 未提供
就医类型 门诊日常就诊(非筛查项目、非健康查体) Jaeger et al. 2014
儿童片 包含(AP 位),约占少数,官方未公布精确比例 Jaeger et al. 2014

人群画像对建模的含义:门诊就诊者包含大量因呼吸道症状就诊的非结核患者,这使"正常"组混有支气管扩张、陈旧性炎症、心脏增大等非 TB 表现——在真实部署中这反而是优势(模型见过更多干扰项),但在"健康体检"叙事下会被误用。儿童 AP 片的摆位与体型差异显著,做儿科应用前必须单独评估。

§2.5 临床价值

在放射科医生短缺的高负担地区,AI 结核筛查可直接缓解读片瓶颈。深圳集的价值在于其真实世界噪声:门诊常规采集、设备参数未严格控制、含儿童片与体位不佳片——这使在其上验证的模型更接近真实部署环境。WHO 在多份结核诊断指南中强调 CXR 筛查的前置价值,基于本数据集的算法原型可作为更大规模临床验证(如南非 prevalence survey 外验研究,Qin et al., 2024, Lancet Digital Health. DOI: 10.1016/S2589-7500(24)00118-3)前的早期迭代工具。

对三类使用者的具体价值:算法研究者——获得带完整标注链条的最小可信基准,适合消融与快速迭代;临床信息学团队——利用读片文本做报告结构化与 NLP 基线;公共卫生建模者——以 2012 年前后中国南方门诊为样本,研究 TB 筛查资源配置的历史横断面。三类价值共享同一套数据本体,但要求的预处理路径不同(§6.3 已分别覆盖)。

§2.6 金标准参考

划分 标注方式 标注者 性质
二分类标签 文件名后缀(临床读片结论) 深圳三院放射科 临床影像学读片标签(非微生物确诊)
读片文本 自由文本(性别、年龄、异常描述) 深圳三院放射科 非结构化,需自行解析
双肺掩膜 放射科医生监督下按解剖标志描绘 NLM 团队(Candemir et al. 2014 流程) 参考分割(排除心后/膈后区域)
共识 ROI(2024) shenzhen_consensus_roi.csv NLM 官方 2024-08 新增,分割评估补充参考
19 类病灶像素标注 VIA 工具逐病灶描边,初级标注 + 高级复核 + 共识 香港中文大学两名放射科医生(与 NLM 合作) 研究级参考标注(CC-BY 4.0)

§3 数据集规格

§3.0 版本抉择矩阵

数据集存在官方原始版与多个社区再打包版本,选错版本会直接影响复现:

你的需求 推荐版本 大小 理由
学术复现、引用原始出处 官方 NLM 仓库版 约 3.8 GB 12-bit 原始动态范围,官方 ReadMe 与 2024 共识 ROI 文件
快速跑通 Pipeline Kaggle raddar 镜像 3.77 GB 已附解析好的 shenzhen_metadata.csv(性别/年龄/findings),图像重打包
肺分割训练 官方掩膜 / Kaggle 掩膜镜像 另计 左右肺分文件(_l/_r),openmedlab 记录约 566 张掩膜覆盖
病灶级分割 官方 Annotations 目录 另计 2022 年 19 类像素标注(JSON+PNG+CSV),CC-BY 4.0
大规模预训练/多中心 TBX11K + 本集 TBX11K(Liu et al. CVPR 2020)11,200 张,含本集同类来源
报告结构化/NLP 官方版 + 读片 TXT 含在官方包内 TXT 与图像同名配对,无需额外下载

§3.1 模态详情

正面胸部 X 光平片(PA 位为主,儿童含 AP 位)。数字化 DR(Direct Radiography)摄影,Philips DR Digital Diagnost 系统,灰度 12-bit(0-4,095),PNG 无损存储。与 Montgomery 集(Eureka CR 计算机 X 光机,4,020×4,892)相比,深圳集为数字平板直接成像,噪声特性与动态范围不同。图像未附 DICOM 头信息(Montgomery 官方声明可应要求提供 DICOM,深圳集官方页面无此说明)。

对比项 Shenzhen 集 Montgomery 集
成像技术 DR 数字平板直接成像 CR 计算机放射(成像板 + 扫描)
设备 Philips DR Digital Diagnost Eureka 固定式 X 光机
典型分辨率 约 3K×3K(可变) 4,020×4,892(两种方向)
灰度位深 12-bit PNG 12-bit PNG(可应请求提供 DICOM)
采集场景 门诊日常(约 1 个月窗口) TB 筛查项目(多年累积)
噪声/伪影 真实门诊噪声,体位变化大 质控统一,图像规整

DR 与 CR 的差异不仅是分辨率:CR 的扫描颗粒噪声与 DR 平板的量子噪声在频域特征上不同,CNN 的浅层滤波器会优先捕获这些低级统计差异——这是 §6.5 坑点 1(域差异)的物理根源。

§3.2 按子集样本数

子集 样本数 占比 说明
正常(文件名 _0 326 49.2% 无结核表现;门诊人群,非健康对照
结核表现(文件名 _1 336 50.8% 有结核影像学表现;其中 6 张经细读无明确 TB 征象
儿童片(AP 位) 未公布精确数 少数 混在 _1_0 中,无儿童专用子集
合计 662 100% 单人单片的典型情况,官方未公布患者级去重表

§3.3 格式规格

文件类型 格式 位深/编码 说明
胸片图像 PNG(无损) 12-bit 灰度(16-bit 容器) 像素值 0-4,095,部分库读入后按 0-65,535 处理
读片文本 TXT ASCII 英文简写 首行性别(male/female),次行年龄(如 46yrs),末行异常描述
肺掩膜 PNG 二值(0/255 或 0/1) 左右肺分文件,_l/_r 后缀
病灶标注 JSON(VIA) 19 类异常的位置与形状
病灶掩膜 PNG 二值 每个异常一个文件,文件名含类别与序号
病灶汇总 CSV 20 列 Statistics_ShenzhenDataset.csv,列 1 为图名,列 2-20 为 19 类计数
共识 ROI CSV shenzhen_consensus_roi.csv(2024-08 新增)

§3.4 存储大小

单张 PNG 约 3.5-6.5 MB(Kaggle 列表实测:CHNCXR_0001_0.png 为 5.92 MB),662 张合计约 3.8-4.4 GB;Kaggle raddar 重打包版实测 3.77 GB。掩膜与标注文件合计约数百 MB。下载时建议预留 10 GB 磁盘。

存储项 数值 说明
图像总量(官方版) 约 3.8-4.4 GB 662 张 × 3.5-6.5 MB
图像总量(Kaggle raddar 版) 3.77 GB 重打包后含 shenzhen_metadata.csv(约 28 KB)
单图典型值 5.9-6.3 MB CHNCXR_0001_0.png 实测 5.92 MB
2022 病灶标注 数百 MB JSON + 每异常一掩膜 + CSV 汇总
建议工作空间 ≥10 GB 含解压副本与预处理缓存

§3.5 标注方式

三层标注体系:① 弱标注——文件名后缀二分类(临床读片结论驱动);② 半结构化——TXT 自由文本读片(性别、年龄、异常);③ 像素级——2022 年发布的 19 类结核病灶人工描边(JSON + 每异常一个 PNG 掩膜 + CSV 汇总),标注在 NLM 组织下由香港中文大学两名放射科医生完成,初级放射科医生先行标注、高级放射科医生逐例复核并达成共识(Yang et al., 2022, Data. DOI: 10.3390/data7070095)。

层级 载体 覆盖范围 发布时间 可直接用于
L1 二分类 文件名后缀 全部 662 张 2014-12 分类器训练/评估
L2 读片文本 同名 TXT 全部 662 张 2014-12 元数据、多标签弱监督
L3 肺掩膜 左/右分文件 PNG 官方及镜像分发(openmedlab 记录约 566 张口径) 2014-12 肺分割、ROI 裁剪
L4 病灶像素 JSON + 掩膜 + CSV 336 张结核片(330 张有征象) 2022-11 病灶分割、定位、可解释性

§3.6 标注者资质与一致性

读片文本来自深圳三院放射科日常报告(资质为执业放射科医生,人数未公布)。肺掩膜按解剖标志(心缘、心包、主动脉弓、膈肌)描绘并排除心后与膈后区域,由密苏里大学放射科的 Jonathan Musco, M.D. 验证(该验证流程在 Montgomery 集描述中声明,两集掩膜同源同流程)。19 类病灶标注由 CUHK 两名放射科医生初级标注 + 高级复核 + 共识定稿,未公布定量一致性系数(如 Dice/Kappa),使用时应在自建验证集上复核。

§3.7 采集周期

约 1 个月窗口,主要在 2012 年 9 月(Jaeger et al. 2014 明确说明"captured as part of the daily hospital routine within a 1-month period, mostly in September 2012")。无逐例采集日期字段,时间戳分析不可行。

时间属性 数值/说明
采集窗口 约 1 个月
主要月份 2012 年 9 月
发布时间 2014 年 12 月(描述论文刊出)
逐例日期 无(结构性缺失)
间隔(采集→发布) 约 2 年余

§3.8 地域覆盖

单中心:中国广东省深圳市,深圳市第三人民医院门诊。深圳为人口流入型超大城市,门诊人群来源多样但统计口径未公开。无多地域分布,泛化结论不可外推至其他人群。

地域属性 说明
国家/城市 中国·广东省·深圳市
机构 深圳市第三人民医院(传染病专科医院)
采集科室 门诊(放射科)
覆盖半径 未公布(城市门诊辐射范围)
多中心 否(仅此一处;外推需域自适应或外验)

§3.9 设备规格

项目 规格
设备 Philips DR Digital Diagnost(数字化 X 光摄影系统)
摄影位 正位(PA 为主,儿童含 AP)
灰度 12-bit(0-4,095)
分辨率 可变,约 989×1,225 至 3,001×3,001(中位约 2,937×2,743,openmedlab 记录)
逐例曝光参数 未提供(无 DICOM 头)
质量控制 门诊常规质控(无专门筛查流程)

§3.10 深度溯源链

患者就诊(深圳三院门诊,约 2012-09)
  → Philips DR Digital Diagnost 采集(12-bit 灰度)
  → 深圳三院放射科读片(TXT 自由文本 + 影像学结论)
  → 数据提供方脱敏(去标识,IRB 豁免:NIH OHRP No. 5357)
  → NLM/NIH Lister Hill 中心接收、整理、命名(CHNCXR_####_X.png)
  → 2014-12 随 Jaeger et al. QIMS 论文公开发布
  → NLM 团队描绘双肺掩膜(放射科医生监督,Musco 医生验证)
  → 2022-11 CUHK 放射科医生 + NLM 发布 19 类病灶像素级标注
  → 2024-08 官方仓库更新 ReadMe 与 shenzhen_consensus_roi.csv

§4 数据结构

§4.0 目录树

官方仓库解压后结构(CXR_pngClinicalReadings 为官方目录;LungMasks 为官方/社区分发的掩膜合集,按 Kaggle 镜像习惯单列):

Shenzhen-Hospital-CXR-Set/
├── NLM-ChinaCXRSet-ReadMe.docx        # 官方说明(2024-08-28 更新)
├── shenzhen_consensus_roi.csv         # 共识 ROI 汇总(2024-08 新增)
├── CXR_png/                           # 662 张胸片,PNG 12-bit
│   ├── CHNCXR_0001_0.png              #   _0 = 正常
│   ├── CHNCXR_0002_0.png
│   ├── ...
│   └── CHNCXR_0662_1.png              #   _1 = 结核表现
├── ClinicalReadings/                  # 662 个读片文本
│   ├── CHNCXR_0001_0.txt              #   首行性别,次行年龄,末行异常
│   └── ...
├── Annotations/                       # 2022 像素级标注(CC-BY 4.0)
│   ├── CHNCXR_0329_1.json             #   VIA 格式:19 类异常位置与形状
│   ├── CHNCXR_0329_1_Clustered_Nodule(2mm-5mm_apart)1.png
│   ├── CHNCXR_0329_1_Calcified_Nodule_2.png
│   └── ...
├── Annotations-2/                     # 标注补充版本
└── Statistics_ShenzhenDataset.csv     # 662 行 × 20 列病灶计数汇总

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
image_name string 图像文件名,含标签后缀 CHNCXR_0329_1.png 唯一键、标签来源 CHNCXR_0001-0662 + _0/1
label int 文件名后缀派生:0 正常 / 1 结核表现 1 分类目标 影像学读片标签,非确诊
sex string 读片首行:性别 male 分层评估/公平性 自由文本大小写不一 空白即缺失
age int 读片次行:年龄(岁) 46 分层评估 文本格式 46yrs 需解析 空白即缺失 数值 + yrs
finding string 读片末行:异常描述 bilateral PTB 多标签挖掘 缩写不一(PTB/正常/其他) 空白即缺失 自由文本
mask_l / mask_r image 左/右肺二元掩膜 CHNCXR_0329_1_l.png 肺分割、ROI 裁剪 排除心后/膈后区
lesion_json json VIA 病灶多边形(19 类) 见 §4.0 病灶分割/检测 人工描边误差 结核片中 6 张无标注 多边形坐标
lesion_mask image 每异常一个二元掩膜 ..._Calcified_Nodule_2.png 细粒度分割 同上 无标注文件即缺失
abnormality_count int CSV 汇总:该图异常计数 2 标签统计 0-19
lesion_category string 病灶类别名(19 类之一) Calcified_Nodule 多标签/分割类别对齐 类别名含括号与空格需转义 见 §3.5 类别表
consensus_roi string 2024 共识 ROI 记录键 shenzhen_consensus_roi.csv 分割评估 新增文件口径与 2022 标注略有差异 ROI 坐标

§4.2 标签分布

标签 数量 占比
正常(无结核表现) 326 49.2%
结核表现 336 50.8%

性别 × 标签交叉(社区解析口径,供分层评估参考)

分组 占比(662 例) 说明
男性 69% 覆盖两类标签
女性 31% 覆盖两类标签
官方逐例交叉表 未公布 性别/年龄嵌在读片文本中,需自行解析统计

两类几乎均衡(1:1.03),可直接用准确率/F1 而不必强做重采样;但注意这种均衡是人为收集结果,与真实门诊结核检出率严重不符,部署前必须用真实患病率重校准阈值(见 §6.5 坑点 7)。

§4.3 关键统计

统计项 数值 来源
总图像数 662 Jaeger et al. 2014
图像尺寸范围 989×1,225 至 3,001×3,001(中位约 2,937×2,743) openmedlab SZ-CXR 记录
单图大小 约 3.5-6.5 MB PNG Kaggle 实测列表
性别比 男 69% / 女 31% Kaggle raddar 元数据(662 例解析)
读片文本缺失 部分图像缺年龄或性别(自由文本解析失败率高) 社区解析经验
无 TB 征象的"阳性"片 6 张(CHNCXR_0467_1 等) Yang et al. 2022
病灶掩膜覆盖 约 566 张(openmedlab 记录口径) openmedlab SZ-CXR

§4.4 数据层级

受检者(患者级,无 ID,假定单人单张)
  └── 检查(单次门诊摄影,无逐例时间戳)
        └── 图像(662 张 PNG,唯一键 image_name)
              ├── 读片文本(1:1 配对 TXT)
              ├── 双肺掩膜(左/右两文件)
              └── 病灶标注(0-N 个 JSON + N 个掩膜)

层级为"患者→检查→图像"两级扁平结构:官方未提供患者 ID,若同一患者在 1 个月窗口内多次摄影,将在患者级划分时形成泄漏源(见 §5.3)。

层级对任务设计的影响:① 分类任务——把每张图当独立样本是社区默认做法,但严格论文应声明"单人单张假设未经官方确认";② 分割任务——左右肺掩膜把单图扩展为双实例结构,训练时建议保留左右实例索引;③ 多标签任务——19 类异常可并存于同一张图(如 CHNCXR_0329_1.png 同时含聚集性结节与钙化结节),损失函数需用 BCE 而非 Softmax。

§4.5 缺失值与信息性缺失

字段 缺失形态 处理建议
年龄/性别 TXT 行缺失或格式异常(非 NNyrs 解析失败计为 NaN,勿填均值;分层评估时单列"未知"组
异常描述 正常片常为空白或 normal 空白视为"无异常描述",非数据损坏
病灶标注 6 张 _1 片无任何标注文件 明确为"无可见 TB 征象"的信息性缺失,勿当标注遗漏删除
采集日期 全体缺失 结构性缺失,不可插补;用"约 2012-09"作为队列级时间标记
曝光参数 全体缺失 结构性缺失;若需剂量/参数分析改用含 DICOM 的数据集
病灶标注(部分阳性片) 6 张 _1 片无病灶 JSON/掩膜 信息性缺失 = “影像学无明确 TB 征象”,评估时单列敏感性分析
患者级去重信息 全体缺失 官方无患者 ID 对照表,按"单人单张"假设处理并在论文声明

§5 划分与使用建议

§5.1 官方划分

官方未提供任何 train/val/test 划分。Jaeger et al. 2014 只报告了各自方法的分类结果(准确率约 84%),未固定划分协议。这导致各论文数字不可直接比较(见 §8.1)。

§5.2 社区惯例划分

划分方案 比例 使用者
随机 80:20 80% 训练 / 20% 测试 大量早期论文(如域自适应 IEEE 系列研究)
8:1:1 训练/验证/测试 openmedlab SZ-CXR 整理版
交叉验证 5-fold / 10-fold 小样本论文常用,报告均值±方差

社区划分的差异不只是比例:有的从官方 12-bit 原图出发,有的用 Kaggle 8-bit 重打包图;有的加了肺区裁剪,有的全图训练。两组"AUC 0.92"背后的协议可能完全不同——引用任何社区划分结果前,先确认其位深、尺寸与是否混用 Montgomery(§8.1 已逐一标注)。

§5.3 泄漏风险

  1. 患者级泄漏:数据集无患者 ID,同一患者在约 1 个月窗口内的重复摄影若被随机拆入训练与测试,将高估性能。缓解:按文件名编号分桶(CHNCXR_#### 编号大致反映采集顺序,相邻编号更可能同源),或在论文中明确声明单人单张假设的局限。
  2. 域泄漏(与 Montgomery 合并时):两集设备、人群、质控完全不同,模型可凭噪声特征(图像颗粒度、对比度、边缘锐度)区分来源。若合并后随机划分,测试集中每一域都在训练中出现过"同域邻居",性能被系统性高估。缓解:按数据集来源做 GroupShuffleSplit,或用"深圳训练 → Montgomery 测试"的单向迁移协议。
  3. 预处理统计泄漏:在全部 662 张上计算归一化均值/方差或 CLAHE 参数再切分,属轻度泄漏;统计量应仅在训练折内计算。
  4. 标注衍生泄漏(2022 像素标注):病灶 JSON/掩膜与二分类标签强相关(有病灶掩膜 ≈ 结核阳性)。若在训练中把病灶掩膜作为输入特征(如 ROI 池化),测试集上的掩膜同样携带标签信息,二分类指标会虚高。缓解:病灶特征只用于病灶级任务评估,二分类任务坚持全图输入。

§5.4 划分策略建议

# 推荐策略:文件名编号分桶 + 分层 GroupShuffleSplit(示例)
# 预期目录:data_root = 指向含 CXR_png/ 与 ClinicalReadings/ 的父目录
import re
import pandas as pd
from sklearn.model_selection import StratifiedGroupKFold

rows = []
for name in all_image_names:                     # 例如 CHNCXR_0329_1.png
    m = re.match(r"CHNCXR_(\d{4})_([01])\.png", name)
    rows.append({
        "image": name,
        "label": int(m.group(2)),
        "bucket": int(m.group(1)) // 10,         # 每 10 个编号一桶,近似同源
    })
df = pd.DataFrame(rows)
sgkf = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=42)
for tr, te in sgkf.split(df[["image"]], df["label"], groups=df["bucket"]):
    ...                                          # 折内再做 10% 验证集

§5.5 交叉验证建议

662 张的体量适合 5×2 交叉验证或 10-fold,报告均值±标准差而非单次划分点值;标签近均衡,fold 内分层保持 49.2%/50.8% 即可。

# 5×2 交叉验证骨架(划分与 §5.4 的分桶策略一致)
# 预期目录:data_root 下含 CXR_png/;all_image_names 为 662 个文件名列表
import numpy as np
from sklearn.model_selection import RepeatedStratifiedKFold

labels = [int(n.split("_")[-1][0]) for n in all_image_names]   # 从文件名取标签
rskf = RepeatedStratifiedKFold(n_splits=5, n_repeats=2, random_state=42)
scores = []
for tr_idx, te_idx in rskf.split(all_image_names, labels):
    # fold 内:训练子集算归一化统计 → 训练 → 固定阈值 → 测试折评估
    ...
    scores.append(fold_auc)
print(f"AUC = {np.mean(scores):.3f} ± {np.std(scores):.3f}")    # 均值±标准差才是可引用格式

§5.6 外部验证建议

最低配置:深圳训练 → Montgomery 全集外验(138 张)。进阶配置:深圳训练 → TBX11K 测试切片或 Belarus 集外验;更严格者可加入域自适应基线(DANN/CORAL)对比,报告"域内 vs 跨域"性能落差(参考 Sathitratanacheewin et al., 2020, Heliyon. DOI: 10.1016/j.heliyon.2020.e04614 的分布偏移实证)。

外验报告模板:每个外验集一行——外验集名 / 域内 AUC / 外验 AUC / 落差 / 是否做了域自适应。这个五列小表能直接回答审稿人最关心的"你的模型离开深圳还活着吗",也是把 §7.8 外验矩阵延续到自己论文里的标准写法。


§6 AI 就绪指南 ⭐

§6.0 云端快速启动

无需申请、无下载门槛,最快速路径是 Kaggle 社区镜像(约 3.77 GB,含图像 + 解析好的元数据 CSV):

# Kaggle CLI 方式(在任意可访问 Kaggle 的环境)
kaggle datasets download -d raddar/tuberculosis-chest-xrays-shenzhen -p ./data --unzip
# 官方原始版(12-bit 原始动态范围,推荐用于学术复现)
wget -r -np -nH --cut-dirs=3 \
  "https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Shenzhen-Hospital-CXR-Set/CXR_png/" \
  -P ./data/CXR_png
wget -r -np -nH --cut-dirs=3 \
  "https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Shenzhen-Hospital-CXR-Set/ClinicalReadings/" \
  -P ./data/ClinicalReadings

镜像差异提示:Kaggle raddar 版是社区重打包(约 8-bit、附 CSV),官方版是 12-bit 原始动态范围。两者不能混用——混合后归一化口径分裂是复现失败的高频原因(§6.5 坑点 3)。下载完成后先跑 §6.1 的位深验证,再决定用哪套归一化分支。

§6.1 快速上手

# -*- coding: utf-8 -*-
# 目录结构预期(data_root 拼接关系):
#   data_root/
#   ├── CXR_png/CHNCXR_0001_0.png ... CHNCXR_0662_1.png   # 662 张 PNG
#   └── ClinicalReadings/CHNCXR_0001_0.txt ...            # 662 个 TXT
# 最小可用子集:仅 CXR_png/ 即可做二分类(标签在文件名后缀中)
# data_root = 你解压/下载数据集的根目录,下方代码逐层拼接

import os, re, glob
from PIL import Image
import numpy as np

data_root = "./data"                                   # ← 修改为你的路径
pairs = []
for txt in sorted(glob.glob(os.path.join(data_root, "ClinicalReadings", "*.txt"))):
    name = os.path.basename(txt).replace(".txt", ".png")
    img = os.path.join(data_root, "CXR_png", name)
    if not os.path.exists(img):
        continue
    label = int(re.search(r"_(\d)\.png$", name).group(1))
    with open(txt, encoding="utf-8", errors="ignore") as f:
        lines = [l.strip() for l in f if l.strip()]
    sex  = lines[0] if len(lines) > 0 else None        # male / female
    age  = re.sub(r"[^\d]", "", lines[1]) if len(lines) > 1 else None
    pairs.append({"name": name, "path": img, "label": label, "sex": sex, "age": age})

print(f"共 {len(pairs)} 例;正常 {sum(p['label']==0 for p in pairs)},"
      f"结核 {sum(p['label']==1 for p in pairs)}")

# 12-bit PNG 读入验证:像素值应落在 0-4095,而非 0-255
arr = np.array(Image.open(pairs[0]["path"]), dtype=np.uint16)
print("dtype:", arr.dtype, "max:", arr.max(), "(若 max≈4095 则为 12-bit 数据)")

预期输出示例共 662 例;正常 326,结核 336;位深验证行输出 max: 4095(官方版)或 max: 255(Kaggle 重打包版)。若数量不是 662/326/336,先检查下载完整性(§6.2 的验证命令),再怀疑解析逻辑。

§6.2 数据获取

渠道 地址 内容 大小 流程
官方仓库 NLM 目录 CXR_png + ClinicalReadings + Annotations + ReadMe + ROI CSV 约 3.8 GB(另标注数百 MB) 直接下载,无需注册
Kaggle 镜像(图像+CSV) raddar 版 662 张重打包图像 + shenzhen_metadata.csv 3.77 GB Kaggle 账号
Kaggle 掩膜镜像 shcxr-lung-mask / chest-xray-masks-and-labels 左右肺掩膜(_l/_r 分文件) 数百 MB Kaggle 账号
官方总入口 LHC downloads 全部 TB 影像集索引 直接访问

合规要点:成果中须署名 National Library of Medicine, NIH(及深圳三院)并引用 Jaeger et al. 2014 与 Candemir et al. 2014;不得在研究组/机构外二次分发原始数据。

获取路径决策:三分钟跑通 → Kaggle raddar 版(kaggle CLI 一条命令);学术发表复现 → 官方目录(wget 循环下载,或浏览器逐目录打包);需要病灶级监督 → 官方 Annotations 子目录(CC-BY 4.0,可单独使用并遵守署名)。官方目录无 zip 打包,wget 递归下载时注意 -np(不追溯到父目录)与 --cut-dirs(保持本地目录结构)。

下载完整性验证

# 官方目录下载后验证数量与大小(预期:662 图 + 662 读片)
ls ./data/CXR_png/*.png | wc -l                 # 预期 662
ls ./data/ClinicalReadings/*.txt | wc -l        # 预期 662
du -sh ./data/CXR_png                           # 预期 3.5-4.4 GB
# 图像-读片一一配对检查(缺失即报出)
comm -3 <(ls ./data/CXR_png | sed 's/\.png$//' | sort) \
        <(ls ./data/ClinicalReadings | sed 's/\.txt$//' | sort)

§6.3 预处理全流程

格式转换 → 读片解析 → 标准化 → 肺区裁剪 → 增强。核心难点是 12-bit 动态范围与尺寸不一(989×1,225 至 3,001×3,001)。

# -*- coding: utf-8 -*-
# 预处理流水线:12-bit 归一化 + 统一尺寸 + CLAHE + 肺区裁剪
# 依赖:pip install pillow numpy opencv-python
import cv2, numpy as np, glob, os, re

def load_12bit(path):
    """读入 PNG 并按 12-bit 动态范围归一化到 [0,1]。
    关键:像素值范围是 0-4095(12-bit),不是 0-255 也不是 0-65535。
    若 max<256 说明该图被某工具存成了 8-bit,需要分支处理。"""
    arr = cv2.imread(path, cv2.IMREAD_UNCHANGED)      # 不做隐式位深转换
    arr = arr.astype(np.float32)
    if arr.max() > 255:                                # 12/16-bit 容器
        arr = arr / 4095.0 if arr.max() <= 4095 else arr / 65535.0
    else:                                              # 8-bit 重打包版(Kaggle 镜像)
        arr = arr / 255.0
    return arr

def preprocess(path, size=(512, 512), mask_l=None, mask_r=None):
    img = load_12bit(path)
    img8 = (img * 255).astype(np.uint8)
    img8 = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)).apply(img8)
    if mask_l is not None and mask_r is not None:      # 可选:肺区裁剪
        lung = cv2.imread(mask_l, 0) | cv2.imread(mask_r, 0)
        lung = cv2.resize(lung, (img8.shape[1], img8.shape[0]), interpolation=cv2.INTER_NEAREST)
        img8 = cv2.bitwise_and(img8, img8, mask=(lung > 0).astype(np.uint8))
    img8 = cv2.resize(img8, size, interpolation=cv2.INTER_AREA)
    return img8.astype(np.float32) / 255.0

paths = sorted(glob.glob("./data/CXR_png/*.png"))
batch = np.stack([preprocess(p) for p in paths[:32]])
print(batch.shape, batch.min(), batch.max())           # (32, 512, 512) 0.0 1.0

归一化统计必须按折计算(§5.3 第 3 条):把 load_12bit 之后的全局统计替换为仅训练折统计:

# 仅在训练折上计算均值/方差,验证/测试折复用同一统计(防预处理统计泄漏)
train_pixels = np.concatenate([load_12bit(p).ravel() for p in train_paths])
mean, std = train_pixels.mean(), train_pixels.std()    # 典型值约 0.45-0.55 / 0.25-0.30
normalize = lambda img: (img - mean) / std             # 验证/测试折用同一个 mean/std

§6.4 PyTorch DataLoader

<details>
<summary>完整可运行 Dataset + DataLoader 代码(点击展开)</summary>

# -*- coding: utf-8 -*-
# 依赖:torch, pillow, numpy
# 目录预期:
#   data_root/CXR_png/CHNCXR_####_[01].png
#   data_root/ClinicalReadings/CHNCXR_####_[01].txt   (按需)
# data_root 与下方 dataset/data_loader 的拼接关系见 CONFIG 段
import os, re, glob
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image

CONFIG = {"data_root": "./data", "img_size": 512}

class ShenzhenCXRDataset(Dataset):
    """Shenzhen TB CXR 二分类数据集。
    最小可用子集:仅 CXR_png/(标签编码在文件名后缀)。
    返回:image (1,H,W) float32 已归一化,label int。"""
    def __init__(self, data_root, img_size=512, indices=None):
        self.paths = sorted(glob.glob(os.path.join(data_root, "CXR_png", "*.png")))
        if indices is not None:
            self.paths = [self.paths[i] for i in indices]
        self.img_size = img_size

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

    def _normalize_12bit(self, arr):
        arr = arr.astype(np.float32)
        peak = arr.max()
        if peak > 4095:
            arr /= 65535.0
        elif peak > 255:
            arr /= 4095.0
        else:
            arr /= 255.0
        return arr

    def __getitem__(self, idx):
        path = self.paths[idx]
        arr = np.array(Image.open(path).convert("I;16"), dtype=np.uint16)
        img = self._normalize_12bit(arr)
        img = Image.fromarray((img * 255).astype(np.uint8))
        img = img.resize((self.img_size, self.img_size), Image.BILINEAR)
        img = np.asarray(img, dtype=np.float32)[None] / 255.0
        label = int(re.search(r"_(\d)\.png$", os.path.basename(path)).group(1))
        return torch.from_numpy(img), torch.tensor(label, dtype=torch.long)

def make_loaders(data_root, batch_size=16, val_frac=0.2, seed=42):
    n = len(glob.glob(os.path.join(data_root, "CXR_png", "*.png")))
    rng = np.random.default_rng(seed)
    idx = rng.permutation(n)
    v = int(n * val_frac)
    tr_ds = ShenzhenCXRDataset(data_root, CONFIG["img_size"], idx[v:])
    va_ds = ShenzhenCXRDataset(data_root, CONFIG["img_size"], idx[:v])
    return (DataLoader(tr_ds, batch_size, shuffle=True, num_workers=4, pin_memory=True),
            DataLoader(va_ds, batch_size, num_workers=4, pin_memory=True))

if __name__ == "__main__":
    tr, va = make_loaders(CONFIG["data_root"])
    x, y = next(iter(tr))
    print(x.shape, x.dtype, y[:8])     # torch.Size([16,1,512,512]) float32 tensor([...])

</details>

§6.5 坑点 8 个

⚠️ 坑点 1:与 Montgomery 合并时的设备/人群双重域差异(分类:偏倚陷阱)

问题:深圳集是 Philips DR 数字平板、中国门诊患者;Montgomery 集是 Eureka CR 计算机 X 光、美国筛查项目人群。两集合并训练时,模型极易学到"颗粒度/对比度/边缘锐度"这类设备指纹与人群外观差异,而不是结核病理特征。
症状:混合训练准确率虚高(测试集中两域都有样本);把全部测试换成单一域时性能骤降;t-SNE 上样本按数据集聚类而非按标签聚集。Sathitratanacheewin et al. 2020 已实证此类分布偏移直接限制泛化。
解决

  1. 简单方法:合并训练时按来源域分层划分,测试集整体替换为未见域(深圳训练→Montgomery 测试)。
  2. 进阶方法:加入域自适应基线(CORAL/DANN)或按域重加权采样,报告域内 vs 跨域落差。
  3. SOTA 方法:风格归一化(如 Instance Normalization 组合、频域增强)或跨域对比预训练,再在 TBX11K 上做大规模验证(Liu et al., 2020, CVPR)。
    参考:Sathitratanacheewin et al., 2020, Heliyon. DOI: 10.1016/j.heliyon.2020.e04614;Xue et al., 2023, Diagnostics. DOI: 10.3390/diagnostics13061068。

⚠️ 坑点 2:临床常规图像 vs 筛查项目图像的质量落差(分类:偏倚陷阱)

问题:深圳集是门诊"日常Routine"拍摄——体位不一、曝光不受控、混有儿童 AP 片;Montgomery 集来自专门 TB 筛查项目,摆位与质控统一。在 Montgomery 上调好的模型迁移到深圳风格数据(或反向)会系统性失灵。
症状:验证集指标好但真实门诊图像上召回率骤降;儿童 AP 片被成批误判;某些尺寸/长宽比的图像错误率异常集中。
解决

  1. 简单方法:训练增强中加入随机仿射/缩放/裁剪,模拟体位差异;对儿童片单独统计并报告子集指标。
  2. 进阶方法:按图像尺寸/长宽比分桶做分层评估,定位失效桶;用 Test-time augmentation 平滑拍位差异。
  3. SOTA 方法:部署前在目标场景自采数百张做校准与阈值重定,或用半监督把未标注门诊图纳入训练。
    参考:Jaeger et al., 2014, QIMS. DOI: 10.3978/j.issn.2223-4292.2014.11.20(两集采集流程描述)。

⚠️ 坑点 3:12-bit PNG 读入——动态范围不是 0-255 也不是 0-65535(分类:预处理陷阱)

问题:图像为 12-bit 灰度(0-4,095)存在 16-bit PNG 容器中。PIL 默认模式转换、cv2.imread(..., IMREAD_COLOR)plt.imshow 都可能按 16-bit 线性映射或截断,导致对比度压缩;部分 Kaggle 镜像又已重打包为 8-bit,两种来源混用时归一化口径不一致。
症状:图像肉眼全黑或全灰;arr.max() 在 4,095 与 65,535 之间摇摆;同一模型在官方版与 Kaggle 版上指标差好几个点;直方图上出现大片空区间。
解决

  1. 简单方法:读入后检查 arr.max(),按峰值分支归一化(>4,095 除 65,535,>255 除 4,095,否则除 255)。
  2. 进阶方法:用 cv2.IMREAD_UNCHANGEDImage.open(...).convert("I;16") 读原始位深,再显式 /4095.0;对混合来源建立统一的 load_12bit() 入口(见 §6.3)。
  3. SOTA 方法:放弃峰值猜测,直接按固定 12-bit 语义处理官方原始版;把"位深检查"写进数据单元测试,CI 中对新数据源自动断言。
    参考:官方 ReadMe(NLM-ChinaCXRSet-ReadMe.docx);Jaeger et al., 2014, QIMS. DOI: 10.3978/j.issn.2223-4292.2014.11.20(12-bit 灰度 PNG 说明)。

⚠️ 坑点 4:双肺掩膜左右分文件命名——先合并再使用(分类:工程陷阱)

问题:掩膜按左肺、右肺分别存为独立 PNG(_l_r 后缀)。只用一个文件会把半侧肺当成"肺区"喂给分割/裁剪逻辑;左右文件的分辨率也可能与原图不一致,直接按坐标索引会错位。
症状:肺区裁剪后图像只剩一半;掩膜叠加可视化中半侧肺"消失";分割模型 Dice 异常低且集中在单侧;FileNotFoundError 因部分图像缺对应掩膜(社区镜像掩膜覆盖不全,openmedlab 记录约 566 张口径)。
解决

  1. 简单方法:加载时 mask = mask_l | mask_r,并把掩膜 resize 到原图尺寸(最近邻插值)后再使用;对缺失掩膜的图像回退为全图处理。
  2. 进阶方法:建立 image↔mask 配对索引表并断言双向覆盖;用连通域分析校验掩膜恰为两大区域。
  3. SOTA 方法:训练分割模型时把左右肺做成两个通道或两类前景,利用左右文件天然提供的一侧监督信号。
    参考:Candemir et al., 2014, IEEE TMI. DOI: 10.1109/TMI.2013.2290491;Kaggle 掩膜镜像

⚠️ 坑点 5:读片文本自由格式——性别年龄缺失比例可观(分类:标签理解)

问题:读片为非结构化英文简写 TXT(首行性别、次行年龄如 46yrs、末行异常),部分文件缺失年龄/性别行或格式不统一;社区解析出的 662 例元数据显示男约 69%/女约 31%,但年龄字段解析失败率不为零。把解析失败硬编码为 0 或均值会悄悄污染分层分析。
症状pandas 读出的 age 列出现空串、46yrs、纯数字混杂;按性别分层评估时"未知"组悄悄混入某一类;不同论文的元数据统计互相矛盾。
解决

  1. 简单方法:正则 ^\d{1,3}$ 严格解析年龄,失败置 NaN;性别仅接受 male/female(大小写归一),其余置 NaN。
  2. 进阶方法:用 Kaggle raddar 版 shenzhen_metadata.csv 做交叉校验;分层评估时显式保留"未知"组并报告其指标。
  3. SOTA 方法:为 finding 文本建 19 类异常词典(对齐 Yang et al. 2022 类别表),用规则+弱监督把自由文本转为多标签向量,可直接做多标签基线。
    参考:Yang et al., 2022, Data. DOI: 10.3390/data7070095(19 类别表);Kaggle raddar 元数据

⚠️ 坑点 6:无官方划分——跨论文数字不可比(分类:评估误用)

问题:官方从未发布 train/test 划分,社区流行 80:20、8:1:1、5-fold 等多种口径,且随机种子不同。Shenzhen 集上 AUC 从 0.900 到 0.999 的"进步"很大程度是划分与预处理的差异,而非模型进步。
症状:复现某论文的 AUC 差 0.05-0.10;换一个随机种子结果波动明显;审稿人质疑与 SOTA 的比较公平性。
解决

  1. 简单方法:固定自己的划分与随机种子并开源划分文件(image_name 列表),所有对比实验共用。
  2. 进阶方法:5×2 交叉验证报告均值±标准差;同时在固定划分上报告单点值以便与文献粗比。
  3. SOTA 方法:改用带官方划分的 TBX11K 做主实验,把 Shenzhen 集降级为域迁移实验的源域,回避不可比问题。
    参考:§8.1 排行榜数值不可比说明;Liu et al., 2020, CVPR(TBX11K 协议)。

⚠️ 坑点 7:标签语义——"阴性"非健康对照,"阳性"含 6 张无征象片(分类:标签理解)

问题_0 是"未见结核表现",来自门诊患者,可含其他心肺异常,不是健康对照;_1 是"有结核表现",其中 6 张(CHNCXR_0467_10484_10606_10609_10612_10624_1)经细读无明确 TB 征象且无病灶标注。把 _0 当"健康"、把 662 张当"确诊金标准"会系统性歪曲模型评估。
症状:模型在肺气肿/心脏增大等非 TB 异常片上高告警,被误记为假阳性;对 6 张无征象片的预测被错算进分母;在健康人群筛查部署时特异性远低于测试值。
解决

  1. 简单方法:评估报告统一使用"TB 表现 vs 无 TB 表现"措辞;对 6 张例外片做敏感性分析(保留/剔除各算一遍)。
  2. 进阶方法:用 2022 年 19 类病灶标注把任务重构为"病灶级"评估,绕开二分标签的语义噪声;阈值按目标部署患病率重校准。
  3. SOTA 方法:引入微生物学或临床确诊信息的外部数据(如 TBX11K 的四分类标签)做标签去噪或联合训练。
    参考:Yang et al., 2022, Data. DOI: 10.3390/data7070095(6 张无征象片清单);Jaeger et al., 2014, QIMS. DOI: 10.3978/j.issn.2223-4292.2014.11.20。

⚠️ 坑点 8:分辨率不一(约 989×1,225 至 3,001×3,001)——统一预处理才算数(分类:预处理陷阱)

问题:图像尺寸高度可变(中位约 2,937×2,743),直接 resize 到 224×224 会让小病灶(如 2-5 mm 聚集性结节)在低分辨率下物理消失;且不同尺寸图像的插值损失不同,性能与图像尺寸相关。
症状:粟粒性/小结节病例召回率显著低于浸润/实变病例;按原图尺寸分桶评估指标单调;Grad-CAM 热区颗粒粗大无法对齐病灶标注。
解决

  1. 简单方法:短边对齐 resize 到 512×512(INTER_AREA 下采样),训练时再随机裁剪;小结节任务用 1,024×1,024。
  2. 进阶方法:先用肺掩膜裁剪肺区再 resize,等效提高病灶像素占比;或按原始尺寸分桶做分层评估并报告。
  3. SOTA 方法:多尺度/滑窗推理(保留原图局部 patch 输入 CNN),或用高分辨率 ViT(如 512+ patch 方案)与病灶掩膜联合监督。
    参考:openmedlab SZ-CXR 尺寸统计(GitHub);Rajaraman et al., 2021, Diagnostics(PMCID: PMC8691984)。

§6.6 数据增强

增强方式 是否安全 说明
水平翻转(⚠️ 谨慎) 需注意 CXR 常规允许,但注意图中 R/L 标记与心脏偏移;本集无显式 R/L 标注,翻转后肺纹理统计学上合理,建议概率 ≤0.5 并做消融
随机仿射/平移/缩放(±10%) 模拟深圳集体位差异,特别推荐
CLAHE 社区标配(clipLimit 2.0, tile 8×8),固定参数防泄漏
高斯噪声/轻微模糊 模拟 CR/DR 噪声差异,幅度宜小
垂直翻转 解剖学不成立(膈肌在上)
90° 旋转 同上
大角度旋转(>20°) ⚠️ 快速破坏体位先验,慎用
Cutout/CutMix 越过肺野 ⚠️ 可能把病灶整块抹掉,建议限制在肺区外
# 安全增强组合(albumentations 实现,概率与幅度按本集特性调优)
# 依赖:pip install albumentations
import albumentations as A

train_tf = A.Compose([
    A.HorizontalFlip(p=0.5),                    # CXR 常规允许;本集无显式 R/L 标记
    A.ShiftScaleRotate(shift_limit=0.10, scale_limit=0.10, rotate_limit=10, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.08, contrast_limit=0.10, p=0.5),
    A.GaussNoise(var_limit=(5.0, 20.0), p=0.3),
])
val_tf = A.Compose([])                          # 验证/测试不增强

§6.7 模型推荐

模型 适用任务 起步配置 备注
DenseNet-121 二分类 ImageNet 预训练,512×512 输入 医学 CXR 常规基线
EfficientNet-B0-B4 二分类 与 ensemble 结合效果好 Rajaraman 2021 系列验证
U-Net + ResNet34 肺分割 掩膜监督,Dice 损失 左右分文件掩膜天然适配
U-Net/Mask R-CNN 病灶分割 2022 像素标注 首个病灶级像素基准
DANN/CORAL 域自适应 深圳↔Montgomery 双向 域差异研究标配
DeiT/ViT-S 二分类 需强增强,防小数据过拟合 数据量偏小,谨慎从零训练

损失与优化器起步值:二分类用 BCEWithLogits(正类权重 1.0,类已均衡);分割用 Dice+BCE 混合;优化器 AdamW(lr 3e-4,weight decay 1e-4),余弦退火 30-50 epoch;early stopping 以验证 AUC 为准。662 张的小数据下,学习率对结果的影响大于骨干选择。

§6.8 硬件需求

场景 GPU 显存 建议
224×224 二分类 4-6 GB 笔记本级 GPU 即可
512×512 二分类 8-12 GB batch 16-32
1,024×1,024 / 分割 16-24 GB batch 4-8 + 梯度累积
全量交叉验证 sweep 24 GB+ 5×2 CV 训练预算 ×10-20

§6.9 评估指标代码

# -*- coding: utf-8 -*-
# 二分类评估:AUC、敏感性、特异性、F1(Shenzhen 集近均衡,四者都可直读)
# 预期输入:y_true / y_prob 为 numpy 数组(测试折的标签与正类概率)
import numpy as np
from sklearn.metrics import roc_auc_score, f1_score, confusion_matrix

def tb_report(y_true, y_prob, thr=0.5):
    y_pred = (y_prob >= thr).astype(int)
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
    return {
        "AUC": roc_auc_score(y_true, y_prob),
        "Sensitivity": tp / (tp + fn),           # 结核检出率,筛查场景优先
        "Specificity": tn / (tn + fp),
        "F1": f1_score(y_true, y_pred),
    }

def thr_for_sensitivity(y_true, y_prob, target=0.90):
    """筛查部署:先锁定敏感性目标(如 90%),再求对应阈值与特异性。"""
    best_thr, spec = 0.5, 0.0
    for t in np.linspace(0.01, 0.99, 197):
        p = (y_prob >= t).astype(int)
        tp = ((p == 1) & (y_true == 1)).sum()
        fn = ((p == 0) & (y_true == 1)).sum()
        if tp / (tp + fn) >= target:
            tn = ((p == 0) & (y_true == 0)).sum()
            fp = ((p == 1) & (y_true == 0)).sum()
            s = tn / (tn + fp)
            if s > spec:
                best_thr, spec = t, s
    return best_thr, spec

病灶级多标签评估(配合 2022 年 19 类标注使用):

# -*- coding: utf-8 -*-
# 多标签评估:每异常类一个 AUC/AP(长尾类别合并后再报,见 §7.7 第 7 项)
# 预期输入:Y_true / Y_pred 形状均为 (n_images, n_classes),0/1 多标签
from sklearn.metrics import average_precision_score

def per_class_report(Y_true, Y_pred, class_names, min_support=10):
    rows = []
    for i, name in enumerate(class_names):
        if Y_true[:, i].sum() < min_support:      # 支持度过小的类别合并为 other
            continue
        rows.append((name, average_precision_score(Y_true[:, i], Y_pred[:, i])))
    merged = Y_true[:, [i for i, c in enumerate(class_names)
                        if Y_true[:, i].sum() < min_support]].max(axis=1)
    if merged.any():
        rows.append(("other_merged", average_precision_score(merged, Y_pred[:, [i for i, c in enumerate(class_names)
                        if Y_true[:, i].sum() < min_support]].max(axis=1))))
    return sorted(rows, key=lambda r: -r[1])

§6.10 MLOps 笔记

  1. 数据版本:官方仓库无版本号,用 git-lfs/DVC 锁定 662 张文件的 SHA256;区分官方版与 Kaggle 镜像为两个独立数据源条目。
  2. 位深断言:把"12-bit 峰值检查"(§6.5 坑点 3)写成数据验证单测,任何新数据源接入自动触发。
  3. 划分即资产:划分文件(image_name 列表 + 种子)入库版本管理,保证 80:20 或 5×2 CV 永久可复现。
  4. 监控漂移:部署后按月监控输入图像的尺寸分布、灰度峰值分布与预测阳性率,三者漂移即触发重训评审(深圳集 2012 年设备 vs 当代设备差异大)。
  5. 审计留痕:读片文本解析规则(坑点 5)版本化;19 类词典更新时记录 diff。
  6. 负类语义标注:数据卡中显式写明"阴性 = 无 TB 表现(门诊人群)",防止下游团队把负类当健康对照做部署决策(§6.5 坑点 7 的工程化落地)。
  7. 评审就绪包:归档"划分文件 + 训练种子 + 预处理参数 + 例外片清单"四件套,审稿或内审时一键提供。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解
选择偏倚 门诊就诊人群,非随机抽样亦非筛查队列 结论限定门诊场景;外验前评估目标人群匹配度
标签偏倚 读片标签非微生物确诊;阳性含 6 张无征象片 病灶级标注辅助复核;敏感性分析
设备偏倚 单一 Philips DR,无逐例曝光参数 风格增强;跨设备外验
性别偏倚 男约 69% 分层评估报告性别分组指标
时间偏倚 全部约 2012-09 采集,无时间多样性 与新采集数据联训
尺寸偏倚 尺寸不一且与内容相关 分桶评估;统一预处理

偏倚间的交互:选择偏倚与设备偏倚叠加时最难解——门诊就诊习惯决定"谁被拍片",设备决定"片子长什么样",两者同时与标签相关。单纯重采样无法解耦,需要至少一个外部数据集做桥接(Montgomery 是唯一官方可得的桥),这也是为什么 §7.8 的外验矩阵把跨域结果放在首行。

§7.2 标注质量

二分类标签来自临床读片结论,无第二读片人复核记录;掩膜由放射科医生监督描绘并经独立医生验证(Musco 医生,Montgomery 集声明同流程);19 类病灶标注执行"初级标注 + 高级复核 + 共识"三级流程(Yang et al. 2022),但未公布 Dice/Kappa 定量一致性。行动建议:凡用于分割训练,先抽样 50 例人工复检掩膜边界;二分类任务先剔除或单独分析 6 张例外片。

# -*- coding: utf-8 -*-
# 掩膜抽检:对随机 50 例复核"掩膜恰为左右两大连通域 + 面积占比合理"
# 预期目录:mask_dir 下为左右分文件掩膜(_l/_r 后缀)
import cv2, numpy as np, glob, random

def mask_sanity(mask_l_path, mask_r_path):
    m = (cv2.imread(mask_l_path, 0) | cv2.imread(mask_r_path, 0)) > 0
    n_comp = cv2.connectedComponents(m.astype(np.uint8))[0] - 1   # 期望 1-3(左右可相连)
    frac = m.mean()                                               # 期望约 0.25-0.45
    return {"components": n_comp, "lung_fraction": round(float(frac), 3)}

for p in random.sample(sorted(glob.glob("./masks/*_l.png")), 50):
    r = mask_sanity(p, p.replace("_l.png", "_r.png"))
    if r["components"] > 5 or not 0.15 < r["lung_fraction"] < 0.55:
        print("[异常]", p, r)                                     # 异常掩膜人工复核

§7.3 泛化性评估

部署场景 失效风险 证据
跨设备(其他 DR/CR 厂商) 高:风格指纹失效 Sathitratanacheewin 2020 分布偏移实证
跨人群(非中国门诊) 高:人群外观与患病谱差异 深圳↔Montgomery 跨域研究(Diagnostics 2023)
儿科筛查 高:儿童 AP 片占比小且未单独验证 Jaeger 2014 说明含儿童片;无儿科子集分析
真实患病率环境 高:均衡标签 vs 真实低患病率,PPV 骤降 类先验失配的贝叶斯性质
结合同 MicroTx+ 中:读片标签与细菌学结论不一致 Yang 2022 六张例外片

§7.4 伦理与合规

数据由提供方脱敏,NIH 人类研究保护办公室豁免审查(OHRP No. 5357),双方机构 IRB 豁免(Jaeger et al. 2014)。免费用于研究,要求署名 NLM/NIH 与深圳三院并引用 Jaeger 2014、Candemir 2014;官方要求不得在研究组/机构外二次分发。2022 标注部分为 CC-BY 4.0。DUO 语境下大致对应 NRES(无限制研究使用)+ GRU(通用研究使用),但以官方协议原文为准。

§7.5 公平性

性别比男 69%/女 31%(Kaggle raddar 解析口径),且无种族/民族字段。建议:所有主表结果附性别分组敏感性/特异性;把性别未知组显式列出;避免仅报告总体 AUC。

公平性风险清单:① 女性样本占比偏低,模型对女性结核征象的召回可能系统性偏弱,需分组验证而非假设无偏;② 儿童片无独立标签,儿科召回不可从总体指标外推;③ 年龄嵌在自由文本中,年龄分组偏差需解析后重新统计——三条都源自元数据非结构化(§4.5),公平性审计的第一步是先把读片解析干净。

§7.6 数据漂移

采集集中于约 2012 年 9 月,单月窗口无纵向漂移可言;真正的漂移风险发生在部署时:当代设备(更高动态范围、AI 去噪重建)与 2012 年 DR 的图像统计已有明显差异。建议以输入统计(灰度峰值、尺寸、噪声谱)为漂移监测指标,并在近三年目标医院数据上重校准。

漂移监测的最小实现:上线后按周记录三张图——输入图像灰度峰值直方图、预测阳性率、低置信度样本占比。三者中任意一个连续两周超出训练分布的 3σ 即触发人工评审。这套轻量方案不需要额外标注,就能覆盖本集最常见的两种漂移(设备换代、就诊人群变化)。

§7.7 DAIMS 24 项检查

# 检查项 状态 说明
1 宽格式 全部指标可整理为单表(662 行)
2 唯一标识 文件名全局唯一且编码标签
3 特殊字符 ⚠️ 读片文本大小写/空格不统一,需清洗
4 重复行 未见官方或社区重复报告
5 缺失编码 缺失即空白,无统一编码(如 NA)
6 标签标识 ⚠️ 标签藏在文件名后缀,无独立标签文件
7 罕见类分组 ⚠️ 19 类病灶长尾分布,需合并小类
8 偏倚评估 ⚠️ 官方无偏倚声明,需自行分析(§7.1)
9 数据字典 ⚠️ ReadMe 为 docx 简述,无逐字段字典
10 信息性缺失解释 6 张无标注片官方未解释(Yang 2022 补充发现)
11 设备记录 ⚠️ 仅机型级别,无逐例参数
12 共线性 字段少,无共线性问题
13 编码映射 ⚠️ 异常缩写需自建词典(PTB 等)
14 时间戳处理 无逐例日期,仅队列级"约 2012-09"
15 划分建议 官方无划分
16 泄漏讨论 官方未讨论患者级/域泄漏
17 标签分布 326/336 明确均衡
18 测量偏倚 ⚠️ 单设备单流程,读片人数与一致性未公布
19 外部验证建议 ⚠️ 官方仅提供初始分类结果,无外验协议
20 版本记录 ⚠️ 2024-08 更新但无语义版本号
21 预处理脚本 官方无脚本,社区方案口径不一
22 合规要求 署名与引用要求明确,免费研究用途
23 多模态对齐 ⚠️ 图像-文本 1:1 靠文件名,文本非结构化
24 去标识化 官方脱敏 + IRB 豁免(OHRP No. 5357)

DAIMS 评分:12.5 / 24

评分解读:✅ 7 项(各 1 分)、⚠️ 11 项(各 0.5 分)、❌ 6 项(0 分)。得分集中在"数据本体完整"(唯一标识、标签分布、去标识化、合规),失分集中在"工程可复现性"(无划分、无脚本、无时间戳、无缺失编码)与"元数据治理"(自由文本、无数据字典)。这是一套典型的"2014 年学术发布"水准的开放影像集:医学内容可信,数据工程服务缺位。

对你意味着什么:① 开工第一天就要自己补齐三件事——划分文件、位深归一化入口、读片解析器(本页 §5.4、§6.3、§6.5 坑点 3/5 直接可用);② 所有指标表述统一为"TB 表现 vs 无 TB 表现",并在论文/报告中主动声明 6 张例外片与门诊人群语义(否则审稿高概率被质疑);③ 把跨域实验(深圳↔Montgomery)作为默认验证协议,而不是可选项——这是本集相对 TBX11K 的独特价值,也是它最大的失效陷阱。### §7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
Montgomery 全集(深圳训练) Montgomery County, MD, USA TB 二分类 F1 0.861 / AUC 0.880(性能加权集成,2026) 明显低于深圳域内(AUC 常达 0.95+) 跨域落差实证;集成策略部分弥补(Frontiers in Medicine, DOI: 10.3389/fmed.2026.1903513)
跨五库获取混杂审计 NLM 等 5 个开放 TB 库 偏倚审计 类条件获取混杂显著 开放 TB 集存在系统性采集混杂(medRxiv 2026, DOI: 10.64898/2026.08.14.26360390)
多 TB 库分布偏移 Shenzhen/Montgomery/印度集等 跨库分类 分布偏移显著削弱泛化 大幅下降 Heliyon 2020, DOI: 10.1016/j.heliyon.2020.e04614
肺分割跨库域移 Shenzhen/Montgomery/JSRT 等 肺区域检测 YOLOv5 跨库域移显著 明显下降 Diagnostics 2023, DOI: 10.3390/diagnostics13061068
当代集成 vs 2014 基线 Montgomery 外验(深圳训练) TB 二分类 AUC 0.880(外验)vs 域内 0.95+ 外验下降约 0.07-0.10 与 §8.1 排名 1 一致的跨域落差量级

§8 基准性能与生态

§8.1 排行榜

⚠️ 数值不可直接比较:各研究使用不同(且未公开的)随机划分、不同图像预处理(8-bit vs 12-bit、resize 尺寸)、部分混入 Montgomery 集训练。下表仅供量级参考。

排名 模型 性能(Shenzhen 集) 年份 关键技术 完整引用 代码
1 CAE+MS-CNN 集成 Sens 99% / Spec 94% / AUC 0.98 2026 卷积自编码 + 多尺度 CNN 集成 García Seco de Herrera, A. et al., 2026, Scientific Reports 16:1242. DOI: 10.1038/s41598-025-30792-x 未公开
2 CNN 集成(9:1 划分) Acc 98.46% / AUC 0.999 2019 集成 + CAM 定位 Frontiers 专文(TB 定位与诊断研究) 未公开
3 EfficientNet ensemble Acc 94.1% / Sens 92.6% / AUC 0.990 2020 ImageNet 迁移 + 集成 Rajaraman, S.; Antani, S.K. 等, 2020(IEEE 系列研究);2021, Diagnostics(PMCID: PMC8691984) 部分
4 Deep CNN 集成 AUC 0.990 2017 AlexNet/GoogLeNet/ResNet18 集成 Lakhani, P.; Sundaram, B., 2017, Radiology 284(2):574-582. DOI: 10.1148/radiol.2017162326 未公开
5 NAS-FPN 检测系统 AUC 0.941 / Acc 90.2% 2019 检测+分类混合 Wiley 汇总(多类结核 CAD 研究) 未公开
6 DensNet 变体 Acc 83.7% / AUC 0.926 2016 肺区分割+分类 Hwang, S. et al., 2016, Medical Imaging(SPIE 系列会议) 未公开
7 预训练 CNN 特征 AUC 0.926 2017 预训练特征迁移 Lopes, U.K.; Valiati, J.F., 2017, Computers in Electrical Engineering(结核诊断特征迁移研究) 未公开
8 Deep CNN(小架构) AUC 0.925 2019 轻量网络+可视化 Pasa, F. et al., 2019, Journal of Digital Imaging(快速 TB 筛查网络研究) 部分
9 传统 CAD 基线 Acc 84% / AUC 0.900 2014 特征+SVM(数据集原始基线) Jaeger, S. et al., 2014, QIMS 4(6):475-477. DOI: 10.3978/j.issn.2223-4292.2014.11.20 未公开

§8.2 SOTA 总结与选型建议

Shenzhen 集上报告过的 AUC 从 0.900(2014 基线)到 0.999(小测试划分的集成模型)跨度极大,且多数差异源于划分/预处理而非算法。选型建议:以 DenseNet-121 或 EfficientNet-B0(512×512、CLAHE、固定划分)为自建基线;若目标是发表跨域研究,直接采用"深圳训练→Montgomery 测试"协议并报告 AUC 落差;若目标是高精度域内分类,转向 TBX11K 主训练、Shenzhen 作外验,可回避划分不可比问题。

三条经验法则:① 测试集小于 140 张的"99% AUC"结果先降级看待(Montgomery 全集也只有 138 张);② 同时在 Shenzhen 与 Montgomery 上报结果的论文比只报一个集的论文更可信;③ 2017 年后仍有论文只报准确率不报 AUC/敏感性/特异性,引用时要小心其阈值选择是否利好结论。

§8.3 评测协议

  1. 固定划分(开源 image_name 列表 + 种子)或 5×2 CV;
  2. 统一 12-bit 归一化 + 512×512(或 1,024×1,024)输入;
  3. 报告 AUC + Sensitivity(固定 Specificity 或反之)+ F1;
  4. 单独报告 6 张例外片的敏感性分析;
  5. 跨域实验须声明训练集/测试集的域构成。

此外建议同时报告阈值无关指标(AUC/AP)与阈值相关指标(Sens/Spec@thr),并公开阈值选择规则——Shenzhen 集近均衡使 0.5 阈值看似合理,但跨域测试时分布变化会使该阈值失效,审稿人常追问此点。

数据集 规模 关系
Montgomery County CXR Set 138 张(80/58) 姊妹集,合并构成 Jaeger 2014 双集基准
TBX11K 11,200 张 大规模后继基准(Liu et al. CVPR 2020)
Belarus TB 集 306 张(全阳性) 外验补充(Rahman et al. 2020)
Rahman 聚合集(NIH+Montgomery+Shenzhen+Belarus) 7,000 张(3,500/3,500) 大规模混合基准(Rahman et al., 2020, IEEE Access 8:191586-191601)
NIH ChestX-ray14 112,120 张 弱监督多标签,TB 标签噪声大
JSRT 247 张 结节检测经典集,常与掩膜研究同用

§8.5 关键论文 Top 8

  1. Jaeger, S.; Candemir, S.; Antani, S.; Wáng, Y.-X.J.; Lu, P.-X.; Thoma, G., 2014, Quantitative Imaging in Medicine and Surgery 4(6):475-477. DOI: 10.3978/j.issn.2223-4292.2014.11.20 — 数据集发布论文,两集规格的权威出处。
  2. Jaeger, S. et al., 2014, IEEE Transactions on Medical Imaging 33(2):233-245. DOI: 10.1109/TMI.2013.2284099 — 自动 TB 筛查系统与两集初始分类实验。
  3. Candemir, S. et al., 2014, IEEE Transactions on Medical Imaging 33(2):577-590. DOI: 10.1109/TMI.2013.2290491 — 解剖图谱配准肺分割,官方掩膜的来源方法。
  4. Yang, F. et al., 2022, Data 7(7):95. DOI: 10.3390/data7070095 — 19 类病灶像素级标注(含 6 张例外片发现)。
  5. Lakhani, P.; Sundaram, B., 2017, Radiology 284(2):574-582. DOI: 10.1148/radiol.2017162326 — 深度集成在两集上的 AUC 0.99 里程碑。
  6. Liu, Y. et al., 2020, CVPR(Rethinking computer-aided tuberculosis diagnosis)— 指出既有 TB 集标签缺陷并发布 TBX11K。
  7. Sathitratanacheewin, S. et al., 2020, Heliyon 6:e04614. DOI: 10.1016/j.heliyon.2020.e04614 — 实证数据集分布偏移限制 TB 筛查泛化。
  8. García Seco de Herrera, A. et al., 2026, Scientific Reports 16:1242. DOI: 10.1038/s41598-025-30792-x — 最新集成 SOTA(Sens 99%/Spec 94%/AUC 0.98)。
  9. Rahman, T. et al., 2020, IEEE Access 8:191586-191601 — 聚合多源 TB 集与基准复测,提供了本集的一个稳定外验口径。

§8.6 社区活跃度

描述论文 1,095+ 次引用(Semantic Scholar,截至 2026-09)且持续有 2024-2026 年新论文引用;Kaggle raddar 镜像含 53 个公开 Notebook(截至检索日);paperswithcode 维护 Shenzhen Hospital X-ray Set 榜单;TorchXRayVision 库收录该数据集,一行代码可加载预训练模型。活跃度评级:持续高活跃的经典基准

引用曲线解读:2014-2016 起步期(传统 CAD)、2017-2019 爆发期(深度学习首批结果)、2020-2021 平台期(TBX11K 分流大规模需求)、2022 至今长尾期(像素标注后 revived 的分割研究 + 跨域研究)。对新论文而言,2022 年病灶标注是最活跃的增量方向。

§8.7 生态快照

资源 类型 链接 推荐理由
官方目录 数据 NLM 仓库 原始 12-bit + 标注 + ReadMe
LHC downloads 总入口 数据 lhncbc.nlm.nih.gov/LHC-downloads 全部 TB 影像集索引
Kaggle raddar 版 镜像 Kaggle 3.77 GB + 解析好元数据 CSV + 53 Notebook
Kaggle 掩膜镜像 镜像 shcxr-lung-mask 左右肺分文件掩膜
TorchXRayVision 工具库 GitHub 收录本集的多数据集统一接口与预训练模型
TBX11K 数据 paperswithcode 条目 大规模后继基准,含病灶框标注
paperswithcode 榜单 榜单 PwC 历年精度汇总
openmedlab SZ-CXR 整理版 GitHub 尺寸统计与 8:1:1 整理口径

§9 相关资源与引用

§9.1 官方资源

§9.2 BibTeX 引用块

@article{jaeger2014two,
  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},
  title   = {Two public chest X-ray datasets for computer-aided screening of pulmonary diseases},
  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}
}

@article{jaeger2014automatic,
  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, Rakesh K. and Antani, Sameer and Thoma, George and Wang, Y.-X. Jack and Lu, Pu-Xuan and McDonald, Clement J.},
  title   = {Automatic tuberculosis screening using chest radiographs},
  journal = {IEEE Transactions on Medical Imaging},
  year    = {2014},
  volume  = {33},
  number  = {2},
  pages   = {233--245},
  doi     = {10.1109/TMI.2013.2284099}
}

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

@article{yang2022annotations,
  author  = {Yang, Feng and Lu, Pu-Xuan and Deng, Min and W{\'a}ng, Y{\`i}-Xi{\'a}ng J. and Rajaraman, Sivaramakrishnan and Xue, Zhiyun and Folio, Les R. and Antani, Sameer K. and Jaeger, Stefan},
  title   = {Annotations of Lung Abnormalities in the Shenzhen Chest X-ray Dataset for Computer-Aided Screening of Pulmonary Diseases},
  journal = {Data},
  year    = {2022},
  volume  = {7},
  number  = {7},
  pages   = {95},
  doi     = {10.3390/data7070095}
}

@article{garcia2026ensemble,
  author  = {Garc{\'i}a Seco de Herrera, A. and Yagis, E. and Pinpo, N. and Abolghasemi, V. and Andritsch, J. and Chaichulee, S. and Dicente Cid, Y. and Ingviya, T.},
  title   = {Ensemble deep learning architectures for detecting pulmonary tuberculosis in chest X-rays},
  journal = {Scientific Reports},
  year    = {2026},
  volume  = {16},
  pages   = {1242},
  doi     = {10.1038/s41598-025-30792-x}
}

§9.3 引用指南

  • 使用图像数据:引用 jaeger2014two + jaeger2014automatic(官方要求),并在致谢中署名 National Library of Medicine, NIH 与深圳市第三人民医院。
  • 使用掩膜:追加引用 candemir2014lung
  • 使用像素级病灶标注:引用 yang2022annotations(CC-BY 4.0)。
  • 比较性能:引用 §8.1 对应条目并注明划分不可比。

常见引用错误:只引 Jaeger 2014 短文而漏掉 IEEE TMI 方法论文(官方要求两篇都引);把 Kaggle 镜像当原始出处引用(应引官方数据页 + 论文,镜像仅作获取途径注明);使用 2022 标注但不标 CC-BY 4.0 署名义务。投稿前把 §9.2 的 BibTeX 整块粘贴并在致谢中写明 NLM/NIH 署名要求,可一次规避全部合规问题。


§10 AI 使用声明卡

§10.1 AI 模型列表

模型/系统 用途 版本
fast-model(CodeBuddy 内置) 本页初稿撰写、结构组织、代码生成 2026-09
WebSearch/WebFetch 工具链 事实核查与来源检索 2026-09 检索快照

§10.2 AI 参与范围

AI 完成:检索汇总(6 次检索 + 2 次页面核查)、章节初稿、代码示例撰写、表格整理。人工完成:事实抽验(规模数字、引用数、许可条款逐条回查来源)、医学与工程审校(§0 审核者)、8 个坑点的真实性与可操作性确认。全部硬数字均带来源链接。

§10.3 输入来源列表

  1. Jaeger, S. et al., 2014, Quantitative Imaging in Medicine and Surgery 4(6):475-477. DOI: 10.3978/j.issn.2223-4292.2014.11.20
  2. Jaeger, S. et al., 2014, IEEE Transactions on Medical Imaging 33(2):233-245. DOI: 10.1109/TMI.2013.2284099
  3. Candemir, S. et al., 2014, IEEE Transactions on Medical Imaging 33(2):577-590. DOI: 10.1109/TMI.2013.2290491
  4. Yang, F. et al., 2022, Data 7(7):95. DOI: 10.3390/data7070095(PMID: 36381384)
  5. Lakhani, P.; Sundaram, B., 2017, Radiology 284(2):574-582. DOI: 10.1148/radiol.2017162326
  6. Sathitratanacheewin, S. et al., 2020, Heliyon 6:e04614. DOI: 10.1016/j.heliyon.2020.e04614
  7. Liu, Y. et al., 2020, CVPR(Rethinking computer-aided tuberculosis diagnosis)
  8. García Seco de Herrera, A. et al., 2026, Scientific Reports 16:1242. DOI: 10.1038/s41598-025-30792-x
  9. Xue, Z. et al., 2023, Diagnostics 13(6):1068. DOI: 10.3390/diagnostics13061068
  10. Rajaraman, S. et al., 2021, Diagnostics(Ensemble of EfficientNets for the Diagnosis of Tuberculosis,PMCID: PMC8691984)
  11. Stirenko, S. et al., 2018, ELNANO(Chest X-ray analysis of tuberculosis by deep learning with segmentation and augmentation)
  12. 官方数据页:https://data.lhncbc.nlm.nih.gov/public/Tuberculosis-Chest-X-ray-Datasets/Shenzhen-Hospital-CXR-Set/index.html(含 ReadMe 与 ROI CSV,2024-08-28 快照)
  13. Kaggle raddar 镜像与元数据:https://www.kaggle.com/datasets/raddar/tuberculosis-chest-xrays-shenzhen/data
  14. openmedlab Awesome-Medical-Dataset SZ-CXR 条目:https://github.com/openmedlab/Awesome-Medical-Dataset/blob/main/resources/SZ-CXR.md
  15. Semantic Scholar 引用计数 API:https://api.semanticscholar.org/graph/v1/paper/DOI:10.3978/j.issn.2223-4292.2014.11.20(截至 2026-09)

§10.4 人工校验

内容模块 审核者 审核方式 审核状态
§2 医学背景(ICD-11/SNOMED/流行病学) 千方病案医学编辑部 逐条对照文献来源 ✅ 已通过
§3-§4 规格与数据结构 千方病案医学编辑部交叉审核 对照官方页与 ReadMe 描述 ✅ 已通过
§6 代码与 8 坑点 医疗 AI 数据工程师 代码逻辑走查 + 坑点来源核实 ✅ 已通过
§7 DAIMS 与偏倚分析 千方病案医学编辑部 24 项逐项复核 ✅ 已通过
§8 基准数字 千方病案医学编辑部 逐条回查论文/榜单 ✅ 已通过
§9 引用与许可条款 千方病案医学编辑部 对照官方页与 PMC 全文 ✅ 已通过

§10.5 AI 生成章节标注

全篇由 AI 生成初稿;§1.0/§1.2 的价值判断、§6.5 坑点的组织、§7.7 的 DAIMS 评分解读为 AI 撰写后经人工核定;无任何章节为纯人工原创或纯机器发布。

生成边界说明:所有规模数字(662/326/336/引用数/文件大小)来自检索快照中的官方页、论文或 Kaggle 实测列表,AI 仅做汇总;基准性能数字逐条对应 §8.1 引用列的论文;DAIMS 评分与就绪度评分为编辑部评价框架下的判断值,AI 初评后经人工校准。

§10.6 最后人工审核

最后人工审核日期:2026-09-05

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

返回 AI-Ready 数据集