信息速览

TBX11K 结核胸片数据集 — 大规模结核病灶检测与分类 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | TBX11K 结核胸片数据集 |
| 英文全称 | TBX11K: Tuberculosis X-ray Dataset |
| 别名/简称 | TBX 11K、Tuberculosis X-ray (TBX11K) |
| 疾病分类(ICD-11) | 1B00 呼吸系统结核(细菌学/组织学证实);潜伏结核 1C10;1B1Y 其他特指结核 |
| SNOMED CT | 56717001(Tuberculosis);373576009(Infection caused by Mycobacterium tuberculosis) |
| 数据模态 | 胸部 X 光(CXR,后前位为主,512×512 灰度 PNG) |
| AI 任务类型 | 三分类(健康/有病非结核/结核)+ 活动性与潜伏结核分型 + 病灶级边界框检测 |
| 样本总数 | 11,200 张胸片(约 800 张结核图带框,第三方统计 1,211 个框) |
| 数据大小 | 约 3.8 GB(ZIP 压缩包;Dataset Ninja 重打包实测 3.79 GB) |
| 数据格式 | PNG 图像 + Pascal VOC XML 标注 + 文本划分列表(COCO JSON 需脚本生成) |
| 许可证 | CC BY-NC-SA 2.0(torchxrayvision 标注;官方仓库未附标准 LICENSE,见 §3.10) |
| 访问级别 | 开放下载(Google Drive/百度网盘直接获取,无需注册或签署协议) |
| DUO 标签 | GRU(通用研究使用)+ NCU(非商业,源自 NC-SA 条款倾向) |
| 语言 | 影像为灰度 PNG;标注、列表文件与论文均为英文 |
| 首发日期 | 2020-06(CVPR 2020 Oral 论文随会发布) |
| 最后更新 | 2023-12(TPAMI 扩展版与 arXiv v2,2023-12-06) |
| 发布机构 | 南开大学 VCIP/TKLNDST(程明明团队)+ 推想医疗 + 国防科技大学 + 新加坡 A*STAR |
| 官方主页 | mmcheng.net/tb |
| 下载地址 | GitHub README(含 Google Drive 与百度网盘) |
| DOI | 10.1109/CVPR42600.2020.00272(数据集无独立数据 DOI) |
| 引用次数 | 175+(CVPR 版 139 + TPAMI 版 36,Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方三划分与双论文基准完整;扣分项:COCO JSON 需自行生成、官方 test 集无公开 GT、与四个来源数据集重叠需自行去重 |
| 页面状态 | published |
§0 E-E-A-T 审核声明
医学审核:本页 §2 医学背景(ICD-11/SNOMED CT 映射、结核影像学特征、流行病学)与 §7 偏倚分析由 [千方病案医学编辑部] 交叉审核。
数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。TBX11K 通过 GitHub/Google Drive/百度网盘开放下载,无需注册或签署数据使用协议,但许可条款存在第三方标注不一致的情况(详见 §3.10),商用场景请先与作者书面确认。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? TBX11K 是目前全球最大的开放结核病胸部 X 光数据集,由南开大学程明明团队在 CVPR 2020(Oral)发布、并在 IEEE TPAMI 2024 扩展。它把此前各自只有几百张的 Montgomery、Shenzhen、DA、DB 四个公共结核胸片集与团队收集的病例整合成 11,200 张统一 512×512 的胸片,并首次为结核图像提供病灶级边界框——不仅告诉模型“有没有结核”,还指出“病灶在哪里、是活动性还是潜伏性”。
为什么重要? 结核仍是全球第二大传染病死因,而此前最大的公开结核胸片集(Shenzhen)只有 662 张,深度模型严重“吃不饱”。TBX11K 的规模约为此前的 17 倍;同时论文的人类对照实验显示,资深放射科医师对照临床金标准的四分类准确率只有 68.7%,说明这一任务远未解决,高质量训练数据是突破口。
我能用它做什么? 训练“分类 + 检测”双任务模型(三分类:健康/有病非结核/结核,再细分活动性与潜伏结核)、研究类别不平衡与跨域泛化、参加官方常驻在线竞赛(test 集永久封闭)、以及在 512×512 标准分辨率下与其他论文公平对比。注意它与 Montgomery/Shenzhen 存在图像重叠,跨数据集实验必须先去重(见坑点 1)。
§1.1 摘要
TBX11K(Tuberculosis X-ray)面向计算机辅助结核诊断(Computer-Aided Tuberculosis Diagnosis, CTD)构建。结核的确诊金标准是痰涂片镜检与细菌培养,需要生物安全三级实验室且耗时数月,在资源受限地区难以普及;X 光是最普遍的筛查手段,但影像征象模糊、人眼判读易错。团队因此整合 DA(156 张)、DB(150 张)、Montgomery(138 张)、Shenzhen(662 张)四个公共集与合作医院病例,构建 11,200 张胸片的基准:图像级标签全部经临床金标准(痰检/综合确诊)核验,结核图像再由 5-10 年经验放射科医师标注病灶框、10 年以上医师复核并与金标准双重校验。数据按 train/val/test = 6,600/1,800/2,800 划分,TB 各子类保持 3:1:2,10 张无法分型的“不确定结核”全部置于测试集。配套的 SymFormer 基线利用胸片双侧对称性先验,在测试集达到 94.6% 分类准确率与 99.1% AUC(TPAMI 版),显著超过经放射科医师的人类水平(Liu et al., 2024, IEEE TPAMI. DOI 10.1109/TPAMI.2023.3330825)。
§1.1b 关键数字速查表
| 指标 | 数值 | 来源 |
|---|---|---|
| 图像总数 | 11,200 张(512×512) | TPAMI 论文表 2 |
| 官方划分 | 6,600 / 1,800 / 2,800 | 同上 |
| 挑战赛测试口径 | 3,302 张(all_test) | Codabench |
| TB 病灶框 | 约 1,211 个(trainval 约 800 图) | Dataset Ninja 统计 |
| 数据包大小 | 约 3.8 GB | Dataset Ninja 实测 3.79 GB |
| 人类读片基线 | 68.7%(四分类)/ 84.8%(不分型) | TPAMI §3.2 |
| SOTA(SymFormer,P2T-Small) | Acc 94.6 / AUC 99.1 / AP 93.4 | 同上 |
| 引用 | CVPR 版 139 + TPAMI 版 36(截至 2026-09) | Semantic Scholar |
§1.2 战略价值
维度一:填补“结核病灶检测”空白。 在 TBX11K 之前,所有公开结核胸片集只有图像级标签,模型只能做“整图分类”,无法给出病灶位置,临床可用性受限。TBX11K 是第一个面向 TB 感染区域检测的数据集,约 800 张 trainval 结核图像带有逐框标注(含活动性/潜伏性框级分型),使检测器可以直接学习病灶形态。对做多病种胸片检测的团队,它可以与 ChestX-Det10、VinDr-CXR 等框级数据集互补使用。
维度二:可控难度的“ negatives 设计”。 5,000 张“有病但非结核”图像(肺炎等其他胸部疾病)是 TBX11K 特有的战略资产:它迫使模型区分结核特异征象与一般肺部异常,直接针对临床最痛的假阳性问题。5,000:5,000:1,200 的三分类构成还可模拟筛查场景的数据分布,评估系统在“大量非 TB 干扰”下的判别力,这是单一健康/结核二分类集无法提供的。
维度三:永续在线评测。 官方 test 集(2,800 张,扩展列表 all_test 共 3,302 张)的真实标签永不公开,通过 Codabench 平台常驻在线竞赛。这为社区提供了一个不易过拟合的公共排行榜,任何方法论的进步都能在同一封闭测试上纵向可比——这种“数据开放 + 标签封闭”的机制在医学影像数据集中较为少见。
§1.3 同类数据集横向对比
| 数据集 | 年份 | 规模 | 模态/分辨率 | 标注层级 | 核心差异 |
|---|---|---|---|---|---|
| TBX11K | 2020/2023 | 11,200 张 | CXR 512×512 | 图像级 5 类 + 病灶框(含框级活动性分型) | 规模最大;唯一支持 TB 病灶检测;test 永久封闭 |
| Montgomery (MC) | 2014 | 138 张 | CXR DICOM/PNG | 图像级二分类 + 左右肺掩码 | 美国马里兰单一来源;常作外部验证集 |
| Shenzhen | 2014 | 662 张 | CXR | 图像级二分类 | 此前最大 TB 集;中国深圳单一来源 |
| DA / DB | 2014 | 156/150 张 | CXR | 图像级二分类 | Chauhan 等使用的公共集,规模小 |
| Belarus | 2014 | 1,049 例 | CXR | 图像级 + 耐药信息 | 面向耐药结核,非检测任务 |
| ChestX-Det10 | 2020 | 3,563 张 | CXR | 10 类病灶框(含肺结核) | 多病种检测但 TB 样本占比小、无活动性分型 |
TBX11K 已整合 MC、Shenzhen、DA、DB 的全部或部分图像,因此与这四个数据集不是独立数据源(见 §5.3 泄漏风险)。
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2020-06 | CVPR 2020(Oral)首发 | 论文《Rethinking Computer-Aided Tuberculosis Diagnosis》,数据集与基线检测器公开 |
| 2020-08 | IEEE Xplore 收录 | DOI 10.1109/CVPR42600.2020.00272,会议地点 Seattle |
| 2023-07 | arXiv 扩展版(v1) | arXiv:2307.02848,新增 SymFormer 与完整基准 |
| 2023-12 | arXiv v2 / TPAMI 排版定稿 | DOI 10.1109/TPAMI.2023.3330825,2023-11-07 在线 |
| 2024 | TPAMI 正刊出版 | vol. 46, no. 4, pp. 2316-2332 |
| 2023-10 至今 | GitHub 仓库维护 | yun-liu/Tuberculosis 创建于 2023-10-04,最近推送 2026-08-28;官方挑战迁移至 Codabench |
§1.5 典型应用场景
- 三分类筛查系统:健康/有病非结核/结核三分类,评估在大量非 TB 异常干扰下的特异性,对应移动筛查车、体检中心预分诊场景。
- 病灶级检测与可解释输出:输出 TB 病灶框(活动性/潜伏性),辅助放射科医师定位——论文测试中 IoU 0.5 的框即足以辅助读片。
- 类别不平衡学习研究:924:212:54:10 的 TB 子类天然构成不平衡基准,可验证重加权、重采样与生成式增广方法。
- 跨域泛化与对称性先验研究:SymFormer 的 SymAttention/SPE 证明解剖先验可提升跨域稳健性;数据集支持 zero-shot 迁移到 MC/Shenzhen/DA/DB(去重后)。
- 教学与人类-vs-AI 对照实验:内置放射科医师 68.7% 准确率的人类基线,适合医学 AI 课程复现“模型超过专家读片”的经典案例。
§1.6 与本库相邻条目的关系
| 相邻条目 | 关系 | 联合使用建议 |
|---|---|---|
| Montgomery-TB | TBX11K 已包含其全部 138 张图 | 只读其一做主训练;另一条目用于溯源与掩码分割任务 |
| Shenzhen-TB | TBX11K 已包含其全部 662 张图 | 同上;Shenzhen 集保留 DICOM 元数据信息更丰富 |
| ChestX-Det10 | 独立的多病种框级检测集 | 做“TB 检测 + 其他胸病检测”联合训练时的互补框级数据 |
| VinDr-CXR | 独立的大规模胸片多病种集 | 作为 TBX11K 之外的外部验证来源(无重叠) |
§2 医学背景
§2.1 ICD-11 编码映射
| 数据集标签 | ICD-11 编码 | ICD-11 中文名 | 备注 |
|---|---|---|---|
| Active TB(活动性结核) | 1B00 | 呼吸系统结核(细菌学/组织学证实) | 数据集活动性病例经临床/细菌学金标准确认 |
| Active TB(未证实亚型) | 1B01 | 呼吸系统结核(未证实) | 数据集未区分 1B00/1B01,统一为活动性 |
| Latent TB(潜伏/陈旧性结核) | 1C10 | 潜伏结核感染 | 影像表现为陈旧病灶,对应 torchxrayvision 的 ObsoletePulmonaryTuberculosis 列 |
| Uncertain TB | 1B1Z | 结核病,未特指 | 现行医学条件无法分型,仅 10 张且全在 test |
| Sick but Non-TB | 视具体疾病(如 CA40 肺炎) | — | 非单一病种,为异质集合 |
| Healthy | 无诊断编码 | 不适用 | 正常胸片 |
§2.1b SNOMED CT 映射
| 数据集标签 | SNOMED CT 码 | SNOMED 术语 | 对应关系说明 |
|---|---|---|---|
| Active TB | 373576009 | Infection caused by Mycobacterium tuberculosis (disorder) | 结核感染总码,覆盖活动性感染 |
| Active TB | 56717001 | Tuberculosis (disorder) | 结核病总码,与 ICD-11 1B 系对应 |
| Latent TB | 56717001 + 陈旧性修饰 | Tuberculosis (disorder) | SNOMED 无独立“陈旧性肺结核”常用码,torchxrayvision 以 ObsoletePulmonaryTuberculosis 表达 |
| Tuberculous 征象 | 371569005 | Tuberculous (qualifier value) | 影像报告中的结核性限定词 |
| Sick but Non-TB / Healthy | 不适用 | — | 非结核概念,需按具体疾病另行映射 |
§2.2 疾病简介与流行病学
结核病由结核分枝杆菌(Mycobacterium tuberculosis)引起,经呼吸道传播,主要累及肺部。据 TBX11K 论文引述的世界卫生组织数据,全球每年约 1,000 万人发病、约 140 万人死亡,是仅次于 COVID-19 的致死性传染病(Liu et al., 2024, IEEE TPAMI)。影像学上,活动性肺结核常见征象包括渗出、实变、空洞与粟粒样结节,多位于上叶尖后段与下叶背段;潜伏性/陈旧性结核则表现为纤维条索、钙化与瘢痕牵拉。确诊金标准为痰涂片镜检与细菌培养(需 BSL-3 实验室、耗时数月),因此 X 光筛查在资源受限地区承担一线角色,但胸部影像灰度对比低、征象与多种疾病重叠,人工判读误差显著——这正是 TBX11K 论文人类实验中 68.7% 准确率的临床根源。
影像征象与数据集标签的对应:
| 影像征象 | 典型位置 | 倾向标签 | 检测难度 |
|---|---|---|---|
| 渗出/实变(infiltrates/consolidation) | 上叶尖后段、下叶背段 | Active TB | 中:与肺炎征象重叠,依赖“有病非结核”对照学习 |
| 空洞(cavities) | 上叶 | Active TB | 较低:形态特异 |
| 粟粒样结节 | 双肺弥漫 | Active TB | 高:结节小而密,受 512 分辨率限制 |
| 纤维条索/瘢痕 | 肺尖、上叶 | Latent/陈旧 TB | 中:与陈旧性非 TB 病灶难分 |
| 钙化 | 上叶、肺门 | Latent/陈旧 TB | 较低:高密度特征明显 |
| 胸膜增厚/胸腔积液 | 胸膜腔 | Active TB(可能) | 中:非 TB 疾病亦可出现 |
§2.3 临床任务定义
TBX11K 支持的临床任务链为筛查 → 分型 → 定位三步:
- 筛查(分类):三分类判别“健康 / 有病但非结核 / 结核”,对应 X 光筛查中“是否需要进一步结核检查”的分诊决策。误报成本低(补做痰检),漏报成本高(传染扩散),因此模型选型应同时关注灵敏度与特异度。
- 分型(活动性 vs 潜伏性):活动性结核具传染性、需立即抗结核治疗;潜伏感染不具传染性但可激活。两者在治疗路径上完全不同,是论文强调“不可忽略分型”的原因。
- 定位(病灶检测):输出病灶位置与范围,帮助医师快速核验 AI 结论、量化随访中的病灶变化;论文指出 IoU 0.5 精度的框已具备辅助价值。
任务-指标-临床含义映射:
| 临床任务 | 数据集支持 | 主指标 | 临床含义 |
|---|---|---|---|
| 筛查分诊 | 三分类(5,000/5,000/1,200) | Acc、AUC(TB)、Sens、Spec | Sens 优先 → 传染源排查;Spec 优先 → 体检分流 |
| 结核分型 | Active 924 / Latent 212 / 混合 54 | 分子集 Acc/AP | 决定抗结核治疗路径 |
| 病灶定位 | trainval 约 800 图、1,211 框 | AP50bb(category-agnostic) | 辅助读片“看哪里”,IoU 0.5 即够用 |
| 不确定病例兜底 | Uncertain 10 张(仅 test) | 类不可知检出 | 提示“需人工复核”的极端情形 |
§2.4 患者人群概貌
| 维度 | 说明 |
|---|---|
| 来源 | 中国深圳(Shenzhen 集)、美国马里兰蒙哥马利县(MC 集)、DA/DB 公共集与合作医院门诊 |
| 采集时间跨度 | 来源公共集 2014 年发布;整合构建于 2019 年前后(论文 2020 年发表) |
| 年龄/性别 | 原始论文未公开人口统计学分布(无个体元数据随数据发布) |
| 就医类型 | 门诊与筛查人群为主;健康与有病非结核对照为按基准设计招募/筛选 |
| 种族/地域 | 跨中国与美国两地,混合多台设备;TB 负担地区(如印度)经 DA/DB 间接涉及 |
| 个体规模 | 11,200 张图像对应 11,200 名个体(每图一人,无纵向随访) |
⚠️ 数据集不发布任何个体元数据(年龄、性别、病程),需要人口统计学公平性分析的项目只能做影像层面推断,这是 §7.5 公平性讨论的先天限制。
补充两点人群背景:其一,Shenzhen 集的胸片来自深圳第三人民医院(结核专科)门诊连续病例,MC 集来自美国蒙哥马利县结核控制项目,两者的疾病谱以结核及其鉴别诊断为轴心,因此“有病非结核”对照组也以胸部感染性疾病为主;其二,TBX11K 健康对照组由团队按基准设计筛选,属“构造性健康分布”而非自然人群抽样——这也是 §7.1 构成偏倚的根源。
§2.5 临床价值
对高负担、低资源地区,一个“三分类 + 病灶定位”的 CTD 系统可以在无放射科医师的场景下完成初筛:灵敏度优先模式用于排查传染源,特异度优先模式用于体检分流。TBX11K 的框标注让 AI 输出可与医师读片行为对齐(指出“看哪里”),而不仅仅是“有无”。论文的外部实验显示,在 TBX11K 训练的模型不重训直接迁移到 MC/Shenzhen/DA/DB 时仍优于既有方法,提示其学到的特征具备跨设备、跨人群的稳健性,这对真实部署(设备型号不可控)尤为关键(Liu et al., 2024, IEEE TPAMI. DOI 10.1109/TPAMI.2023.3330825)。
§2.6 金标准与标注体系速览表
| 要素 | TBX11K 的做法 | 覆盖范围 | 局限 |
|---|---|---|---|
| 图像级标签 | 痰涂片/培养 + 临床综合确诊(golden standard) | 全部 11,200 张 | 是“临床金标准”而非“影像读片共识”,与纯影像队列分布不同 |
| 结核分型 | 活动性/潜伏性经生物医学确认 | 全部 TB 图像 | 分型不确定病例(10 张)只能进 test |
| 病灶框 | 5-10 年经验放射科医师初标 + 10 年以上医师复核,与图像级金标准双重校验,不一致回炉重标 | 仅 trainval 的约 800 张 TB 图 | test TB 图(400 张)与非 TB 图无框;框级别非像素级分割 |
| 非结核图像 | 仅图像级标签,无病灶标注 | 10,000 张 | 无法做多病种病灶检测 |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 复现论文基准/提交挑战 | 官方 Google Drive/百度网盘原版 | 约 3.8 GB | 含 lists/、annotations/、code/,列表与官方评测完全一致 |
| 快速跑通 PyTorch/torchxrayvision | 官方原版 + torchxrayvision 库 | 约 3.8 GB | TBX11K_Dataset 类直接读取,免写解析器 |
| 可视化/标注平台工作流 | Dataset Ninja 重打包(Supervisely 格式) | 3.79 GB | 自带 COCO 风格标注与可视化元数据,1211 框已结构化 |
| 教学演示/仅分类任务 | Kaggle tbx11k-simplified | 约 4.07 GB | 单 CSV + 训练/测试两目录,零解析成本,但仅保留有框子集 |
§3.1 模态详情
所有图像均为胸部 X 光平片,发布版统一缩放至 512×512 像素(原始采集分辨率约 3000×3000,因打包体积将超 100 GB 而未发布;作者明确要求社区统一使用 512×512 以保证公平比较)。灰度 PNG 格式,无 DICOM 头信息,像素值即灰度强度。图像以后前位(PA)/正位胸片为主,覆盖不同设备与年代——MC 集为美国蒙哥马利县结核控制项目的 DICOM 扫描片,Shenzhen 集为深圳第三人民医院飞利浦 DR 系统采集的门诊片,DA/DB 为研究用公共集。
512×512 分辨率决策的三个理由(官方论文表述):
- 存储:原始约 3000×3000 全量打包将超 100 GB,分发不可行;
- 可用性:512×512 已足够训练深度模型完成 TB 检测与分类(官方实验验证);
- 感受野:现有 CNN 的感受野难以直接利用 3000×3000 大图,强行用原图反而无益。
官方同时明确:为公平比较,所有研究者应使用 512×512 版本做实验——这条约定意味着任何上报高分辨率增强结果的数字都无法与官方榜可比。
§3.2 按子集样本数
| 类别 | Train | Val | Test | 合计 |
|---|---|---|---|---|
| Healthy(健康) | 3,000 | 800 | 1,200 | 5,000 |
| Sick & Non-TB(有病非结核) | 3,000 | 800 | 1,200 | 5,000 |
| Active TB(活动性结核) | 473 | 157 | 294 | 924 |
| Latent TB(潜伏结核) | 104 | 36 | 72 | 212 |
| Active & Latent TB(混合) | 23 | 7 | 24 | 54 |
| Uncertain TB(无法分型) | 0 | 0 | 10 | 10 |
| 合计 | 6,600 | 1,800 | 2,800 | 11,200 |
TB 各子类按 3:1:2(train:val:test)划分;Uncertain TB 全部 10 张只在 test,训练集没有该类样本。TB 图像中仅 trainval 的约 800 张(473+157+104+36+23+7 = 800)带有边界框;test 的 400 张 TB 图 GT 封闭。
框标注覆盖表:
| 分组 | 图像数 | 是否有框标注 | 说明 |
|---|---|---|---|
| Train TB(473+104+23) | 600 | ✅ 有框 | annotations/xml/ 内含对应 XML |
| Val TB(157+36+7) | 200 | ✅ 有框 | 同上 |
| Trainval TB 合计 | 800 | ✅ 有框 | 官方框标注的全部范围;第三方统计 799 图 1,211 框 |
| Test TB(294+72+24+10) | 400 | ❌ GT 封闭 | 在线竞赛评测 |
| Healthy / Sick(train/val/test) | 10,000 | ❌ 无框 | 仅图像级标签;无框即负样本(§4.5) |
§3.3 数据格式
| 内容 | 格式 | 位置 | 备注 |
|---|---|---|---|
| 图像 | PNG(512×512 灰度) | imgs/ | 文件名形如 tb0421.png / normal_xxx.png |
| 病灶框标注 | Pascal VOC XML | annotations/xml/ | 仅 trainval 的 TB 图;每框含类别(active/latent)与坐标 |
| COCO 标注 | JSON | annotations/json/ | 不随包提供,需运行 code/make_json_anno.sh 生成 |
| 划分列表 | TXT | lists/ | TBX11K_train/val/trainval.txt + all_train/val/trainval/test.txt 两套 |
| 评测代码 | Python/Shell | code/ | 含 json 生成脚本与评测实现 |
§3.4 存储大小
官方 ZIP 约 3.8 GB(第三方重打包实测 3.79 GB)。解压后体积相近(PNG 已压缩)。若按 3000×3000 原始分辨率分发将超过 100 GB,这是官方只发 512×512 的直接原因。建议预留 10 GB 磁盘(解压 + 预处理缓存)与 8 GB 以上内存用于全量加载。
§3.5 标注方式
- 图像级标签:来自临床金标准(痰涂片/培养 + 综合确诊),属于“弱人工+临床验证”混合方式,非纯影像读片产物。
- 病灶框:人工标注。每张 TB 图先由 5-10 年结核诊断经验的放射科医师画框并给出框级分型(活动性/潜伏性),再由 10 年以上经验医师复核;框分型与图像级金标准双重校验,不一致则匿名回炉重标,两次出错则告知金标准并组织讨论后重标(Liu et al., 2024, IEEE TPAMI. DOI 10.1109/TPAMI.2023.3330825)。
- 非 TB 图像:无病灶标注,仅图像级标签。
§3.6 标注者资质与一致性
标注者均为顶级医院放射科医师:初标者 5-10 年结核诊断经验,复核者 10 年以上。一致性通过“与金标准双重校验 + 错题重标”机制保障而非 Cohen’s kappa 等统计指标(论文未公布 kappa)。论文另做了人类水平对照实验:邀请一位未参与标注的 10 年以上经验医师对 test 集抽样 400 张(健康 140 / 有病非结核 140 / TB 120)做四分类读片,对照金标准准确率仅 68.7%;若不要求区分活动性/潜伏性则提升至 84.8%——这组数字同时说明了标注难度与任务价值。
§3.7 采集周期
四个来源公共集于 2014 年发布(Jaeger et al., 2014, Quant Imaging Med Surg 4(6):475-477;Chauhan et al., 2014, PLoS One 9(11):e112980);TBX11K 于 2019 年前后整合构建、2020 年 6 月随 CVPR 论文发布,2023 年随 TPAMI 版本补充 SymFormer 基线与挑战平台。数据集为静态快照,无增量更新计划。
§3.8 地域覆盖
图像来源覆盖:中国深圳(Shenzhen 662 张,深圳第三人民医院门诊)、美国马里兰(Montgomery 138 张,县结核控制项目)、DA/DB 公共集(Chauhan 等研究使用的结核影像),以及未逐一披露的合作医院病例。多地域混合是其优势(跨域多样性)也是其隐患(设备/人群异质性,见 §7.1)。
§3.9 设备规格
来源集设备不一:Shenzhen 集使用飞利浦 DR 数字X光诊断系统;Montgomery 集为历史 DICOM 影像数字化扫描;其余来源设备未逐一披露。所有图像已统一为 512×512 PNG,原始设备元数据(kVp、mAs、体位角度)不随数据发布,无法做严格的设备层分析。
§3.10 深度溯源链
- 构建方:南开大学 VCIP/TKLNDST(程明明团队;一作刘芸现于新加坡 ASTAR I2R),合作方含推想医疗(InferVision,CVPR 版共同作者单位)、国防科技大学与新加坡 ASTAR(TPAMI 版)。
- 上游来源:DA 156 张与 DB 150 张(CC BY 4.0,出自 Chauhan et al., 2014, PLoS One);Montgomery 138 张与 Shenzhen 662 张(美国 NLM 公有领域,出自 Jaeger et al., 2014, QIMS);合计 1,106 张公共来源图,其余约 94 张来自合作医院(由 TB 总量 1,200 减得)。
- 许可状态:官方 GitHub 仓库 LICENSE 为 “Other/NOASSERTION”(2026-09 查验),README 未附数据许可条款;torchxrayvision 文档标注 CC BY-NC-SA 2.0,Dataset Ninja 与 Ultralytics 镜像标注 CC BY 4.0。二者矛盾,商用与再分发前请邮件与作者确认,学术使用按 NC-SA 口径处理最稳妥。
- 托管:GitHub(代码+说明)→ Google Drive/百度网盘(数据包)→ Codabench(永久在线测试)。
§4 数据结构
§4.0 目录树
官方包解压后结构如下(以 Kaggle usmanshams/tbx-11 镜像的 README 描述为准):
TBX11K/
├── README.md # 官方说明(划分、下载、引用)
├── lists/
│ ├── TBX11K_train.txt # 官方 train 列表(6,600)
│ ├── TBX11K_val.txt # 官方 val 列表(1,800)
│ ├── TBX11K_trainval.txt # train+val 合并(8,400)
│ ├── all_train.txt # 扩展 train(并入 DA/DB/MC/Shenzhen 的 trainval 部分)
│ ├── all_val.txt # 扩展 val
│ ├── all_trainval.txt # 扩展 trainval(建议调参用)
│ └── all_test.txt # 扩展 test(3,302 = 官方 test 2,800 + 四来源剩余约 502)
├── imgs/
│ ├── tb0421.png # TB 图(含活动性/潜伏性)
│ ├── normal_xxxx.png # 健康图
│ ├── sick_xxxx.png # 有病非结核图
│ └── extra/
│ ├── DA/ # DA 集 trainval 部分及划分文件
│ ├── DB/ # DB 集 trainval 部分及划分文件
│ ├── Montgomery/ # MC 集 trainval 部分及划分文件
│ └── Shenzhen/ # Shenzhen 集 trainval 部分及划分文件
├── annotations/
│ ├── xml/ # Pascal VOC XML,仅 trainval 的 TB 图(约 800 张有框)
│ └── json/ # 空目录,需运行 code/make_json_anno.sh 生成 COCO JSON
└── code/
└── make_json_anno.sh # 生成 COCO 格式标注的官方脚本
§4.1 DAIMS 字段字典
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| image_name | Text | 图像文件名(去标识化主键) | tb0421.png | 样本索引 | 无 | 无 | 全局唯一 |
| 图像类别 | Label | 五类图像级标签 | active_tb | 分类目标 | 临床金标准误差 | 无 | healthy / sick_but_non-tb / active_tb / latent_tb / uncertain_tb(另有 active_tb&latent_tb 组合见 §4.2) |
| split | Label | 官方划分归属 | train | 实验控制 | 无 | 无 | train / val / test |
| box_type | Label | 框级结核分型 | ActiveTuberculosis | 检测目标 | 放射科医师间差异 | 无框=非 TB 图 | ActiveTuberculosis / ObsoletePulmonaryTuberculosis |
| bbox_xmin, bbox_ymin | Integer | 框左上角坐标(512×512 坐标系) | (63, 12) | 检测回归 | 约数像素级 | 无 | [0, 511] |
| bbox_width, bbox_height | Integer | 框宽高(512×512 坐标系) | (64, 64) | 检测回归 | 约数像素级 | 无 | [1, 512] |
| 框面积 | Integer | width×height,多数位于原图 (384², 960²] | 4096 | 尺度分析 | 派生量 | 无 | [1, 262144] |
| Tuberculosis 超类列 | Integer | torchxrayvision 二分类用超类 | 1 | 二分类 TB vs 非 TB | 派生量 | 无 | |
| PulmonaryTuberculosis 列 | Integer | torchxrayvision 通用列,train/val/trainval 恒 0 | 0 | ⚠️ 勿用作训练目标 | 已知空列 | 恒 0 即“不适用” | |
| 无框状态 | — | Healthy/Sick 图像无 XML 文件 | — | 负样本构成 | 无 | 缺失即信息(非 TB 无病灶框) | — |
§4.2 标签分布
图像级五类分布见 §3.2 表。需特别注意的三点:
- 组合类表示:同时含活动性与潜伏性病灶的图像(54 张)在文件名/列表中体现为
active_tb&latent_tb类别;torchxrayvision 读取时将 active_tb 与 active_tb&latent_tb 均记入 ActiveTuberculosis 列,latent 侧记入 ObsoletePulmonaryTuberculosis 列。 - 三分类聚合:挑战赛与主基准使用三分类(Healthy / Sick but Non-TB / TB),提交时每行输出三个概率、和为 1(Codabench 官方协议)。
- 框级二类:XML 中框只有两类——ActiveTuberculosis 与 ObsoletePulmonaryTuberculosis(陈旧性/潜伏),混合图中两类框可共存于同一图像。
五类 → 三分类/四列标签映射表:
| 官方图像级类别 | 三分类(挑战赛) | xrv ActiveTuberculosis 列 | xrv ObsoletePulmonaryTuberculosis 列 | xrv Tuberculosis 超类列 |
|---|---|---|---|---|
| healthy | Healthy | 0 | 0 | 0 |
| sick_but_non-tb | Sick but Non-TB | 0 | 0 | 0 |
| active_tb | TB | 1 | 0 | 1 |
| latent_tb | TB | 0 | 1 | 1 |
| active_tb&latent_tb | TB | 1 | 1 | 1 |
| uncertain_tb | TB(分类口径) | 无框级证据 | 无框级证据 | 1(图像级) |
torchxrayvision 的 PulmonaryTuberculosis 列在 train/val/trainval 恒 0(见坑点 6),故未列入本表。
§4.3 关键统计
- 病灶框总数:约 1,211 个(Dataset Ninja 对 799 张有框图的统计;官方口径为 trainval 约 800 张 TB 图全部带框)。
- 框尺度:以原图约 3000×3000 坐标计,多数框面积位于 (384², 960²] 区间;换算到 512×512 发布图约 65-165 像素见方,属中小目标。
- 类别比例:三分类 5,000:5,000:1,200(≈ 25:25:6);TB 子类 924:212:54:10,imbalance ratio 超 92:1。
- 分辨率:全部 512×512;无 DICOM 元数据。
- 个体数:11,200(每图一人,无纵向重复)。
规模对比速览:
| 维度 | TBX11K | 此前最大公开 TB 集(Shenzhen) | 倍数 |
|---|---|---|---|
| 图像数 | 11,200 | 662 | ≈ 17× |
| 标注层级 | 图像级 + 病灶框 | 仅图像级 | 质变 |
| 类别数 | 5 类(含活动性分型) | 2 类 | 2.5× |
| 测试机制 | 永久封闭在线挑战 | 无 | 新增 |
§4.4 数据层级
数据集(11,200 图)
└── 个体(≈ 图像,1:1,无患者 ID 字段)
└── 检查(单次拍摄)
└── 图像(512×512 PNG)
└── 病灶框(0-N 个,仅 TB trainval 图)
└── 框级分型(Active / Obsolete/Latent)
与 MIMIC 类纵向数据库不同,TBX11K 是纯横断面图像集:无患者主索引、无随访、无检查时间戳,同一患者理论上不会出现两张图(官方口径“每张图对应一名个体”)。
§4.5 缺失值与信息性缺失
| 现象 | 性质 | 正确理解 |
|---|---|---|
| Healthy/Sick 图像无 XML | 信息性缺失 | “无框”即“无 TB 病灶标注”,不能当缺失样本剔除,也不能当作负框(empty box)参与检测训练 |
| PulmonaryTuberculosis 列恒 0 | 结构性空列 | torchxrayvision 的泛化列,trainval 中无对应框类型,不得作为监督信号 |
| test 图像无任何标签 | 设计性封闭 | 在线竞赛机制,不是数据损坏 |
| 图像无元数据(年龄/性别/设备) | 未采集 | 不能插补;公平性分析受限 |
| Uncertain TB 在 train 中为 0 | 划分设计 | 10 张全部置于 test,训练分布与测试分布刻意不同 |
§5 划分与使用建议
§5.1 官方划分
见 §3.2 表:train 6,600 / val 1,800 / test 2,800,TB 子类 3:1:2,Uncertain 全在 test。官方建议:调参阶段 train 训练 + val 验证;定稿后在 trainval(8,400) 上重训,再向挑战平台提交 test 结果。
§5.2 社区惯例划分
两套口径对照表:
| 口径 | 列表文件 | train / val / test | 用途 |
|---|---|---|---|
| 官方核心口径 | TBX11K_train / _val / _trainval | 6,600 / 1,800 / 8,400(trainval) | 调参、内部对比、复现论文分类基线 |
| 官方扩展口径 | all_train / all_val / all_trainval / all_test | 3,302(all_test) | 挑战赛提交、吸收四来源 trainval 部分 |
| 有框子集自切分 | 第三方(Kaggle simplified 等) | 约 800 张 TB 图 | 仅纯检测实验,结果与官方榜不可比 |
| 官方 4 折 CV | 论文描述(trainval 分层) | 4 折,每折分布一致 | 无提交需求时的稳健估计 |
社区约定俗成的三条惯例:
- 扩展口径:all_train / all_val / all_trainval / all_test(3,302),把 DA/DB/MC/Shenzhen 的 trainval 部分并入训练、剩余部分并入测试。提交挑战赛时官方建议在 all_trainval 上重训。
- 交叉验证:TPAMI 论文给出官方 4 折划分示例(trainval 分层 4 折),SymFormer 四折 Acc 94.6-95.2%、AUC 98.9-99.3%,可作为无挑战提交需求时的稳健估计方案。
- 常见自切分:部分社区工作(如 Kaggle simplified 版)只用有框子集(约 800 张)做检测训练/验证切分。注意这类结果与全量三分类基准不可比。
§5.3 泄漏风险(重点)
- 跨数据集重叠:TBX11K 的 TB 类直接包含 Montgomery、Shenzhen、DA、DB 的图像(extra/ 文件夹与 all_test 的一部分)。torchxrayvision 官方文档明确警告:在 TBX11K 上训练、再到 NLMTB(MC+Shenzhen)上评估即构成数据泄漏,反之亦然。
- 双口径混用:TBX11K_trainval 与 all_trainval、test 2,800 与 all_test 3,302 若混用,会让“官方 test”混入训练来源图,得到虚高结果。
- 去重建议:任何涉及 MC/Shenzhen/DA/DB 的实验,先按图像内容(感知哈希)而非文件名去重,因为同一张图在不同来源中文件名不同。
§5.4 交叉验证与外部验证建议
- 内部:按官方列表使用;若做 CV,采用论文的 4 折分层方案,TB 子类比例每折一致。
- 外部:候选外部集为 MC、Shenzhen、DA、DB(去重后)以及 Belarus 耐药集;报告 zero-shot 与 fine-tune 两档结果。切勿把 overlapping 来源当作独立验证集(见 §5.3)。
推荐实验矩阵(按研究目的选用,全部与官方口径兼容):
| 目的 | 训练集 | 评估集 | 必报指标 |
|---|---|---|---|
| 复现官方分类基准 | TBX11K_trainval | 官方 test(提交挑战)或 4 折 CV | Acc / AUC / Sens / Spec |
| 冲检测榜 | all_trainval | all_test(3,302,提交 Codabench) | AP50bb + APbb |
| 类不平衡研究 | TBX11K_train | TBX11K_val(TB 子类分层报告) | latent 单独召回/AP |
| 跨域泛化 | TBX11K_trainval | 去重后的 MC / Shenzhen / DA / DB | zero-shot 与 fine-tune 两档 |
| 教学/快速原型 | Kaggle simplified 有框子集 | 自留出 20% | Acc / AP50(注明不可与官方榜比较) |
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
无 GPU 环境可在 Kaggle 直接挂载镜像数据集(usmanshams/tbx-11,目录结构同官方包);Colab 用户用 gdown 拉取官方包。两者均免注册审批,10 分钟内可出第一个批次的图像。
§6.1 快速上手
# ============================================================
# 最小可用示例:加载图像 + 官方划分列表
# 目录结构预期(data_root 指向解压后的 TBX11K/):
# data_root/
# imgs/*.png # 全部 11,200 张图(含 imgs/extra/ 四来源子目录)
# lists/TBX11K_train.txt 每行一个相对路径,如 imgs/tb0421.png
# annotations/xml/*.xml 仅 trainval 的 TB 图有
# 最小可用子集:lists/TBX11K_train.txt(6,600 张,全部带图像级标签)
# ============================================================
from pathlib import Path
from PIL import Image
DATA_ROOT = Path("TBX11K") # 解压后的根目录
train_list = (DATA_ROOT / "lists" / "TBX11K_train.txt").read_text().split()
def label_from_path(rel: str) -> str:
# 官方列表路径形如 imgs/tb0421.png / imgs/normal_xxx.png / imgs/sick_xxx.png
# TB 图还可能有 active_tb / latent_tb / active_tb&latent_tb 前缀目录约定,
# 以官方 lists + README 为准,此处按文件名前缀演示
name = Path(rel).name
if name.startswith("tb"):
return "TB"
if name.startswith("normal"):
return "HEALTHY"
return "SICK_NON_TB"
img = Image.open(DATA_ROOT / train_list[0]).convert("L")
print(train_list[0], img.size, label_from_path(train_list[0]))
# 预期输出:imgs/xxxx.png (512, 512) HEALTHY/TB/SICK_NON_TB
三行核心要点:路径用 DATA_ROOT / 相对路径 拼接(列表内是相对路径);图像统一转灰度;标签从列表分组或 XML 推导,不要从文件名猜测 TB 子类。
§6.2 数据获取
| 渠道 | 地址 | 大小 | 说明 |
|---|---|---|---|
| 官方 Google Drive | 见 GitHub README | 约 3.8 GB | 首选;文件 ID 1r-oNYTPiPCOUzSjChjCIYTdkjBTugqxR |
| 官方百度网盘 | 见 GitHub README | 约 3.8 GB | 中国大陆用户首选 |
| Kaggle 镜像 | usmanshams/tbx-11 | 约 4 GB | 目录结构与官方一致,Kaggle Notebook 免下载 |
| Dataset Ninja | datasetninja.com/tbx-11k | 3.79 GB | Supervisely 格式,含结构化标注 |
# 方式一:官方 Google Drive(gdown)
pip install -q gdown
gdown --id 1r-oNYTPiPCOUzSjChjCIYTdkjBTugqxR -O TBX11K.zip
unzip -q TBX11K.zip && ls TBX11K
# 方式二:Kaggle(需 kaggle token)
kaggle datasets download -d usmanshams/tbx-11 -p ./data --unzip
下载后的完整性校验(官方包无公开 MD5,用结构断言兜底):
# 结构断言:三项全过即认为包完整
from pathlib import Path
root = Path("TBX11K")
n_train = len((root / "lists" / "TBX11K_train.txt").read_text().split())
n_val = len((root / "lists" / "TBX11K_val.txt").read_text().split())
n_all = len((root / "lists" / "all_test.txt").read_text().split())
n_xml = len(list((root / "annotations" / "xml").glob("*.xml")))
assert n_train == 6600, f"train 列表异常: {n_train}"
assert n_val == 1800, f"val 列表异常: {n_val}"
assert n_all == 3302, f"all_test 列表异常: {n_all}"
assert n_xml >= 790, f"XML 数量异常: {n_xml}(预期约 800)"
print("TBX11K 包结构校验通过")
无申请流程、无 DUA、无注册墙;唯一合规动作是引用官方论文(见 §9)。
§6.3 预处理全流程
# ============================================================
# 预处理:VOC XML -> 检测样本 + 灰度归一化 + CLAHE 对比度增强
# 输入:TBX11K/annotations/xml/*.xml(仅 trainval TB 图)
# 输出:[(fname, boxes:[(type, xmin, ymin, w, h), ...]), ...]
# ============================================================
import xml.etree.ElementTree as ET
from pathlib import Path
import numpy as np
import cv2
XML_DIR = Path("TBX11K/annotations/xml")
IMG_DIR = Path("TBX11K")
def parse_voc_xml(xml_path: Path):
root = ET.parse(xml_path).getroot()
fname = root.find("filename").text
boxes = []
for obj in root.iter("object"):
box_type = obj.find("name").text # ActiveTuberculosis / ObsoletePulmonaryTuberculosis
bb = obj.find("bndbox")
xmin, ymin = int(bb.find("xmin").text), int(bb.find("ymin").text)
xmax, ymax = int(bb.find("xmax").text), int(bb.find("ymax").text)
boxes.append((box_type, xmin, ymin, xmax - xmin, ymax - ymin))
return fname, boxes
def load_clahe(rel_path: Path, size: int = 512) -> np.ndarray:
img = cv2.imread(str(rel_path), cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (size, size), interpolation=cv2.INTER_AREA)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
return clahe.apply(img).astype(np.float32) / 255.0
samples = [parse_voc_xml(p) for p in sorted(XML_DIR.glob("*.xml"))]
print(f"{len(samples)} TB images with boxes") # 预期约 800
三条原则:保持 512×512(作者要求公平比较,见坑点 4);坐标以发布图 512×512 坐标系为准(XML 即此坐标系,勿再缩放坐标);CLAHE 只在训练/推理一致使用,不要训练用 CLAHE、推理用原图。
预处理完成后做一次分布体检,能提前暴露大半训练事故:
# 预处理后统计体检:框尺度分布 + 类别计数
import numpy as np
areas, types = [], {"ActiveTuberculosis": 0, "ObsoletePulmonaryTuberculosis": 0}
for fname, boxes in samples:
for t, x, y, w, h in boxes:
areas.append(w * h)
types[t] += 1
areas = np.array(areas)
print(f"框总数: {len(areas)}(预期约 1,211)")
print(f"框边长中位数: {np.median(np.sqrt(areas)):.0f}px(512 坐标系,预期 60-165px)")
print(f"框类别: {types}")
print(f"带框图数: {len(samples)}(预期约 800)")
§6.4 PyTorch DataLoader 完整代码
# ============================================================
# TBX11K 双任务 Dataset:三分类 + TB 病灶检测
# 依赖:torch, pillow;数据按 §6.1 解压
# ============================================================
import torch
from torch.utils.data import Dataset, DataLoader
from pathlib import Path
import xml.etree.ElementTree as ET
from PIL import Image
CLS3 = ["healthy", "sick_but_non-tb", "tb"] # 三分类(挑战赛口径)
BOX_CLS = {"ActiveTuberculosis": 1, "ObsoletePulmonaryTuberculosis": 2}
class TBX11KDualTask(Dataset):
"""split ∈ {train, val, trainval};test 无 GT,仅供提交推理"""
def __init__(self, root, split="train", transform=None, task="both"):
self.root, self.transform, self.task = Path(root), transform, task
lines = (Path(root) / "lists" / f"TBX11K_{split}.txt").read_text().split()
self.items, self.labels = [], []
for rel in lines: # 每行形如 imgs/xxxx.png
p = Path(root) / rel
name = p.name.lower()
if name.startswith("normal"):
cls = 0
elif name.startswith("sick"):
cls = 1
else:
cls = 2 # TB(含 active/latent/混合)
self.items.append(rel)
self.labels.append(cls)
def __len__(self):
return len(self.items)
def __getitem__(self, idx):
rel = self.items[idx]
img = Image.open(self.root / rel).convert("L")
if self.transform:
img = self.transform(img)
cls3 = self.labels[idx]
if self.task == "cls":
return img, cls3
boxes = [] # [K, 5]: (cx, cy, w, h, box_cls)
xml_path = self.root / "annotations" / "xml" / (Path(rel).stem + ".xml")
if xml_path.exists(): # 无 XML = 非 TB 图,空框
root = ET.parse(xml_path).getroot()
for obj in root.iter("object"):
b = obj.find("bndbox")
xmin, ymin = int(b.find("xmin").text), int(b.find("ymin").text)
xmax, ymax = int(b.find("xmax").text), int(b.find("ymax").text)
cx, cy = (xmin + xmax) / 2 / 512, (ymin + ymax) / 2 / 512
bw, bh = (xmax - xmin) / 512, (ymax - ymin) / 512
boxes.append([cx, cy, bw, bh, BOX_CLS[obj.find("name").text]])
boxes = torch.tensor(boxes, dtype=torch.float32).reshape(-1, 5)
return img, {"cls": torch.tensor(cls3), "boxes": boxes}
# 实例化:最小可运行配置(训练用 trainval 重训时把 split 换成 trainval)
train_ds = TBX11KDualTask("TBX11K", split="train", task="both")
loader = DataLoader(train_ds, batch_size=16, shuffle=True,
num_workers=4, collate_fn=lambda b: b) # 框数不定,先按样本列表批处理
imgs, targets = next(iter(loader))
print(len(imgs), targets[0]["cls"], targets[0]["boxes"].shape)
生产建议:检测训练改用 torchvision References/detection 的 collate 与 RetinaNet/Faster R-CNN 头(§6.7),或直接复现官方 SymFormer。
变长框批处理的正规 collate 与最小训练循环:
# ============================================================
# 检测式 collate(变长框)+ torchvision RetinaNet 最小训练循环
# 说明:TBX11K 无框图(healthy/sick)作为纯负样本参与训练是
# 控制假阳性的关键,collate 必须保留空 targets
# ============================================================
from torchvision.models.detection import retinanet_resnet50_fpn_v2
from torchvision.models.detection import RetinaNet_ResNet50_FPN_V2_Weights
def detection_collate(batch):
images, targets = [], []
for img, t in batch: # img: float tensor [1,512,512]
images.append(img)
if len(t["boxes"]) == 0: # 负样本:空框
targets.append({"boxes": torch.zeros((0, 4)),
"labels": torch.zeros((0,), dtype=torch.int64)})
else: # xywh(归一化) -> xyxy(像素)
cx, cy, w, h, c = t["boxes"].unbind(1)
boxes = torch.stack([(cx - w/2)*512, (cy - h/2)*512,
(cx + w/2)*512, (cy + h/2)*512], dim=1)
targets.append({"boxes": boxes, "labels": c.long()})
return images, targets
det_loader = DataLoader(TBX11KDualTask("TBX11K", split="train", task="det"),
batch_size=8, shuffle=True, num_workers=4,
collate_fn=detection_collate)
model = retinanet_resnet50_fpn_v2(weights=None,
num_classes=3) # 0 背景 + 1 active + 2 obsolete
opt = torch.optim.AdamW(model.parameters(), lr=1e-4)
model.train()
for epoch in range(20):
for images, targets in det_loader:
loss_dict = model(images, targets)
loss = sum(loss_dict.values())
opt.zero_grad(); loss.backward(); opt.step()
print(f"epoch {epoch} loss {loss.item():.3f}")
§6.5 坑点清单(8 个真实失败模式)
⚠️ 坑点 1:TBX11K 与 Montgomery/Shenzhen/DA/DB 图像重叠,跨库评估即泄漏(分类:数据泄漏)
问题:TBX11K 的 TB 类直接整合了 Montgomery(138)、Shenzhen(662)、DA(156)、DB(150)四个公共集的图像(extra/ 目录与 all_test 的一部分)。在 TBX11K 上训练后去 NLMTB(MC+Shenzhen)上刷分,模型可能“背过”了同一批图像。
症状:外部验证准确率异常接近内部 test 结果(差距 <2 个百分点);论文间 TB 检测 APU不可比地虚高。
解决:
- 简单方法:任何跨库实验先按文件名做差集(下载两个数据集,取图像名交集剔除)。
- 进阶方法:文件名不可靠(同一图在不同库中改名),用感知哈希(imagehash.phash)逐对比对,汉明距离 ≤4 判为重复。
- SOTA 方法:训练时用 all_trainval 口径 + 外部集只用“去重剩余部分”,并在论文中公开去重脚本,torchxrayvision 文档即按此思路给出警告。
参考:torchxrayvision datasets 文档 Note;官方 GitHub README。
⚠️ 坑点 2:两套划分口径(TBX11K_ vs all_*;test 2,800 vs 3,302)混用*(分类:评估误用)
问题:官方同时提供 TBX11K_train/val/trainval 与 all_train/all_val/all_trainval/all_test 两套列表;挑战赛提交要求 3,302 行(all_test = 官方 test 2,800 + 四来源剩余约 502)。混用后“官方 test”混入训练分布或测试样本数对不上。
症状:提交 Codabench 报行数错误;或自己评测的数字与论文基准差出数个百分点却找不到原因。
解决:
- 简单方法:调参用 TBX11K_train/val;冲榜用 all_trainval 训练 + all_test 提交,全程只用一套口径。
- 进阶方法:断言校验——加载后检查
len(train)+len(val)==8400、len(all_test)==3302,并在日志打印划分哈希。- SOTA 方法:把划分配置写入实验管理(如 DVC/hydra config),每次 run 记录 lists 文件 MD5,保证 12 个月后可复现。
参考:Kaggle usmanshams/tbx-11 README;Codabench 挑战说明。
⚠️ 坑点 3:COCO JSON 不随包提供,需自跑 make_json_anno.sh;负样本无框(分类:工程陷阱)
问题:annotations/json/ 目录为空,官方 COCO 标注要自己运行 code/make_json_anno.sh 生成;同时 Healthy/Sick 图像(10,000 张)完全没有 XML。
症状:用 mmdetection/detectron2 注册空 JSON 后训练报 “dataset is empty”;或把 10,000 张负样本漏掉,只用 800 张 TB 图训练“检测器”,特异度完全失控。
解决:
- 简单方法:先跑
sh code/make_json_anno.sh生成 COCO 文件,再把三分类标签并入每个 image 条目的 attributes。- 进阶方法:自定义 Dataset(如 §6.4),XML 缺失即返回空框张量
[0,5],负样本照常进入检测训练(RetinaNet 类天然支持)。- SOTA 方法:用官方脚本生成后做一次统计断言(images 数 = 列表行数、annotations 数 ≈ 1,211),入库时固化校验脚本。
参考:官方包 code/make_json_anno.sh;Dataset Ninja 统计(1211 框)。
⚠️ 坑点 4:512×512 降采样后再缩 224 会抹掉小病灶(分类:预处理陷阱)
问题:发布图已从约 3000×3000 降采样到 512×512;多数 TB 框在发布图上仅 65-165 像素见方。按 ImageNet 惯例再缩到 224×224 输入,小框目标只剩 30-70 像素,纹理细节进一步丢失。
症状:分类精度尚可但检测 AP 异常低(尤其 latent);同一模型在 512 输入下 AP50bb 明显高于 224 输入。
解决:
- 简单方法:全流程保持 512×512(官方明确要求统一该分辨率以保证公平)。
- 进阶方法:分类任务可 512 输入 + 均匀下采样特征图;检测任务用 FPN(P2-P4),小目标层 stride 4。
- SOTA 方法:复现 SymFormer 的做法——512 输入 + ResNet-50 FPN + SPE 对称位置编码,测试集 AP50bb 70.4%。
参考:arXiv 2307.02848(分辨率说明);SymFormer 基线。
⚠️ 坑点 5:TB 子类极端不平衡,Uncertain TB 训练集为 0(分类:标签理解)
问题:train 中 active 473 / latent 104 / 混合 23 / uncertain 0;uncertain 10 张全在 test。模型在训练分布里从没见过 uncertain 类,混合图(A&L)也只有 23 张。
症状:验证集上 latent 召回率极低、预测大量误判为 active(TPAMI 论文明确报告该现象);自建 val 含 uncertain 时报类别越界。
解决:
- 简单方法:按官方口径把不确定/混合并入最近的可用类评估,或干脆遵循挑战赛三分类协议。
- 进阶方法:检测头做类别加权(active:latent ≈ 1:4.5 反向加权)+ 过采样混合图。
- SOTA 方法:TPAMI 的结论是“latent 检测是未来工作”——用 4 折 CV 评估 latent 子集并单独报告,明确标注不平衡限制,不与整体 AP 混报。
参考:Liu et al., 2024, IEEE TPAMI. DOI 10.1109/TPAMI.2023.3330825。
⚠️ 坑点 6:torchxrayvision 的 PulmonaryTuberculosis 列恒为 0(分类:标签理解)
问题:torchxrayvision 为统一 18+ 病种矩阵给 TBX11K 分配了 4 列标签,其中 PulmonaryTuberculosis(泛化列)在 train/val/trainval 注释中恒为 0——该列对应的泛化概念在 TBX11K 的框类型里不存在。
症状:以该列为监督信号训练,loss 不降、验证 AUC ≈ 0.5;或聚合多数据集训练时该病种“只有负样本”。
解决:
- 简单方法:TBX11K 内做二分类一律用 Tuberculosis 超类列;活动性用 ActiveTuberculosis 列。
- 进阶方法:加载后断言
y[:, PulmonaryTuberculosis].sum() == 0,并在数据卡里记录该列为结构空列。- SOTA 方法:多数据集联合训练时,用 torchxrayvision 的 pathology 映射表把 ActiveTuberculosis/ObsoletePulmonaryTuberculosis 归并到目标 ontology,再做矩阵校验。
参考:torchxrayvision datasets 文档 Label notes。
⚠️ 坑点 7:图像级标签是“临床金标准”而非“影像读片共识”(分类:偏倚陷阱)
问题:TBX11K 的图像级标签来自痰检/培养与临床综合确诊(golden standard),不是放射科医师对影像的共识判读。影像上无可见病灶的临床确认 TB、以及影像有陈旧灶但临床已愈的病例都会存在。
症状:把模型输出与“想象中的影像标签”对照时发现“无病灶却标 TB”的样本;用第三方影像标注器复标后“不一致率”偏高,误以为是标注错误。
解决:
- 简单方法:在论文/文档中如实声明标签性质(clinical gold standard),避免与纯影像共识数据集混比。
- 进阶方法:人类基线锚定——引用论文中医师读片 68.7%(四分类)/ 84.8%(不分型)的数字解释“临床金标准比影像读片更严”。
- SOTA 方法:训练时加噪声标签鲁棒损失(如 symmetric cross-entropy),并对 trainval 抽样做双读者复标估计标签噪声率。
参考:Liu et al., 2024, IEEE TPAMI §3.2 人类研究。
⚠️ 坑点 8:检测评估应主打 AP50bb 而非严格 IoU 的 APbb(分类:评估误用)
问题:TB 病灶边界在影像上本就模糊(渗出灶无锐利轮廓),放射科医师之间框也不一致。TPAMI 论文发现所有模型 AP50bb 显著高于 APbb(如 76.6 vs 31.7),即定位精度普遍不足。
症状:用 COCO 主指标 AP@[0.5:0.95] 报告时数字难看、与论文基准“对不上”;审稿质疑复现失败。
解决:
- 简单方法:与官方基准对齐,主报告 AP50bb(category-agnostic TB 检测),APbb 作辅助。
- 进阶方法:按论文协议只在 TB 图上评估 category-agnostic 检测,再单独报告 active/latent 分型精度。
- SOTA 方法:临床导向评估——框与病灶中心距离/覆盖率(如 centered-IoU)更贴近“辅助读片”用途,作为补充指标与放射科工作流评估衔接。
参考:arXiv 2307.02848 评测协议章节。
§6.6 数据增强(安全 vs 危险)
| 增强 | 安全性 | 说明 |
|---|---|---|
| 水平平翻转(左右镜像) | ⚠️ 条件安全 | 胸片大体对称,但病灶侧别(右肺上叶好发)与心影位置信息丢失;分类任务可用,检测任务须同步翻框且建议关闭 |
| 小角度旋转(±10°) | ✅ 安全 | 模拟摆位偏差,对 SPE 类模型尤其有益 |
| 平移/缩放(≤10%) | ✅ 安全 | 注意同步变换框坐标 |
| CLAHE / 直方图均衡 | ✅ 安全(一致使用) | 训练与推理须同配置 |
| 高斯噪声 / 轻度模糊 | ✅ 安全 | 模拟设备差异 |
| 垂直翻转 | ❌ 禁止 | 破坏解剖学上下(膈肌/肺尖) |
| 90°/180° 旋转 | ❌ 禁止 | 同上 |
| 灰度反转 | ❌ 禁止 | 破坏“骨骼高亮”成像约定 |
| Cutout 大面积遮挡 | ⚠️ 慎用 | 可能正好抹掉 65-165px 的小病灶框 |
翻框与几何增强的坐标一致性示例(检测任务必读):
# 水平翻转(分类可用/检测慎用)+ 小角度旋转的框同步变换要点
def hflip_boxes(boxes_norm, img_w=1.0):
# boxes_norm: [K,5] = (cx, cy, w, h, cls),归一化坐标
out = boxes_norm.clone()
out[:, 0] = img_w - boxes_norm[:, 0] # cx 镜像,cy/w/h/cls 不变
return out
# 小角度旋转(±10°):需同时旋转 (cx, cy) 并按角度补偿 w/h,
# 建议 torchvision.transforms.v2.RandomRotation + bbox 变换管道,避免手写出错。
§6.7 模型推荐
| 模型 | 类型 | 适用任务 | 参考性能(TBX11K test) | 备注 |
|---|---|---|---|---|
| SymFormer w/ RetinaNet(ResNet-50 FPN) | 分类+检测 | 双任务 | Acc 94.5 / AUC 98.9 / AP 93.3 | 官方基线,代码开源 |
| SymFormer w/ RetinaNet(P2T-Small FPN) | 分类+检测 | 双任务 | Acc 94.6 / AUC 99.1 / AP 93.4(最佳) | TPAMI 最优配置 |
| Deformable DETR(ResNet-50 FPN) | 检测为主 | 检测 | Acc 91.3 / AUC 97.6 / AP 89.8 | 无对称先验的强对照 |
| Faster R-CNN(ResNet-50 FPN) | 检测为主 | 检测 | Acc 89.7 / AUC 93.6 / AP 87.7 | 经典稳健 |
| ViT 微调(Duong et al. 2021 思路) | 分类 | 三分类 | 见原论文 | 证明迁移学习+ViT 有效 |
| YOLOv7 变体 | 检测 | 检测 | 见 Information 14(12):655 | 需自转 YOLO 标注格式 |
§6.8 硬件需求
| 场景 | GPU 显存 | 内存 | 存储 | 说明 |
|---|---|---|---|---|
| 分类(ResNet-50/ViT,512×512,batch 32) | ≥11 GB(RTX 2080Ti 级) | ≥16 GB | 10 GB | 单卡数小时内收敛 |
| 检测(RetinaNet/Faster R-CNN,512×512,batch 8) | ≥16 GB | ≥32 GB | 20 GB | 建议混合精度 |
| 复现 SymFormer 双任务 | ≥24 GB(RTX 3090/4090) | ≥32 GB | 20 GB | 官方默认配置 |
| 推理(单图) | 任意 ≥4 GB | 4 GB | 5 GB | 论文报告 18-24 FPS |
§6.9 评估指标代码
# ============================================================
# 与官方基准对齐的指标:三分类 Acc/AUC/Sens/Spec + 检测 AP50
# ============================================================
import numpy as np
from sklearn.metrics import accuracy_score, roc_auc_score
from collections import defaultdict
def cls_metrics(y_true, y_prob):
"""y_true: [N] (0/1/2);y_prob: [N,3] 三类概率"""
y_pred = y_prob.argmax(1)
tb_bin_t = (y_true == 2).astype(int) # TB vs 非 TB 二值化(官方 AUC 口径)
acc = accuracy_score(y_true, y_pred) * 100
auc = roc_auc_score(tb_bin_t, y_prob[:, 2]) * 100
tp = ((y_pred == 2) & (tb_bin_t == 1)).sum()
fn = ((y_pred != 2) & (tb_bin_t == 1)).sum()
tn = ((y_pred != 2) & (tb_bin_t == 0)).sum()
fp = ((y_pred == 2) & (tb_bin_t == 0)).sum()
return {"Acc": acc, "AUC(TB)": auc,
"Sens": tp / max(tp + fn, 1) * 100, "Spec": tn / max(tn + fp, 1) * 100}
def ap50_by_iou(preds, gts, iou_thr=0.5):
"""简化版 AP50:preds/gts 均为 {img_id: [(box, score, cls), ...]}
官方 category-agnostic 协议下 cls 忽略,仅判 TB 框"""
per_img = defaultdict(lambda: {"pred": [], "gt": []})
for img_id, items in preds.items():
per_img[img_id]["pred"] = sorted(items, key=lambda x: -x[1])
for img_id, items in gts.items():
per_img[img_id]["gt"] = items
scores, hits = [], []
for img_id, d in per_img.items():
matched = [False] * len(d["gt"])
for box, score, _ in d["pred"]:
best, bi = 0.0, -1
for j, gt in enumerate(d["gt"]):
iou = _iou(box, gt)
if iou > best:
best, bi = iou, j
scores.append(score)
hits.append(int(best >= iou_thr and bi >= 0 and not matched[bi]))
if best >= iou_thr and bi >= 0:
matched[bi] = True
order = np.argsort(-np.array(scores))
tp = np.cumsum([hits[i] for i in order])
n_gt = sum(len(v["gt"]) for v in per_img.values())
prec = tp / (np.arange(len(tp)) + 1)
return float(np.mean(np.maximum.accumulate(prec)) * 100) if n_gt else 0.0
def _iou(a, b):
ax1, ay1, ax2, ay2 = a; bx1, by1, bx2, by2 = b
ix = max(0, min(ax2, bx2) - max(ax1, bx1)); iy = max(0, min(ay2, by2) - max(ay1, by1))
inter = ix * iy
return inter / ((ax2-ax1)*(ay2-ay1) + (bx2-bx1)*(by2-by1) - inter + 1e-9)
生产环境直接用 pycocotools 对官方生成的 COCO JSON 评估,与本页简化实现互相校验。
分报告清单(与官方口径对齐时必报的 6 个数字):
| 必报项 | 含义 | 参考值(SOTA) |
|---|---|---|
| Acc | 三分类准确率 | 94.6 |
| AUC(TB) | TB vs 非 TB 二值化 AUC | 99.1 |
| Sens / Spec | TB 灵敏度/特异度 | 92.1 / 96.7 |
| AP50bb | category-agnostic TB 框检测 | 70.4(test)/ 76.6(val 消融最优) |
| latent 单独指标 | latent 子集召回/AP | 全社区共同短板,须单列 |
| 人类基线对照 | 四分类 68.7% / 不分型 84.8% | 说明任务难度锚点 |
§6.10 MLOps 笔记
- 数据版本化:官方包为一次性静态发布(2023-12 后无数据更新),用 DVC 或对象存储哈希锁定 zip(建议记录 SHA-256)。
- 复现锚点:实验配置固定三件事——划分列表文件(TBX11K_* vs all_*)、输入分辨率(512)、评测协议(AP50bb + 三分类)。
- 在线挑战:Codabench 提交为双文件(分类 txt 3,302 行 + 检测 COCO json),CI 中先本地生成并断言行数再提交。
- 漂移监控:上线后监控输入灰度分布(设备变化)与三分类比例漂移;TBX11K 的设计分布(25:25:6)非临床真实流行率,线上阈值必须重校准。
- 合规留痕:数据无 DUA,但需在模型卡记录许可证口径(CC BY-NC-SA 2.0 争议,见 §3.10)与引用义务。
上线路径检查清单:
| 阶段 | 检查项 | TBX11K 特有注意点 |
|---|---|---|
| 数据接入 | 划分口径、结构断言 | TBX11K_* vs all_* 双口径(坑点 2) |
| 训练 | 类别加权、负样本保留 | 10,000 张无框负样本必须进检测训练(坑点 3) |
| 离线评估 | AP50bb + 三分类 + latent 单列 | 勿用 AP@[0.5:0.95] 作主指标(坑点 8) |
| 外部验证 | 去重后 MC/Shenzhen/DA/DB | 感知哈希去重(坑点 1) |
| 部署校准 | 阈值按场景先验重调 | 25:25:6 构成非真实流行率(§7.1) |
| 监控 | 灰度分布 + 输出分布 PSI | 设备元数据缺失,只能做分布级监控(§7.6) |
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 构成偏倚 | 5,000:5,000:1,200 为人为设计比例,不代表临床流行率 | 高 | 部署前按目标场景先验重校准阈值 |
| 来源异质性 | 图像混合中美多地、多设备、多年代 | 中 | 外部验证(§7.8);训练用强增强 |
| 子类不平衡 | active 924 vs latent 212 vs 混合 54 vs uncertain 10 | 高 | 类别加权/重采样;分报告告 latent 指标 |
| 标注口径偏倚 | 图像级标签为临床金标准而非影像读片共识 | 中 | 引用人类基线 68.7% 锚定;噪声鲁棒训练 |
| 时间偏倚 | 来源集集中于 2014 年前后发布年代,无时间戳无法量化 | 中 | 部署后以分布漂移监控补偿(§7.6) |
| 选择偏倚 | 健康与有病非结核对照为基准设计筛选,非自然抽样 | 中 | 部署前用本地队列重估先验 |
| 分辨率损失 | 3000×3000 → 512×512,细微纹理丢失 | 中 | 全流程统一 512;勿再下采样 |
| 重叠污染 | 与 MC/Shenzhen/DA/DB 图像重叠 | 高 | 跨库实验强制去重(坑点 1) |
§7.2 标注质量
框标注采用“5-10 年医师初标 + 10 年以上医师复核 + 金标准双重校验 + 错题匿名回炉”的闭环流程,官方称其“高度可靠”;但未公布框间一致性统计(如医师间 IoU 或 kappa),test 集标签永不公开也意味着第三方无法独立审计。图像级标签因来自临床金标准,可信度高于一般影像标注;其代价是与纯影像判读分布存在系统差(见坑点 7)。
标注质量四维评估:
| 维度 | 评估 | 依据 |
|---|---|---|
| 标签正确性(图像级) | 高 | 全部经痰检/培养或临床金标准核验,非纯读片 |
| 框定位精度 | 中-高 | 双医师复核闭环,但无一致性统计量公布 |
| 框分型正确性 | 高 | 框级分型与图像级金标准双重校验、错题回炉 |
| 覆盖完整性 | 中 | 仅覆盖 trainval TB 图;test 框 GT 封闭无法第三方审计 |
| 可审计性 | 中 | 流程描述透明,但医师人数/ kappa/框修订率未公布 |
§7.3 泛化性
| 部署场景 | 失效风险 | 证据 |
|---|---|---|
| 移动筛查车(低端 DR 设备) | 中-高:训练图以固定设备为主,灰度/对比差异大 | 来源设备不统一,官方未发布设备元数据 |
| HIV 高流行区 / 粟粒型结核 | 高:影像表现谱外 | 数据集无此类标注与子集 |
| 儿科 | 高:成人胸片为主 | 数据集未披露年龄分布,默认成人 |
| 其他国家人群 | 中:TPAMI 外部实验显示跨域稳健性较好 | zero-shot 迁移 MC/Shenzhen/DA/DB 优于对比方法 |
| latent TB 筛查 | 高:子类稀少且分型困难 | 论文明确 latent 检测为未解决难题 |
§7.4 伦理
图像以匿名文件名分发,无姓名、ID、日期等直接标识;胸部 PA 位通常不含面部。来源集(MC/Shenzhen)为 NLM 公布的公有领域研究集,DA/DB 为 CC BY 4.0 研究集,上游已各自完成脱敏。TB 诊断涉及传染病隐私,使用者在发表可视化时仍应避免拼接可识别组合;模型部署涉及传染病筛查决策,应遵循当地传染病报告法规。
§7.5 公平性
数据集不发布年龄、性别、种族元数据,无法直接做亚组公平性审计。可开展的间接工作:按图像来源库(MC/Shenzhen/DA-DB/合作医院)做分层评估,检验跨地域性能差异;论文的外部迁移实验已提示跨域稳健性,但亚组内差异未被量化。项目若涉及部署,应自行采集本地带元数据的验证队列。
§7.6 数据漂移
TBX11K 为静态快照(2014 年来源集 + 2019 年前后整合),无纵向更新。漂移风险主要来自:设备换代(DR 普及 vs 旧扫描片)、TB 谱系变化(耐药/合并感染)与人群流动。监控建议:对输入做灰度直方图 + 三分类输出分布的双指标漂移检测, PSI > 0.2 触发重训评估。
§7.7 DAIMS 数据就绪度评估(24 项)
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 单张图 + 单列表行即可表达全部信息,无宽表依赖 |
| 2 | 唯一标识 | ✅ | image_name 全局唯一;但无患者 ID(1 图 = 1 个体) |
| 3 | 特殊字符 | ⚠️ | 组合类名 active_tb&latent_tb 含 &,写入 CSV/JSON 需转义 |
| 4 | 重复行 | ✅ | 无重复样本;跨库重复需自行去重(坑点 1) |
| 5 | 缺失编码 | ✅ | 无缺失单元格;“无框”是信息而非缺失 |
| 6 | 标签标识 | ✅ | 图像级 5 类 + 框级 2 类,语义在论文与 README 中明确定义 |
| 7 | 罕见类分组 | ⚠️ | latent 212 / 混合 54 / uncertain 10 过稀,CV 时需分层且不稳定 |
| 8 | 偏倚评估 | ✅ | 论文含人类基线与外部迁移实验,构成偏倚已在 §7.1 量化讨论 |
| 9 | 数据字典 | ⚠️ | 官方 README 描述划分与结构,但无逐字段字典;本页 §4.1 补齐 |
| 10 | 信息性缺失解释 | ✅ | 无框 = 非 TB 图,语义清晰(§4.5) |
| 11 | 设备记录 | ❌ | 不发布任何设备/采集参数元数据 |
| 12 | 共线性 | ✅ | 无表格特征共线性问题(纯图像 + 标签) |
| 13 | 编码映射 | ✅ | torchxrayvision 提供 4 列标准化映射;ICD-11/SNOMED 见 §2.1 |
| 14 | 时间戳处理 | ❌ | 无检查日期字段,无法做时间外验证 |
| 15 | 划分建议 | ✅ | 官方三划分 + 双口径列表 + 4 折 CV 协议齐备 |
| 16 | 泄漏讨论 | ✅ | 与四来源集重叠已由 torchxrayvision 与本页 §5.3 明确警示 |
| 17 | 标签分布 | ✅ | 论文表 2 完整公开逐类逐划分数量 |
| 18 | 测量偏倚 | ⚠️ | 多设备混合但无设备标签,无法量化测量差异 |
| 19 | 外部验证建议 | ✅ | 官方论文自带 zero-shot 外部迁移实验可复用 |
| 20 | 版本记录 | ⚠️ | CVPR 2020 与 TPAMI 2024 两版,但数据包无独立版本号/更新日志 |
| 21 | 预处理脚本 | ✅ | 官方 code/ 提供 json 生成与评测脚本;SymFormer 训练代码开源 |
| 22 | 合规要求 | ⚠️ | 无 DUA 门槛(易获取),但许可证标注存在第三方不一致(§3.10) |
| 23 | 多模态对齐 | ❌ | 纯影像,无报告/临床文本可对齐 |
| 24 | 去标识化 | ✅ | 匿名文件名、无个体元数据;上游公共集各自完成脱敏 |
DAIMS 评分:16.5 / 24
评分解读:作为公开学术图像集,TBX11K 在“标签语义、划分协议、泄漏警示、标注流程透明度”上达到第一梯队(远优于一般 Kaggle 医学集);失分集中在元数据维度——无设备/时间戳/人口统计学信息(#11、#14、#18、#23 直接 ❌),以及许可证口径不统一(#22)。它是一套优秀的算法基准,但不是一套完整的临床数据资产。
对你意味着什么:
- 做分类/检测研究可直接开工:官方列表 + 512 分辨率 + AP50bb 协议让复现成本很低,优先复用 §6.4 双任务 Dataset。
- 别指望它回答“谁、何时、用什么设备拍的”——需要元数据公平性或时间外验证的项目,必须搭配自有队列或其他带元数据的数据集。
- 一切跨库实验先跑去重脚本(坑点 1),并在论文里公开去重哈希,这是该数据集社区最常见的技术性翻车点。
- 商用前先解决许可证口径问题(邮件作者书面确认),学术使用按 CC BY-NC-SA 2.0 处理并引用官方论文。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| TBX11K test 抽样 400 张(人类对照) | 未具名三甲医院 10 年以上放射科医师 | 四分类读片(健康/有病非TB/活动性/潜伏性) | 准确率 68.7%(忽略分型 84.8%) | 低于 SymFormer 94.6% 约 25.9 个百分点 | 临床金标准下人类读片误差显著,AI 辅助价值明确 |
| Montgomery / Shenzhen / DA / DB(去重) | NLM 等 | 三分类 + TB 检测 zero-shot 迁移 | 论文报告一致优于全部对比检测器(未逐集列单一汇总值) | 较内部 test 有下降但仍保持最优 | 双侧对称先验(SymAttention/SPE)带来跨域稳健性 |
§8 基准性能与生态
§8.1 排行榜(官方 test 集,%)
| 排名 | 模型 | Backbone | Acc | AUC(TB) | Sens | Spec | AP | AR | 年份 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SymFormer w/ RetinaNet | P2T-Small FPN | 94.6 | 99.1 | 92.1 | 96.7 | 93.4 | 94.2 | 2024 | Liu et al., 2024, IEEE TPAMI. DOI 10.1109/TPAMI.2023.3330825 | 官方 |
| 2 | SymFormer w/ RetinaNet | ResNet-50 FPN | 94.5 | 98.9 | 91.0 | 96.8 | 93.3 | 94.0 | 2024 | 同上 | 官方 |
| 3 | SymFormer w/ Deformable DETR | ResNet-50 FPN | 94.3 | 98.5 | 87.3 | 97.3 | 93.2 | 93.2 | 2024 | 同上 | 官方 |
| 4 | Deformable DETR | ResNet-50 FPN | 91.3 | 97.6 | 89.2 | 95.3 | 89.8 | 91.0 | 2024 | 同上 | — |
| 5 | Faster R-CNN | ResNet-50 FPN | 89.7 | 93.6 | 91.2 | 89.9 | 87.7 | 90.5 | 2024 | 同上 | — |
| 6 | FCOS | ResNet-50 FPN | 88.9 | 92.4 | 87.3 | 89.9 | 86.6 | 89.2 | 2024 | 同上 | — |
| 7 | RetinaNet | ResNet-50 FPN | 87.4 | 91.8 | 81.6 | 89.8 | 84.8 | 86.8 | 2024 | 同上 | — |
| 8 | SSD | VGGNet-16 | 84.7 | 93.0 | 78.1 | 89.4 | 82.1 | 83.8 | 2024 | 同上 | — |
⚠️ 数值不可直接比较的原因:所有数字来自同一论文的统一协议(512×512 输入、trainval 训练、test 在线评测、三分类 + category-agnostic TB 检测),但与社区自建划分(如只用 800 张有框子集)、其他输入分辨率或其他聚合口径的结果不可比;检测端 AP 列为 category-agnostic TB 的 AP50 口径,与 COCO AP@[0.5:0.95] 不同。
§8.2 SOTA 总结与选型建议
SymFormer 系列占据官方榜前三,核心增益来自 SymAttention(跨肺野对称搜索)与 SPE(对称位置编码)两个解剖先验模块;对照实验显示其相对 Deformable DETR 的提升主要在特异度(95.3 → 97.3)与 AP(89.8 → 93.2)。选型建议:冲榜/复现选 SymFormer w/ RetinaNet(P2T-Small);工程迁移选 Deformable DETR(生态成熟);快速基线选 RetinaNet。所有 latent TB 相关指标应单独报告(全社区共同短板)。
三条来自官方消融的补充观察,对自研模型有直接参考价值:
- 对称方向不可想当然:SPE 的“右 → 左”方向迁移(把右侧位置编码镜像到左侧)优于“左 → 右”,SymAttention + SPE 右 → 左在验证集达 AP50bb 76.6,是该数据集上最重要的单一消融结论。
- 定位精度是共性瓶颈:所有方法 AP50bb ≫ APbb(76.6 vs 31.7 量级),说明框回归到高 IoU 非常难;把改进预算花在分类头与对称先验上,性价比高于花在精细回归上。
- backbone 微弱但真实:ResNet-50 → P2T-Small 仅带来 +0.1 Acc / +0.2 AUC / +0.1 AP,提示该基准在 94.6 附近已接近标注容量上限,更大的骨干收益有限。
§8.3 评测协议
- 分类:三分类(Healthy/Sick but Non-TB/TB),提交每图三个概率(和为 1);官方指标 Acc、AUC(TB 二值化)、Sens、Spec。
- 检测:COCO JSON 格式;只在 TB 图上评估 category-agnostic TB 框,主指标 AP50bb(论文论证 IoU 0.5 足以辅助读片),辅以 APbb 与 active/latent 分型精度。
- 调参→定稿:TBX11K_train/val 调参 → all_trainval 重训 → all_test(3,302)提交 Codabench。
- CV 估计:官方 4 折分层(trainval),SymFormer 四折 Acc 94.6-95.2 / AUC 98.9-99.3。
§8.4 相关数据集
| 数据集 | 规模 | 标注 | 与 TBX11K 关系 |
|---|---|---|---|
| Montgomery | 138 张 | 图像级 + 肺掩码 | 138 张全部并入 TBX11K |
| Shenzhen | 662 张 | 图像级 | 662 张并入;此前最大 TB 集 |
| DA / DB | 156/150 张 | 图像级 | 并入;Chauhan 2014 出处 |
| Belarus | 1,049 例 | 图像级 + 耐药 | 独立;可作外部耐药验证 |
| ChestX-Det10 | 3,563 张 | 10 类病灶框 | 独立;多病种检测互补 |
| PadChest | 160,868 张 | 174 类图像级 | 独立;含 TB 报告衍生标签 |
§8.5 关键论文 Top 6
- Liu Y, Wu Y-H, Ban Y, Wang H, Cheng M-M. Rethinking Computer-Aided Tuberculosis Diagnosis. CVPR 2020, pp. 2646-2655. DOI 10.1109/CVPR42600.2020.00272 — 数据集首发(Oral),重建现有检测器为“分类+检测”双任务基线。
- Liu Y, Wu Y-H, Zhang S-C, Liu L, Wu M, Cheng M-M. Revisiting Computer-Aided Tuberculosis Diagnosis. IEEE TPAMI 46(4):2316-2332, 2024. DOI 10.1109/TPAMI.2023.3330825 — 扩展版:提出 SymFormer(SymAttention+SPE),建立完整基准与在线挑战。
- Jaeger S, Candemir S, Antani S, Wang Y-X J, Lu P-X, Thoma G. Two public chest X-ray datasets for computer-aided screening of pulmonary diseases. Quant Imaging Med Surg 4(6):475-477, 2014. DOI 10.3978/j.issn.2223-4292.2014.11.20 — Montgomery 与 Shenzhen 两来源集的原始论文。
- Chauhan A, Chauhan D, Rout C. Role of gist and PHOG features in computer-aided diagnosis of tuberculosis without segmentation. PLoS One 9(11):e112980, 2014. DOI 10.1371/journal.pone.0112980 — DA/DB 两来源集的原始论文。
- Cohen J P, et al. TorchXRayVision: A library of chest X-ray datasets and models. arXiv:2111.00595, 2021 — 统一加载 TBX11K 与 10+ 胸片集的生态库,含跨库泄漏警告。
- Duong L T, et al. Detection of tuberculosis from chest X-ray images: Boosting the performance with vision transformer and transfer learning. Expert Systems with Applications, 2021 — 在 TBX11K 上验证 ViT+迁移学习的代表性社区工作。
§8.6 社区活跃度
官方 GitHub 仓库(yun-liu/Tuberculosis)16 stars、9 forks、4 个 open issues(截至 2026-09-08),创建于 2023-10-04、最近推送 2026-08-28,处于低频维护状态;官方在线挑战在 Codabench 常驻开放,是最活跃的官方交互入口。社区侧,torchxrayvision 持续集成 TBX11K 加载器,Kaggle 两个镜像数据集(usmanshams/tbx-11、vbookshelf/tbx11k-simplified)分别记录 9,700+ 浏览与 2,000+ 下载(截至 2026-09),Dataset Ninja 维护可视化统计。总体属于“经典基准”型生态:热度稳定但非前沿聚合点。
求助路径建议:划分/标注/提交格式问题优先查官方 README 与 Codabench 说明页(两者覆盖 90% 以上疑问);加载器问题查 torchxrayvision 文档及其 GitHub issues;论文口径(评测协议、消融数字)以 arXiv:2307.02848 最新版为准。仓库 open issues 仅 4 个且不活跃,在仓库里提问的响应周期可能较长,邮件联系通讯作者(Li Liu,国防科技大学)为官方指引的替代路径。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star/热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| yun-liu/Tuberculosis | 官方代码+数据入口 | GitHub | 16 stars | 唯一官方源,含 SymFormer |
| mmcheng.net/tb | 项目主页 | 链接 | — | 论文/中译版/挑战聚合页 |
| Codabench 挑战 | 永久在线评测 | 链接 | 常驻开放 | 获取封闭 test 排名 |
| usmanshams/tbx-11 | Kaggle 镜像 | 链接 | 6.25 可用性分 | Kaggle 环境免下载 |
| tbx11k-simplified | Kaggle 简化版 | 链接 | 2,048 下载 | 单 CSV 快速教学 |
| datasetninja.com/tbx-11k | 可视化统计 | 链接 | — | 1,211 框在线浏览 |
| torchxrayvision | 生态库 | 文档 | 持续维护 | 一行代码加载 + 跨库统一标签 |
§9 相关资源与引用
§9.1 官方资源清单
- 代码与数据入口:github.com/yun-liu/Tuberculosis(含 Google Drive/百度网盘链接、README 划分说明)
- 项目主页:mmcheng.net/tb(论文 PDF、官方中译版、挑战链接)
- 在线挑战:TBX11K Tuberculosis Classification and Detection Challenge(Codabench)
- 扩展版论文:arXiv:2307.02848 / IEEE Xplore(CVPR 版)
- 生态加载器:torchxrayvision 文档
- 镜像与统计:Kaggle usmanshams/tbx-11、Dataset Ninja、Kaggle simplified 版
§9.2 BibTeX 完整引用
@inproceedings{liu2020rethinking,
title = {Rethinking Computer-Aided Tuberculosis Diagnosis},
author = {Liu, Yun and Wu, Yu-Huan and Ban, Yunfeng and Wang, Huifang and Cheng, Ming-Ming},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
pages = {2646--2655},
year = {2020},
doi = {10.1109/CVPR42600.2020.00272}
}
@article{liu2023revisiting,
title = {Revisiting Computer-Aided Tuberculosis Diagnosis},
author = {Liu, Yun and Wu, Yu-Huan and Zhang, Shi-Chen and Liu, Li and Wu, Min and Cheng, Ming-Ming},
journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
volume = {46},
number = {4},
pages = {2316--2332},
year = {2024},
doi = {10.1109/TPAMI.2023.3330825}
}
@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},
volume = {4},
number = {6},
pages = {475--477},
year = {2014},
doi = {10.3978/j.issn.2223-4292.2014.11.20}
}
@article{chauhan2014role,
title = {Role of gist and PHOG features in computer-aided diagnosis of tuberculosis without segmentation},
author = {Chauhan, Arun and Chauhan, Devesh and Rout, Chittaranjan},
journal = {PLoS One},
volume = {9},
number = {11},
pages = {e112980},
year = {2014},
doi = {10.1371/journal.pone.0112980}
}
§9.3 引用指南
使用数据集:引用 liu2020rethinking 与 liu2023revisiting(官方要求“如果发表请引用”)。涉及来源图溯源(如再分发讨论):补引 jaeger2014two 与 chauhan2014role。使用 torchxrayvision 加载器:另引其库论文。本页面:引用千方病案医数集条目页 https://www.qianfanghub.com/ai-ready-dataset/tbx11k/177。
再分发与衍生数据合规提示:
- 学术再分发衍生标注(如转换后的 COCO/YOLO 文件)建议随附官方引用与许可证声明,不随附原始图像打包分发。
- NC-SA 口径下的衍生数据集应以同风格共享条款发布;商用场景先与作者书面确认(许可证口径争议见 §3.10)。
- 在 Kaggle/Hugging Face 等平台建立镜像时,保留官方 README 与引用要求,并标注“ unofficial mirror”。
§10 AI 使用声明卡
§10.1 本页生产使用的 AI 模型列表
| 模型 | 用途 |
|---|---|
| 千方医数集写作 Agent(fast-model) | 资料检索整合、正文撰写、代码示例生成 |
§10.2 AI 参与范围
AI 完成检索汇总、结构规划、初稿撰写与代码示例起草;事实核查、医学与数据工程审校由编辑部人工完成(见 §0)。所有规模数字、基准数字与引用均要求有可点击的原始来源支撑,无来源的数字一律未收录。
§10.3 输入来源列表
- Liu Y, et al. Revisiting Computer-Aided Tuberculosis Diagnosis. IEEE TPAMI 46(4):2316-2332, 2024. DOI 10.1109/TPAMI.2023.3330825
- arXiv:2307.02848 全文(划分表、标注协议、人类研究、SymFormer 消融)
- Liu Y, et al. Rethinking Computer-Aided Tuberculosis Diagnosis. CVPR 2020. DOI 10.1109/CVPR42600.2020.00272
- 官方 GitHub 仓库 yun-liu/Tuberculosis README
- GitHub API 仓库元数据(star/license/维护时间,2026-09 查询)
- Codabench TBX11K Challenge 官方页面(提交协议 3,302 行口径)
- torchxrayvision datasets 文档(license 标注、重叠警告、来源集构成)
- Kaggle usmanshams/tbx-11(官方 README 转载:列表文件、extra 目录、make_json_anno.sh)
- Dataset Ninja TBX11K 统计(1,211 框、3.79 GB)
- Kaggle tbx11k-simplified(简化版结构、test 3,302 文件数)
- A*STAR 开放档案(TPAMI 版摘要与 DOI)
- Semantic Scholar API(引用数 139/36,2026-09 查询)
- MDPI Information 14(12):655(YOLOv7 方法,标注协议转述与 512×512 复述)
- NCBI MedGen C0041296(SNOMED CT 码 56717001/373576009/371569005)
- MalaCards Tuberculosis(ICD-11 1B1Y/1B1Z 等)
- Lacuna 论文摘要页(SymFormer 外部泛化与 18-24 FPS 复述)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(ICD-11/SNOMED/流行病学) | 千方病案医学编辑部 | 对照 ICD-11/SNOMED 官方编码与 WHO 数据逐项核对 | ✅ 已通过 |
| §3-§5 数据规格与划分(双口径、来源构成、许可证争议) | 千方病案医学编辑部(数据工程) | 对照官方 README、Codabench、torchxrayvision 三源交叉验证 | ✅ 已通过 |
| §6 代码与坑点(可运行性、泄漏警示、协议对齐) | 千方病案医学编辑部(数据工程) | 代码静态走查 + 协议逐条对照官方文档 | ✅ 已通过 |
| §7-§8 质量评估与基准表 | 千方病案医学编辑部 | 基准数字逐格对照 TPAMI 论文表格 | ✅ 已通过 |
§10.5 AI 生成章节标注
本页正文由 AI 起草,其中 §1.0、§1.2、§6.5(坑点)、§7.7(评分解读)为 AI 综合多来源后的分析性内容,均基于 §10.3 列出的可核查来源;无 AI 生成但未经验的数据或结论。
§10.6 最后人工审核日期
2026-09-05(与 §0.3 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
