IU X-Ray:胸片报告生成领域的第一个公开基准

7,470 张胸片 / 3,955 份报告 / 千余个 MeSH 标记

来源 https://openi.nlm.nih.gov/imgs/collections/NLMCXR_reports.tgz发布时间: 2026-10-26最后更新: 2026-10-26 阅读 12
IU X-Ray:胸片报告生成领域的第一个公开基准

信息速览

数据集名称IU X-Ray:胸片报告生成领域的第一个公开基准
数据类型原始影像,配对报告,人工标注,元数据
规模3,955 例检查 / 七千余张影像
接入方式https://openi.nlm.nih.gov/imgs/collections/NLMCXR_reports.tgz
AI 就绪度

IU X-Ray 是放射报告生成这个研究方向的起点。2015 年 NLM 与印第安纳大学把它放出来的时候,公开可用的「影像 + 自由文本报告」配对数据几乎不存在。十年过去,MIMIC-CXR 用 37 万张片子把这个领域推到了另一个量级,但 IU X-Ray 没有被取代——它变成了「小而干净、跑得快、可比性强」的那一档基准。

规模上,近四千例检查、七千余张胸片、每例一份四段式报告、千余个 MeSH/RadLex 标记。报告包解压后只有 40 MB 左右,影像包 1.27 GB,一个人一台笔记本就能全量跑完。

一屏速览见下表。

维度 内容
全称 Indiana University Chest X-ray Collection(IU X-Ray / OpenI Chest X-ray)
发布方 NLM Lister Hill 中心 + 印第安纳大学医学院
首发 2015-07-01(JAMIA 在线),2016-03 正式刊出
托管 NLM Open-i 服务(openi.nlm.nih.gov)
检查数 近四千(XML 文件数)
影像数 七千余
唯一 MeSH 标记 1,719
报告结构 COMPARISON / INDICATION / FINDINGS / IMPRESSION
影像格式 PNG(原始 DICOM 未公开)
报告格式 XML
报告包体积 约 1.06 MB
影像包体积 1,360,814,128 字节(约 1.27 GB)
许可 CC BY-NC-ND 4.0
是否需要申请 否,直链下载
论文 Demner-Fushman D 等,JAMIA 2016;23(2):304-310

§1 它要解决什么问题

1.1 2015 年之前的空白

放射报告生成这件事,本质是「看图写字」。要训一个模型,你需要成千上万个「同一张片子 + 放射科医生为它写的报告」的配对。这种数据在医院内部堆积如山,但没有一家愿意公开——去标识化的成本高,法律风险大,而且没人觉得这算学术产出。

2015 年之前,想做这个方向的研究者只能自己去医院谈合作,或者用小得多的私有数据集。结果是这个方向几乎没有可比性:每个人的数据不同,指标没法对齐。

IU X-Ray 的意义不在于它大,而在于它是第一个公开的、可引用的、有固定评测口径的配对集。它让「报告生成」从一个没法比较的方向变成一个能排榜的方向。

1.2 三条常见误解

误以为它是「胸片疾病分类数据集」。 它有 MeSH 标记,但那些标记是「关键发现」的描述,粒度极不统一,不是为分类任务设计的标签集。要做 14 类疾病分类,用 ChestX-ray14 或 CheXpert 更合适。

误以为它和 MIMIC-CXR 是替代关系。 两者规模差两个数量级(七千余对 37 万),但用途不同。IU X-Ray 适合快速迭代与消融实验,MIMIC-CXR 适合最终验证。很多论文的做法是「IU X-Ray 上刷结构,MIMIC-CXR 上验证规模」。

误以为影像质量够做病灶测量。 公开的是 PNG,经过缩放,原始 DICOM 的像素间距、窗宽窗位都丢了。要做结节测量、要做物理尺寸相关的分析,这份数据不够。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
影像-报告配对 近四千对 够做小样本实验
报告分段结构 四段齐全(含空段) 够
关键发现标签 千余个 MeSH/RadLex 标记 够但要归并
正侧位配对 八成例双视图 够
原始 DICOM 不给,只有 PNG 不够
检查日期 XML 里是发布日,非检查日 不够
患者年龄性别 无 不够
随访序列 无(每例只一次) 不够
病灶级边界框 无 不够
商用授权 无(NC) 不够
快速跑通 1.27 GB,笔记本可跑 够,这是它最大的优点

1.3b 你的处境与它能帮到的事

把上面那张「需求 / 给不给」的表倒过来看,就是一张决策卡:左边是你此刻的处境,右边是这份数据能替你解决什么。

你的处境 它能帮你什么 下一步该做什么
刚接手一个报告生成项目,不知道从哪起步 一份能在一晚上跑完的完整闭环:图、报告、评测口径都齐 先下报告包做文本基线,再决定要不要碰图像
论文被审稿人问「为什么不用公开数据」 一个可引用的公开基准,有 JAMIA 正式论文可引 在方法节写清预处理与切分,别只写数据集名
想验证一个新解码策略是否真的有效 小到可以在单卡上跑十几次消融的规模 固定切分与指标实现,只改解码部分
需要中文场景的胸片图文对 帮不上,这份是英文报告 去找中文侧的配对集,别拿它硬凑
要做病灶定位或分割 帮不上,只有检查级文字标记,没有框和掩膜 改用带像素级标注的数据集
想拿它训一个能上线的产品 许可不允许,NC + ND 双重限制 只做内部验证,商用另找授权数据
想做跨语种图文对齐 可以作为英文侧的锚点,但只有一侧 需要另配一份非英语的胸片报告集
只想要一堆胸片做分类 标签粒度不适合分类 用 CheXpert 或 ChestX-ray14 的现成标签

左列写的是处境而不是特性,这一点很关键:同一份数据对不同处境的答案完全不同。同样一句「有 MeSH 标记」,对做检索的人是资源,对做 14 类分类的人是障碍。

1.4 一句话判断

你要做「报告生成的结构设计、解码策略、图文对齐消融」——它是性价比最高的一档,一晚上能跑完一轮。你要做「大规模预训练」或「病灶级定位」——去找 MIMIC-CXR 和带框的数据集。

1.5 不适合谁:四条边界

要商用的,许可不允许。 CC BY-NC-ND 4.0 三重限制,且 XML 里每条记录自己就写了 licenseURL,说明这不是一份笼统的站点声明,而是逐条绑定的。用这份数据训出来的模型能否商用,属于灰色地带,需要单独判断。

要按时间或按患者分层的,字段不支持。 XML 里没有检查日期、没有年龄、没有性别。全部记录的 articleDate 都是 2013-08-01。做「随时间变化的诊断分布」这类分析,这份数据做不了。

要做病灶检测的,没有框也没有掩膜。 MeSH 标记是检查级的(「这例有心脏增大」),不是像素级的。要找结节在哪,得用别处。

要非胸片影像的,只有胸片。 全是胸部 X 线,正位与侧位。没有 CT、没有 MRI、没有其他部位。

§2 数据构成:从三千九百余个 XML 说起

2.1 两个包,两种东西

下载入口只有两个直链:

包 URL 大小 内容
报告包 NLMCXR_reports.tgz 1,112,632 字节 三千九百余个 XML,解压后约 40 MB
影像包 NLMCXR_png.tgz 1,360,814,128 字节 七千余张 PNG

两个包的最后修改时间不同:报告包是 2017-06-06,影像包是 2016-09-06。也就是说报告侧在首次发布后还改过一次(大概率是补充或修正标记),影像侧自 2016 年起没动。

这一点值得注意:如果你在 2016 年下过影像包、2017 年之后又下了报告包,两者是配套的;反过来如果只下过 2016 年的报告,可能缺后来补的内容。

2.2 一条 XML 的完整解剖

以 1.xml(uId = CXR1)为例,它的结构是这样:

层级 字段 值
根 eCitation 整个检查容器
元信息 uId/@id CXR1
pmcId/@id 1
docSource CXR
licenseType open-access
licenseURL http://creativecommons.org/licenses/by-nc-nd/4.0/
ccLicense byncnd
articleDate 2013-08-01
articleType XR
publisher Indiana University
specialty pulmonary diseases
subset CXR
报告 AbstractText[@Label="COMPARISON"] None.
AbstractText[@Label="INDICATION"] Positive TB test
AbstractText[@Label="FINDINGS"] The cardiac silhouette and mediastinum size are within normal limits. There is no pulmonary edema. There is no focal consolidation. There are no XXXX of a pleural effusion. There is no evidence of pneumothorax.
AbstractText[@Label="IMPRESSION"] Normal chest x-XXXX.
标记 MeSH/major normal
影像 parentImage/@id CXR1_1_IM-0001-3001(F1)、CXR1_1_IM-0001-4001(F2)
parentImage/caption Xray Chest PA and Lateral(两条相同)
parentImage/panel/url /hadoop/storage/radiology/extract/CXR1_1_IM-0001-3001.jpg
parentImage/panel/imgModality 7

