ROCO — 放射学图文多模态数据集 AI-Ready Wikipedia

81,825 张放射学图像配英文图注与 UMLS 概念标注的多模态数据集

来源 PubMed Central Open Access Subset / 多特蒙德应用科学与艺术大学 url: https://github.com/razorx89/roco-dataset发布时间: 2026-09-12最后更新: 2026-09-25 阅读 41
ROCO — 放射学图文多模态数据集 AI-Ready Wikipedia

信息速览

数据集名称ROCO — 放射学图文多模态数据集 AI-Ready Wikipedia
数据类型81,825 张放射学图像,6,127 张 out-of-class 图像,ROCOv2 79,789 张图像,1,947 个 UMLS 概念,约 6.3 GB 图像包,免费开放下载
规模不适用(源自公开文献图像,无患者队列)
接入方式PubMed Central Open Access Subset / 多特蒙德应用科学与艺术大学 url: https://github.com/razorx89/roco-dataset
AI 就绪度

数据集封面

ROCO(Radiology Objects in COntext)— 放射学图文多模态数据集 AI-Ready Wikipedia

INFOBOX

数据集名称 ROCO(Radiology Objects in COntext)/ ROCOv2
英文全称 Radiology Objects in COntext
别名/简称 ROCO、ROCOv2、roco-dataset
疾病分类 不限定单一疾病(全身多系统放射学影像,UMLS 多概念标注;高频概念覆盖 Chest、Abdomen 等部位,见 §2.1)
SNOMED CT 无官方 SNOMED 映射(原生标注体系为 UMLS CUI + SemTypes,示例见 §2.1b)
数据模态 医学影像(CT、MRI、X-Ray、超声、透视、PET、乳腺摄影、血管造影、PET-CT)+ 英文图注文本
AI 任务类型 多标签概念检测、图像描述生成(caption prediction)、图文跨模态检索、医学视觉语言预训练、图像分类与标注
样本总数 原始版 81,825 张放射学图像 + 6,127 张 out-of-class 图像;ROCOv2 为 79,789 张
数据大小 ROCOv2 图像包约 6.3 GB(train 4.6 GB / valid 860.4 MB / test 857.8 MB);v1 仓库本体 12.7 MB(图像按 PMC 链接下载)
数据格式 JPG(PMC 出版原图)+ CSV(captions / concepts)+ ZIP(ROCOv2 图像包)
许可证 图像遵循来源论文许可(ROCOv2 仅收录 CC BY / CC BY-NC 图像)
访问级别 开放(GitHub 脚本下载 / Zenodo 打包下载;ImageCLEF 竞赛版需签署 user agreement)
DUO 标签 NRES(无限制使用;数据集无正式 DUO 声明,实际复用边界以图像来源论文许可为准)
语言 英文(图注)
首发日期 2018-09-03(GitHub 仓库创建)/ 2018-10-17(论文在线发表)
最后更新 2024-06-10(ROCOv2,Scientific Data 论文接收)
发布机构 多特蒙德应用科学与艺术大学(University of Applied Sciences and Arts Dortmund)
官方主页 https://github.com/razorx89/roco-dataset
下载地址 https://doi.org/10.5281/ZENODO.8333644(ROCOv2 打包版)
DOI 10.1007/978-3-030-01364-6_20(原始论文)/ 10.1038/s41597-024-03496-6(ROCOv2 论文)/ 10.5281/ZENODO.8333644(ROCOv2 数据)
引用次数 251+(Mendeley,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— ROCOv2 提供官方划分、打包下载与 baseline 代码;扣分项:图像需自行 resize/crop、标签概念有自动提取噪声、v1 版无统一官方 test 划分
页面状态 published

§0 E-E-A-T 可信度声明

  • 医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(UMLS 概念体系与放射学检查任务)、§7 质量评估与偏倚分析。
  • 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
  • 审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。ROCO 图像取自 PubMed Central 开放获取子集,各图像的著作权与再分发边界遵循其来源论文许可(ROCOv2 仅收录 CC BY / CC BY-NC 图像);ROCO 本体不要求注册或签署 DUA,但 ImageCLEF 竞赛版数据需签署 user agreement。具体使用限制以数据集官方协议与图像来源许可为准。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? ROCO 是一个"图片 + 说明文字 + 医学概念标签"三合一的放射学数据集。它的 81,825 张图像全部取自已公开发表的开放获取医学论文(PubMed Central),覆盖 CT、MRI、X 射线、超声等多种检查手段。每张图都带着论文里的原始图注,以及从图注中提取出的标准化医学概念编号(UMLS CUI)——相当于告诉机器"这张图讲的是什么解剖部位、什么检查类型"。

为什么重要? 在 ROCO 出现之前,医学图像描述生成(image captioning)研究严重缺数据:放射报告数据集要么模态单一(只有胸片),要么需要繁琐的临床机构审批。ROCO 用"文献挖矿"思路绕开了这两道门槛——图像著作权随论文许可开放,图注由医学专业人员撰写,一个仓库就装下了全身多系统影像。它也是 ImageCLEFmedical Caption 2019-2023 五届国际竞赛的官方数据基座,是医学多模态领域被反复验证过的"标准练兵场"。

我能用它做什么? 训练医学图像自动标注/描述模型、做多标签概念检测(输入图像 → 输出 UMLS 概念集合)、做图文跨模态检索(“帮我找类似的 CT 图像”)、或者作为医学视觉语言模型(VLM)的预训练语料。如果你要做结构化放射报告生成的原型系统,ROCO 是目前获取成本最低的大规模起步数据。

§1.1 技术摘要

ROCO 由德国多特蒙德应用科学与艺术大学团队(Pelka、Koitka、Rückert、Nensa、Friedrich)于 2018 年发布。构建流程分四步:首先从 PubMed Central 开放获取子集抓取全部图像-图注对(起点为约 600 万对量级的文献池);然后用两个经微调的深度卷积神经网络二分类器分别过滤复合图(compound figure)与非放射学图像;接着将图注文本经预处理转为关键词,用 QuickUMLS 映射为 UMLS CUI 与语义类型(SemTypes),并对假阳性做人工复核;最终得到 81,825 张放射学图像,另附 6,127 张合成影像与数字艺术等 out-of-class 图像用于判别任务。2024 年团队发布 ROCOv2(Scientific Data):以 CC BY / CC BY-NC 许可筛选与 AntiDupl 去重后的 79,789 张图像提供训练/验证/测试官方划分(59,958/9,904/9,927),新增 35,705 张 2018 年后图像,并提供人工策划的模态、X 射线解剖部位与投照方向概念,由放射科医生在 n = 400 代表性子集上做了标注一致性评估。

从 AI 工程视角看,ROCO 的产出物有三个接口层:像素层(JPG 图像,出版原图)、文本层(英文图注,长度均值 16 词)、语义层(UMLS CUI/SemTypes 集合)。三层以图像 id 一一对应,既可以直接作为图文对喂给视觉语言模型,也可以退化为"图像 → 多标签"的经典分类问题——这种"一份数据、两种监督范式"的弹性,是它与纯报告类数据集(如 MIMIC-CXR)最大的工程差异。

§1.2 战略价值

维度一:多模态覆盖的"广度"稀缺性。 医学图文数据集大多被单一模态绑定——MIMIC-CXR 与 CheXpert 是胸片、IU X-ray 是胸片、DEEP-LESION 是 CT。ROCO 一次性覆盖 8 种以上成像模态与全身解剖区域,使其成为"通用放射学表征学习"的少数选择之一:在 ROCO 上预训练的视觉编码器,向下微调到胸片分类、器官分割等窄任务时有跨模态的迁移基础。对资源有限的团队,它是构建多模态医学 VLM 冷启动语料的性价比之选。

维度二:概念级标签的可组合性。 与"图像 → 整段报告"的数据集不同,ROCO 把每张图注拆解为 UMLS CUI 集合,天然支持"图像 → 概念集合"的多标签范式。这带来三个可组合的任务面:概念检测(分类器)、概念条件化的 caption 生成(生成器)、以及概念作为检索键的跨模态检索。ImageCLEFmedical Caption 连续多年把"概念检测"与"caption prediction"设为两个子任务,正是因为这一标签结构把生成问题拆成了可单独评测的中间步骤——这是 ROCO 对评测方法学的独特贡献。

维度三:零门槛获取带来的可复现性红利。 ROCO 不需要注册审核、签署 DUA 或完成培训课程——clone 仓库跑一个脚本即可获得全量数据(ROCOv2 打包版直接下载 zip)。对比同类临床数据集动辄数周的申请周期,ROCO 把"从想法到第一个 baseline"的时间压缩到半天以内。这一特性使它成为课程设计、论文消融实验与快速原型验证的理想数据源,也是其被大量预训练论文选中的隐性原因之一。

§1.3 同类数据集横向对比

数据集 规模 模态 标注类型 与 ROCO 的差异化
ROCO / ROCOv2 81,825 张(v1)/ 79,789 张(v2) CT、MRI、X-Ray、超声、透视、PET、乳腺摄影、血管造影、PET-CT 英文图注 + UMLS CUI/SemTypes +(v2)人工模态/解剖/方向概念 文献挖矿来源、全身多系统、概念级标签、免申请开放获取
MIMIC-CXR 数十万张胸片 + 自由文本报告 X-Ray(胸片) 完整放射报告 + 14 类标签 真实临床工作流报告,但限胸片、需凭证化申请
CheXpert 约二十二万张胸片 X-Ray(胸片) 14 类不确定度感知标签 胸片病理性标签细,但同样限单一模态
IU X-ray (OpenI) 约数千张胸片 X-Ray(胸片) 结构化 MeSH 标注 + 报告 小规模,适合快速原型
MedICaT 超过 21.7 万张文献医学图像 多模态(文献图) 图注 + 行内文本引用 同为文献来源、规模更大,但概念标注体系与 ROCO 不同

§1.4 版本时间轴

时间 版本/事件 说明
2018-09-03 GitHub 仓库 razorx89/roco-dataset 创建 图像以 PMC 链接 + fetch.py 脚本形式分发
2018-10-17 原始论文在线发表(MICCAI LABELS 2018 Workshop,LNCS 11043) 正式发布 81,825 张放射学图像 + 6,127 张 out-of-class 图像
2019 ImageCLEFmed Concept Detection Task 启用 ROCO 子集 训练 56,629 张 / 验证 14,157 张,测试集取自 2018-02 至 2019-02 的 PMC 新增图像
2021-2023 ImageCLEFmedical Caption 持续使用并扩展 ROCO 2021 起引入医生手工标注;2023 版为 train 60,918 / val 10,437 / test 10,473
2024-06-10 ROCOv2 被 Scientific Data 接收 79,789 张图像、官方划分、人工策划概念、Zenodo 打包分发

v1 → v2 的四个关键差异,选择版本前必须清楚:

差异点 v1(2018) v2(2024)
官方划分 无统一 test(社区各自切分) train 59,958 / valid 9,904 / test 9,927
概念标签 仅 QuickUMLS 自动概念 自动概念 + 人工策划概念(分文件)
许可边界 图像许可混杂 仅保留 CC BY / CC BY-NC
分发方式 PMC 链接逐图下载 Zenodo 打包 zip + md5

§1.5 典型应用场景

  1. 医学多模态 VLM 预训练:作为图文对语料做对比学习或编码器-解码器预训练,再微调到胸片报告生成等下游任务(M3AE、Med-GIT 等模型的标准做法)。
  2. 多标签概念检测器:训练"图像 → UMLS 概念集合"模型,为放射科 PACS 系统提供自动打标与检索键。
  3. 结构化报告生成原型:以概念检测为中间步骤、caption 生成做自然语言输出,复现 ImageCLEFmedical Caption 的两段式系统。
  4. 跨模态医学图像检索:以文本或概念查询检索相似影像,用于教学库建设或相似病例召回。
  5. 数据净化/判别模型研究:利用 6,127 张 out-of-class 图像(合成影像、数字艺术、人像)训练"真放射学图 vs 非放射学图"判别器。

§1.6 不适用场景

以下场景请另寻数据源,ROCO 无法提供有效支撑:

  1. 患者级流行病学分析:无人口学字段、无患者主索引,1 张图无法回溯到 1 位患者的完整检查序列。
  2. 设备/参数级影像质控研究:不含 DICOM 元数据(kVp、层厚、设备厂商),文献插图无法追溯采集条件。
  3. 长报告生成:图注均值仅 16 词,是"图片说明"而非放射报告;需要完整报告结构(Indication/Finding/Impression)请用 MIMIC-CXR 类数据集。
  4. 儿童影像专项研究:文献来源无年龄字段,无法按年龄筛选与分层。

§2 医学背景

§2.1 标注体系与概念映射

ROCO 的原生标注体系不是 ICD-11 或 SNOMED CT,而是美国国家医学图书馆(NLM)的统一医学语言系统(UMLS):每张图像的图注经 QuickUMLS 提取为一组概念唯一标识符(CUI)与语义类型(SemTypes)。这意味着 ROCO 不绑定任何单一疾病分类——它是"检查/解剖/操作"层面的多概念标注。下表列出 ImageCLEF 2019 官方文档披露的高频概念实例:

UMLS CUI 概念英文名 中文释义 出现频次(训练集)
C0441633 Scanning 扫描 6,733
C0043299 Diagnostic radiologic examination 诊断性放射学检查 6,321
C1962945 Radiographic imaging procedure 放射摄影成像操作 6,318
C0040395 Tomography 断层成像 6,235
C0040405 X-Ray Computed Tomography X 射线计算机断层 5,801
C0817096 Chest 胸部 5,981
C0000726 Abdomen 腹部 2,297

说明:频次极高的泛化概念(如 “Image”,超过 13,000 次)与冗余同义词在 ImageCLEF 2019 数据准备阶段已被移除,以提升概念可判别性。

§2.1b UMLS ↔ 临床语义类型映射

ROCO 概念的语义类型(SemTypes)来自 UMLS 语义网络,常见类型包括"诊断操作(T060 类诊断性操作)"“解剖结构"与"实验室/影像检查”。由于官方未发布到 SNOMED CT 的直接映射表,实践中社区通行做法是:以 UMLS CUI 为主键,通过 UMLS Metathesaurus(需 UMLS 许可证)检索各 CUI 在 SNOMED CT 中的等价码。下表给出按语义类型归纳的映射路径示例:

ROCO 标注对象 UMLS 语义类型 示例概念(CUI) 临床映射路径
检查类型 Diagnostic Procedure X-Ray Computed Tomography(C0040405) UMLS Metathesaurus → SNOMED CT 成像操作码
解剖部位 Body Part/Anatomic Structure Chest(C0817096)、Abdomen(C0000726) UMLS Metathesaurus → SNOMED CT 解剖结构码
投照方向(ROCOv2 人工标注) Qualifier 方向性概念(仅 X-Ray) 用于重建视图方位,可映射 IRMA 方向轴
影像所见描述 Sign/Symptom 或 Finding 图注中的病灶相关概念 映射至 SNOMED CT 临床发现码

§2.2 影像检查背景与数据分布特点

放射学影像是现代医院中产生量最大的诊断数据之一,而"影像 + 描述文本"正是放射科医生的日常工作产物。ROCO 的图像来源于同行评审论文而非临床影像存档,这一来源决定了它的分布特点:图像质量经出版筛选、图注由医学专业人员撰写且通常描述图像在论文语境下的语义信息。就模态分布而言,ROCO 呈明显的"文献偏倚"——分析研究指出其以 CT 类图像居多(在模态分类子集中 CT 约 3,500 张),而乳腺摄影等少数模态少于 50 张;与真实临床场景相比,X 射线图像占比反常地低于 CT 与 MRI。使用者在做任何"临床代表性"推断时都应记住这一点:ROCO 刻画的是医学文献中的影像世界,不是放射科的日常工作量分布。

§2.3 临床任务定义

任务 输入 输出 临床对应场景 在 ROCO 上的实现
概念检测(Concept Detection) 放射学图像 UMLS CUI 集合 PACS 自动打标、结构化检索键 多标签分类模型,sample-averaged F1 评测
图注预测(Caption Prediction) 放射学图像 英文描述文本 结构化报告起草 编码器-解码器生成模型,BERTScore 评测
跨模态检索 图像或文本 相似对 相似病例召回、教学素材库 双塔对比学习模型
图像分类/归档 放射学图像 模态/部位标签 影像归档与质控 以 UMLS 概念或人工模态标签为监督

§2.4 数据人群构成

ROCO 不是患者队列数据集,不存在人口学字段。其"人群"等价物是文献来源分布:

维度 实际情况
数据来源 PubMed Central 开放获取子集(同行评审论文插图)
时间范围 v1 基于 2018 年 1 月 PMC 存档;ROCOv2 扩展至 2022 年新增图像
地域 全球期刊文献,无地理字段
患者人口学(年龄/性别/种族) 数据集不提供;个别图注可能含年龄短语(如 “62-year-old woman”),需自行清洗
就医类型 不适用(文献图像无法回溯就诊场景)
可追溯个体数 不可得(1 张图对应 1 篇文章的 1 个插图位,同一患者跨图无法识别)

理解这一点对实验设计有直接后果:任何"按人群分组"的分析(性别差异、年龄分层、种族公平性)在 ROCO 上都无法开展;反之,ROCO 免除了临床数据集的 IRB/伦理审批负担,适合作为方法学开发的第一站,结论外推时再由患者级数据集验证。

§2.5 临床价值

ROCO 的临床价值不在于直接诊断,而在于报告工作流的上游自动化。概念检测模型可以给新影像自动生成候选 UMLS 标签,辅助 PACS 归档、结构化检索与质控抽检;caption 模型可以产出报告草稿供医生修订。官方明确将其用途描述为"支持结构化医学报告(structured medical reporting)的系统构建"。对医院信息科与科研平台而言,ROCO 是验证这类自动化组件可行性最便宜的试验田——图像开放下载、标签即取即用、评测协议(ImageCLEFmedical)现成。

分角色的价值锚点:

角色 用 ROCO 做什么 产出物
放射科信息科 概念自动打标原型 PACS 检索键生成器原型
NLP/多模态研究者 VLM 预训练语料 可迁移的视觉编码器
影像 AI 工程师 caption/概念基线与消融场 可复现的 benchmark 结果
医学教育 图文对照教学库 按概念检索的示教素材集

§2.6 金标准与标注性质

划分 标注方式 标注者 性质
UMLS CUI / SemTypes(全量) 图注文本经 QuickUMLS 自动提取 + 人工假阳性复核 NLP 流水线 + 人工纠错 弱监督(文本衍生标签)
模态 / X 射线解剖部位 / 方向性(ROCOv2) 人工逐图策划 数据团队策划,放射科医生在 n = 400 子集上做一致性评估(混淆矩阵披露) 人工金标准(partial)
ImageCLEFmedical Caption 2021+ 概念 人工验证 医学医生 人工金标准(竞赛子集)

§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 获取方式 理由
快速跑通多标签分类 / caption 基线,要官方划分 ROCOv2 Zenodo 打包下载(10.5281/ZENODO.8333644) train/valid/test 官方划分 + 人工概念 + baseline 代码(GitLab rocov2-code)
复现 ImageCLEFmedical Caption 2019-2023 论文数字 对应年份 ImageCLEFmedical 数据集 imageclef.org(竞赛版,需签 user agreement) 各年份划分与概念表不同,混用版本数字不可比
复现 GLoRIA/M3AE/Med-GIT 等预训练论文 原始 ROCO v1 社区划分 GitHub fetch.py 或 Kaggle 镜像 这些论文各自使用 v1 的 train/val/test 切分(切分大小见 §5),需对齐其数据加载脚本
需要人工策划的 X 射线解剖/方向标签 ROCOv2 Zenodo(*_concepts_manual.csv) 仅 ROCOv2 提供人工 modality/body region/directionality 概念
大规模 VLM 预训练、不介意自行清洗 原始 ROCO v1 或 ROCOv2 GitHub / Zenodo / HuggingFace 镜像 规模最大;v1 无划分约束,可自定义切分但需防同文章泄漏

§3.1 模态详情

模态 英文 成像原理简述 在 ROCO 中的角色
计算机断层 CT X 射线旋转采集 + 重建断层 占比最高的模态之一,轴向断层图为主
磁共振 MRI 磁场 + 射频脉冲成像 神经/肌骨/腹部图像常见
X 射线摄影 X-Ray 透射 X 射线平面成像 ROCOv2 提供人工解剖部位与投照方向标签
超声 Ultrasound 高频声波实时成像 心脏、腹部、产科图像常见
透视 Fluoroscopy 连续 X 射线动态成像 造影/介入过程截图
PET / PET-CT PET 代谢示踪剂显像(常与 CT 融合) 肿瘤代谢显像,含融合图
乳腺摄影 Mammography 低能 X 射线乳腺成像 极少数类(少于 50 张)
血管造影 Angiography 造影剂 + X 射线血管显像 介入/血管病变图像

§3.2 按子集样本数

子集 图像数 说明
原始 ROCO 放射学图像 81,825 2018 年发布主体
原始 ROCO out-of-class 6,127 合成影像、数字艺术、人像等非放射学图像
ROCOv2 总量 79,789(44,975 篇文章) 经许可筛选与去重后的最终版
ROCOv2 train 59,958 官方划分
ROCOv2 valid 9,904 官方划分
ROCOv2 test 9,927 官方划分
ImageCLEFmedical Caption 2023 train 60,918 竞赛版(与 ROCOv2 略有差异)
ImageCLEFmedical Caption 2023 valid / test 10,437 / 10,473 竞赛版

§3.3 数据格式

文件 格式 内容
图像 JPG PMC 出版原图(分辨率不一,可能含内嵌箭头/标注)
图注表 CSV(id, name, caption 列) 每行一个图像-图注对
概念表 CSV(cuis, semtypes 列) 空格分隔的 UMLS CUI 与语义类型
人工概念表(ROCOv2) CSV(*_concepts_manual.csv) 人工策划的模态/解剖/方向概念
概念映射表(ROCOv2) cui_mapping.csv(62.6 kB) CUI → 概念文本映射
许可信息表(ROCOv2) license_information.csv(9.4 MB) 每图来源许可

§3.4 存储大小

ROCOv2 Zenodo 打包版:train_images.zip 4.6 GB + valid_images.zip 860.4 MB + test_images.zip 857.8 MB,图像合计约 6.3 GB;标注 CSV 每份数百 kB 至 10 MB。原始 v1 仓库本体仅 12.7 MB(图像以 PMC 链接分发,实际下载体积取决于源站),第三方 Kaggle 镜像约 7.1 GB。建议预留 20 GB 磁盘以容纳下载、解压与预处理副本。

§3.5 标注方式

  • 自动(主通道):图注 → 关键词 → QuickUMLS → UMLS CUI + SemTypes,全量覆盖。
  • 人工复核:自动提取后的假阳性经人工识别并纠正(原始论文流程)。
  • 人工策划(ROCOv2 增量):模态、X 射线解剖部位、投照方向三类概念逐图人工标注;其中 21,545 张 2021-2022 新增图像被手工标注后用于构成新验证/测试集。

§3.6 标注者资质与一致性

ROCOv2 论文对人工标注做了抽样评估:在代表性子集(n = 400)上,将人工标注的图像模态、X 射线解剖部位与投照方向分别与医生标注对照,并以混淆矩阵(绝对/相对频次)形式披露一致性;参与标注的概念策划者来自数据团队,论文作者(含放射学背景合作者)负责监督与验证。官方同时坦承部分方向性标签存在近似处理(见坑点 6),并将人工概念与自动概念分文件存放,供使用者自行取舍。

§3.7 采集周期

v1 图像采集自 2018 年 1 月的 PMC 存档快照;ROCOv2 补充了 2018 年之后至 2022 年新增的 PMC 开放获取图像,其中 21,545 张 2021-2022 图像用于构建新验证/测试集。项目时间线:2018-09 仓库创建 → 2018-10 论文发表 → 2023-11 ROCOv2 投稿 → 2024-06 接收发布。

§3.8 地域覆盖

无地域字段。图像来自全球范围的 PMC 开放获取期刊论文,出版源以英文期刊为主(v2 已过滤 1,528 张非英文图注图像),可视为"英文医学文献影像"的无地域标注集合。

§3.9 设备规格

不适用。图像为论文出版插图,数据集不提供采集设备厂商、扫描参数(kVp、层厚、序列)等 DICOM 级技术元数据;图像可能是设备原生截图、后期排版图或带标注的教学图。若研究需要设备层元数据,应改用 DICOM 来源的临床数据集。

§3.11 数据质量快速核对清单

拿到数据后的 15 分钟体检(建议写入项目 onboarding):

  1. 行数对账:len(captions_df) 与官方划分数字一致(ROCOv2 train 应为 59,958)。
  2. 图像对账:图像目录文件数 ≥ captions 行数;v1 链接下载版必有缺口,记录黑名单。
  3. MD5 校验:Zenodo 每文件提供 md5(如 train_images.zip 为 cd5f5fdb73f24cf6a7473319116a84cc),逐一校验。
  4. 抽样目检:随机打开 20 张图,确认无烂图(0 字节、截断 JPG、全白/全黑)。
  5. caption 长度分布:画直方图,确认均值在 16 词附近、过滤 < 3 词样本。
  6. 概念词表快照:set(all_cuis) 应为 1,947 个(ROCOv2),存盘版本化。

§3.10 深度溯源链

层级 内容
L1 数据集 ROCO / ROCOv2(GitHub razorx89/roco-dataset;Zenodo 10.5281/ZENODO.8333644)
L2 原始来源 PubMed Central Open Access Subset(NLM 官方 FTP 镜像)
L3 溯源键 图像文件名含 PMC 编号(如 PMC4083729_AMHSR-4-14-g002.jpg),可回溯到来源论文
L4 许可溯源 ROCOv2 提供 license_information.csv 逐图记录许可
L5 概念溯源 cui_mapping.csv 记录 CUI → 概念文本;自动概念与人工概念分文件

§4 数据结构

§4.0 目录树

原始 ROCO v1(GitHub clone 后 + fetch.py 下载完成):

roco-dataset/
├── README.md
├── scripts/
│   └── fetch.py                  # 按 data/ 内 CSV 的链接下载图像
├── data/
│   ├── train.csv                 # 训练划分:id, name, caption
│   ├── val.csv                   # 验证划分:id, name, caption
│   ├── test.csv                  # 测试划分:id, name, caption
│   ├── all_notNormal.csv         # out-of-class 图像(合成影像/数字艺术等)
│   └── ...                       # 其余辅助 CSV
└── images/                       # fetch.py 下载产物
    ├── train/
    │   ├── ROCO_00002.jpg        # 文件名形如 PMC4083729_AMHSR-4-14-g002.jpg
    │   └── ...
    ├── val/
    └── test/

ROCOv2(Zenodo 包解压后):

rocov2/
├── train_images.zip              # 4.6 GB,解压为 train/ 图像目录
├── valid_images.zip              # 860.4 MB
├── test_images.zip               # 857.8 MB
├── train_captions.csv            # id, name, caption
├── valid_captions.csv
├── test_captions.csv
├── train_concepts.csv            # 自动 UMLS 概念(cuis, semtypes)
├── valid_concepts.csv
├── test_concepts.csv
├── train_concepts_manual.csv     # 人工策划概念(模态/解剖/方向)
├── valid_concepts_manual.csv
├── test_concepts_manual.csv
├── cui_mapping.csv               # CUI → 概念文本
└── license_information.csv       # 每图来源许可

§4.1 DAIMS 数据字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
id Text 图像唯一标识(ROCO_XXXXX) ROCO_00002 主键、划分对齐 无 无缺失 ROCO_00001 起
name Text 源文件名(含 PMC 编号) PMC4083729_AMHSR-4-14-g002.jpg 溯源到来源论文 同一文章可能贡献多图 无缺失 JPG 文件名
caption Text 英文图注(论文原文) Computed tomography scan in axial view showing obliteration of the left maxillary sinus caption 生成、图文对齐 含年龄短语/时间描述等噪声 极短无效 caption 已在 v2 过滤 均值约 16 词,最长 315 词
cuis List[Text] UMLS 概念唯一标识符(空格分隔) C0040405 C0817096 多标签分类标签 QuickUMLS 自动提取有噪声 空字符串表示无概念 全数据集共 1,947 个唯一 CUI(v2)
semtypes List[Text] UMLS 语义类型(空格分隔) T060 等 标签类型约束、层级分组 与 CUI 一一对应 空字符串 UMLS 语义网络类型码
modality(v2 人工) Text 人工策划成像模态 CT / MRI / X-Ray 等 模态分类器、分层采样 部分组合模态标注(如 PET-CT) 未标注图无该行 7 类临床模态 + 组合
body_region(v2 人工) Text X 射线解剖部位(IRMA body region 体系) Chest X 射线分层评测 仅 X 射线图有值 非 X 射线为空 IRMA 解剖轴
directionality(v2 人工) Text X 射线投照方向 coronal posteroanterior 视图识别任务 官方承认存在近似标注 非 X 射线为空 IRMA 方向轴
license(v2) Text 来源论文许可 CC BY / CC BY-NC 合规过滤、再分发决策 以 license_information.csv 为准 无缺失 CC BY、CC BY-NC

§4.2 标签分布

ROCOv2 全集共 1,947 个唯一 UMLS 概念,其中训练集 1,947 个、验证集 1,760 个、测试集 1,754 个——验证/测试的概念词表是训练词表的子集化处理(训练集未出现的概念已从 v2 的验证/测试中移除)。概念频率呈典型长尾:头部检查类概念(Scanning、Tomography 等)出现数千次,而尾部概念仅出现 1 次(ImageCLEF 2019 文档显示概念出现频次最低至 1)。若做概念检测,建议按出现频次分组评测(头部/躯干/尾部),避免长尾概念拉低整体 F1 的可解释性。

推荐的评测分组(与 §6.9 的 grouped_f1_report 对应):

频次分组 判定 建模建议
头部(≥ 100 次) 数十个高频检查/解剖概念 主力监督信号,决定整体 F1 大盘
躯干(20-99 次) 中频病灶与部位概念 用加权 loss 或过采样照顾
尾部(< 20 次) 大量罕见概念(最低 1 次) 谨慎纳入训练词表;评测单独报告,勿与头部混评

每图概念数同样有跨度:ImageCLEF 2019 时代官方数据为每图 1-72 个概念(train)、1-77(val)、1-34(test),极端多标签样本会在 soft margin loss 中稀释梯度,可在 batch 内按概念数截断或分组训练。

§4.3 关键统计

统计项 数值 来源
v1 放射学图像 81,825 ROCOv2 论文
v1 out-of-class 图像 6,127 ROCOv2 论文
ROCOv2 图像(文章数) 79,789(44,975 篇) ROCOv2 论文
唯一 UMLS 概念(v2) 1,947 ROCOv2 论文
平均 caption 长度 16 词(最长 315 词) ImageCLEFmedical 2023 系统论文(MAKEN)
v2 新增图像 35,705(2018 年后 PMC) ROCOv2 论文
v2 去重 AntiDupl v2.3.10 移除 2,056 张重复 ROCOv2 论文
v2 非英文 caption 移除 1,528 张 ROCOv2 论文

§4.4 数据层级

ROCO 只有两级结构:文章(article)→ 图像(figure)。没有患者-检查-序列-切片的临床层级,同一文章的多张图像之间可能存在强关联(同一研究、甚至同一受试者的连续展示)。id 字段(ROCO_XXXXX)是图像级主键;文章级身份需从 name 字段解析 PMC 编号获得——这是做防泄漏分组的唯一抓手(见坑点 3)。

§4.5 缺失值与信息性缺失

情形 编码方式 处理建议
图像无自动概念 cuis/semtypes 为空字符串 按真实空标签处理,不要丢弃
非 X 射线图像的 body_region / directionality 字段为空 信息性缺失:空值本身表示"模态不适用",勿用均值/众数填充
v2 中 caption 过滤 非英文/极短 caption 已被移除,不在数据内 无需处理,但自建爬取版本需复现该过滤
v1 链接失效图像 fetch.py 下载报错后该图缺席 记录失败清单,下载完成数对账 CSV 行数

§4.6 从文件名提取溯源键

同一文章多图是 ROCO 的常态,按文章分组是防泄漏与防重复的唯一抓手:

import re
import pandas as pd

df = pd.read_csv("data_root/train_captions.csv")
# name 形如 "PMC4083729_AMHSR-4-14-g002.jpg" → 提取 PMC 编号作为文章级分组键
df["pmcid"] = df["name"].str.extract(r"(PMC\d+)")
print(df["pmcid"].nunique())        # 文章数(train 子集)
multi = df.groupby("pmcid").size()
print((multi > 1).mean())           # 被多图共享的文章占比——切分前必看

经验法则:若某 PMC 编号下有 5 张以上图像,它们大概率来自同一研究甚至同一受试者,任何随机切分都必须以该键为分组屏障。


§5 划分与使用建议

§5.1 官方与常见划分一览

划分体系 train valid test 适用场景
ROCOv2 官方(2024) 59,958 9,904 9,927 概念检测 / caption 新基线
ImageCLEFmedical Caption 2023 60,918 10,437 10,473 复现 2023 竞赛数字
ImageCLEF 2019 概念检测 56,629 14,157 (2018-02~2019-02 PMC 新增图像) 复现 2019-2020 概念检测论文
v1 社区划分 A(Med-GIT / M3AE 系) 65,444(清洗后) 8,179 约 8,000+ 对齐预训练论文
v1 社区划分 B(GLoRIA / MOSMOS 系) 73,594 8,176 — 对齐对比学习预训练论文

划分选择的第一原则:先定论文/模型,再定划分。目标数字出自哪个体系,就用哪个体系的数据文件,并在实验记录里写明下载日期与文件 md5。

§5.2 划分策略建议

  • 做新方法研究:直接用 ROCOv2 官方划分,数字可与 baseline(EfficientNet-B0 F1 0.5811 / EfficientNetv2-s 0.5925)对比。
  • 复现旧预训练论文:逐行阅读该论文的数据加载代码确认其使用的划分与清洗版本,不要想当然混合。
  • 自建划分:若一定要自建,请按来源文章(PMC 编号)分组切分,而非按图像随机切分。

§5.3 泄漏风险

ROCO 的泄漏风险有两条真实通道:其一,同一篇文章常包含多张图像,随机按图切分会让"同一研究/同一患者"的近重复图像同时落入训练与测试集,使指标虚高;ROCOv2 构建时用 AntiDupl 检出并移除了 2,056 张重复图像,说明图级重复确实存在。其二,ROC v1 的 out-of-class 图像(合成影像、数字艺术)与放射学图像可能共享同一篇文章,若把 out-of-class 混入训练又将其来源文章的放射学图放入测试,同样构成关联泄漏。缓解方式:以 name 字段中的 PMC 编号做分组屏障(GroupShuffleSplit),保证同一 PMC 编号只出现在一个划分。

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

  • 概念检测任务可用 5 折分层交叉验证(按人工模态标签分层),报告 sample-averaged F1 的均值与标准差。
  • 外部验证优先顺序:MIMIC-CXR(胸片报告)→ CheXpert(胸片标签)→ VQA-RAD/SLAKE(VQA 任务)。跨数据集评测时注意标签体系不同,需先做概念映射或只评共同子集。
  • 若论文声称"泛化能力",至少在一个非文献来源(临床存档)数据集上验证,以检验文献偏倚的影响(见 §7.1)。

§5.5 按文章分组的划分代码

自建划分时的参考实现(v1 无官方 test 时使用):

import re
import numpy as np
import pandas as pd
from sklearn.model_selection import GroupShuffleSplit

df = pd.read_csv("data_root/all_captions.csv")   # v1 合并后的全量 captions
df["pmcid"] = df["name"].str.extract(r"(PMC\d+)")

# 按文章(PMC 编号)分组 8:1:1 切分,杜绝同文章跨划分
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, hold_idx = next(gss.split(df, groups=df["pmcid"]))
train_df, hold_df = df.iloc[train_idx], df.iloc[hold_idx]

gss2 = GroupShuffleSplit(n_splits=1, test_size=0.5, random_state=42)
val_idx, test_idx = next(gss2.split(hold_df, groups=hold_df["pmcid"]))
val_df, test_df = hold_df.iloc[val_idx], hold_df.iloc[test_idx]

assert not (set(train_df["pmcid"]) & set(test_df["pmcid"]))   # 零交集断言

将 random_state 与切分文件一并版本化,否则"同代码不同切分"会让后续实验失去可比性。


§6 AI 就绪指南

§6.0 云端快速启动

Kaggle 与 HuggingFace 存在社区镜像(如 Kaggle virajbagal/roco-dataset、HF eltorio/ROCOv2-radiology),适合 Colab/Kaggle 环境免下载直接挂载;但镜像可能滞后于官方,正式实验请以 GitHub v1 与 Zenodo ROCOv2 为准。

# Colab 快速起步:从 Zenodo 直拉 ROCOv2(示例,约 6.3 GB)
!pip install -q datasets bert_score
!wget -q --show-progress https://zenodo.org/records/8333644/files/train_captions.csv
!wget -q --show-progress https://zenodo.org/records/8333644/files/train_concepts.csv
# 大文件(train_images.zip 4.6 GB)建议改用 Kaggle 镜像或 gdown 中转,
# 避免 Colab 会话中断重下

云端实验的三条纪律:(1)先下 CSV 后下图像,用 captions 的前 1,000 行做端到端冒烟测试;(2)把解压后的数据集放在持久盘,Colab 临时盘会在会话结束时清空;(3)所有下载文件校验 Zenodo 提供的 md5 后再进训练。

§6.1 快速上手

# 目录结构预期(ROCOv2 为例):
#   data_root/
#     ├── train/            # 解压自 train_images.zip
#     ├── valid/            # 解压自 valid_images.zip
#     ├── test/             # 解压自 test_images.zip
#     ├── train_captions.csv / valid_captions.csv / test_captions.csv
#     └── train_concepts.csv / ...
# data_root 拼接关系:图像路径 = data_root/<split>/<name>,name 来自 captions.csv 的 name 列
# 最小可用子集:仅 train_captions.csv + train/ 即可跑通图文对加载
import pandas as pd
from pathlib import Path

data_root = Path("data_root")   # 改成你的解压根目录
caps = pd.read_csv(data_root / "train_captions.csv")
print(caps.shape)               # (59958, 3):id, name, caption
print(caps.iloc[0])             # 一条图文对
# 图像存在性对账(v2 打包版一般齐全;v1 链接下载版务必做)
missing = [n for n in caps["name"].head(1000)
           if not (data_root / "train" / n).exists()]
print(f"缺失示例: {len(missing)} / 1000")

§6.2 数据获取

渠道 方式 大小 说明
ROCO v1 官方 GitHub git clone https://github.com/razorx89/roco-dataset.git + python scripts/fetch.py 仓库 12.7 MB;图像按链接下载 81k 次外部下载,慢且部分链接可能失效
ROCOv2 官方 Zenodo 下载 10.5281/ZENODO.8333644 的三个 zip + CSV 约 6.3 GB 推荐:官方划分、打包直下
ImageCLEFmedical 竞赛版 imageclef.org 注册并签 user agreement 各年份不同 仅复现竞赛数字时使用
社区镜像 Kaggle / HuggingFace 数 GB 快,但可能滞后或被二次清洗
# 方式一:原始 ROCO v1(图像以 PMC 链接分发,脚本逐个下载)
git clone https://github.com/razorx89/roco-dataset.git
cd roco-dataset
python scripts/fetch.py          # 网络差/大量报错时改用:python scripts/fetch.py -n 1
# Windows 用户需先安装 wget 并加入 Path,或改用 WSL

# 方式二:ROCOv2 打包版(推荐)
# 从 https://doi.org/10.5281/ZENODO.8333644 下载:
#   train_images.zip (4.6 GB) / valid_images.zip (860.4 MB) / test_images.zip (857.8 MB)
#   以及 *_captions.csv、*_concepts.csv、*_concepts_manual.csv、cui_mapping.csv、license_information.csv
unzip train_images.zip -d data_root/
unzip valid_images.zip -d data_root/
unzip test_images.zip  -d data_root/

v1 下载完成后的完整性对账脚本(v1 必做,v2 可选):

import pandas as pd
from pathlib import Path

data_root = Path("roco-dataset")
for split in ["train", "val", "test"]:
    csv = pd.read_csv(data_root / "data" / f"{split}.csv")
    img_dir = data_root / "images" / split
    have = {p.name for p in img_dir.glob("*.jpg")}
    missing = [n for n in csv["name"] if n not in have]
    print(f"{split}: CSV {len(csv)} 行,缺图 {len(missing)} 张")
    Path(f"missing_{split}.txt").write_text("\n".join(missing))  # 黑名单落盘
# Dataset 加载时按黑名单过滤,保证 len(dataset) == 实际可用图文对数

§6.3 预处理全流程

图像侧:出版原图分辨率不一、常含内嵌箭头/文字标注,官方明确要求使用前 resize/crop。文本侧:图注含年龄短语、时间描述符与非 ASCII 字符(ImageCLEFmedical 参赛系统 MAKEN 的清洗经验)。

import re
import unicodedata
from PIL import Image

def clean_caption(text: str) -> str:
    """ROCO 图注清洗:去非 ASCII、去年龄短语与纯引用性短语。"""
    text = unicodedata.normalize("NFKC", text)
    text = re.sub(r"[\u2018\u2019\u201c\u201d]", "'", text)
    text = re.sub(r"https?://\S+", " ", text)                    # 去链接(ImageCLEF 2023 官方预处理)
    text = re.sub(r"\b\d{1,3}[- ]?(year|years|yr|y/o)[-\s]*(old)?\b", " ", text, flags=re.I)
    text = re.sub(r"\b\d{1,3}\s*(cm|mm)\b", " ", text, flags=re.I)  # 尺寸描述可选去除
    text = re.sub(r"\s+", " ", text).strip()
    return text

def preprocess_image(path, size=(224, 224)):
    """出版原图 → 模型输入:最长边缩放后中心裁剪。"""
    img = Image.open(path).convert("RGB")
    img.thumbnail((int(size[0] * 1.25), int(size[1] * 1.25)))    # 官方 baseline:1.25 倍加载
    w, h = img.size
    left, top = (w - size[0]) // 2, (h - size[1]) // 2
    return img.crop((left, top, left + size[0], top + size[1]))

全量批处理建议离线做一次、落盘缓存,避免每个 epoch 重复解码 8 万张 JPG:

from pathlib import Path
from concurrent.futures import ProcessPoolExecutor

def dump_one(args):
    src, dst, size = args
    if Path(dst).exists():
        return 0
    try:
        preprocess_image(src, size).save(dst, quality=92)
        return 1
    except Exception:
        return -1

def batch_preprocess(split_dir: str, out_dir: str, size=(224, 224), workers: int = 16):
    src_root, dst_root = Path(split_dir), Path(out_dir)
    jobs = [(str(p), str(dst_root / p.name), size) for p in src_root.glob("*.jpg")]
    with ProcessPoolExecutor(workers) as ex:
        results = list(ex.map(dump_one, jobs, chunksize=64))
    print(f"完成 {results.count(1)},失败 {results.count(-1)}(失败清单单独落盘)")

§6.4 PyTorch DataLoader 完整代码

import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
from PIL import Image
from pathlib import Path

class ROCODataset(Dataset):
    """ROCO 图文对 Dataset(适用于 v1 与 v2 的 captions.csv 结构:id, name, caption)。"""
    def __init__(self, data_root: str, split: str = "train", img_size: int = 224):
        self.root = Path(data_root) / split
        self.df = pd.read_csv(Path(data_root) / f"{split}_captions.csv")
        # 预处理基线对齐 ROCOv2 官方:1.25 倍加载 + 随机翻转裁剪(train)或中心裁剪(eval)
        if split == "train":
            self.tf = transforms.Compose([
                transforms.Resize((int(img_size * 1.25), int(img_size * 1.25))),
                transforms.RandomHorizontalFlip(0.5),
                transforms.RandomVerticalFlip(0.5),
                transforms.RandomCrop(img_size),
                transforms.ToTensor(),
                transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
            ])
        else:
            self.tf = transforms.Compose([
                transforms.Resize((int(img_size * 1.25), int(img_size * 1.25))),
                transforms.CenterCrop(img_size),
                transforms.ToTensor(),
                transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
            ])

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

    def __getitem__(self, idx):
        row = self.df.iloc[idx]
        img = Image.open(self.root / row["name"]).convert("RGB")
        return {"image": self.tf(img), "caption": row["caption"], "id": row["id"]}

train_ds = ROCODataset("data_root", split="train")
train_loader = DataLoader(train_ds, batch_size=64, shuffle=True,
                          num_workers=8, pin_memory=True, drop_last=True)
batch = next(iter(train_loader))
print(batch["image"].shape, batch["caption"][:2])

§6.4b 概念检测 Dataset(多标签版)

概念检测任务需要把 UMLS CUI 集合编码为固定长度多热向量:

class ROCOConceptsDataset(Dataset):
    """图像 → UMLS 概念多标签 Dataset(对齐 ImageCLEFmedical 概念检测协议)。"""
    def __init__(self, data_root: str, split: str = "train", img_size: int = 224,
                 min_freq: int = 20):
        self.root = Path(data_root) / split
        self.df = pd.read_csv(Path(data_root) / f"{split}_captions.csv")
        concepts = pd.read_csv(Path(data_root) / f"{split}_concepts.csv")
        # cui 列为空格分隔的概念串;过滤低频概念(与官方频次过滤思路一致)
        counter = {}
        for cuis in concepts["cuis"].dropna():
            for cui in str(cuis).split():
                counter[cui] = counter.get(cui, 0) + 1
        self.vocab = {c for c, n in counter.items() if n >= min_freq}
        self.cui2idx = {c: i for i, c in enumerate(sorted(self.vocab))}
        self.row2cuis = dict(zip(concepts["id"], concepts["cuis"]))
        self.tf = transforms.Compose([
            transforms.Resize((img_size, img_size)),
            transforms.ToTensor(),
            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
        ])

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

    def __getitem__(self, idx):
        row = self.df.iloc[idx]
        img = Image.open(self.root / row["name"]).convert("RGB")
        target = torch.zeros(len(self.cui2idx), dtype=torch.float32)
        for cui in str(self.row2cuis.get(row["id"], "")).split():
            if cui in self.cui2idx:
                target[self.cui2idx[cui]] = 1.0
        return {"image": self.tf(img), "target": target, "id": row["id"]}

concept_ds = ROCOConceptsDataset("data_root", split="train")
# 训练用 BCEWithLogitsLoss(等价于官方 multi-label soft margin loss),
# 推理阈值 0.5 + sigmoid(官方 baseline 口径)

§6.5 坑点清单

⚠️ 坑点 1:出版原图不是"干净"的医学影像(分类:预处理陷阱)

问题:ROCO 图像按 PMC 出版原样分发,分辨率不一且常内嵌箭头、文字、比例尺、多子图边框等排版元素,官方明确提示图像须 resize/crop 后才能进机器学习流程,且 PMC 版图像质量可能与期刊印刷版不同。
症状:模型 F1 异常高但热力图聚焦在箭头/文字区域而非病灶;或不同批次训练结果因图像尺寸处理不一致而波动。
解决:

  1. 简单方法:统一最长边缩放 + 中心裁剪(如 §6.3 的 preprocess_image),训练前目视抽查 50 张。
  2. 进阶方法:用 OCR 或边框检测预过滤含大量内嵌文字的图;对多子图复合图(漏网的)用复合图分类器二次过滤。
  3. SOTA 方法:借鉴 ROCOv2 构建管线,用其开源的 compound/radiology 检测模型(GitLab rocov2-code)对自己的图像批次复检。
    参考:ROCOv2 论文 Usage Notes(Scientific Data, 2024, doi:10.1038/s41597-024-03496-6)

⚠️ 坑点 2:fetch.py 下载 81k 个外部链接注定部分失败(分类:工程陷阱)

问题:v1 图像以 PMC 链接形式分发,fetch.py 需逐个下载约 8 万个文件;PMC 源站限速、链接失效或本地网络波动都会造成缺图,v1 仓库自 2022 年 4 月后停止更新,失效链接不会被修复。
症状:Dataset __getitem__ 随机 FileNotFoundError;CSV 行数与图像目录文件数对不上。
解决:

  1. 简单方法:下载后立即对账——统计 CSV 中 name 在图像目录的覆盖率,缺图行在 Dataset 里过滤并落盘黑名单。
  2. 进阶方法:python scripts/fetch.py -n 1 降并发重试失败项;对仍失败的,按文件名中的 PMC 编号去 PMC 网页补图。
  3. SOTA 方法:直接改用 ROCOv2 Zenodo 打包版(官方划分 + 打包 zip),彻底绕开链接下载问题;需要 v1 全量时结合镜像(Kaggle)交叉补齐。
    参考:roco-dataset README Troubleshooting;ecosyste.ms 仓库元数据(最后推送 2022-04-05)

⚠️ 坑点 3:按图随机切分导致同文章泄漏(分类:数据泄漏)

问题:v1 无统一官方 test 划分,社区惯例是随机按图切分;但同一篇论文常含多张图像(甚至同一患者的连续展示),按图随机切分会把近重复图像同时放进训练与测试集。ROCOv2 构建时检出 2,056 张重复图,证实重复真实存在。
症状:自建划分的指标明显高于使用严格划分的论文;同批图像在 train/test 出现近乎相同的图。
解决:

  1. 简单方法:从 name 字段正则提取 PMC 编号,用 GroupShuffleSplit 按文章分组切分。
  2. 进阶方法:分组切分之外再做图像感知哈希(pHash)近重复检测,把哈希距离小的图像强制放入同一折。
  3. SOTA 方法:直接采用 ROCOv2 官方划分并报告其 baseline 数字;v1 复现时逐论文对齐其数据加载脚本,不做混用比较。
    参考:ROCOv2 论文(AntiDupl v2.3.10 去重);arXiv 2404.06057(社区划分差异实例)

⚠️ 坑点 4:UMLS 概念是图注的,不全是图像的(分类:标签理解)

问题:自动概念由 QuickUMLS 从图注文本提取,而图注描述的是图像在论文中的语义上下文——可能提及图像里看不见的东西(如"治疗后复查较前片好转")。官方也在 ImageCLEF 2019 准备时删除了频次超过 13,000 的泛化概念(如 “Image”)。
症状:概念检测模型把"看不见的概念"判为负例是正确行为,却被标签记为漏检;训练集内高频泛化概念主导 loss。
解决:

  1. 简单方法:训练前做概念频次过滤(如保留出现 ≥ 20 次的概念),与官方做法一致。
  2. 进阶方法:按 SemTypes 分层加权 loss,让解剖/操作类概念权重高于泛化描述类;评测时分头部/躯干/尾部概念分组报告 F1。
  3. SOTA 方法:优先使用 ROCOv2 的人工策划概念子集(*_concepts_manual.csv)做主评测,自动概念仅做辅助监督——官方 baseline 在 ROCOv2 上 F1 显著高于旧版数据(0.5925 vs 0.5215)部分正源于此。
    参考:ImageCLEF 2019 Concept Detection Task 文档;ROCOv2 论文 Technical Validation

⚠️ 坑点 5:模态分布失衡且与临床相反(分类:偏倚陷阱)

问题:ROCO 以 CT 类图像居多(模态子集中约 3,500 张),乳腺摄影等少于 50 张;X 射线占比反常低于 CT/MRI——因为来源是"哪些图被论文选用",不是"医院每天拍什么"。
症状:直接训练的模态分类器对哺乳动物摄影等少数类几乎全错;在 ROCO 上调好的采样策略迁移到临床数据集后失效。
解决:

  1. 简单方法:少数类过采样或 WeightedRandomSampler;把长尾模态合并为 “Unknown” 类(PMC11226965 的做法:top-6 模态 + Unknown)。
  2. 进阶方法:按 ROCOv2 人工模态标签做分层 5 折交叉验证,报告宏平均指标而非准确率。
  3. SOTA 方法:把 ROCO 定位为预训练语料而非部署分布,在真实临床数据集上做外部验证后再下结论。
    参考:PMC11226965(Instance-level medical image classification);ROCOv2 论文

⚠️ 坑点 6:ROCOv2 人工方向性标签存在官方承认的近似(分类:标签理解)

问题:为避免大量 X 射线图缺方向性标签,部分图做了妥协标注——官方举例:手部背掌位(dorsopalmar)被标为 coronal posteroanterior,并不完全准确。人工概念因此被单独文档化,与自动概念分文件存放。
症状:方向性分类任务的误差分析发现某些投照方向样本"标签与图像不符";用 manual concepts 全量监督时方向类指标上不去。
解决:

  1. 简单方法:只把 manual concepts 当作"候选标签",对方向类做人工抽检后再用。
  2. 进阶方法:方向性任务只用其解剖/模态部分,投照方向改用 IRMA 数据集(该数据集的方向轴标注体系被 ROCOv2 沿用)。
  3. SOTA 方法:把 manual 与 automatic 概念分开评测(官方竞赛即设 secondary F1 专评人工概念子集),在论文中分别报告。
    参考:ROCOv2 论文(Annotator-Physician evaluation 与 limitations 章节)

⚠️ 坑点 7:caption 指标跨版本/跨年份不可比(分类:评估误用)

问题:caption 预测的主指标在 2023 年从 BLEU 换成了 BERTScore(ROUGE 为次指标);平均图注仅 16 词,BLEU 类 n-gram 指标对短文本偏苛。不同年份的数据集划分与概念表也不同(2023 版 train 60,918 vs ROCOv2 59,958)。
症状:把旧论文的 BLEU 与新论文的 BERTScore 放进同一张表;自报 CIDEr 远低于竞赛榜但 BERTScore 相当,误以为实现有 bug。
解决:

  1. 简单方法:所有 caption 评测同时报告 BERTScore + ROUGE + BLEU-1 + CIDEr,注明主指标。
  2. 进阶方法:锁定数据版本(明确写出用 ImageCLEFmedical 2023 版还是 ROCOv2 版)再引用该版本对应论文的数字。
  3. SOTA 方法:参照官方做法发布多指标(BERTScore、ROUGE、METEOR、CIDEr、BLEU、BLEURT、CLIPScore),并声明数值不可跨数据集直比。
    参考:ImageCLEFmedical Caption 2023 官网;ROCOv2 论文 Caption Prediction 章节

⚠️ 坑点 8:图注文本噪声需要系统清洗(分类:预处理陷阱)

问题:图注是论文原句,含年龄/性别短语(如 “62-year-old woman”)、尺寸与时间描述、非 ASCII 字符;v1 中还存在非英文与极短无效图注(v2 移除 1,528 张非英文 caption 及 “Figure 1” 类无效短注)。
症状:语言模型生成的 caption 学会复读年龄短语;tokenizer 对非 ASCII 字符产生大量 unknown token;验证集出现 “Figure 1” 式空转样本。
解决:

  1. 简单方法:按 §6.3 的 clean_caption 去链接/非 ASCII/年龄短语,过滤词数 < 3 的 caption。
  2. 进阶方法:语言检测(langid/fastText)过滤非英文;用规则 + 小模型联合抽取"图像可见要素"句子,丢弃纯语境句。
  3. SOTA 方法:直接使用 ROCOv2(官方已完成非英文与无效短注过滤),并按其 caption 处理流程(去链接)保持一致。
    参考:ROCOv2 论文(数据过滤流程);MAKEN 论文(arXiv 2312.03970)预处理经验

§6.6 数据增强

类别 操作 说明
✅ 安全 随机水平翻转(官方 baseline 采用,概率 0.5)、随机垂直翻转(官方采用)、1.25 倍加载 + 随机裁剪、亮度/对比度小幅抖动 官方 ROCOv2 baseline 增强管线即包含水平/垂直翻转与随机裁剪
✅ 安全 随机灰度化(部分模态本为灰度) 缩小模态间色彩差异
❌ 危险 大角度旋转(> 15°) X 射线投照方向有语义(directionality 标签会被破坏)
❌ 危险 弹性形变/重级 Cutout 断层影像的解剖连续性是判别线索,强形变生成非生理图像
❌ 危险 对 caption 文本做随机删句 短图注信息密度高,删句易删除唯一病灶描述

§6.7 模型推荐

任务 推荐模型 起步理由
概念检测(多标签) EfficientNet-B0 / EfficientNetv2-s 官方 baseline,数字可直接对标(F1 0.5811 / 0.5925)
概念检测(进阶) 多架构集成(如 AUEB-NLP 2023 方案) 2023 竞赛冠军 F1 0.5223(ImageCLEF 版)
Caption 预测 ViT-GPT2 / 编码器-解码器 + 强化学习 竞赛主流框架;2023 最佳 BERTScore 0.6413
VLM 预训练 CLIP 式双塔或 BLIP 式编码-解码 GLoRIA/M3AE/Med-GIT 系均以 ROCO 为预训练语料
跨模态检索 双塔 + InfoNCE 概念表可作检索键监督

§6.8 硬件需求

场景 配置 参考依据
概念检测 baseline 复现 单卡 16 GB(V100 级)+ batch 256(B0/224px)或 92(v2-s/300px),混合精度,20 epochs ROCOv2 官方训练配置(NVIDIA DGX-1 单 GPU)
Caption 生成微调 单卡 24 GB 起(ViT-GPT2 量级) 竞赛主流设置
VLM 预训练 多卡 A100 级,数十 GB 显存 预训练论文通用需求
仅做数据探索 CPU + 8 GB 内存即可加载 CSV 与抽检图像 全部标注 CSV 合计 < 20 MB

§6.9 评估指标代码

import numpy as np

def sample_averaged_f1(y_true: np.ndarray, y_pred: np.ndarray) -> float:
    """概念检测主指标:sample-averaged F1(ImageCLEFmedical 官方口径)。
    y_true/y_pred: (n_samples, n_concepts) 的 0/1 矩阵。"""
    tp = (y_true & y_pred).sum(axis=1)
    fp = (~y_true & y_pred).sum(axis=1)
    fn = (y_true & ~y_pred).sum(axis=1)
    prec = tp / np.maximum(tp + fp, 1)
    rec = tp / np.maximum(tp + fn, 1)
    f1 = 2 * prec * rec / np.maximum(prec + rec, 1e-8)
    return float(f1.mean())

def grouped_f1_report(y_true, y_pred, concept_freq):
    """按概念频次分组报告 F1:头部/躯干/尾部,暴露长尾短板。"""
    groups = [("头部(>=100)", 100, None), ("躯干(20-99)", 20, 100), ("尾部(<20)", None, 20)]
    out = {}
    for name, lo, hi in groups:
        m = concept_freq >= lo if lo is not None else concept_freq < hi
        if hi is not None and lo is not None:
            m = (concept_freq >= lo) & (concept_freq < hi)
        if m.sum() == 0:
            continue
        out[name] = sample_averaged_f1(y_true[:, m], y_pred[:, m])
    return out

# caption 侧官方主指标为 BERTScore,可直接用现成库:
# from bert_score import score
# P, R, F1 = score(cands, refs, lang="en")

评测时的三个口径约定:(1)概念检测阈值统一 0.5(官方 baseline 口径),如做阈值搜索须在验证集上完成并声明;(2)caption 的 BERTScore 用默认 rescale_with_baseline=False 并注明;(3)任何分组 F1 都要同时给出全量 F1,方便与官方 baseline 直比。

§6.10 MLOps 笔记

  • 数据版本固定:在 README 与实验配置中写明 “ROCOv2 Zenodo 10.5281/ZENODO.8333644”,v1 与 v2 标注不可混用。
  • MD5 对账:Zenodo 每个文件提供 md5(如 train_images.zip cd5f5fdb73f24cf6a7473319116a84cc),下载后校验再入库。
  • 许可审计:再分发模型或示例图时用 license_information.csv 过滤 CC BY-NC 图(商用需 CC BY 子集)。
  • 评测可复现:固定 torchvision 权重版本(官方 baseline 用 ImageNet-1k/21k 预训练),记录随机种子与 GPU 型号。
  • 概念词表快照:把 cui_mapping.csv 与训练时保留的概念清单一起版本化,防止推理期词表漂移。

把以上纪律固化为一分钟 CI 检查:

#!/usr/bin/env bash
# check_data.sh —— 数据目录体检(挂进 CI 的第一步)
set -e
test -f data_root/train_captions.csv || { echo "缺 train_captions.csv"; exit 1; }
LINES=$(($(wc -l < data_root/train_captions.csv) - 1))   # 去表头
[ "$LINES" -eq 59958 ] || { echo "train 行数 $LINES != 59958"; exit 1; }
md5sum -c <<< "cd5f5fdb73f24cf6a7473319116a84cc  train_images.zip" || exit 1
python -c "
import pandas as pd
c = pd.read_csv('data_root/train_concepts.csv')
print('唯一概念数:', len(set(' '.join(c['cuis'].dropna()).split())))
"
echo "ROCO 数据体检通过"

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解建议
出版选择偏倚 图像来自论文插图,罕见/interesting 病例更易入选 高 外部临床数据验证;不直接外推临床流行率
模态分布偏倚 CT 居多、X 射线反常偏少、乳腺摄影 < 50 张 高 分层采样/加权 loss;按模态分组报告
标签噪声(自动概念) QuickUMLS 文本衍生标签,图注语境 ≠ 图像内容 中 频次过滤;优先人工概念子集
地域/语言偏倚 英文期刊为主,非英文已过滤 中 跨语言应用需自行扩充
时间偏倚 v1 冻结于 2018-01 存档;技术演进后影像风格漂移 中 用 ROCOv2(扩展至 2022)做时间稳健性检查
长尾概念偏倚 1,947 概念中大量仅出现 1 次 中 按频次分组评测;报告宏平均

§7.2 标注质量

自动概念通道的误差构成主要是"图注语境性概念"(图像中不可见),官方通过人工假阳性复核与高频泛化概念删除控制了最严重部分。人工概念通道(ROCOv2)在 n = 400 子集上发布了与医生标注的混淆矩阵(模态、X 射线解剖、方向三类),透明度高于多数同类数据集;但方向类存在官方承认的近似标注(见坑点 6)。总体而言:模态标签可信度最高,解剖次之,方向性最低。

对三条标注通道的工程建议:

通道 可信度 用法建议
自动 UMLS 概念(cuis/semtypes) 中(文本衍生噪声) 做预训练与弱监督;先频次过滤
人工策划概念(concepts_manual) 高(模态/解剖),中(方向) 主评测通道;方向类先抽检
ImageCLEF 竞赛概念(2021+ 医生标注) 高 复现竞赛数字专用,注意 user agreement

§7.3 泛化性

目标场景 失效风险 证据
临床 PACS 自动打标 中-高:文献分布 ≠ 临床分布 PMC11226965 指出 ROCO 模态分布与临床常规不符
胸片报告生成 中:ROCO 胸片仅是子集,报告风格非临床报告 MIMIC-CXR 等临床数据集在报告任务上是更对齐选择
多模态 VLM 预训练 低-中:图文对规模大、噪声可控 GLoRIA/M3AE/Med-GIT 等以 ROCO 预训练后在下游任务有效
基层低质量设备图像 高:出版图像质量经筛选 官方提示 PMC 图像质量与期刊版也可能不一致
合成图/数字艺术鉴别 任务内可用(out-of-class 集即为此设计) 官方提供 6,127 张 out-of-class 图像

§7.4 伦理

ROCO 图像全部来自 PMC 开放获取论文的已出版插图,图注可公开检索,不包含数据集方自行收集的患者数据;但其伦理边界依附于来源论文:已发表插图通常已获患者知情同意或许可豁免,使用者再分发时应尊重来源许可(尤其 CC BY-NC 的非商业边界)。数据集不含个人身份信息,图注偶见年龄短语,建议训练前清洗。禁止将基于 ROCO 的模型在未经临床验证的情况下用于诊断决策。

§7.5 公平性

数据集未提供人口学字段,无法做患者级公平性审计。可审计的公平性维度是模态与解剖部位覆盖:乳腺摄影等女性特异检查样本极少,儿科与罕见病影像受出版偏倚影响难以量化。若产品面向多人群部署,应在患者级数据上补充公平性评估,ROCO 不能替代该环节。

§7.6 数据漂移

v1 冻结于 2018 年存档,ROCOv2 扩展至 2022 年新增图像——两者之间的影像风格(如平板探测器普及、AI 重建技术进入常规)与出版习惯存在自然漂移。实践中若 2018 旧图训练、2022 新图评测出现指标下降,应首先怀疑时间漂移而非模型缺陷;官方 baseline 在 ROCOv2 上的表现优于其在 2023 竞赛版数据上的表现,也提示数据版本切换本身就会改变指标基线。

可操作的漂移监控:把 v2 新增的 35,705 张图作为"时间外推测试片"(2021-2022 图为哨兵集),核心模型每季度在哨兵集上重跑一次 F1;连续两个周期下滑超过 2 个百分点时,触发再训练评估。另一个隐蔽漂移源是期刊构成——PMC 开放获取子集的期刊逐年扩容,不同年份进入数据集的期刊清单不同,建议在实验记录里保存 train/test 各自的 PMC 编号清单作为漂移审计的底账。

§7.7 DAIMS 数据就绪度评估

# 检查项 状态 说明
1 宽格式 ✅ 单表 CSV(id, name, caption / cuis, semtypes),行级即样本
2 唯一标识 ✅ id 字段全局唯一(ROCO_XXXXX),name 含 PMC 溯源
3 特殊字符处理 ⚠️ caption 含非 ASCII 与引号变体(v2 已过滤非英文),使用前需 NFKC 清洗
4 重复行 ⚠️ v2 已用 AntiDupl 移除 2,056 张重复;v1 需自行查重
5 缺失编码 ✅ 空字符串/空字段语义明确(无概念、非 X 射线)
6 标签标识 ✅ cuis/semtypes 列即标签;manual 与 automatic 分文件
7 罕见类分组 ⚠️ 1,947 概念长尾严重(最低频次 1),需使用者自行分组
8 偏倚评估 ✅ 论文披露模态分布偏倚与出版偏倚成因,并提供 n=400 医生对照
9 数据字典 ✅ Zenodo 文件清单 + 论文字段说明完整
10 信息性缺失解释 ✅ 方向性/解剖字段为空即"模态不适用",论文有明确说明
11 设备记录 ❌ 无 DICOM 级设备/参数元数据(文献来源固有缺失)
12 共线性 ✅ 标签为多标签集合,无临床指标共线性问题
13 编码映射 ✅ 提供 cui_mapping.csv(CUI → 概念文本)
14 时间戳处理 ⚠️ 无样本级时间戳;版本级时间线清晰(2018 存档 / 2022 扩展)
15 划分建议 ✅ v2 官方三分划分;v1 划分混乱是已知坑(坑点 3)
16 泄漏讨论 ⚠️ 官方做过去重但未按文章分组划分 v1;需使用者自行处理
17 标签分布 ✅ 概念频次分布(长尾)在论文与 CLEF 文档中有量化披露
18 测量偏倚 ⚠️ 出版图像质量与临床采集存在系统性差异,官方有提示但无量化
19 外部验证建议 ✅ 论文给出多用途建议并附 GitLab baseline/评测代码
20 版本记录 ✅ v1(2018)→ v2(2024)变更记录完整(新增 35,705 张、去重、许可过滤)
21 预处理脚本 ✅ 官方提供 fetch.py(v1)与 rocov2-code(baseline + 评测)
22 合规要求 ✅ license_information.csv 逐图记录许可;无注册/DUA 门槛
23 多模态对齐 ✅ 图像-图注-概念三表以 id 对齐,一一对应
24 去标识化 ✅ 来源为已出版文献插图,数据集方不分发个人身份信息

DAIMS 评分:18.5 / 24(✅ 计 1 分,⚠️ 计 0.5 分,❌ 计 0 分)

评分解读:ROCO 的结构层(标识、字典、对齐、许可)非常扎实,扣分集中在三处——无设备级元数据(文献来源的固有局限)、v1 划分与泄漏处理留给使用者、长尾标签与文本特殊字符需要额外工程。这与"开放文献挖矿数据集"的定位一致:拿来即用的图文对,部署级的临床元数据需要其他数据源补足。

对你意味着什么:(1)可以直接把 id/caption/concepts 三表拉进任何标准多标签与生成管线,无需大规模重构;(2)动手前先做三件事——图像 resize/crop、caption NFKC 清洗、按 PMC 编号分组切分(若用 v1);(3)任何"临床部署"结论必须挂靠一个患者级数据集的外部验证,ROCO 自身的 DAIMS 短板(无设备记录、无人口学)决定了它只能承担预训练与算法开发角色。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
ImageCLEFmedical 2023 test(同源不同版) ImageCLEF 概念检测 F1 0.5215(EfficientNetv2-s) ROCOv2 内部 test 为 0.5925 数据质量提升使同一模型 F1 提高约 0.07
ImageCLEF 2019/2020 概念检测 ImageCLEF 概念检测 各年参赛队 F1 持续提升 需按年对齐划分 ROCO 子集成为多年可复评的标准场
下游胸片/VQA 任务(MIMIC-CXR、VQA-RAD 等) 各预训练论文 报告生成/VQA/检索 任务各异 ROCO 预训练普遍优于 ImageNet 初始化 GLoRIA/M3AE/Med-GIT 系论文

注:表中仅收录有同行评审支撑的数值;跨数据集指标受标签体系与划分影响,不可直接比较。


§8 基准性能与生态

§8.1 排行榜:ImageCLEFmedical Caption 2023

概念检测子任务(主指标 sample-averaged F1,基于 ROCO 扩展数据集;数值来自 ROCOv2 论文转引的官方榜单):

排名 团队 F1 Secondary F1(人工概念) 关键技术 完整引用 代码
1 AUEB-NLP-Group 0.5223 0.9258 三种架构多标签分类模型集成 Ilias et al., 2023, CLEF 2023 Working Notes(ImageCLEFmedical Caption 2023 overview paper, CEUR-WS) 未公开
2 KDE-Lab_Med 0.5074 0.9321 多标签分类(人工概念子集 F1 第一) Koloski et al., 2023, CLEF 2023 Working Notes 未公开
3 VCMI 0.4998 0.9162 多标签分类 Wieczorek et al., 2023, CLEF 2023 Working Notes 未公开
— Baseline EfficientNet-B0 0.5099 0.9309 ImageNet-1k 预训练 + sigmoid + soft margin loss Bloch et al., 2024, Scientific Data. doi:10.1038/s41597-024-03496-6 GitLab rocov2-code
— Baseline EfficientNetv2-s 0.5215 0.9407 ImageNet-21k 预训练 + RMSProp 1e-4 Bloch et al., 2024, Scientific Data. doi:10.1038/s41597-024-03496-6 GitLab rocov2-code
— Baseline(ROCOv2 版) 0.5925 0.9430 同上,ROCOv2 test Bloch et al., 2024, Scientific Data. doi:10.1038/s41597-024-03496-6 GitLab rocov2-code

caption prediction 子任务(主指标 BERTScore,2023 年首次取代 BLEU):

排名 团队 BERTScore 关键技术 完整引用
1 (2023 最佳团队) 0.6413 编码器-解码器 + 强化学习 见 ImageCLEFmedical Caption 2023 overview paper, CLEF 2023 Working Notes, CEUR-WS

⚠️ 数值不可直接比较的原因:各年份训练/验证/测试划分不同(2023 版 60,918/10,437/10,473 vs ROCOv2 59,958/9,904/9,927);2023 版与 ROCOv2 版概念表有约 3,000 个人工概念差异;caption 指标跨年份更换主指标。引用任何数字时必须注明数据版本与指标版本。

§8.2 SOTA 总结与选型建议

概念检测在 ROCOv2 test 上最强公开数字是官方 EfficientNetv2-s baseline 的 F1 0.5925(secondary 0.9430),高于 2023 竞赛最佳团队的 0.5223(在旧版数据上)——这更多反映数据质量提升而非模型代差。选型建议:复现/对比用官方 EfficientNet 系 baseline 起步(代码在 GitLab rocov2-code);追求更高精度用多架构集成(2023 冠军思路);caption 任务用编码器-解码器框架并报告 BERTScore 主指标。

按目标选路径:

你的目标 起步路径 对标数字
一周内出第一个概念检测 baseline rocov2-code 的 EfficientNet-B0 配置 ROCOv2 test F1 0.5811
冲榜/发论文 EfficientNetv2-s + 多架构集成 + 频次过滤调参 F1 ≥ 0.5925(ROCOv2 版)
Caption 生成 ViT-GPT2 起步 → 编码器-解码器 + RL BERTScore 对标 0.6413(2023 版数据)
VLM 预训练 图文对范式(CLIP/BLIP),忽略概念表 下游任务对标相应预训练论文

注意:集成模型与单模型的差距在 secondary F1(人工概念子集)上远小于主 F1,说明集成收益主要来自对长尾自动概念的判别,而非对"干净"人工概念的更强理解。

§8.3 评测协议

  • 概念检测:预测每图 UMLS CUI 集合,主指标 sample-averaged F1;另设 secondary F1(仅人工策划概念:模态 + X 射线解剖 + 方向)。
  • Caption 预测:主指标 BERTScore,次指标 ROUGE;官方同时发布 METEOR、CIDEr、BLEU、BLEURT、CLIPScore。
  • 历史协议:2019/2020 仅概念检测;2021 恢复双子任务;2022 及以前 caption 主指标为 BLEU。

各年份任务与数据要点速查:

年份 子任务 主指标 数据规模(train/val/test) 要点
2019 概念检测 F1 56,629 / 14,157 / (2018-02~2019-02 PMC) 首次以 ROCO 为基座;删除 >13,000 频次概念
2020 概念预测 F1 扩展版 ROCO 增加成像模态信息供预处理
2021 概念 + caption F1 / BLEU 医生手工标注子集 提高概念医学相关性
2022 概念 + caption F1 / BLEU 2020 扩展版 已知概念数过大、词形还原与重复 caption 问题
2023 概念 + caption F1 / BERTScore 60,918 / 10,437 / 10,473 仅 CC BY/CC BY-NC;人工验证解剖与模态;新增 X 射线方向概念

竞赛参与者须签署 user agreement 后方可获取训练与验证集;测试集标签赛后发布。复现竞赛数字时请下载对应年份版本,禁止跨年混用。

数据集 模态 标注 与 ROCO 关系
MIMIC-CXR 胸片 + 报告 临床报告 + 标签 临床对齐的下游验证场
CheXpert 胸片 14 类标签 胸片分类外部验证
IU X-ray (OpenI) 胸片 MeSH + 报告 小规模对照
MedICaT 文献医学图像 图注 + 引用 同源(文献挖矿)姊妹数据集
IRMA X-Ray IRMA 四轴编码 其解剖/方向轴被 ROCOv2 沿用
VQA-RAD / SLAKE 影像 + 问答 QA 对 VQA 下游评测

§8.5 关键论文

  1. Pelka, O., Koitka, S., Rückert, J., Nensa, F., Friedrich, C. M., 2018, MICCAI LABELS Workshop(LNCS 11043, pp. 180-189, Springer). doi:10.1007/978-3-030-01364-6_20 —— ROCO 原始论文,提出文献挖矿管线与 81,825 张图像数据集。
  2. Bloch, L., Brüngel, R., Idrissi-Yaghir, A., Schäfer, H., Schmidt, C. S., et al., 2024, Scientific Data. doi:10.1038/s41597-024-03496-6 —— ROCOv2 论文,官方划分、人工概念与技术验证。
  3. Pelka, O., Friedrich, C. M., García Seco de Herrera, A., Müller, H., 2019, CLEF 2019 Working Notes(CEUR-WS vol. 2380)—— ImageCLEFmed 2019 概念检测任务概览,ROCO 首次作为竞赛基座。
  4. Ilias, L. et al. / Müller, H. et al., 2023, CLEF 2023 Working Notes(CEUR-WS)—— ImageCLEFmedical Caption 2023 overview,双子任务榜单与 BERTScore 协议。
  5. Chen, Z. et al., 2022, arXiv(M3AE)—— 以 ROCO 为图文对语料的多模态自编码预训练代表。
  6. You, K. et al., 2020, NeurIPS Tackling Climate Change Workshop(GLoRIA 系)—— ROCO/胸片对比学习预训练的早期代表作。
  7. SMAHD 等(PMC11226965),2024, Computers in Biology and Medicine —— 系统分析 ROCO 模态失衡并以之做实例级影像标注的研究。

§8.6 社区活跃度

官方 v1 仓库 191 stars / 21 forks(ecosyste.ms 同步 2024-12),自 2022-04 后未再推送;维护重心已移至 ROCOv2(Zenodo + GitLab rocov2-code)。ImageCLEFmedical Caption 2019-2023 五届竞赛持续吸引多国团队参赛(2023 概念检测 9 支队伍提交有效 run)。第三方生态活跃:HuggingFace 多个 ROCO/ROCOv2 镜像与指令化衍生集(如 roco-instruct-65k),Kaggle 镜像若干,多个 awesome 列表(awesome-multimodal-in-medical-imaging、Awesome-CLIP-in-Medical-Imaging)收录。

§8.7 生态快照

资源 类型 链接 Star/规模(截至 2026-09) 推荐理由
roco-dataset(v1 官方) 数据仓库 GitHub 191 stars v1 原始分发渠道
ROCOv2 Zenodo 打包数据 Zenodo 约 6.3 GB 官方划分 + 人工概念
rocov2-code 官方代码 GitLab baseline + 评测脚本 对标官方数字的唯一途径
ImageCLEFmedical Caption 竞赛 imageclef.org/node/290 2019-2023 五届 官方榜单与协议
eltorio/ROCOv2-radiology HF 镜像 HuggingFace 社区维护 快速挂载实验
roco-instruct-65k 衍生指令集 HuggingFace 81,772 行 VLM 指令微调起点

§9 相关资源与引用

§9.1 官方资源

§9.2 BibTeX 引用

@inproceedings{pelka2018roco,
  author    = {Pelka, Obioma and Koitka, Sven and R{\"u}ckert, Johannes and
               Nensa, Felix and Friedrich, Christoph M.},
  title     = {Radiology Objects in COntext (ROCO): A Multimodal Image Dataset},
  booktitle = {Intravascular Imaging and Computer Assisted Stenting and
               Large-Scale Annotation of Biomedical Data and Expert Label Synthesis:
               7th Joint International Workshop, CVII-STENT 2018 and Third International
               Workshop, LABELS 2018, Held in Conjunction with MICCAI 2018,
               Granada, Spain, September 16, 2018, Proceedings},
  series    = {Lecture Notes in Computer Science},
  volume    = {11043},
  pages     = {180--189},
  year      = {2018},
  publisher = {Springer Cham},
  doi       = {10.1007/978-3-030-01364-6_20}
}

@article{bloch2024rocov2,
  author  = {Bloch, Louise and Br{\"u}ngel, Raphael and Idrissi-Yaghir, Ahmad and
             Sch{\"a}fer, Henning and Schmidt, Cynthia S. and Koitka, Sven and
             Pelka, Obioma and R{\"u}ckert, Johannes and Friedrich, Christoph M. and
             Nensa, Felix and others},
  title   = {ROCOv2: Radiology Objects in COntext Version 2, an Updated Multimodal Image Dataset},
  journal = {Scientific Data},
  year    = {2024},
  doi     = {10.1038/s41597-024-03496-6}
}

@misc{rocov2data,
  author = {Bloch, Louise and Br{\"u}ngel, Raphael and Idrissi-Yaghir, Ahmad and others},
  title  = {ROCOv2: Radiology Objects in COntext Version 2, An Updated Multimodal Image Dataset},
  year   = {2023},
  doi    = {10.5281/ZENODO.8333644},
  note   = {Zenodo dataset}
}

§9.3 引用指南

  • 使用 v1 数据:引 pelka2018roco。
  • 使用 ROCOv2 数据(含官方划分/人工概念):同时引 bloch2024rocov2 与 rocov2data。
  • 使用 ImageCLEFmedical 各年份划分或榜单:另引对应年份 CLEF Working Notes overview paper。
  • 页面数字若与官方更新不一致,以官方仓库与 Zenodo 最新说明为准。

§10 AI 使用声明卡

§10.1 本页面使用的 AI 模型

用途 模型/工具 说明
资料检索与归纳 CodeBuddy Code(fast-model) 检索、事实核对、结构化写作

§10.2 AI 参与范围

AI 完成文献检索(WebSearch)、事实清单整理、正文起草与格式化。所有关键数字均溯源至 §10.3 所列来源;结构与术语规范由写作宪法约束。人工编辑负责医学与数据工程审核。

§10.3 输入来源

  1. Pelka, O., Koitka, S., Rückert, J., Nensa, F., Friedrich, C. M., 2018, MICCAI LABELS Workshop, LNCS 11043, Springer. doi:10.1007/978-3-030-01364-6_20
  2. Bloch, L., Brüngel, R., Idrissi-Yaghir, A., Schäfer, H., Schmidt, C. S., et al., 2024, Scientific Data. doi:10.1038/s41597-024-03496-6(arXiv:2405.10004)
  3. ROCOv2 Zenodo 数据页(含文件清单与 md5),doi:10.5281/ZENODO.8333644
  4. ROCOv2 PubMed 条目(PMID 38926396)
  5. razorx89/roco-dataset GitHub README(v1 官方)
  6. ecosyste.ms 仓库元数据(razorx89/roco-dataset)
  7. ImageCLEFmedical Caption 2023 任务页,imageclef.org/node/290
  8. Müller, H. et al., 2023, CLEF 2023 Working Notes(ImageCLEFmedical Caption 2023 overview, CEUR-WS)
  9. ImageCLEFmed 2019 Concept Detection Task 概览(HES-SO publications 存档)
  10. Instance-level medical image classification for text-based retrieval in a medical data integration center, 2024, PMC11226965
  11. MOSMOS: Multi-organ segmentation facilitated by medical report supervision, 2024, arXiv:2409.02418
  12. Unified Multi-modal Diagnostic Framework with Reconstruction Pre-training, 2024, arXiv:2404.06057
  13. M3AE 数据加载文档(DeepWiki: zhjohnchan/M3AE)
  14. Visual Med-Alpaca Med-GIT 数据文档(DeepWiki: cambridgeltl/visual-med-alpaca)
  15. MAKEN: Improving Medical Report Generation with Adapter Tuning and Knowledge Enhancement, 2023, arXiv:2312.03970
  16. Springer(unpaywall 记录)与 Mendeley 文献条目(引用计数 251+,截至 2026-09)
  17. HuggingFace photonmz/roco-instruct-65k 数据卡;robailleo/medical-imaging-combined 数据卡

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
关键规模数字(81,825 / 6,127 / 79,789 / 1,947) 千方病案医学编辑部 与 ROCOv2 论文原文逐项比对 ✅ 已通过/已验证
划分数字(v1 社区划分与 ImageCLEF 各年) 千方病案医学编辑部 与各来源原文交叉核对 ✅ 已通过/已验证
基准数字(F1 / BERTScore / baseline 配置) 千方病案医学编辑部 与 ROCOv2 论文表格比对 ✅ 已通过/已验证
§2 医学背景与 UMLS 概念示例 千方病案医学编辑部 医学编辑逐条核对概念语义 ✅ 已通过/已验证
§6 代码可运行性与预处理建议 千方病案医学编辑部 数据工程师静态审查 + 官方配置对齐 ✅ 已通过/已验证
许可与合规描述 千方病案医学编辑部 与 Zenodo 许可清单与论文许可章节核对 ✅ 已通过/已验证

§10.5 AI 生成章节标注

本页面全部章节由 AI 起草;§1.0、§1.2、§7.5 的解读性文字与坑点四段式为 AI 综合来源后的结构化归纳,事实性内容均可回溯至 §10.3 来源。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核声明一致)

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


相关数据集导航

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

  • quilt-1m — 共享标签:多模态 / 医学影像 / 影像-文本对齐
  • ms-cxr — 共享标签:多模态 / 医学影像 / 影像-文本对齐
  • openi — 共享标签:医学影像 / 分子生成 / 影像-文本对齐
  • multimedbench — 共享标签:医学影像 / 影像-文本对齐
  • ms-cxr-t — 共享标签:多模态 / 医学影像 / 影像-文本对齐
  • reg2026 — 共享标签:多模态 / 医学影像 / 影像-文本对齐
  • vlm3d — 共享标签:多模态 / 医学影像 / 影像-文本对齐
  • biomedica — 共享标签:多模态 / 医学影像 / 影像-文本对齐
  • mimic-cxr — 共享标签:多模态 / 医学影像
  • deeplesion — 共享标签:医学影像 / 目标检测

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

返回 AI-Ready 数据集