信息速览
胸部 X 光片的公开标注,十年来几乎停在同一句话上:「这个病,有还是没有」。十四个二值标签、一套阴性阳性不确定的三分类、一张按研究分好的训练测试表,就构成了一整代模型的监督信号。可放射科医生写报告时根本不是这样工作的。他们写「左下肺少许胸腔积液可能」「中度心影增大」「不除外肺炎」——一句话里同时给出疾病、位置、程度、以及自己有多确定。把这四件事压成一个 0 或 1,等于把报告里最有临床价值的部分直接丢掉。
CAD-Chest 就是为了把丢掉的那部分捡回来。它不拍片、不标框、也不重新请医生读片,而是拿 MIMIC-CXR 已经公开的自由文本放射报告,用规则把每一句里的疾病实体、严重度词、不确定度词和解剖位置词抽出来,组织成一个四层的 JSON 结构,再用 subject_id、study_id、dicom_id 三个键挂回原有的影像与元数据。它因此能回答一个别处很难回答的问题:同一份「肺水肿」标签下面,医生到底是肯定地写了重度肺水肿,还是含糊地写了一句不除外肺水肿——这两种情况在二值标签里长得一模一样,在临床决策里却完全不是一回事。
它的代价同样明确:标注来自文本规则而不是医生重读,图像本体不在包里,访问要签协议并完成培训,而且它只在正位(AP)与后前位(PA)两种体位上做了统计。它不是「更大的训练集」,是一件用来把粗标签拆细的工具。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | CAD-Chest: Comprehensive Annotation of Diseases based on MIMIC-CXR Radiology Report |
| 发布方 | PhysioNet(原始数据由德克萨斯大学阿灵顿分校、东京大学、理化学研究所、日本国立癌症研究中心、NIH 临床中心等团队贡献) |
| 首次发布 | 2023 年 12 月 8 日,版本 1.0 |
| 最近改动 | 官方版本历史仅 1.0 一条,未见修订记录 |
| 患者数 | 65,379 个 subject_id |
| 检查数 | 227,827 个 study_id |
| 正侧位子集 | AP 与 PA 体位下 63,903 个 subject_id、217,982 个 study_id |
| 疾病种类 | 官方统计表覆盖 18 种疾病 |
| 图像本体 | 不随包提供;须从 MIMIC-CXR-JPG(377,110 张 JPG)按 dicom_id 取 |
| 标注规模 | 四层标注:疾病名称 / 严重度 / 不确定度 / 解剖位置 |
| 标注方式 | 规则法从自由文本抽取(NLTK 与 spaCy),500 份报告医师抽样评估 |
| 文件格式 | JSON 标注(cad_disease.json)+ 四个纯文本词表(.txt) |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0,需签 DUA 1.5.0 并完成 CITI 培训 |
| 典型用途 | 严重度感知分类、不确定度建模、报告级弱监督标签细化、影像-文本对齐研究 |
§1 它要解决的具体麻烦
1.1 一个二值标签压掉了四件事
放射报告是半结构化文本,医生的判读落在「检查所见」与「印象」两节里。一句话承载的信息通常有四条:疾病是什么(肺水肿、气胸、心脏扩大)、在哪个位置(左下肺、右侧、肺底)、有多重(轻度、中度、重度、急性、大量)、医生有多确定(明确、可能、或许、不能排除)。
主流的公开标签体系只保留第一条,并把第三条和第四条折叠进一个三值或二值的框架里。CheXpert 的做法是阴性、阳性、不确定三类,且约束三者概率和为 1;MIMIC-CXR-JPG 附带的 CheXpert 与 NegBio 标签也是研究级的二值与不确定标记。这类设计的目标从来就是「有没有病」这个二分类,严重度与确定程度只是过程中的副产品,用完即弃。
后果是具体的。一个标注为「肺水肿 = 1」的样本,可能是报告里明确写的「重度肺水肿」,也可能是「不除外轻度肺水肿」。前者的影像征象清晰、临床处理紧急;后者可能只是一句防御性表述。把两者当作同一类样本喂给模型,模型学到的不是肺水肿的影像特征,而是「肺水肿」这个词在报告里出现的平均语境。
1.2 CAD-Chest 把四层拆开存
它把每一次检查的标注存成一个字典,疾病名是键,四层信息是值。以官方页面给出的例子为例,一次检查里同时出现了气胸、肺不张与肺水肿三个疾病实体,各自带自己的位置、严重度与概率:
| 疾病 | 位置 | 严重度 | 概率词 | 概率分值 |
|---|---|---|---|---|
| pneumothorax(气胸) | left | minimal | positive | 3 |
| atelectasis(肺不张) | left、basal | mild | positive | 3 |
| edema(肺水肿) | — | — | without | -3 |
注意第三行:它是一个「无」的记录,而不是「没有这条记录」。规则抽到报告里出现了「without pulmonary edema」这样的表述,就把肺水肿作为一个显式实体写进去,严重度标记为无、概率分值为负。这一点很关键——它让「报告提到了但否认了」和「报告压根没提」成为两种可区分的状态,而二值标签体系把前者也压成了 0。
1.3 三条常见的错误期待
第一条,期待它是「带图像的完整数据集」。它不是。包里只有标注与词表,图像要按 dicom_id 去 MIMIC-CXR-JPG 取,报告原文与元数据要按 subject_id、study_id 去 MIMIC-CXR 取。它是挂在两个上游库之上的一层标注,不是独立的数据集。
第二条,期待它是「医生重新标注的金标准」。它的方法是基于规则的文本抽取,官方页面写得很清楚:用 NLTK 与 spaCy 做生物医学文本处理,靠词表匹配与语法分析抽实体,再请医生对抽样结果做评估。它的标签是「从报告里读出来的」,不是「对着片子重新判读的」。报告错,标签就跟着错。
第三条,期待它能直接当分类任务的标签用。四层标注不是一条 0/1 向量。要用它训练模型,必须先自己定义口径:概率分值取多少算阳性、严重度四档要不要合并、位置词要不要编码。官方明确说概率分值可以由使用者按自己的需要设阈值——这既给了自由,也意味着不同论文的口径未必可比。
1.4 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 区分「确定的重度」与「不确定的轻度」 | 四层标注齐全,概率分值可分档 | 够,这是它唯一的设计目的 |
| 严重度感知的影像分类 | 严重度分四档,含 mild/moderate/severe/no | 可做,但严重度在报告里的覆盖并不均衡 |
| 不确定度建模与校准 | 概率词带 1.0 / 0.7 / 0.5 / 0.3 四级赋值 | 够,且赋值是官方给的,不用自己猜 |
| 解剖位置相关的弱监督 | 位置词支持 location 与 location2 双位点 | 够做粗粒度,没有像素级或框级定位 |
| 目标检测与病灶框 | — | 不够,全文没有任何框或掩膜 |
| 影像本体 | — | 不够,须另取 MIMIC-CXR-JPG |
| 报告原文与整个病程 | — | 不够,须另取 MIMIC-CXR |
| 儿科或体检人群 | — | 不够,上游是急诊与住院场景的成人胸片 |
| 多中心泛化验证 | 单一上游来源 | 不够,只能做「跨标注体系」而非「跨机构」 |
1.5 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你用 CheXpert 标签训了一个分类器,想知道不确定样本到底该怎么处理 | 提供同一批影像上带不确定度赋值的替代标签 | 把 CheXpert 的不确定类按概率分值的四档拆开重训,比较校准曲线 |
| 你在做严重度分级,苦于没有分级标签 | 提供四档严重度,且是从真实报告里抽的 | 先确定四档映射(§2.4),再按患者划分评估 |
| 你想证明「把不确定样本当阴性」会损失信息 | 提供可对照的两套标签口径 | 固定划分,跑「不确定=阴性」与「按概率分值加权」两版对比 |
| 你在做报告生成,想要结构化的事实字段 | 提供疾病、位置、严重度、确定性的结构化抽取结果 | 用四层标注当生成结果的校验集,而不是当训练目标 |
| 你想研究影像与文本的一致性 | 一次检查同时有影像、报告与四层结构化标注 | 按 dicom_id 对齐后做双通道一致性分析 |
| 你要做一个能直接上临床的模型 | 基本帮不上 | 它是研究用标签,且受凭证访问限制(§5.1) |
1.6 一句话判断
它不是「又一个胸片标签集」,而是一把把粗标签拆细的螺丝刀:当你的研究问题里出现「程度」或「确定与否」这两个词时,它才有意义;当你的问题只是「有或没有」时,用它反而会把事情变复杂。
1.7 不适合谁:四条边界
不适合拿来做目标检测或分割。 全程没有框、没有掩膜、没有像素级标注。位置字段是「left」「basal」这样的词,不是坐标。
不适合拿来当临床金标准。 标签继承自报告文本,报告里的笔误、模板残留、前后不一致都会原样带进来。官方的医师评估只覆盖了 500 份报告(§7.2)。
不适合拿来独立使用。 没有图像、没有报告全文,它只是中间层。任何一次实验都要同时具备 MIMIC-CXR 与 MIMIC-CXR-JPG 的访问权。
不适合拿来直接投产。 许可为 PhysioNet 凭证访问协议,且官方明确要求完成 CITI 培训。研究用数据集的身份写在许可里,不是靠声明能改的。
§2 数据构成与规格
2.1 包里有什么
官方页面在「数据描述」一节点名了五个文件,其中只有一个是数据本体,另外四个是规则用到的词表:
| 文件 | 角色 | 内容 |
|---|---|---|
cad_disease.json |
标注本体 | 逐次检查的四层疾病标注 |
disease_list.txt |
疾病词表 | 每种疾病的多种写法,例如肺不张同时收录 atelectasis 与 collapse |
severity_words.txt |
严重度词表 | 描述程度的词,官方按语义合并为四个等级 |
uncertainty_words.txt |
不确定度词表 | 描述确定与否的词,每个词带一个概率分值 |
location_words.txt |
位置词表 | 描述解剖位置的词,例如 left、right、lower |
这个结构值得留意:四个词表不是附属文档,而是抽取规则的本体。改一个词表就等于改一遍标注口径。想复现或改动它的标签,第一步是读词表而不是读代码——因为官方页面并没有发布抽取代码,只有词表与结果。
2.2 一条记录的完整解剖
官方给出的示例结构如下,为便于中文读者理解,字段含义在注释里说明:
{
"study_id": "55088298",
"subject_id": "18936629",
"dicom_id": "61976388-5e534624-f6465079-76ea9caf-116f9938",
"view": "antero-posterior",
"study_order": 5,
"entity": {
"atelectasis": {
"id": 1,
"entity_name": "atelectasis",
"report_name": "atelectasis",
"location": ["left", "basal"],
"level": ["mild"],
"location2": null,
"level2": null,
"probability": "positive",
"probability_score": 3
}
}
}
三个标识键的含义各不相同:study_id 唯一标识一次影像检查(对应一份放射报告,可能含一张或多张影像);subject_id 唯一标识一名患者;dicom_id 标识具体的 DICOM 文件,MIMIC-CXR-JPG 里每个 .jpg 文件的文件名主干就等于 dicom_id。这三者的关系决定了整个数据集的对齐方式——它是靠 dicom_id 落到像素、靠 study_id 落到报告、靠 subject_id 落到人。
2.3 字段字典
| 字段 | 层级 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
study_id |
顶层 | 整数字符串 | 一次影像检查 | 与 MIMIC-CXR 的 study_id 同义,是连报告的主键 |
subject_id |
顶层 | 整数字符串 | 一名患者 | 划分数据集必须按它分组(§5.5) |
dicom_id |
顶层 | 带连字符的十六进制串 | 一个 DICOM 文件 | JPG 文件名主干,是连像素的主键 |
view |
顶层 | antero-posterior、postero-anterior、lateral 等 |
投照体位 | 与 MIMIC-CXR-JPG 的 ViewCodeSequence_CodeMeaning 同源 |
study_order |
顶层 | 整数 | 该检查在这名患者序列中的次序 | 做纵向研究时用它排序,而不是用日期 |
entity |
顶层 | 字典 | 本次检查抽出的全部疾病 | 键是疾病名,值是四层标注 |
id |
疾病内 | 整数 | 疾病在词表中的序号 | 仅作顺序标识 |
entity_name |
疾病内 | 字符串 | 规范化后的疾病名 | 做标签列名时用它 |
report_name |
疾病内 | 字符串 | 报告里实际出现的写法 | 与 entity_name 可能不同,例如肺水肿在报告里写作 pulmonary edema |
location |
疾病内 | 字符串数组或 null | 解剖位置词 | 可能多个,也可能为空 |
level |
疾病内 | 字符串数组或 null | 严重度词 | 取词表里的原始词,不是等级名 |
location2 |
疾病内 | 字符串数组或 null | 第二处位置 | 一种疾病出现在多处时使用 |
level2 |
疾病内 | 字符串数组或 null | 第二处对应的严重度 | 与 location2 配对 |
probability |
疾病内 | 字符串 | 不确定度词 | 例如 positive、without |
probability_score |
疾病内 | 数值 | 不确定度赋值 | 分值越大越确定,阈值由使用者自定 |
两个容易读错的字段是 level 与 probability_score。level 存的是词表里的原始词(mild、minimal、severe),不是合并后的等级名;要拿到等级,必须自己按官方的合并表映射(§2.4)。probability_score 也不是概率,官方的说明只是「分值越大表示越确定」,示例里 positive 对应 3、without 对应 -3,其余取值由词表给出。
2.4 严重度的四档合并
官方把语义相近的词合并成四个等级,词表文件里记的是原始词,合并关系如下:
| 合并等级 | 收录的原始词 |
|---|---|
| Mild | mild、small、trace、minor、minimal、minimally、subtle、mildly |
| Moderate | moderate、moderately、mild to moderate |
| Severe | severe、acute、massive、moderate to severe、moderate to large |
| No | no、without、clear of、negative、exclude、lack of、rule out |
四档合并里有两处需要在使用时想清楚。第一,No 这一档不是「没有严重度」,而是「报告明确否认了这个疾病」——它把否定表达也编进了严重度体系,所以 No 与 location 为空是两回事。第二,Severe 档里混入了 acute(急性)与 massive(大量),前者是时间属性、后者是范围属性,与「重度」并不严格同义。把它们当作一个等级用,等于接受了一种官方给定的语义压缩。
2.5 不确定度的四级赋值
与别处把不确定简单打成一个类别不同,这里按确定程度给了连续的分值,分值越大越确定:
| 概率词 | 赋值 |
|---|---|
| positive、change in | 1.0 |
| probable、likely、may、could、potential | 0.7 |
| might、possible | 0.5 |
| not exclude、difficult exclude、cannot be assessed、cannot be identified、impossible exclude、not rule out、cannot be evaluated | 0.3 |
官方页面在疾病统计表里还留了一个取值为 0 的列,对应报告明确否认的情形。把这张表与 §1.2 的示例对照着看会更清楚:示例里 probability 是 positive、probability_score 是 3,而 without 对应 -3——也就是说 probability_score 与这里的 1.0/0.7/0.5/0.3 是两套标度,前者是整数分值、后者是概率赋值,官方没有给出两者的换算公式。用的时候只能选一套,且要在方法节里写清用的是哪一套。
2.6 与同类标注体系的字段差异
| 对比项 | CAD-Chest | MIMIC-CXR-JPG 自带标签 | CheXpert 式体系 |
|---|---|---|---|
| 标签形态 | 四层:疾病、严重度、不确定度、位置 | 逐研究一列标签的二值与不确定标记 | 阴性 / 阳性 / 不确定三类 |
| 疾病数量口径 | 官方统计表覆盖 18 种 | 上游标注 14 个类别(含 No Finding) | 常见为 14 个类别 |
| 不确定度 | 连续赋值 1.0 / 0.7 / 0.5 / 0.3 | 单值不确定标记 | 单类,且与阴性阳性归一 |
| 严重度 | 四档合并 | 无 | 无 |
| 解剖位置 | 位置词,支持双位点 | 无 | 无 |
| 生成方式 | 规则抽取(NLTK 与 spaCy) | NegBio 与 CheXpert 规则工具 | 规则工具加人工标注子集 |
| 是否含影像 | 否 | 是 | 视发布版本而定 |
这张表要说清的只有一件事:CAD-Chest 在「严重度」与「位置」两列上别人没有,在「影像」这一列上它没有。它的位置是补充层,不是替代层。
§3 它是谁的数据:一条跨太平洋的协作链
3.1 贡献者与机构
官方页面列出七位作者,分属五家机构,这条名单本身就说明了它的性质——它不是一家影像科的数据工程产物,而是一次「医学影像 AI 组 + 自然语言处理组 + 国立研究机构」的拼装:
| 作者 | 机构 |
|---|---|
| Mengliang Zhang | 德克萨斯大学阿灵顿分校 |
| Xinyue Hu | 德克萨斯大学阿灵顿分校 |
| Lin Gu | 理化学研究所 AIP / 东京大学 |
| Tatsuya Harada | 东京大学 / 理化学研究所 |
| Kazuma Kobayashi | 日本国立癌症研究中心研究所 |
| Ronald Summers | NIH 临床中心 |
| Yingying Zhu | 德克萨斯大学阿灵顿分校 |
三家美国机构加两家日本机构,其中 NIH 临床中心长期做胸部影像的自动判读,日本一侧提供的是文本与表示学习的方法。这个组合解释了它的方法取向:先有影像研究的痛点(标签太粗),再借 NLP 的工具去解决(规则抽取),而不是反过来。
3.2 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 2019 | 上游 MIMIC-CXR 与 MIMIC-CXR-JPG 发布 | 提供报告文本与影像,奠定可用基础 |
| 2023-12-08 | CAD-Chest 版本 1.0 在 PhysioNet 上线 | 首次公开,DOI 为 10.13026/44pd-vz36 |
| 2025-01 | 配套论文发表于 IEEE Transactions on Medical Imaging | 从数据集升级为带基准方法的工作 |
| 至今 | 版本历史仅 1.0 一条 | 无修订、无扩版 |
版本只有一条这件事本身是个信息:它从上线起就没有修补过标签,也没有随上游 MIMIC-CXR 的版本演进而重抽。用它的那一刻,你拿到的是 2023 年 12 月那一刻的抽取结果。
配套论文值得一并留意。官方页面之外,IEEE Transactions on Medical Imaging 2025 年 1 月第 44 卷第 1 期第 338–347 页发表的《A New Benchmark: Clinical Uncertainty and Severity Aware Labeled Chest X-Ray Images With Multi-Relationship Graph Learning》,作者名单与数据集高度重合,论文里明确把 PhysioNet 上的这个页面标为数据集地址。它给出的不只是一组标签,还有一个利用空间关系与语义关系、并用专门损失函数处理专家不确定性的多关系图学习框架——换句话说,作者自己在论文里演示了这批标签该怎么用(§8.2)。
3.3 采集场景:上游是一家波士顿医院的真实急诊与住院
要理解人群,必须回到上游。MIMIC-CXR v2.0.0 的影像与报告来自波士顿的贝斯以色列女执事医疗中心(Beth Israel Deaconess Medical Center),全部为 DICOM 格式的胸部 X 光片配自由文本报告,共 377,110 张影像。MIMIC-CXR-JPG 则把这批 DICOM 转成 377,110 张 JPG,并给出由报告导出的结构化标签。
这批影像来自常规临床流程,不是筛查队列也不是研究队列。含义很直接:
| 属性 | 取值 | 对使用者的含义 |
|---|---|---|
| 机构 | 一家美国学术医疗中心 | 设备、投照规范、报告模板都单一 |
| 场景 | 急诊与住院的常规胸片 | 阳性比例高于筛查人群,床旁片占比不低 |
| 影像格式 | DICOM 原始,MIMIC-CXR-JPG 提供 JPG | 16 位深度转成 12 位,做过全局对比度均衡并以质量 95 存为 JPEG |
| 去标识 | 满足 HIPAA 安全港条款 | 日期被匿名化但保持时序一致 |
| 报告 | 半结构化自由文本,含所见与印象两节 | 模板化程度高,但也存在模板漂移与报告者差异 |
CAD-Chest 没有改变其中任何一项。它只是在这条链路的末端加了一层更细的标签,上游所有已知的选择偏倚都完整继承。
3.4 数据来源的三个层次
理解这份数据要先分清三层:报告文本层(原始,来自 MIMIC-CXR,未随包提供)、标注层(本次发布的核心,规则抽取的产物)、像素层(来自 MIMIC-CXR-JPG,未随包提供)。
第一层决定了标签的上限——报告里没写的疾病,再好的规则也抽不出来。第二层决定了标签的形态——四层结构、词表驱动、阈值可自定。第三层决定了它与影像的对齐方式——靠 dicom_id 一对一,且只对齐到「一次检查的一张图」,不对齐到病灶区域。
这三层各自有不同的获取条件。MIMIC-CXR 与 MIMIC-CXR-JPG 都是凭证访问,CAD-Chest 也是凭证访问,三份协议都要签。这也是它在工程上比一般公开标签集麻烦的地方:一次实验要跨三个项目页。
§4 它最独特的东西:把「有」拆成「有多重、在哪、有多确定」
4.1 稀缺性来自一个被长期忽略的事实
公开胸片标签的演进大致是:先有十四类二值标签,再有带不确定标记的标签,再到带报告原文的多模态版本。严重度与解剖位置这两项,一直停在论文的方法节里,从没进过公开发布的标签文件。原因不复杂——做这两项标注要么请医生重读(贵),要么建一套能稳定抽出来的规则(难),而两者的收益都不体现在「分类准确率」这个主指标上。
CAD-Chest 选的是第二条路,并且把规则本身也发布了:四个词表就是全部规则。这让它的稀缺性不是「有一批别人没有的标签」,而是「有一套别人没有的、可审查的标签口径」。你想改,改词表就行;你想复现,读词表就行。
4.2 差异化证据:不确定度不是一类,是一条刻度
这是它与 CheXpert 式体系最实质的分歧。CheXpert 把不确定当作独立的第三类,并约束阴性、阳性、不确定的概率和为 1;这在数学上很干净,但它隐含一个假设——所有不确定是同一种不确定。
临床不是这样。「可能」(probable/likely)与「不能排除」(not exclude / cannot be excluded)在报告里的分量完全不同:前者医生倾向有,后者医生只是不敢说没有。CAD-Chest 给这两组不同的赋值(0.7 与 0.3),等于承认了这条刻度。
| 表述强度 | 代表词 | 赋值 | 可以怎么用 |
|---|---|---|---|
| 明确 | positive、change in | 1.0 | 直接当阳性 |
| 倾向 | probable、likely、may、could、potential | 0.7 | 软标签或样本加权 |
| 弱可能 | might、possible | 0.5 | 半权,或单独成组观察 |
| 不敢排除 | not exclude、cannot be assessed、not rule out 等 | 0.3 | 建议单独建模,不要并进阳性 |
| 明确否认 | no、without 等在严重度词表中的对应项 | 0 | 显式阴性,与「未提及」区分 |
这张表最有用的两行是第二行与第四行。把 0.7 与 0.3 混成同一类「不确定」,等于把这条刻度又压回去了——那不如直接用上游自带的标签。
4.3 案例:同一句「肺水肿」的三种命运
设想三份报告都提到了肺水肿,二值标签体系给它们的标签完全一致(肺水肿 = 1)。在 CAD-Chest 的结构里,它们会变成三条完全不同的记录:
| 报告原文(示意) | level |
probability |
probability_score |
二值体系下的标签 |
|---|---|---|---|---|
| There is severe pulmonary edema | severe | positive | 正值 | 1 |
| There may be mild pulmonary edema | mild | may | 0.7 对应档 | 1 |
| Pulmonary edema cannot be excluded | — | cannot be excluded | 0.3 对应档 | 1 |
三行在二值体系里是同一个样本,在四层结构里是三个不同的监督信号。第一行可以用来学重度肺水肿的影像表现;第二行的影像征象可能很轻,用它当正样本会给模型注入噪声;第三行的影像甚至可能完全正常,把它当正样本等于教模型学会「什么都没有也是肺水肿」。
这不是一个假设性的担忧。MIMIC-CXR-JPG 自带的标签里,不确定类的处理策略(视作阴性、视作阳性、或单独成类)一直是这类研究的公开争议点,不同策略下模型排名会变。CAD-Chest 的价值就在于把选择的权利交还给使用者:官方只给赋值,不给阈值。
4.4 标注的粒度:疾病级清楚,空间级粗糙
疾病这一层的粒度是清楚的:每次检查一个字典,键是疾病名,值是四层信息,未抽到的疾病不出现,被报告明确否认的疾病会以严重度为「无」的形式出现。
空间这一层的粒度是粗的。location 存的是 left、basal、lower、lung 这类词,来自一份位置词表。它能回答「肺不张在左下肺」,不能回答「肺不张在图像的哪个区域」。而影像模型要的恰恰是后者。
| 粒度 | 它给的 | 影像模型常用要的 | 差距 |
|---|---|---|---|
| 检查级 | 一次检查一条记录 | 一次检查一条记录 | 无 |
| 疾病级 | 疾病名与四层属性 | 多标签向量 | 需自建映射 |
| 解剖级 | 位置词,最多两处 | 左右肺野、上中下野 | 可做粗对齐 |
| 区域级 | — | 边界框 | 缺 |
| 像素级 | — | 分割掩膜 | 缺 |
所以它能支撑的是「带条件的分类」(给定位置条件下的疾病分类、给定严重度条件下的特征学习),不是定位类任务。想做定位,得另外找带框的数据源,用这里的位置词做弱监督先验。
4.5 边界条件:什么情况下它不再适用
| 条件 | 是否适用 | 判断依据 |
|---|---|---|
| 你要做带严重度的影像分级 | 适用,且是少数选择 | 四档严重度来自真实报告 |
| 你要研究不确定样本的建模策略 | 适用 | 四级赋值给了可操作的刻度 |
| 你要做病灶检测或分割 | 不适用 | 无框无掩膜 |
| 你要在没有 MIMIC 访问权的环境里用 | 不适用 | 无影像无报告,标注孤立 |
| 你要跨机构验证泛化 | 不适用 | 上游单一机构 |
| 你要做纵向病程分析 | 谨慎 | study_order 有序但日期需从上游取,且去标识后绝对时间不可用 |
| 你要做儿科胸片 | 不适用 | 上游为成人急诊与住院场景 |
| 你要把标签当金标准做临床结论 | 不适用 | 标签继承自报告文本,且评估只覆盖 500 份报告 |
§5 怎么拿到:三层许可下的对齐流程
5.1 获取前提与目录结构
它的访问门槛比一般公开标签集高一档,官方页面在「访问」区写得很明确:
| 项 | 内容 |
|---|---|
| 访问策略 | 仅签署数据使用协议的凭证用户可访问文件 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 |
| 数据使用协议 | PhysioNet Credentialed Health Data Use Agreement 1.5.0 |
| 必需培训 | CITI「Data or Specimens Only Research」课程 |
| 上游依赖 | MIMIC-CXR Database v2.0.0(报告与元数据)、MIMIC-CXR-JPG(影像) |
| 版本与 DOI | 1.0,DOI 10.13026/44pd-vz36(最新版本 DOI 10.13026/kyfs-5608) |
也就是说,一次完整的实验要同时持有三份凭证访问权。缺 MIMIC-CXR-JPG 就只有标注没有像素;缺 MIMIC-CXR 就只有标注没有报告原文与检查元数据。
标注包本身的结构很扁平:一个 JSON 数据文件加四个词表文本文件,没有按患者或年份分的子目录。官方的文件目录在部分地区会返回不可访问(本次核实时返回 403),因此下表列出的文件名全部来自项目页「数据描述」一节的正文,而不是目录遍历:
| 路径(相对项目根) | 内容 | 说明 |
|---|---|---|
cad_disease.json |
四层标注本体 | 唯一的数据文件 |
disease_list.txt |
疾病词表 | 一种疾病多个写法,如 atelectasis 与 collapse |
severity_words.txt |
严重度词表 | 四档合并的原始词 |
uncertainty_words.txt |
不确定度词表 | 词与赋值的对应 |
location_words.txt |
位置词表 | left、right、lower 等 |
5.2 批量下载
PhysioNet 的凭证项目不能用匿名 wget,必须先登录拿到会话 Cookie:
#-- 1. 登录并保存 Cookie(会提示输入 PhysioNet 用户名与密码)
curl -c cookies.txt -X POST https://physionet.org/login/ \
-d "username=YOUR_USER&password=YOUR_PASS"
#-- 2. 用 Cookie 取标注文件;凭证项目的文件在 /files/ 下
curl -b cookies.txt -L \
-o cad_disease.json \
https://physionet.org/files/cad-chest/1.0/cad_disease.json
#-- 3. 四个词表同样逐个取
for f in disease_list severity_words uncertainty_words location_words; do
curl -b cookies.txt -L -o "${f}.txt" \
"https://physionet.org/files/cad-chest/1.0/${f}.txt"
done
第二段的 -L 不能省。凭证项目的文件请求会先跳到鉴权地址再回源,没有跟随重定向会拿到一个 HTML 页面而不是 JSON,而且返回码可能仍是 200——这是最容易浪费一小时的地方。取回文件后先确认第一行是 { 或词表内容,再往下走。
5.3 解析 JSON 并看清单条记录
import json
#-- 标注是逐次检查的列表;先确认顶层键与规模
with open('cad_disease.json') as f:
data = json.load(f)
print(type(data), len(data))
rec = data[0] if isinstance(data, list) else next(iter(data.values()))
print(rec['study_id'], rec['subject_id'], rec['dicom_id'],
rec['view'], rec['study_order'])
#-- 疾病实体是一个字典,键为疾病名
for name, ent in rec['entity'].items():
print(name, '|', ent['level'], '|', ent['location'],
'|', ent['probability'], ent['probability_score'])
官方示例给出的是「一位患者做一次检查」的结构,顶层字段共五项。真实文件是这结构的列表还是以 study_id 为键的字典,需要在下载后第一次读取时确认——这属于文件层的核验,官方页面没有说明外层容器形态。
5.4 转成通用的表结构
下游是常规训练管线时,通常要把四层标注摊成一个多标签矩阵。下面这段代码只做形态转换,不做任何统计:
import json
import pandas as pd
with open('cad_disease.json') as f:
data = json.load(f)
rows = []
for r in data:
for name, e in r.get('entity', {}).items():
rows.append({
'study_id': r['study_id'],
'subject_id': r['subject_id'],
'dicom_id': r['dicom_id'],
'view': r['view'],
'study_order': r['study_order'],
'disease': e.get('entity_name'),
'report_name': e.get('report_name'),
'level': e.get('level'),
'location': e.get('location'),
'level2': e.get('level2'),
'location2': e.get('location2'),
'probability': e.get('probability'),
'probability_score': e.get('probability_score'),
})
long = pd.DataFrame(rows)
print(long.shape, long['disease'].nunique())
这里刻意保留「长表」而不是直接摊成宽表,原因有三:一是同一疾病在一次检查里可能有 location2 与 level2 两个位点,摊成宽表会丢掉第二位点;二是 level 与 location 是数组不是标量,直接当列会把 ['left','basal'] 变成一个字符串;三是概率口径还没定,摊表时就把阈值写死,后面改口径要重跑全量。
从长表到训练标签的这一步必须显式做,并把口径写进方法节:
#-- 口径 A:只认明确阳性(示例阈值,换口径请显式改)
POS = {'positive': 1.0, 'probable': 0.7, 'likely': 0.7}
long['y_soft'] = long['probability'].map(lambda p: POS.get(p, 0.0))
long['y_hard'] = (long['y_soft'] >= 0.7).astype(int)
#-- 口径 B:把 severe 与 moderate 合并成「有临床意义」
long['severe_flag'] = long['level'].apply(
lambda lv: int(isinstance(lv, list)
and any(w in ('severe', 'massive', 'acute',
'moderate', 'moderately',
'moderate to severe', 'moderate to large')
for w in lv)))
5.5 与影像、报告的对齐
对齐靠三个键,且三者不能互相替代:
| 目标 | 用哪个键 | 上游来源 | 说明 |
|---|---|---|---|
| 像素 | dicom_id |
MIMIC-CXR-JPG | JPG 文件名主干等于 dicom_id |
| 报告与检查元数据 | study_id |
MIMIC-CXR | 一次检查对应一份报告 |
| 患者分组 | subject_id |
MIMIC-CXR | 划分数据集必须按它分组 |
MIMIC-CXR-JPG 的目录是十顶层文件夹(p10 至 p19),每个下含约 6500 个以患者标识命名的子目录,再下一层是研究目录,JPG 文件以 dicom_id 命名。要把 subject_id 落到具体路径,得先读 MIMIC-CXR-JPG 的 mimic-cxr-2.0.0-metadata.csv.gz,它给出 dicom_id、subject_id、study_id 三者的对照,以及 Rows、Columns、ViewPosition、StudyDate 等字段。
import pandas as pd
#-- 上游元数据给出 dicom_id -> subject_id/study_id 与逐图尺寸
meta = pd.read_csv('mimic-cxr-2.0.0-metadata.csv.gz')
print(meta.columns.tolist())
print(meta[['dicom_id', 'subject_id', 'study_id',
'Rows', 'Columns', 'ViewPosition']].head())
#-- 与标注按 dicom_id 对齐
lab = pd.DataFrame([{
'dicom_id': r['dicom_id'], 'study_id': r['study_id'],
'subject_id': r['subject_id'], 'view': r['view']}
for r in data])
m = lab.merge(meta, on='dicom_id', how='left', suffixes=('', '_up'))
print(len(lab), len(m), m['Rows'].isna().sum())
最后一行打印的三件事分别是标注条数、对齐后条数、以及没对上的条数。这个数字必须看:只要它不为零,就说明有一批标注落不到像素,样本量也就不是你以为的那个数。
分辨率没有统一值。MIMIC-CXR-JPG 的元数据表里 Rows 与 Columns 是按图记录的像素高度与宽度,也就是说不同影像尺寸不同;CAD-Chest 官方页面没有给出统一的分辨率数值,这一点列入 §10 的未核验项。
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 下载 | 匿名 wget 直接取文件 | 拿到登录页 HTML 且返回 200 | 带 Cookie 并跟随重定向,取回后校验首字符 |
| 划分 | 按 study_id 随机切分 |
同一患者的多次检查落在两侧,结果虚高 | 按 subject_id 分组切分 |
| 标签口径 | 把 probability 等于 uncertain 的全当阳性 |
把「不能排除」当成确诊 | 按 0.7 / 0.5 / 0.3 分级,口径写进方法节 |
| 严重度 | 直接把 level 当等级名用 |
mild 与 minimal 被当成两档 |
先按四档合并表映射 |
| 对齐 | 用 study_id 去取 JPG |
一次检查可能含多张影像,取到错图 | 用 dicom_id 对齐到单张影像 |
§6 与库内条目的关系
6.1 关系图谱
CAD-Chest 在胸片类数据集里的位置,可以用「是否含影像 × 标签维度数」两个轴摆出来:
| 条目 | 影像 | 标签维度 | 与 CAD-Chest 的关系 |
|---|---|---|---|
| MIMIC-CXR-Ext-MIMIC-CXR-DB | 有(关联上游) | 二值标签加报告 | 上游同一来源,它管关联、CAD-Chest 管细化 |
| CheXpert Plus | 有 | 二值与不确定,附报告文本 | 直接对照:同上游,标签形态不同 |
| CXRGraph | 有 | 实体与关系标注 | 同为报告结构化,一个做关系、一个做属性 |
| ReXGradient-160K | 有 | 报告驱动 | 同为报告派生的规模化版本 |
| CRADI | 有 | 多征象弱监督 | 同为弱监督标签,覆盖征象不同 |
| OpenI IU X-Ray | 有 | 报告配对 | 互补:规模小但含另一家机构 |
| MIMIC-Ext-CXR-QBA | 有 | 视觉问答三元组 | 同为 MIMIC-CXR 派生的结构化标注 |
这条关系线要说的是:同上游的派生集很多,绝大多数在「有没有影像」与「规模」上竞争,只有它在「标签维度」这一列上加码。
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 同一个上游的其他派生 | MIMIC-CXR、mimic-cxr-jpg |
§6.1 表与 §3.3 |
| 带不确定标记的对照 | CheXpert、uncertain |
§2.6 与 §4.2 |
| 报告结构化的另一条路 | RadGraph、CXRGraph、关系抽取 |
§6.1 表 |
| 带框或带掩膜的胸片标注 | VinBigData、目标检测、分割 |
§4.4 的粒度表 |
| 视觉问答与多模态基准 | VQA、report generation |
§6.1 表 |
| 凭证访问与协议细节 | credentialed、DUA、CITI |
§5.1 |
6.3 与同上游条目的分工判据
| 任务 | 主粮仓该用什么 | CAD-Chest 的位置 | 原因 |
|---|---|---|---|
| 常规多标签分类预训练 | 带影像的大规模胸片集 | 不参与 | 它不含影像,且标签是补充层 |
| 不确定样本处理策略研究 | 上游自带标签 | 主力 | 四级赋值是唯一可用的刻度 |
| 严重度分级 | 无可替代 | 主力 | 公开标签里几乎只有它给严重度 |
| 位置条件化分类 | 无可替代 | 主力 | 位置词支持,粗粒度但可用 |
| 报告生成 | 带报告原文的配对集 | 辅助 | 可当生成结果的校验集 |
| 病灶定位与分割 | 带框或带掩膜的集 | 不适用 | 无空间标注 |
| 跨机构泛化 | 多中心集 | 不适用 | 上游单一机构 |
| 影像-文本一致性 | 配对集 | 主力之一 | 四层标注可直接与报告原文对拍 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个常见的误判:把「规则抽取的标签」当成「质量差的同义词」。规则法在放射报告结构化这个具体任务上并不天然劣于人工——报告本身就是半结构化文本,模板化程度高,词表加语法分析能覆盖的表述空间是有限且可枚举的。真正的问题不在「用规则」,而在「规则错了没人改」:它上线至今只有一个版本,没有修订记录,也没有公开的勘误通道之外的更新。
这个校正会改变五维评分的读法。它在「标签维度」上拿高分,在「可独立使用」上拿低分。把这两件事混在一起看,会得出「不值得用」或「可以放心用」两种同样错误的结论。
7.1 五维评分
按数据集评价的常用维度打分,每项 1–5 分,分数针对「作为胸片影像研究的补充标签」这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 5 | 65,379 名患者、227,827 次检查,覆盖上游全量 |
| 标注质量 | 3 | 规则抽取加 500 份报告医师评估,缺框级与像素级校验 |
| 任务适配 | 4 | 严重度与不确定度几乎无可替代,定位类任务完全不支持 |
| 文档完整 | 4 | 方法、词表、字段、示例齐全,但外层容器形态未说明 |
| 可获取性 | 2 | 凭证访问、需培训、须同时持有三份上游权限 |
五项合计 18 分(满分 25)。这个分数结构的含义是:它的门槛在「拿到」,价值在「拿到之后的标签维度」,风险在「标签本身的校验深度」。
7.2 标注质量的两层
第一层是官方做过的校验。作者请医生评估了随机抽出的 500 份放射报告及对应的异常、严重度、不确定度标签,从这 500 份里抽出约 2645 条异常描述,统计五类错标的出现次数:
| 错标类型 | 出现次数 | 含义 |
|---|---|---|
| 漏抽异常 | 59 | 报告里写了,方法没抽出来 |
| 漏抽严重度 | 16 | 异常抽对了,严重度没抽到 |
| 抽错异常 | 7 | 抽出报告里没有的异常 |
| 抽错严重度 | 2 | 异常抽对了,严重度判错 |
| 抽错不确定度 | 54 | 异常抽对了,不确定度判错 |
官方按 2645 条描述为分母给出了各项占比,最高的一项是漏抽异常,在百分之二量级;抽错严重度只有 2 次,是五项里最低的。结论是:标签在绝大多数情况下正确,错误集中在漏抽异常与不确定度判断两处。
第二层是官方没有做的校验。这里有三件事必须自己心里有数:
| 未校验之处 | 表现 | 影响 |
|---|---|---|
| 无影像侧校验 | 评估只比对报告文本与抽取结果 | 报告与影像不一致时,标签会忠实反映报告的错误 |
| 抽样只覆盖 500 份 | 相对 227,827 次检查是极小的一部分 | 罕见表述的错标率无法从这份评估推出 |
| 无跨读者一致性检验 | 未报告多名评估者之间的一致程度 | 「抽错不确定度」这一项的判断边界未被量化 |
第二层里最该记住的是第一行。它的全部标签都是报告的影子:报告漏写的 incidental 征象、模板里残留的上一次描述、前后两次检查的对比句被误读,都会原样进入标签。
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 上游单一机构 | 全部来自波士顿一家医疗中心 | 设备、投照规范、报告风格单一 |
| 报告者差异 | 报告模板化程度高但存在漂移 | 同一表述在不同年份可能指向不同严重度 |
| 体位覆盖不均 | 官方统计只在 AP 与 PA 两种体位上做 | 侧位片的标注覆盖未在页面上说明 |
| 疾病覆盖不均 | 统计表覆盖 18 种疾病 | 表外疾病即使被抽出,也没有对应统计 |
| 患者内相关 | 一名患者可有多次检查 | 按检查随机切分会泄漏 |
| 标签无修订 | 只有 1.0 一个版本 | 已知错标不会被修正 |
| 影像不在包内 | 需另取 MIMIC-CXR-JPG | 对齐失败会静默减少样本 |
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 与上游标签对拍 | 同一批影像上比较 CAD-Chest 与 CheXpert 式标签 | 来源相同,差异只来自口径 | 差异不能直接判谁对 |
| 不确定度建模消融 | 按 0.7 / 0.5 / 0.3 三档分别建模 | 刻度是官方给的,可复现 | 阈值选择会显著影响结果 |
| 严重度分级 | 用四档严重度训练分级头 | 公开标签里几乎唯一的选择 | 严重度在报告中的覆盖不均 |
| 报告生成结果校验 | 用四层标注检查生成报告的事实一致性 | 结构化字段便于自动比对 | 只能查被词表覆盖的疾病 |
配套论文给出的是第四行之外的一条路:作者用多关系图学习框架同时利用空间关系与语义关系,并用专门的损失函数处理专家不确定性,报告了在胸片诊断与模型可解释性上的改进。这说明这批标签在作者手里是被当作「带权监督信号」用的,而不是被压成二值用的——这恰恰是最容易被后来的使用者忽略的一点。
反过来也要防止把论文成绩当成标签质量的证明。论文报告的是「用这批标签加这个框架得到的成绩」,不是「这批标签有多准」;两者之间隔着一个方法设计,不能直接换算。
7.5 它为何只有一版却仍值得用
它没有修订、没有扩版、也没有社区维护记录,原因是它的价值不依赖于迭代:它占住的是「公开胸片标签里少数带严重度与不确定度刻度的一个」。上游 MIMIC-CXR 与 MIMIC-CXR-JPG 本身也长期停在 2.0.0 与 2.1.0,只要上游不变,重抽的收益就有限。
真正会让它过时的不是更好的规则,而是另一种标签来源——比如由大模型直接从报告抽取、或由多位医生重新判读的公开标注集出现。在那之前,它是这个细分位置上为数不多的选项。
§8 生态位与历史
8.1 历史沿革
| 时间 | 事件 | 说明 |
|---|---|---|
| 2019 | 上游 MIMIC-CXR 与 MIMIC-CXR-JPG 发布 | 报告与影像首次大规模开放,标签为二值加不确定 |
| 2019 | CheXpert 提出不确定标签的三类处理 | 确立了「不确定是一类」的主流范式 |
| 2023-12-08 | CAD-Chest 1.0 上线 | 把不确定拆成刻度、加上严重度与位置 |
| 2025-01 | 配套论文发表于 IEEE TMI | 给出多关系图学习基准 |
它出现在 2023 年底,正是胸片大模型与视觉语言模型开始大量使用 MIMIC-CXR 的时段。这批工作共同暴露了一个问题:模型在报告生成与判读上的瓶颈,越来越不在「有没有标签」,而在「标签够不够细」。CAD-Chest 是对这个问题的直接回应。
官方指标页显示,项目自 2023 年 12 月开始统计访问,累计独立注册用户浏览 296 次;Scholar Data 提供的实验性指标里,被引 0 次、非学术提及 1 次、FAIR 评估 FUJI 得分 73.0、2025 年数据集影响力指数 0.9。这些数字的量级说明一件事:它在指标意义上的传播还很有限,与它的上游完全不在一个量级。把它当作「被广泛验证的基准」是不准确的。
8.2 与挑战赛及论文的关系
它没有充当任何公开挑战赛的官方数据来源,这一点与很多同期数据集不同。它的出场方式是「论文的配套资源」:先有论文方法与结果,再把标签以 PhysioNet 项目的形式发布,论文正文里直接给出项目地址。
这个顺序有实际影响。作为挑战赛来源的数据集,通常会有明确的任务定义、官方划分与评测脚本;作为论文配套资源发布的数据集,这三样都要使用者自己补。它的官方页面没有发布训练测试划分,也没有评测脚本——所有的口径工作都在下游。
8.3 生态位:补充层而不是底座
| 角色 | 底座 | 补充层 |
|---|---|---|
| 典型用法 | 大规模训练、预训练、基准评测 | 标签细化、条件化建模、校准研究 |
| 需要的前提 | 影像、规模、官方划分 | 标签维度、可审查的词表 |
| 代表 | 带影像的大规模胸片集 | 本数据集 |
| 失败模式 | 标签太粗无法回答细分问题 | 离不开底座,单独使用时无像素可用 |
它坐在右边这一列。把补充层当底座用,会立刻遇到「没有影像」;把底座当补充层用,会立刻遇到「没有严重度」。两者不能互换,正确用法是把它的四层标注 join 到底座上。
8.4 谁在用它,用来做什么
从公开可见的信息看,使用者集中在三类:做不确定度建模与校准的方法组(要它的四级赋值)、做严重度感知分类的影像组(要它的四档严重度)、做报告生成事实一致性的多模态组(要它的结构化字段做校验)。
第三类常被低估。报告生成模型最难评估的是「生成的内容与影像是否一致」,而四层标注恰好提供了一组可自动比对的结构化事实:抽出的疾病名、位置、严重度,都可以直接去生成文本里找对应表述。这个用法不需要影像参与,因此也是唯一绕开「必须持有三份凭证」的路径之一——只要你有标注文件与生成结果就能做。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 影像算法研究者 | 读项目页方法与字段,跑通 §5.3 的解析 | 按 subject_id 分组,建立不确定度分档基线 |
先定概率口径再动手(§5.4) |
| 报告 NLP 研究者 | 读四个词表,理解抽取口径 | 用四层标注校验抽取或生成结果 | 词表即规则,改词表等于改口径 |
| 临床决策支持工程师 | 确认三份凭证是否齐备 | 打通 dicom_id 到 JPG 的对齐并统计对不上率 |
别把标签当金标准(§7.2) |
9.2 一条最短的可用流程
#-- 1. 三份凭证:CAD-Chest、MIMIC-CXR、MIMIC-CXR-JPG 都要签
#-- 并确认 CITI 培训已完成
#-- 2. 取标注与词表(带 Cookie,跟随重定向)
curl -b cookies.txt -L -o cad_disease.json \
https://physionet.org/files/cad-chest/1.0/cad_disease.json
head -c 200 cad_disease.json #-- 确认不是 HTML
#-- 3. 取上游元数据,建立 dicom_id -> 路径 的对照
curl -b cookies.txt -L -o mimic-cxr-2.0.0-metadata.csv.gz \
https://physionet.org/files/mimic-cxr-jpg/2.1.0/mimic-cxr-2.0.0-metadata.csv.gz
import json
import pandas as pd
with open('cad_disease.json') as f:
data = json.load(f)
#-- 建长表,并按 subject_id 分组划分(示例:取模分组,换口径请显式改)
rows = [{'subject_id': r['subject_id'], 'study_id': r['study_id'],
'dicom_id': r['dicom_id'], 'view': r['view'],
'disease': e.get('entity_name'), 'level': e.get('level'),
'probability': e.get('probability')}
for r in data for e in r.get('entity', {}).values()]
long = pd.DataFrame(rows)
subs = long['subject_id'].unique()
fold = {s: (i % 5) for i, s in enumerate(sorted(subs))}
long['fold'] = long['subject_id'].map(fold)
print(long.groupby('fold')['study_id'].nunique())
最后一行打印每个折里的检查数,用来确认划分是按人而不是按检查落下去的。如果每个折的检查数与该折的患者数不成比例地悬殊,说明划分口径写错了。
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Zhang, M., Hu, X., Gu, L., Harada, T., Kobayashi, K., Summers, R., & Zhu, Y. (2023). CAD-Chest: Comprehensive Annotation of Diseases based on MIMIC-CXR Radiology Report (version 1.0). PhysioNet. doi:10.13026/44pd-vz36 |
| 上游 | 同时使用 MIMIC-CXR v2.0.0 与 MIMIC-CXR-JPG 时须一并引用,官方页面在 Parent Projects 一节明确要求 |
| 平台 | PhysioNet 平台综述论文,按项目页 Cite 按钮生成 |
| 配套论文 | IEEE Transactions on Medical Imaging, 44(1):338–347, 2025 |
写论文时建议同时注明:使用的版本号(1.0)、不确定度取的是概率赋值还是概率分值、阈值取多少、以及划分是否按 subject_id。这四件事决定结果能否被复现,而官方页面一件都没有给定。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方项目页、官方指标页与上游 MIMIC-CXR / MIMIC-CXR-JPG 项目页 |
| 文件核验 | 项目页「数据描述」一节正文点名的五个文件名已核验;文件目录本身在本次核实时返回不可访问,未做目录遍历 |
| 不一致说明 | CAD-Chest 记 227,827 个 study_id,MIMIC-CXR v2.0.0 摘要记 227,835 次检查,MIMIC-CXR-JPG 标注节记 227,943 份报告;三处计数口径不同,本文在涉及 CAD-Chest 时一律用 227,827 |
| 论文信息 | 仅核对了 IEEE TMI 论文的题名、卷期页与作者名单,未读全文;论文内部结果未引用 |
| 未核验内容 | 影像统一分辨率数值(上游按图记录像素尺寸)、cad_disease.json 外层容器形态、侧位片的标注覆盖、表外疾病的抽取情况、各疾病的逐类计数 |
| 图像 | 无配图;封面为生成式提示词,不含真实影像 |
| 免责 | 本文不构成临床建议;数据使用须遵守 PhysioNet Credentialed Health Data License 1.5.0 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它是带影像的胸片数据集」 | 只有标注与词表,影像须另取 MIMIC-CXR-JPG | 官方使用说明要求按 subject_id、study_id 去找影像 |
| 「它的标签是医生重新读片标出来的」 | 规则从报告文本抽取,医生只做了 500 份抽样评估 | 官方方法节写明用 NLTK 与 spaCy 抽取 |
| 「不确定度只有一类」 | 四级赋值 1.0 / 0.7 / 0.5 / 0.3,另有一列对应明确否认 | 官方不确定度词表给出了分级赋值 |
「level 就是严重度等级」 |
level 存的是原始词(mild、minimal),等级需按四档合并表映射 |
官方严重度词表按语义合并为四档 |
「probability_score 是概率」 |
只是「越大越确定」的分值,阈值由使用者自定 | 官方说明示例里 positive 为 3、without 为 -3 |
| 「一次检查只有一条标注」 | 一次检查的 entity 里可以有多个疾病,每种疾病还可能有第二位点 |
官方示例同时含气胸、肺不张与肺水肿 |
| 「没有这条记录就是没有这个病」 | 被报告明确否认的疾病会以严重度为「无」的形式出现 | 示例中 edema 的 probability 为 without |
「可以按 study_id 随机切分」 |
一名患者有多次检查,须按 subject_id 分组 |
官方字段说明 subject_id 唯一标识患者 |
| 「它有病灶框」 | 全程无框无掩膜,位置是 left、basal 一类的词 | 官方位置词表只包含位置词 |
| 「可以直接商用或投产」 | 凭证访问,须签协议并完成 CITI 培训 | 官方访问区列出许可、协议与必需培训 |
| 「227,827 就是报告总数」 | 这是 CAD-Chest 自己记的 study_id 数,与上游三处计数口径不同 |
见 §10 的不一致说明 |
| 「CAD-Chest 疾病标注集已经过社区多轮修订」 | 版本历史只有 1.0 一条,无修订记录 | 官方版本区只有一条记录 |
FAQ
Q1:CAD-Chest 里到底有没有胸片图像?
没有。包里只有一个 JSON 标注文件和四个词表文本文件。影像要按 dicom_id 从 MIMIC-CXR-JPG 取,报告原文与检查元数据要按 study_id、subject_id 从 MIMIC-CXR 取。因此一次完整的实验需要同时持有三个 PhysioNet 凭证项目的访问权,并完成 CITI 培训。
Q2:不确定度的四级赋值该怎么用?
官方给的是「越大越确定」的刻度:明确为 1.0,倾向为 0.7,弱可能为 0.5,不敢排除为 0.3,另有一类对应明确否认。官方没有给阈值,说明里明确说使用者可以按自己的需要设定。实践上建议至少把 0.7 与 0.3 分开处理——把「可能」和「不能排除」并成同一类,等于把这条刻度又压回上游的单值不确定标记。
Q3:严重度字段为什么不是等级名?
因为 level 存的是从报告里抽出的原始词,比如 mild、minimal、severe、acute。官方另外给了一张合并表,把语义相近的词归成 Mild、Moderate、Severe、No 四档。想拿到等级必须自己做映射;直接用原始词会把 mild 与 minimal 误当成两个不同等级。
Q4:它的标签有多准?
官方请医生评估了随机抽出的 500 份报告及对应标签,从中抽出约 2645 条异常描述,统计出五类错标的次数:漏抽异常 59 次、漏抽严重度 16 次、抽错异常 7 次、抽错严重度 2 次、抽错不确定度 54 次。官方按 2645 条为分母给出的占比,最高的一项是漏抽异常,在百分之二量级。要注意这份评估只比对报告文本与抽取结果,没有影像侧的校验。
Q5:能不能拿它做目标检测或分割?
不能。它的位置字段是 left、right、lower、basal 这样的解剖位置词,最多支持 location 与 location2 两处,既没有边界框也没有像素级掩膜。它能支撑的是「给定位置条件下的分类」,定位类任务需要另外找带框或带掩膜的数据源。
Q6:为什么我下载下来的是一个网页而不是 JSON?
凭证项目的文件请求会先跳到鉴权地址再回源。匿名请求、或未跟随重定向的请求,会拿到登录页 HTML,而返回码可能仍是 200。做法是带上登录后的 Cookie 并加跟随重定向参数,拿到文件后先看首字符是否为 JSON 的结构符号再继续。
Q7:它和上游自带的 CheXpert 式标签是什么关系?
是同一批影像上的两套标签。上游用 NegBio 与 CheXpert 生成的标签是二值加单值不确定标记,覆盖十四个类别;CAD-Chest 用自建词表与规则抽出四层信息,官方统计表覆盖十八种疾病。两者可以互相对拍,用来研究「标签口径不同会怎样改变模型」这类问题。
Q8:划分训练集和测试集要注意什么?
按 subject_id 分组,不按 study_id 随机切。一名患者可以有多次检查,多次检查共享同一批设备设置、同一套报告风格,甚至相邻检查的描述会互相引用。按检查随机切会把同一名患者送到两侧,得到的成绩会偏乐观。
Q9:为什么它只有 1.0 一个版本?
官方版本区只有 2023 年 12 月 8 日发布的 1.0,没有修订记录。从数据来源看,上游 MIMIC-CXR 与 MIMIC-CXR-JPG 本身也长期停在 2.0.0 与 2.1.0,只要上游不变,重抽的收益有限。这也意味着已知的错标不会被修正。
Q10:它的许可允许商业使用吗?
许可为 PhysioNet Credentialed Health Data License 1.5.0,要求签署数据使用协议 1.5.0 并完成 CITI 培训,且仅限签署协议的凭证用户访问。这是研究用途的受限访问许可,不是开放许可;能否用于商业场景须以许可全文与协议条款为准,不能按「公开数据集」的默认理解处理。
术语表
| 术语 | 解释 |
|---|---|
| 胸片 / 胸部 X 光 | 胸部 X 线摄影,全球最常见的影像检查 |
| AP 体位 | 前后位投照,antero-posterior,常见于床旁片 |
| PA 体位 | 后前位投照,postero-anterior,标准站立位胸片 |
| 侧位 | lateral,从左或右侧投照,用于定位与前后重叠区 |
| DICOM | 医学影像的标准文件格式,含像素与大量元数据 |
dicom_id |
单个 DICOM 文件的标识,也是 JPG 文件的文件名主干 |
study_id |
一次影像检查的标识,对应一份放射报告 |
subject_id |
一名患者的标识,划分数据集时的分组键 |
| 放射报告 | 放射科医生写的自由文本,含所见与印象两节 |
| 弱监督标签 | 从文本或其他间接来源自动导出的标签,不靠人工逐例标注 |
| 规则抽取 | 用词表匹配加语法分析从文本中抽出结构化字段 |
| NLTK | Python 自然语言处理工具包,官方用于文本处理 |
| spaCy | 工业级自然语言处理库,官方用于实体抽取 |
| NegBio | 从放射报告检测否定与不确定的开源规则工具 |
| CheXpert | 从放射报告抽取十四类标签的开源规则工具 |
| 不确定度 | 医生对自己判断的确定程度 |
| 严重度 | 疾病的程度,官方合并为四档 |
| 概率赋值 | 不确定度的连续刻度,取值 1.0 / 0.7 / 0.5 / 0.3 |
| 概率分值 | probability_score,越大越确定,阈值自定 |
| 长表 | 一行一个疾病实体的表结构,避免摊宽表丢失第二位点 |
| 凭证访问 | 须签署数据使用协议并通过审核才能下载 |
| CITI 培训 | 人体研究伦理与数据安全的在线课程 |
| HIPAA 安全港 | 美国健康信息去标识的法定标准之一 |
附录 A:核心数字核对表
| 数字 | 出处 |
|---|---|
65,379 个 subject_id |
官方数据描述节 |
227,827 个 study_id |
官方数据描述节 |
63,903 个 subject_id(AP 与 PA 体位) |
官方数据描述节 |
217,982 个 study_id(AP 与 PA 体位) |
官方数据描述节 |
| 18 种疾病(统计表覆盖) | 官方数据描述节 |
| 500 份报告(医师评估样本) | 官方评估节 |
| 约 2645 条异常描述 | 官方评估节 |
| 漏抽异常 59 次 | 官方评估表 |
| 抽错不确定度 54 次 | 官方评估表 |
| 抽错严重度 2 次 | 官方评估表 |
| 14 个类别(上游标注的对照口径) | 官方背景节与 MIMIC-CXR-JPG 页面 |
| 377,110 张影像 | MIMIC-CXR v2.0.0 与 MIMIC-CXR-JPG 摘要 |
| 四个严重度合并等级 | 官方严重度词表说明 |
| 四级不确定度赋值 1.0 / 0.7 / 0.5 / 0.3 | 官方不确定度词表说明 |
| 五个文件(一个 JSON 加四个词表) | 官方数据描述节点名 |
| 2023 年 12 月 8 日发布,版本 1.0 | 官方版本区与引用区 |
| DOI 10.13026/44pd-vz36 | 官方访问区 DOI(v1.0) |
| 累计浏览 296 次 | 官方指标页 |
| FUJI 得分 73.0 | 官方指标页(Scholar Data,实验性) |
编辑说明
本文的核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页、官方指标页,以及上游 MIMIC-CXR v2.0.0 与 MIMIC-CXR-JPG 的项目页。规模、结构、边界三类数字均取自上述页面的正文,未做自行计算;官方给出的疾病与不确定度分布明细表按写作规范未予转载,只在正文中说明其覆盖范围。
本次核实时,项目的文件目录返回不可访问状态,因此五个文件名来自项目页「数据描述」一节的正文,未做目录遍历;影像的统一分辨率数值在官方页面与上游页面均未给出,上游按图记录像素尺寸,已列入未核验内容。三处计数不一致(227,827 / 227,835 / 227,943)已在 §10 明确说明取舍。配套论文只核对了题名、卷期页与作者名单,未读全文,论文内部结果未引用。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- mimic-cxr-ext-mimic-cxr-db — 共享标签:医学影像 / X光影像 / 医疗NLP / 临床文本
- chexpert-plus — 共享标签:医学影像 / X光影像 / 临床文本 / 影像-文本对齐
- cxrgraph — 共享标签:影像-文本对齐 / 命名实体识别 / X光影像
- openi-iu-xray — 共享标签:医学影像 / X光影像 / 医疗NLP / 多模态
- rexgradient-160k — 共享标签:医学影像 / X光影像 / 临床文本 / 影像-文本对齐
- cradi — 共享标签:医学影像 / X光影像 / 医疗NLP / 临床文本
- vinbigdata-cxr — 共享标签:医学影像 / X光影像 / 挑战赛数据集
- medical-cxr-vqa-dataset — 共享标签:医学影像 / X光影像 / 多模态
- mimic-ext-cxr-qba — 共享标签:多模态 / 影像-文本对齐 / X光影像
- chestagentbench — 共享标签:X光影像 / 医学影像 / 评测基准
- chexchonet — 共享标签:医学影像 / X光影像 / 心血管疾病 / 多模态
- revapo — 共享标签:医学影像 / 多模态 / 影像-文本对齐 / 医疗NLP
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