有几处细节是文档里没写的,得自己读 XML 才知道:

XXXX 是去标识化占位符。 上面 FINDINGS 里「There are no XXXX of a pleural effusion」,原文大概是「no evidence of」,被工具误判为可能的人名或日期而替换掉了。IMPRESSION 里的「chest x-XXXX」同理,原文是「chest x-ray」。这类过度替换在文本里很常见,做生成任务时会在这些位置产生不自然的输出。

url 字段是内部路径,不是可下载地址。 /hadoop/storage/radiology/extract/... 是印第安纳大学的内部存储路径。要拿图,得自己按 parentImage/@id 去影像包里找同名文件。

caption 不是报告的一部分。 它是图像的图注(「Xray Chest PA and Lateral」),描述的是视图,不是所见。做图文配对时不要把它当描述性文本用。

imgModality 全是 7。 七千余张全部是同一个值,说明这是 DICOM 的 modality code 而非有意义的分类字段。

2.3 规模数字的三个版本

同一份数据有三个不同的数字,经常被混用:

数字 出处 含义
3,996 份报告 / 8,121 张影像 原始论文(JAMIA 2016) 采集阶段从院方系统取出的量
近四千份报告 / 七千余张影像 当前公开包 去标识化与筛选后的实际发布量
3,337 份 社区常用的「过滤版」 剔除 FINDINGS 段过短后的可用量

三个都对,但指的不是一回事。写论文时如果引「IU X-Ray 有 3,955 份报告」而实际用的是 3,337 份过滤版,会被审稿人抓。

2.4 每例检查的影像数分布

逐条统计 parentImage 节点数:

影像数 检查数 占比
0 104 2.6%
1 446 11.3%
2 3,208 81.1%
3 181 4.6%
4 15 0.4%
5 1 0.03%

两个关键事实:

104 例检查完全没有影像。 这些记录只有报告,没有图。做图文配对时如果不做过滤,会在这 104 条上崩掉。

81% 是标准的双视图。 正位 + 侧位,这是胸片检查的标准配置。剩下的单视图(11.3%)通常是便携机拍的床旁片,只有前后位。三视图以上(5%)是加了斜位或其他特殊体位。

§3 报告的四段结构

3.1 四个字段各管什么

每份报告严格分四段,这是放射科报告的标准结构:

段名 作用 典型长度 示例
COMPARISON 与既往检查对比 一句话 None. / PA and lateral chest x-XXXX dated XXXX.
INDICATION 检查原因 一句话 Positive TB test / Cough
FINDINGS 所见,主体段 数句 描述心影、纵隔、肺野、胸膜、骨骼
IMPRESSION 结论 一至两句 Normal chest x-XXXX.

这个结构对建模很友好:FINDINGS 是长文本生成任务,IMPRESSION 是摘要任务,INDICATION 是条件输入。很多论文直接把它拆成「以 INDICATION 为条件生成 FINDINGS」。

3.2 字段的完整度

逐条统计四段的填充情况:

段 非空 空 备注
COMPARISON 全部 0 但其中 1,402 条内容就是 None.,等于「无对比」
INDICATION 3,865 90 90 条完全空
FINDINGS 全部 0 但 531 条少于 10 个字符,实质为空
IMPRESSION 3,921 34 34 条完全空

FINDINGS 段看起来 100% 非空,但因为去标识化把整段内容替换掉的情况不少,实际可用率比这个数字低。按「至少 10 个字符」这条工业界常用的过滤线,会剩下 3,424 条;社区里更常见的做法是按「至少 10 个词」过滤,剩下的数量又少一些。

3.3 FINDINGS 的长度分布

指标 值
平均词数 27.4
中位词数 27
最短 0
最长 169
少于 10 字符 531 条

27 个词的平均长度是这份数据最容易低估的特性。放射科报告写得极简:一句描述心影、一句描述肺野、一句描述胸膜,就完了。这意味着:

第一,报告生成任务的输出空间很小。相比 MIMIC-CXR 那种动辄上百词的报告,这里的模型学不到复杂的行文结构。

第二,评测指标(BLEU、ROUGE、CIDEr)在短文本上波动很大。同一个模型换一个随机种子,BLEU-4 可能差两个点。

第三,也是最容易踩的坑:模板化输出能拿到不错的分数。因为报告高度程式化,「The cardiac silhouette and mediastinum size are within normal limits」这类句子反复出现,模型只要学会几句万能句就能刷到不低的 BLEU。这不代表它学会了看图。

3.4 一个真实的完整样本

CXR1 的报告值得逐句读一遍,它展示了这份数据的典型样子:

COMPARISON: None.
INDICATION: Positive TB test
FINDINGS: The cardiac silhouette and mediastinum size are within normal limits. There is no pulmonary edema. There is no focal consolidation. There are no XXXX of a pleural effusion. There is no evidence of pneumothorax.
IMPRESSION: Normal chest x-XXXX.

四句话的 FINDINGS,覆盖心影、肺水肿、实变、胸腔积液、气胸五个阴性发现。没有阳性所见,没有具体测量值,没有建议随访。IMPRESSION 一句话结论「正常」。

这就是 §4.4 的案例要反复引用的那个样本——它同时具备「结构完整」「内容典型」「去标识化痕迹明显」三个特点,是理解这份数据的最佳切口。

§4 标注体系:一千七百余个 MeSH 标记

4.1 标记是怎么来的

原始论文写得很清楚:关键发现由编码人员手工标注,术语取自 MeSH(Medical Subject Headings)与 RadLex(RSNA 的放射学词汇)。另用 MTI(Medical Text Indexer)从报告文本自动生成一份标注,作为对照,验证手工标注是否提升了检索效果。

论文的结论是:手工编码显著提升了检索的相关性。这句话背后的意思是,纯自动标注(MTI)不够准,人工这一步不能省。

4.2 标记的分布

逐条统计 MeSH/major 节点:

排名 标记 出现次数
1 normal 一千三百九十一
2 Lung/hypoinflation 245
3 Lung/hyperdistention 164
4 Cardiomegaly 157
5 Cardiomegaly/mild 135
6 Aorta/tortuous 126
7 Spine/degenerative 115
8 Thoracic Vertebrae/degenerative 114
9 Granulomatous Disease 98
10 Atherosclerosis/aorta 97
11 No Indexing 95
12 Thoracic Vertebrae/degenerative/mild 93
13 Technical Quality of Image Unsatisfactory 86
14 Calcinosis/aorta 69
15 Markings/bronchovascular 68

这张表能读出四件事:

「正常」占三分之一。 一千三百九十一条标了 normal,占全部的 35.2%。这份数据的阴性样本比例很高,做分类任务时要注意类别不平衡。

同一发现的粒度不统一。 Cardiomegaly(157)与 Cardiomegaly/mild(135)分列两个标记,加起来 292 例。Aorta/tortuous(126)、Atherosclerosis/aorta(97)、Calcinosis/aorta(69)三个都是主动脉相关,但用了三套不同术语。Thoracic Vertebrae/degenerative(114)与 Spine/degenerative(115)几乎是同义。

多标记的检查占四成多。 一千六百九十例有不止一个 MeSH 标记,占 42.7%。一例检查平均标 1.6 个。

有 95 条标了 No Indexing。 这些是编码人员认为无需索引的记录,做监督学习时应当排除。

4.3 标记的归并难题

要做分类任务,第一步是把 千余个标记归并成可用的类别。这不是简单的字符串处理,因为同一概念在不同术语体系下有不同的写法。

一个可行的归并思路:

归并目标 原始标记 合并后数量
心脏增大 Cardiomegaly、Cardiomegaly/mild、Heart/enlarged 约 300
主动脉异常 Aorta/tortuous、Aorta, Thoracic/tortuous、Atherosclerosis/aorta、Calcinosis/aorta 约 290
肺容积不足 Lung/hypoinflation、Atelectasis、Pulmonary Atelectasis/* 约 400
退行性变 Spine/degenerative、Thoracic Vertebrae/degenerative、Thoracic Vertebrae/degenerative/mild 约 320
正常 normal 1,391

归并的依据是报告文本里的实际表述,不是术语表的层级关系。这一点很重要:MeSH 的树状结构在这份数据里被用得很随意,Cardiomegaly/mild 在 MeSH 里并不是 Cardiomegaly 的子节点,是编码人员自己加的修饰。

4.4 案例:CXR1 为什么是理解这份数据的最佳切口

回到 §3.4 那条记录。它是一个「教科书式的阴性样本」,值得拆开看六层。

第一层,标记与文本一致。 MeSH 标的是 normal,IMPRESSION 写的是「Normal chest x-XXXX」,FINDINGS 五句话全是阴性。三者一致,这是一条干净的正样本——如果「正常」算正类的话。

第二层,去标识化痕迹可见。 XXXX 出现两次,一次在「no XXXX of a pleural effusion」(原文应是 evidence),一次在「chest x-XXXX」(原文应是 ray)。这两处都是过度替换,说明去标识化工具对人名、日期的识别很激进。

第三层,视图与影像数匹配。 两条 parentImage 分别是 F1 与 F2,caption 都是「Xray Chest PA and Lateral」。也就是说这一例是标准的正位 + 侧位双视图,与 81% 的双视图比例一致。

第四层,INDICATION 透露了临床情境。 「Positive TB test」——结核筛查阳性,所以拍了这张片子。这是一个非常具体的临床场景,与「正常」的结论形成对照:筛查阳性但影像正常。这种「检查原因与结论不一致」的样本在数据里不少,做生成模型时如果只用 FINDINGS 训,会遗漏 INDICATION 这个重要的条件信息。

第五层,报告极短。 FINDINGS 五句话 30 多个词,IMPRESSION 三个词。这是这份数据的常态(中位数 27 词),不是特例。

第六层,XML 元信息完整。 licenseType、licenseURL、ccLicense、publisher、specialty、subset 六个字段全有。这是逐条绑定的许可声明,意味着即使你把某一个 XML 单独拿出来分发,许可信息也是跟着走的。这一点比很多数据集只在首页写一句「CC BY」要严谨。

§3.4、§4.2、§5.3、§6.2 里反复引用的都是这一条。

§5 任务与基准

5.1 三类主流任务

任务 输入 输出 典型评测
报告生成 一张或两张影像 FINDINGS 或整份报告 BLEU-1/4、ROUGE-L、CIDEr、METEOR
图文检索 报告文本 排序后的影像列表 Recall@K、mAP
关键发现分类 影像 MeSH 标记(多标签) AUC、F1(按归并后的类别)

报告生成是绝对主流。绝大多数引用 IU X-Ray 的论文做的是这件事。

5.2 官方切分与社区切分

原始论文没有给官方切分。社区里最常用的是「7:1:2」按检查随机切分,但这个做法有隐患:同一患者的正位与侧位会分到不同集合,导致信息泄漏。

更严谨的做法是患者级切分,但 XML 里没有患者标识,做不了。退而求其次的做法是「按检查切分,但同一检查的所有视图必须在同一集合内」——这是可以做到的,因为一例检查的所有 parentImage 都在同一个 XML 里。

一个常见的可用切分(过滤 FINDINGS 后剩三成多):

集合 检查数 占比
训练 2,335 70.0%
验证 333 10.0%
测试 669 20.0%

这个切分是社区里某一版预处理脚本的产物(随机种子 42),不是官方标准。你自己切分完全可以,只要在论文里写清规则。

5.3 基准数字该怎么读

公开文献里 IU X-Ray 上的 BLEU-4 大致落在 0.10–0.16 区间,CIDEr 在 0.3–0.9 区间。这个跨度很大,原因是三件事叠加:

预处理不同。 有的论文只生成 FINDINGS,有的生成 FINDINGS + IMPRESSION,有的把两次拼起来。输出空间不同,指标不可比。

切分不同。 随机切分与按患者切分的结果差几个点。更麻烦的是有些论文重复用了测试集调参。

评测脚本不同。 BLEU 的实现差异(是否平滑、n-gram 权重)能带来 1–2 个点的差别。

一个实用建议:看论文时先找它的预处理与切分说明,再看指标。如果这两项没写清,指标不可信。

5.4 为什么小数据还有价值

一个问题值得回答:MIMIC-CXR 有 37 万张片子,为什么还要用七千余张的 IU X-Ray?

三个理由:

跑得快。 全量 1.27 GB,一张消费级显卡几小时能跑完一轮。做消融实验(换个解码器、换个注意力机制)时,这个速度决定了你一天能试几个想法。

可比性强。 十年积累下来的论文都用它,你的数字能直接和它们对。用 MIMIC-CXR 的话,得先复现别人的预处理才能比。

过拟合风险可见。 数据小,模型好坏的分化更明显。在 MIMIC-CXR 上,两个模型可能都到 0.15 BLEU 而看不出差别;在 IU X-Ray 上,一个 0.12 一个 0.16,差别一眼可见。

反过来,它的局限也明确:不能用来证明「模型有临床价值」。近四千例、单一机构、单一部位,任何在这个上面刷出来的数字都不能直接外推。

§6 AI 就绪指南

6.1 十分钟跑通

mkdir -p iuxray && cd iuxray
curl -O https://openi.nlm.nih.gov/imgs/collections/NLMCXR_reports.tgz
curl -O https://openi.nlm.nih.gov/imgs/collections/NLMCXR_png.tgz
tar xzf NLMCXR_reports.tgz      # 得到 ecgen-radiology/1.xml … 3955.xml
tar xzf NLMCXR_png.tgz          # 得到影像目录
ls ecgen-radiology | wc -l      # 3955

报告包只有 1 MB,秒下。影像包 1.27 GB,看带宽。

6.2 解析 XML 的最小脚本

import os, xml.etree.ElementTree as ET

ROOT = "ecgen-radiology"

def parse(path):
    r = ET.parse(path).getroot()
    uid = r.find("uId").get("id")
    texts = {a.get("Label"): (a.text or "").strip()
             for a in r.findall(".//AbstractText")}
    mesh = [m.text for m in r.findall(".//MeSH/major") if m.text]
    imgs = [{"id": p.get("id"),
             "fig": (p.find("figureId").text if p.find("figureId") is not None else None),
             "caption": (p.find("caption").text or "").strip()
                        if p.find("caption") is not None else ""}
            for p in r.findall(".//parentImage")]
    lic = r.findtext("licenseURL")
    return {"uid": uid, "texts": texts, "mesh": mesh, "images": imgs, "license": lic}

recs = [parse(os.path.join(ROOT, f)) for f in os.listdir(ROOT) if f.endswith(".xml")]
print(len(recs))                       # 3955
print(sum(len(r["images"]) for r in recs))   # 7470

跑完这两个数就对上了:报告数与影像数。如果对不上,说明包下得不完整。

6.3 过滤:三个必须做的动作

def usable(r, min_words=10):
    f = r["texts"].get("FINDINGS", "")
    if len(f.split()) < min_words:
        return False                 # 过滤 FINDINGS 过短
    if not r["images"]:
        return False                 # 过滤无影像
    if "No Indexing" in r["mesh"]:
        return False                 # 过滤未索引
    return True

clean = [r for r in recs if usable(r)]
print(len(clean))

按 min_words=10 过滤,会掉到三千三百条左右。这三个过滤条件在几乎所有下游论文里都被用过,但很少有人写清具体阈值。

6.4 影像路径的对应关系

影像包里没有目录结构映射表,只能靠 parentImage/@id 拼:

def image_path(img_id):
    # img_id 形如 CXR1_1_IM-0001-3001
    return os.path.join("NLMCXR_png", img_id + ".png")

有些发布的解压版本会带一层子目录(按检查分文件夹),下载后先 find . -name "CXR1_1_*.png" 确认实际路径。

6.5 坑点 1:把 articleDate 当检查日期

全部记录的 articleDate 都是 2013-08-01。这是批量发布时打的标记。

如果你要按时间做分析(比如「诊断分布是否随时间变化」),这份数据做不到。唯一的时间线索是 COMPARISON 段里偶尔出现的「dated XXXX」,但那些日期本身也被去标识化替换了。

6.6 坑点 2:把 caption 当报告

caption 字段写的是「Xray Chest PA and Lateral」这种视图描述,不是放射科所见。

有人拿 caption 当「简短描述」做图文对齐训练,结果模型学会了「看片子判断这是 PA 还是 Lateral」——这个任务太简单,学到的表征没用。

6.7 坑点 3:忽略 XXXX 占位符的影响

XXXX 是被去标识化工具替换掉的内容,原文可能是人名、日期、也可能只是被误判的普通词(比如「evidence」被当成名字)。

统计一下占位符的密度会发现问题不小:FINDINGS 段里带 XXXX 的比例相当高。这意味着模型在这些位置学到的是「输出 XXXX」,而不是「输出正确的词」。

处理方式有两种:一是把 XXXX 当特殊 token 保留(模型学会在合适位置输出它);二是按上下文还原(有风险,可能还原错)。第一种更稳妥。

6.8 坑点 4:用随机切分导致泄漏

按检查随机切分时,同一患者的正位与侧位有概率分到训练集和测试集两侧。虽然 XML 里没有患者 ID,但同一患者的多次检查在文本上会有相似表述(比如 COMPARISON 段提到「与某日片子对比」)。

更隐蔽的泄漏是模板重复。同一台机器、同一位技师拍的片,报告措辞高度相似。随机构分时,测试集里会出现训练集见过的句式模板。

6.9 坑点 5:BLEU 高就是模型好

前面提过:27 个词的平均长度让模板化输出能拿高分。

一个具体的检验方法:把你的模型输出与「训练集里出现频率最高的那句 FINDINGS」做对比。如果两者 BLEU 只差 2–3 个点,说明模型没学到多少东西——它只是学会了这句万能话。

更靠谱的评测是加上临床相关性指标(比如 CheXpert labeler 抽出的发现是否一致),或者做人工评分。

6.10 坑点 6:拿论文的采集数字当实际数量

论文里的采集数字,是采集阶段的计数。当前公开包要少一些——差在去标识化剔除上。

差的那部分去哪了?论文没细说,但从逻辑上看是去标识化阶段剔除的(比如影像里检出 PHI 的、报告无法脱敏的)。论文提到「Images for two of 3996 patients (0.05%) showed protected health information」——这两个患者的影像应当是被剔除了,但 8,121 到 7,470 差 651 张,远不止两例,说明还有别的筛选。

6.11 坑点 7:忽略许可的逐条绑定

XML 里每条记录都有 licenseURL 字段。这不是装饰——它意味着许可声明跟着每条记录走。

如果你把某几条记录的影像与报告打包再分发,许可要求(署名、非商业、禁止演绎)依然适用。把影像重采样、裁剪、加标注之后再发布,可能构成「演绎」,需要谨慎。

§7 质量评估:DAIMS 框架

7.0 阅读本节前的一个前置校正

多数人看「数据集质量」,首先想到的是「标注准不准」。对 IU X-Ray 来说,这个默认框架会产生误判:它的标注(MeSH 标记)本身就不是为机器学习设计的,用的是图书馆学的受控词表,粒度与一致性都按检索需求而非分类需求来组织。

真正要评的是三件事:去标识化的彻底程度、报告的可用比例、以及元数据的完整度。这三项决定了你能从这个库里拿到多少可用样本,而不是「标签准不准」。

7.1 五维评分

维度 评分 依据
Data Collection(采集) ★★★☆☆ 单机构、单一部位、无时间跨度、无随访;优点是多院区、真实临床文本;扣分项:无检查日期、无人口学字段
Annotation(标注) ★★★☆☆ 双人手工 MeSH/RadLex 编码 + MTI 自动对照,是当时的高标准;扣分项:粒度不统一、1,719 个标记无法直接当标签用、95 条 No Indexing
Intrinsic Quality(内在质量) ★★★☆☆ 文本去标识化达 100% 精确率(论文自述),影像有 2 例漏网已修正;扣分项:PNG 丢失采集参数、531 条 FINDINGS 实质为空、104 条无影像
Metadata(元数据) ★★☆☆☆ 逐条许可、发布方、专业领域齐全;扣分项:无年龄、性别、检查日期、设备、体位(除 caption)等关键字段
Standardization(标准化) ★★★★☆ XML 结构规范、四段式报告是行业标准、MeSH/RadLex 是权威术语表、DICOM 去标识化遵循 Supplement 142;扣分项:PNG 格式使标准化成果部分失效

7.2 为什么 Metadata 只给两星

这份数据最刺眼的问题不是标注质量,是元数据的贫瘠。

XML 里有什么:uId、pmcId、docSource、licenseType/URL、articleDate、articleType、publisher、title、note、specialty、subset、作者列表、MeSH、parentImage。

XML 里没有什么:患者年龄、性别、种族、检查日期、设备厂商、设备型号、kVp、mAs、体位(除 caption 里的自由文本)、临床科室、是否住院、既往检查的链接。

这个缺口决定了三件事做不了:按人口学分层、按设备做域偏移研究、按时间做趋势分析。

对照 2017 年之后的同类数据集(比如 MIMIC-CXR 给了 view position、patient ID、study date),这份 2015 年的数据集在元数据设计上明显落后于时代。这不能怪它——2015 年没人预料到这些字段会成为标配。

7.3 已知的、可枚举的偏差

偏差 来源 方向
单机构偏倚 仅印第安纳大学健康系统 设备、协议、书写习惯同质化
门诊偏倚 论文称多为门诊检查 重症与急症比例低
结核筛查富集 INDICATION 里 TB 相关比例高 与普通人群分布不同
阴性偏多 normal 占 35% 阳性发现样本相对少
模板化书写 报告高度程式化 语言多样性低
去标识化过度 XXXX 大量替换 部分语义丢失
编码粒度漂移 同一编者在不同时期用不同粒度 标签一致性不稳定
无随访 每例一次检查 纵向变化不可研究

7.4 它为何能持续:一个「小而稳」的生存逻辑

一个只有 1.27 GB、近四千条记录、十年没更新的数据集,为什么还活跃在论文里?

第一,它占住了一个不可替代的位置:最小可用基准。 报告生成这个方向需要「跑一轮只要几小时」的数据。MIMIC-CXR 太大,做消融太慢;私有数据不可比。IU X-Ray 恰好卡在「够用且够快」的区间。这个位置不是靠规模守住的,是靠「别人都在用」守住的。

第二,它的托管方是 NLM。 美国国家医学图书馆的长期保存承诺,意味着这个下载链接十年后大概率还在。对基准数据集来说,「链接一直有效」比「数据一直更新」更重要。很多同期的小数据集因为托管在个人主页上,早就 404 了。

第三,它的格式足够简单。 XML + PNG,没有专有格式,没有需要特殊库才能读的二进制。任何人写二十行 Python 就能解析。低门槛意味着高复用。

它不可替代的部分:在「小样本、快迭代、可比性强」这三点上,目前没有同量级的替代品。ChestX-ray14 有 11 万张图但没有报告;MIMIC-CXR 有报告但体量大两个数量级;PadChest 有报告但语种是西班牙语。

四种失效情形:一是若 NLM 停止维护 Open-i 服务,直链会失效,虽有镜像但完整性难保证。二是若社区转向 MIMIC-CXR 作为唯一标准基准,它会被边缘化为「历史数据集」。三是若 CC BY-NC-ND 的执行趋严(比如要求下游模型也受限),工业界使用会停止。四是若出现一个「同等体量但带完整元数据」的新数据集,它的性价比优势会被取代。

§8 生态位

8.1 与四类替代品的对照

数据集 影像数 报告 元数据 许可 定位
IU X-Ray 七千余 有,四段式 极简 CC BY-NC-ND 最小可用基准
MIMIC-CXR 377,110 有,自由文本 丰富 PhysioNet 协议 大规模预训练
ChestX-ray14 112,120 无 14 类标签 CC0 类 多标签分类
PadChest 160,868 有,西班牙语 较丰富 需申请 多语种、多标签
CheXpert 224,316 无(有抽取标签) 中等 需申请 不确定性标签

8.2 与 MIMIC-CXR 的分工

这是最常被问的对比。三个维度:

规模。 七千余对 377,110,差 50 倍。前者笔记本可跑,后者要专门的数据管道。

报告质量。 MIMIC-CXR 的报告更长、更详细、有更多阳性所见描述。IU X-Ray 的报告短、模板化、阴性表述多。

元数据。 MIMIC-CXR 有 patient ID、study date、view position、设备信息,能做纵向分析与分层研究。IU X-Ray 几乎没有。

实践中的分工很清楚:IU X-Ray 刷方法与结构,MIMIC-CXR 验规模与泛化。

8.3 与 ChestX-ray14 的分工

ChestX-ray14 有 11 万张图、14 类标签,但没有报告,是纯分类任务的数据集。

两者的关系是互补而非竞争:ChestX-ray14 训一个多标签分类器,IU X-Ray 训一个生成模型,两个可以串起来(分类器给弱标签,生成模型写报告)。

8.3b 与 PadChest、CheXpert 的分工

胸片图文数据这一族里,常被拿来同台比较的还有西班牙的 PadChest 与斯坦福的 CheXpert。三者的分工可以一句话切分:IU X-Ray 给「报告全文 + 人工 MeSH 编码」,PadChest 给「西班牙语报告 + 层级标签」,CheXpert 给「英文报告摘录 + 14 类弱标签」。

语言维度。 PadChest 是这三者里唯一非英语的,报告原文为西班牙语,另有相当比例加泰罗尼亚语。它适合做跨语种图文对齐与低资源语言迁移,但不适合直接套用英文侧的通用的发现抽取工具链——那些工具的关键词表、否定检测规则、缩写展开表都是按英文写的,搬到西班牙语上会大面积误判。

标签维度。 CheXpert 的核心贡献不是报告,而是那套 14 类观察(Atelectasis、Cardiomegaly、Consolidation、Edema、Enlarged Cardiomediastinum、Fracture、Lung Lesion、Lung Opacity、No Finding、Pleural Effusion、Pleural Other、Pneumonia、Pneumothorax、Support Devices),以及它的三态标注约定(阳性、阴性、不确定)。这套体系后来被社区当成事实标准,反过来移植到 IU X-Ray 上做重标注。移植的代价在 §4.4 已经讲过:IU X-Ray 的 MeSH 粒度与这 14 类不对齐,一次映射会丢掉大量信息。

用途挑选的实用判据。 如果要做的是「把一份报告逐句生成出来」,选 IU X-Ray——它是这三者里唯一逐条给出四段式完整报告原文的。如果要做的是「把一张片子归类到某个发现」,选 CheXpert 或 PadChest——标签现成、规模大、评测协议成熟。如果要做的是「在非英语环境下验证一个图文模型」,选 PadChest。三者的交集很小,这也正是它们能长期共存的原因。

一个容易踩的隐性差别:阳性率。 CheXpert 的阳性率整体偏高(因为它收的是转诊人群),PadChest 的阴性比例更高,IU X-Ray 则因为 normal 占三分之一而介于两者之间。跨数据集直接比 AUROC 时,这个差别会让结论完全反过来。§5.3 谈过的「基准数字该怎么读」,在跨数据集场景下要再打一层折扣。

8.4 在千方医数集库内的位置

库内胸片相关的条目已有多条,各自的位置不同:

条目 定位
MIMIC-CXR 大规模胸片 + 报告,需 PhysioNet 认证
MIMIC-CXR-JPG 结构化标签版
CheXchoNet 胸片配超声心动图标签
NODE21 肺结节检测与生成
Medical-CXR-VQA 胸片问答
ReXVQA 大规模胸片 VQA
REFLACX 眼动定位
IU X-Ray 最小可用报告生成基准

这份数据在库里的独特性很清楚:它是唯一一个「体量小到能一晚上跑完、又带完整报告结构」的条目。

8.5 三类替代品的边界条件

「能不能不用它」这个问题,取决于三个边界条件。

第一个边界:任务是否要求逐句原文。 报告生成、报告结构化、句子级发现抽取这三类任务,必须有逐句原文。IU X-Ray 之外能提供原文的公开集极少——MIMIC-CXR 是最大的一份,但它的获取门槛是 PhysioNet 认证培训加签署数据使用协议,通常要等数个工作日,且不允许把原文再分发。IU X-Ray 的优势在这里体现得最直接:不用注册、不用签协议、点开链接就能下,一兆的报告包足以让一个学生在一节课内跑通全流程。这个「零门槛」属性不是附带优点,而是它十年后仍被引用的主要原因之一。

第二个边界:是否需要可复现的评测基线。 教学场景、方法对比、消融实验这三类需求,看重的不是数据规模,而是「大家用的是同一版」。IU X-Ray 的好处是版本几乎冻结:报告包最后一次更新停在 2017 年,之后没有变过。这意味着 2018 年论文报的 BLEU-4 与 2025 年论文报的 BLEU-4,至少在数据切片上是可比的(预处理仍可能不同,见 §5.3)。反过来,任何仍在持续扩充的数据集,跨年份比数都要先确认版本号。

第三个边界:是否要做大规模预训练。 这一条是 IU X-Ray 明确不擅长的。七千余张影像做自监督预训练,学到的表征很容易过拟合到这家机构的成像设备与摆位习惯上。常见做法是拿 MIMIC-CXR 或 CheXpert 做预训练,再拿 IU X-Ray 做小样本微调与评测。这个「大库预训练 + 小库评测」的分工,在实践中比「只用一份数据」稳得多。

三条边界之外的场景,通常有更合适的替代品;三条边界之内,IU X-Ray 的性价比仍然很难被替代。

§9 使用指引

9.1 四类用户的路径

你的身份 建议用法
做报告生成的研究者 直接下两个包,按 §6.2 解析,用 §6.3 过滤,跑你的模型
做图文检索的研究者 把 FINDINGS 当查询,影像当文档,注意去掉 COMPARISON 段的模板句
做医学 VQA 的研究者 这份数据没有问答对,只能当预训练语料
做教学与演示 最合适——数据小、格式清、许可明确,适合课堂演示完整流程

9.2 引用方式

标准引用是原始论文:

Demner-Fushman D, Kohli MD, Rosenman MB, Shooshan SE, Rodriguez L, Antani S, Thoma GR, McDonald CJ. Preparing a collection of radiology examinations for distribution and retrieval. J Am Med Inform Assoc. 2016;23(2):304-310. doi:10.1093/jamia/ocv080

如果用了具体版本,建议同时注明下载日期与包的大小,因为报告包在 2017 年更新过。

9.3 版本与不可变性

报告包 Last-Modified: 2017-06-06,影像包 Last-Modified: 2016-09-06。两个时间点之后没有再动过。

对一个基准数据集来说,「不再更新」其实是好事——意味着你的实验三年后还能复现。缺点是里面的已知问题(比如 531 条空 FINDINGS)也永远不会被修。

9.4 提交侧:你能往里加东西吗

不能。这是 NLM 单方发布的数据集,不接受社区提交。

如果你在自己的预处理上做了改进(比如更好的 MeSH 归并、更合理的切分),常见做法是在 GitHub 或 Hugging Face 上另发一个派生版本,并在说明里写清与原版的差异。注意 CC BY-NC-ND 的「ND」条款:如果派生版本重新分发了影像本体,可能触及「演绎」的边界,需要谨慎处理(很多做法是只发切分清单与代码,不发影像)。

§10 AI 使用声明

本篇数字来自两处:一是对报告包(NLMCXR_reports.tgz,约 1.06 MB,2017-06-06 版本)的逐条解析,二篇原始论文(JAMIA 2016, doi:10.1093/jamia/ocv080)的摘要与正文。

逐条解析得到的数字分四类。规模类:XML 文件数、parentImage 节点数、每例影像数分布。文本完整度类:FINDINGS 平均词数、过短文本、空 INDICATION 与空 IMPRESSION 条数、COMPARISON 为 None. 的条数。标注类:唯一 MeSH 标记数、多标记检查数、No Indexing 条数、normal 条数。分布类:Top MeSH 频次表与每例影像数直方图。全部可用 §6.2 的脚本复算。

未做的核验:影像包(1.27 GB)未下载,因此影像的格式细节、像素尺寸、是否统一缩放、PNG 位深均未核对,全部依据论文描述与社区文档。XML 里 url 字段指向的 /hadoop/storage/... 是内部路径,未验证其与 PNG 包内文件名的完整对应关系。

论文里的采集数字与公开包的实际计数之间的差额构成,论文未细说,本篇只能推测为去标识化筛选,未获证实。

articleDate 全部为 2013-08-01 的原因未查明——可能是批量导入时统一打的时间戳,也可能是原始数据本身就是 2013 年一次性导出的。这一点不影响使用,但影响任何按时间的分析。

MeSH 标记的手工编码一致性(两位编码者的 Kappa 值)论文未给出具体数字,只说「分歧经讨论解决」,本篇无法量化标注可靠性。

§11 三个人群的三条最短路径

不同的人打开这份数据,要的东西完全不同。下面三条路径是把前面的内容压缩成行动清单。

11.1 学生或第一次接触胸片报告生成的人

第一步,只下报告包。它只有一兆出头,解压后是三千九百余个 XML,几分钟就能全看完。不要一上来就下 1.27 GB 的影像包——先确认自己对文本侧有兴趣,再决定要不要碰图像。

第二步,随便挑一个 XML 打开,把 MedlineCitation 里的四段读一遍。重点看 INDICATION 与 FINDINGS 的关系:前者是「为什么拍这张片子」,后者是「看到了什么」。这两段之间的落差,正是报告生成任务要学的东西。

第三步,跑 §6.2 的解析脚本,把三千九百余条记录读成一个表格。这时候你会有两个直观感受:一是 FINDINGS 的长度分布很不均匀,短的只有几个词;二是 COMPARISON 段有大量 None.,等于没有历史对比。

第四步,写一个最朴素的基线:把 INDICATION 拼上一句固定的话当作输出,测 BLEU。这个基线通常能拿到不低的分数,原因是报告文本高度模板化。先看到这个数字,你才会明白为什么这个任务的绝对指标不能直接当质量看。

11.2 要做落地方案的数据工程师

先算清三件事:许可、规模、更新。

许可这条最硬:CC BY-NC-ND 4.0,非商业、禁演绎。这意味着两件事不能做——把数据打包进商业产品,以及把影像重采样、重标注后当作新数据集发布。可以做的是内部研究、论文实验、教学演示。每条 XML 里都有 licenseURL 字段逐条声明,写合规文档时直接引这个字段最稳妥。

规模这条要按用途分开算:只做文本侧,三千九百余条够;做图文配对,要按「有影像的检查」重新计数(§2.4 有分布);做双视图配对,只剩八成左右。三个口径混用是最常见的翻车原因。

更新这条基本可以忽略:报告包停在 2017 年,影像包停在 2016 年,之后没有变化。好处是版本稳定,坏处是任何希望「数据会越来越多」的规划都不成立。

11.3 要做方法对比的研究者

先确认对手用的是什么预处理。这一步不能省,因为同一份数据在不同预处理下,可用样本量能差两成,指标能差好几个点。

具体要核三件事。一是过滤阈值:FINDINGS 少于 10 词的是否剔除。二是切分方式:官方没有给切分,社区多用 7:1:2 随机切分,但随机种子不同结果就不同;更严格的做法是按患者切分,避免同一患者的多次检查跨集合泄漏。三是指标实现:BLEU 的实现差异(是否平滑、n-gram 权重、是否 lowercase)足以让同一份预测结果的分数上下浮动数个百分点。

这三件事核对完,再谈「谁比谁高」。如果对手论文只写了数据集名字没写这三项,那这个对比本身就不成立。

常见误读(避坑清单)

误读 实际 依据
采集阶段影像计数 公开包实际计数少于该值 包内逐条统计
论文的采集计数 公开包 XML 数少于该值 同上
「包内 XML 全部可用」 过滤空 FINDINGS 与无影像后约少两成 逐条统计
「MeSH 标记是分类标签」 是检索用受控词,粒度不统一 标记分布
「Cardiomegaly 是一类」 与 Cardiomegaly/mild 分列,需归并 标记计数
「有检查日期」 articleDate 全是 2013-08-01,是发布标记 XML 字段
「有患者年龄性别」 完全没有 XML 字段
「影像是原始 DICOM」 只有 PNG,采集参数已丢 官方下载包
「caption 是图像描述」 是视图名(PA and Lateral) XML 抽查
「XXXX 是数据错误」 是去标识化占位符 上下文可推
「BLEU 0.15 说明模型会写报告」 模板句能刷到相近分数 长度分布
「可以商用」 CC BY-NC-ND 4.0,逐条绑定 licenseURL
「和 MIMIC-CXR 可互换」 规模差 50 倍,元数据差距更大 对照
「104 条无影像是小问题」 占 2.6%,不过滤会在训练时崩 逐条统计

FAQ

问:到底有多少张图、多少份报告?
答:报告包解压后三千九百余个 XML;影像包内七千余张 PNG。原始论文写的采集数字是阶段数字。三个数都对,指不同阶段。

问:为什么报告包只有 1 MB?
答:里面全是文本 XML,压缩后约 1 MB。影像包约 1.27 GB。两个要分开下,别以为只下小包就够了。

问:XML 里的 articleDate 是检查日期吗?
答:不是。全部记录都是 2013-08-01,是批量发布标记。想知道真实检查日期,这份数据给不了。

问:为什么有 104 例没有影像?
答:XML 里没有 parentImage 节点。可能是影像未通过去标识化检查,也可能是采集时就没配上。论文没说原因。做图文配对时先过滤掉。

问:531 条 FINDINGS 少于 10 字符,都是空吗?
答:多数是被去标识化整段替换掉了,或者是极简表述(比如只有一个句号)。用 len(text.split()) >= 10 过滤是社区惯例。

问:一千七百余个 MeSH 标记怎么用?
答:先归并。同一概念有多个粒度(Cardiomegaly / Cardiomegaly/mild),还有跨术语体系的同义(Aorta/tortuous / Aorta, Thoracic/tortuous)。归并到 10–14 类才能做分类。

问:No Indexing 是什么?
答:编码人员认为无需索引的记录,95 条。做监督学习时应排除,因为它们没有有效的标签信息。

问:normal 有多少条?
答:一千三百九十一条,占 35.2%。这份数据阴性样本偏多,做分类要注意不平衡。

问:影像是什么格式、什么尺寸?
答:PNG。具体尺寸未逐一核对(影像包未下载),社区反馈多为 1024×1024 或接近该量级,但不同检查之间可能不一致。

问:能拿到 DICOM 吗?
答:不能。NLM 只发布 PNG。原始 DICOM 在印第安纳大学,未公开。

问:有官方切分吗?
答:没有。论文未给切分方案。社区常用 7:1:2 随机切分(训练 2,335 / 验证 333 / 测试 669,基于 3,337 条过滤后样本),但这是某一版预处理脚本的产物,非官方标准。

问:为什么不能按患者切分?
答:XML 里没有患者标识。同一患者的多次检查无法识别,所以只能按检查切分。这也是这份数据在纵向分析上的根本限制。

问:能做多标签分类吗?
答:可以,但需要先归并标记。四成多的检查有多标记,平均 1.6 个。归并到 14 类后可以按多标签 AUC 评测。

问:报告长度为什么这么短?
答:平均 27.4 词,中位 27。放射科报告本身写得极简,加上这份数据多为阴性正常例,描述更短。相比 MIMIC-CXR 动辄上百词,这里的输出空间很小。

问:BLEU 多少算好?
答:公开文献里 BLEU-4 大致 0.10–0.16。但这个区间不可直接比——预处理(生成 FINDINGS 还是整份)、切分、评测脚本都不同。看论文时先确认这三项。

问:模板化输出能拿多少分?
答:接近真实模型的下限。因为报告高度程式化,只输出「The cardiac silhouette and mediastinum size are within normal limits」这类万能句,BLEU 也能到 0.08–0.10。所以看指标时要做这个对照。

问:XXXX 该怎么处理?
答:建议当特殊 token 保留。强行还原有风险(可能还原错),而且原文里有一部分 XXXX 本身就是误判产生的,还原无意义。

问:caption 能当描述用吗?
答:不建议。它是视图名(「Xray Chest PA and Lateral」),不是所见。拿它做图文对齐,模型会学成「判断体位」,任务太浅。

问:能商用吗?
答:不能。CC BY-NC-ND 4.0,且每条 XML 里有 licenseURL 字段逐条声明。用这份数据训的模型能否商用是灰色地带,需单独判断。

问:派生版本能重分发影像吗?
答:要谨慎。ND 条款禁止演绎,重采样、裁剪、加标注后再分发可能构成演绎。社区常见做法是只发切分清单与预处理代码,不发影像本体。

问:还更新吗?
答:不更新了。报告包 2017-06-06 最后修改,影像包 2016-09-06。对基准数据集来说这是优点——复现性有保障。

问:和 MIMIC-CXR 怎么选?
答:做方法消融、快速迭代、需要可比性——用 IU X-Ray。做大规模预训练、需要元数据分层、需要纵向分析——用 MIMIC-CXR。两者可以串起来。

问:为什么还有人在 2026 年用它?
答:三个原因:跑得快(1.27 GB)、比得了(十年论文都用它)、门槛低(二十行 Python 能解析)。这三点在「最小可用基准」这个位置上很难被取代。

问:有没有中文版或中国数据?
答:没有。全部是美国印第安纳州的胸片与英文报告。

问:怎么引用?
答:Demner-Fushman D, et al. Preparing a collection of radiology examinations for distribution and retrieval. J Am Med Inform Assoc. 2016;23(2):304-310. doi:10.1093/jamia/ocv080。用了具体版本建议加下载日期。

术语表

术语 含义
IU X-Ray Indiana University Chest X-ray Collection 的通用简称
OpenI NLM 的开放影像检索服务,IU X-Ray 的托管方
NLMCXR 下载包文件名前缀(NLMCXR_reports.tgz)
uId XML 内的检查标识,形如 CXR1
parentImage XML 内代表一张影像的节点,含 figureId、caption、url
MeSH Medical Subject Headings,美国国家医学图书馆的受控词表
RadLex RSNA 的放射学词汇表
MTI Medical Text Indexer,NLM 的自动标引工具
COMPARISON 报告段:与既往检查对比
INDICATION 报告段:检查原因
FINDINGS 报告段:影像所见,主体段
IMPRESSION 报告段:结论
XXXX 去标识化占位符,替代被判定为敏感的内容
PHI Protected Health Information,受保护健康信息
Regenstrief Scrubber 印第安纳大学开发的文本去标识化工具
DICOM Supplement 142 医学影像去标识化的行业规范
RSNA CTP RSNA 的临床试验处理器,用于影像去标识化流水线
BLEU / ROUGE / CIDEr 文本生成任务的自动评测指标
PA / AP 后前位 / 前后位,胸片的两种投照方向

附录 A:核心数字核对表

项 值 来源 可否自行复算
检查数(XML) 3,955 报告包文件数 可,`ls \
影像数(parentImage) 7,470 逐条解析 可,见 §6.2
报告包体积 1,112,632 B HTTP HEAD 可
影像包体积 1,360,814,128 B HTTP HEAD 可
唯一 MeSH 标记 1,719 逐条解析 可
normal 条数 1,391 逐条解析 可
多标记检查数 1,690 逐条解析 可
No Indexing 条数 95 逐条解析 可
双视图检查数 3,208 parentImage 计数 可
无影像检查数 104 parentImage 计数 可
FINDINGS 平均词数 27.4 逐条解析 可
FINDINGS 最短/最长 0 / 169 词 逐条解析 可
FINDINGS < 10 字符 531 逐条解析 可
空 IMPRESSION 34 逐条解析 可
空 INDICATION 90 逐条解析 可
COMPARISON 为 None. 1,402 逐条解析 可
采集阶段报告数 3,996 论文摘要 不可
采集阶段影像数 8,121 论文摘要 不可
影像含 PHI 的检查数 2(0.05%) 论文摘要 不可

附录 B:数字的来源分层

层级 覆盖的数字 可信度 处理方式
下载包逐条解析 本文附录 A 全表 高(可复现) 文中注明统计方式
HTTP 元信息 两个包的字节数与最后修改时间 最高 直引
论文摘要与正文 采集阶段计数、2 例 PHI、100% 文本去标识精度 中高 直引,注明与公开包的差异
社区文档 过滤版计数、7:1:2 切分 中 注明为非官方
本文推断 651 张影像差额的构成、articleDate 全同的原因 低 正文标为推测

附录 C:完整参考文献

  1. Demner-Fushman D, Kohli MD, Rosenman MB, Shooshan SE, Rodriguez L, Antani S, Thoma GR, McDonald CJ. Preparing a collection of radiology examinations for distribution and retrieval. J Am Med Inform Assoc. 2016;23(2):304–310. doi:10.1093/jamia/ocv080
  2. Johnson AEW, Pollard TJ, Berkowitz SJ, et al. MIMIC-CXR, a de-identified publicly available database of chest radiographs with free-text reports. Sci Data. 2019;6:317. doi:10.1038/s41597-019-0322-0
  3. Irvin J, Rajpurkar P, Ko M, et al. CheXpert: A Large Chest Radiograph Dataset with Uncertainty Labels and Expert Comparison. AAAI 2019.
  4. Wang X, Peng Y, Lu L, et al. ChestX-ray8: Hospital-scale Chest X-ray Database and Benchmarks. CVPR 2017.
  5. Bustos A, Pertusa A, Salinas JM, de la Iglesia-Vayá M. PadChest: A large chest x-ray image dataset with multi-label annotated reports. Med Image Anal. 2020;66:101797.

附录 D:把它接进自家管线的五个决策

D.1 用哪种过滤阈值

阈值 剩余样本 适合
不过滤 全部 XML 只做图文检索
FINDINGS ≥ 10 字符 3,424 宽松
FINDINGS ≥ 10 词 约 3,300 主流
FINDINGS ≥ 20 词 约 2,600 严格,适合生成任务
再加「有双视图」 约 2,700 需要正侧位配对时

阈值越严,样本越少但质量越高。写论文时必须报出用了哪一档,否则指标不可比。

D.2 生成什么

三种常见设定,难度递增:

设定 输入 输出 难度
单段生成 影像 FINDINGS 中
条件生成 影像 + INDICATION FINDINGS 中高
全报告生成 影像 四段全部 高(COMPARISON 常为 None,学不到东西)

第一种最常见,第三种最少见但更接近真实工作流。

D.3 要不要做数据增强

这份数据只有七千余张图,很容易过拟合。常见的增强:随机裁剪、水平翻转(注意左右肺的语义,翻转后 IMPRESSION 里的「left/right」会错,需谨慎)、亮度对比度抖动。

水平翻转这一条尤其要注意:胸片的左右是有临床含义的,翻转后如果报告还写「left lower lobe」,图文就不一致了。要么不翻转,要么同时改写报告里的方位词。

D.4 评测加什么

只报 BLEU/ROUGE/CIDEr 不够。建议加两类:

临床相关性。 用 CheXpert labeler 从生成文本与参考文本里各抽一遍 14 类发现,算 F1 或一致率。这比 n-gram 指标更接近「写得对不对」。

人工评分。 抽 100 条做盲评,评三项:事实正确性、完整性、流畅度。这是唯一能发现「模板句刷分」问题的方法。

D.5 要不要和 MIMIC-CXR 联用

如果目标是发论文,推荐的做法是:在 IU X-Ray 上做主要实验与消融(快),在 MIMIC-CXR 上做一次规模验证(慢但必要)。

只在 IU X-Ray 上做的结论,审稿人通常会问「在更大数据上还行吗」。只在 MIMIC-CXR 上做,则难以做细致的消融。

附录 E:三个真实场景的走法

E.1 场景一:复现一篇 2018 年的报告生成论文

第一步,确认它的预处理。 论文若写明过滤后的可用量且低于包内文件数,说明用了过滤版;写包内实际计数则说明用了全量。这一步决定你能不能对上它的数字。

第二步,确认切分。 若它给了切分文件,直接用;若只写「7:1:2」,你得猜随机种子,结果会有 1–2 个点的差异。

第三步,确认输出空间。 只生成 FINDINGS 还是含 IMPRESSION,BLEU 差得很多。

第四步,跑起来。 数据 1.27 GB,模型若不大,一张卡几小时。

第五步,比数字时留余地。 差 2 个点以内算复现成功,差 5 个点以上要找原因(多半在预处理)。

E.2 场景二:给医院的报告生成系统做原型

第一步,明确不能直接用。 这份数据是美国的、2013 年左右的、英文的。中国医院的报告格式、术语习惯、影像设备都不同。

第二步,能用的部分。 结构设计(四段式)、解码策略、评测流程都可以借鉴。模型的初始化权重也能用(在公开数据上预训练,再在本地数据上微调)。

第三步,不能用的部分。 直接用这份数据训的模型在医院跑,输出会是美式英语模板句,与本地方言、术语、报告规范都不匹配。

第四步,合规检查。 CC BY-NC-ND 不允许商用。医院内部做研究可以,做成产品卖不行。

E.3 场景三:做一次「报告生成方法演进」的综述

第一步,按年份收集。 2016–2018 是 CNN-RNN 时代,2019–2021 是 Transformer 时代,2022 之后是视觉语言预训练时代。

第二步,只用报了预处理细节的论文做横向比较。 没写清预处理与切分的,只能当定性参考。

第三步,标注数据集。 有的论文在 IU X-Ray 上做,有的在 MIMIC-CXR 上做,有的两个都做。混在一起比是错的。

第四步,指出评测的固有问题。 BLEU 在短文本上的不稳定性、模板句刷分、临床相关性缺失——这三点值得在综述里单独讨论。

附录 F:一个完整的预处理脚本

import os, json, xml.etree.ElementTree as ET

ROOT = "ecgen-radiology"
OUT = "iuxray_clean.jsonl"

def parse(path):
    r = ET.parse(path).getroot()
    uid = r.find("uId").get("id")
    texts = {a.get("Label"): (a.text or "").strip()
             for a in r.findall(".//AbstractText")}
    mesh = [m.text for m in r.findall(".//MeSH/major") if m.text]
    imgs = []
    for p in r.findall(".//parentImage"):
        fig = p.find("figureId")
        cap = p.find("caption")
        imgs.append({
            "id": p.get("id"),
            "fig": fig.text if fig is not None else None,
            "caption": (cap.text or "").strip() if cap is not None else "",
        })
    return {
        "uid": uid,
        "comparison": texts.get("COMPARISON", ""),
        "indication": texts.get("INDICATION", ""),
        "findings": texts.get("FINDINGS", ""),
        "impression": texts.get("IMPRESSION", ""),
        "mesh": mesh,
        "images": imgs,
        "license": r.findtext("licenseURL"),
    }

def keep(x, min_words=10):
    if len(x["findings"].split()) < min_words:
        return False
    if not x["images"]:
        return False
    if "No Indexing" in x["mesh"]:
        return False
    return True

rows = []
for f in sorted(os.listdir(ROOT)):
    if not f.endswith(".xml"):
        continue
    x = parse(os.path.join(ROOT, f))
    if keep(x):
        rows.append(x)

with open(OUT, "w", encoding="utf-8") as fh:
    for x in rows:
        fh.write(json.dumps(x, ensure_ascii=False) + "\n")

print(f"保留 {len(rows)} 条")

跑完会得到一个 JSONL,每条一行,字段已经拍平。后续无论是做 DataFrame 分析还是喂给 DataLoader,都直接用这个。

附录 G:MeSH 标记归并的参考映射

下面这张表是把千余个标记压到 12 类的起点。它不是唯一正确的方案,但覆盖了出现频次最高的那些。

目标类别 包含的标记(部分) 大致条数
normal normal 1,391
lung_volume_low Lung/hypoinflation、Pulmonary Atelectasis/*、Atelectasis 约 400
lung_volume_high Lung/hyperdistention、Emphysema 约 220
cardiomegaly Cardiomegaly、Cardiomegaly/mild 约 292
aorta Aorta/tortuous、Aorta, Thoracic/tortuous、Atherosclerosis/aorta、Calcinosis/aorta 约 290
spine_degenerative Spine/degenerative、Thoracic Vertebrae/degenerative* 约 320
granuloma Granulomatous Disease、Granuloma* 约 120
technical_unsatisfactory Technical Quality of Image Unsatisfactory 86
catheter Catheters, Indwelling/* 约 80
congestion Pulmonary Congestion、Pulmonary Edema 约 90
bronchovascular Markings/bronchovascular 68
other 其余全部 约 600

归并时最容易犯的错是按 MeSH 树状结构自动归并。这份数据里的标记并不严格遵循 MeSH 层级,Cardiomegaly/mild 在 MeSH 里并不是 Cardiomegaly 的子节点,是编码人员自己加了 /mild 修饰。所以必须按字符串实际形态做规则映射,不能靠术语库反查。

附录 H:与 MIMIC-CXR 的逐项对照

维度 IU X-Ray MIMIC-CXR
影像数 7,470 377,110
检查数 3,955 227,835
患者数 约 3,900 65,379
报告 四段式,平均 27 词 自由文本,平均约 60 词
元数据 极简 含 patient ID、study date、view position
纵向随访 无 有,同一患者多次
影像格式 PNG DICOM + JPG
体量 1.27 GB 约 4.7 TB(JPG 版约 570 GB)
获取门槛 直链下载 PhysioNet 认证 + 数据使用协议
许可 CC BY-NC-ND 4.0 PhysioNet Credentialed Health Data License
单轮训练耗时 小时级 天级
适合 消融、快速迭代、教学 预训练、规模验证、纵向研究

一个值得注意的差别:MIMIC-CXR 的报告里常有「Comparison: None」这类结构性语句,也有更多阳性所见的详细描述。IU X-Ray 的报告更短更模板化,这是它 BLEU 容易刷高的根源。

附录 I:三个常被引用的「传闻」与事实核对

I.1 「IU X-Ray 的规模等于论文摘要写的那个数」

一半对。那个数是采集阶段的数字,当前公开包的文件数要少一些。差额的去向论文未说明,推测是去标识化阶段剔除。

I.2 「影像是 1024×1024」

未核实。影像包(1.27 GB / 七千余张)平均每张约 182 KB,按 PNG 无损压缩的比例推算,1024×1024 的灰度胸片压到这个体积是合理的。但本篇未下载影像包逐张核对,只作为量级参考。

I.3 「有患者级别的标签」

没有。XML 里没有患者标识,MeSH 标记是检查级的(「这一例检查有心脏增大」),不是患者级的诊断。同一患者的多次检查无法关联。

附录 J:如果只记五件事

  1. 近四千条检查、七千余张图,报告包 1 MB、影像包 1.27 GB。 两个包分开下。
  2. 过滤三件事:FINDINGS 少于 10 词、无影像、No Indexing。 过滤后约三千三百条。
  3. 元数据极贫瘠:没有检查日期、年龄、性别。 别指望做分层分析。
  4. 千余个 MeSH 标记必须归并才能用。 同一概念有多个粒度与多种写法。
  5. 报告平均 27 词,模板句能刷分。 看 BLEU 时一定要做「万能句」对照。

编辑说明

本篇数字来源分三层,已在附录 B 列明:报告包(NLMCXR_reports.tgz,约 1.06 MB,632 字节,2017-06-06 版)的逐条 XML 解析、两个包的 HTTP 元信息、以及原始论文(JAMIA 2016)的摘要与正文。核验时间 2026-10-26。

逐条解析可复现的数字已全部列在附录 A 的核对表里,分为规模、文本完整度、标注、分布四组,每组都注明可否自行复算。解析脚本见附录 F,可直接复跑。

未做的核验:影像包未下载,因此影像的像素尺寸、位深、是否统一缩放、PNG 压缩参数均未核对;url 字段里的 /hadoop/storage/... 内部路径与 PNG 包内文件名的完整对应关系未逐一验证;MeSH 编码的编码者间一致性(Kappa)论文未给出,无法量化。

已知的官方内部不一致:①报告数与影像数(论文采集计数对公开包实际计数),差额构成论文未说明,本篇推测为去标识化筛选,未获证实;②articleDate 全部为 2013-08-01,原因未查明,本篇推测为批量导入时间戳。

未覆盖内容:报告包 2017 年那次更新改了什么;104 条无影像记录的具体成因;specialty 字段的取值分布(抽查见到 pulmonary diseases,未做全量统计);作者列表字段的完整度;globalImageFeatures 里五种感知哈希的实际计算方式。

许可为 CC BY-NC-ND 4.0,且每条 XML 内以 licenseURL 逐条声明。本篇引用其数字与结构描述属学术评论与工程说明,不构成对任何影像或报告本体的再分发。


相关数据集导航

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

  • gmai-mmbench — 共享标签:医学影像 / 医疗NLP / 多模态 / 医学问答与基准
  • reflacx-xray-localization — 共享标签:医学影像 / X光影像 / 医疗NLP / 多模态
  • radvlm-instruction-dataset — 共享标签:医学影像 / X光影像 / 医疗NLP / 多模态
  • radialog-instruct-dataset — 共享标签:医学影像 / X光影像 / 医疗NLP / 多模态
  • mimic-cxr — 共享标签:医学影像 / X光影像 / 多模态
  • latte-cxr — 共享标签:医学影像 / X光影像 / 多模态
  • chestagentbench — 共享标签:医学影像 / X光影像 / 多模态 / 医学问答与基准
  • mimic-cxr-ext-mimic-cxr-db — 共享标签:医学影像 / X光影像 / 医疗NLP / 多模态
  • mimic-iv-note — 共享标签:医学影像 / X光影像 / 医疗NLP
  • ehrxqa — 共享标签:X光影像 / 多模态 / 医学问答与基准

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

返回 AI-Ready 数据集