REFUGE

REFUGE 青光眼眼底影像数据集 | 千方病案医数集

来源 中山大学中山眼科中心 + Inception Institute of AI + Medical University of Vienna + Baidu | https://refuge.grand-challenge.org/发布时间: 2026-08-04最后更新: 2026-08-04 阅读 5

信息速览

数据集名称REFUGE
数据类型 1200 张眼底照片, 约 2.5 GB, 7 名专家标注, 双相机域偏移
规模约 1,200 例
接入方式中山大学中山眼科中心 + Inception Institute of AI + Medical University of Vienna + Baidu | https://refuge.grand-challenge.org/
AI 就绪度

INFOBOX

数据集名称 REFUGE
英文全称 Retinal Fundus Glaucoma Challenge
别名 / 简称 REFUGE1、REFUGE Challenge、iChallenge-REFUGE
疾病分类 9D61 青光眼(ICD-11)/ H40 青光眼(ICD-10)
SNOMED CT 23986005 Glaucoma / 313207006 Optic disc structure / 313143005 Optic cup structure / 423287001 Cup-disc ratio
数据模态 影像(彩色眼底照片 CFP,45° 视场)
AI 任务类型 图像二分类(青光眼/非青光眼)、语义分割(视盘/视杯)、关键点定位(黄斑中心凹)
样本总数 1,200 张彩色眼底照片(REFUGE1)/ 2,000 张(REFUGE2)
数据大小 ~2.5 GB(REFUGE1,JPEG + BMP 掩码)
数据格式 JPEG(眼底图像)/ BMP 8-bit(分割掩码)/ CSV(分类与定位结果)
许可证 CC BY 4.0(REFUGE1,部分镜像标注 MIT)
访问级别 开放(Bitbucket 公开下载,无需注册)
DUO 标签 GRU
语言 英文(文件命名与文档)
首发日期 2018-09(MICCAI 2018,西班牙格拉纳达)
最后更新 2020-01(Medical Image Analysis 期刊正式发表)
发布机构 Inception Institute of Artificial Intelligence(UAE)/ Medical University of Vienna / Zhongshan Ophthalmic Center, Sun Yat-sen University / Baidu Inc.
官方主页 https://refuge.grand-challenge.org/
下载地址 https://bitbucket.org/woalsdnd/refuge/src
DOI 10.1016/j.media.2019.101570(Orlando et al., MedIA 2020)
引用次数 500+(Google Scholar,截至 2026-08)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方三等分划分 + 7 专家标注 + 临床金标准 + 统一评估框架;扣分项:刻意域偏移致跨设备泛化困难、单中心人群、无患者级元数据
页面状态 published

§0 E-E-A-T 信任声明与免责声明

医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(ICD-11 映射、临床任务定义、金标准描述)、§7 偏倚分析。

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

审核日期:2026-08-04

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。部分数据集要求额外资质认证(如 PhysioNet CITI Training)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。

§1 数据集概览(Overview)

§1.0 📌 30 秒速览

REFUGE 是 Inception Institute of AI、维也纳医科大学和中山眼科中心等于 2018 年 MICCAI 会议上联合发布的青光眼眼底影像数据集,包含 1,200 张彩色眼底照片,涵盖青光眼分类、视盘/视杯分割和黄斑定位三大任务,由 7 名青光眼专科医生标注。

它的独特价值在于首次为青光眼 AI 评估提供了标准化基准——不仅提供当时最大规模的公开标注数据,还构建了统一的评测框架,使不同算法的横向比较成为可能。更关键的是,数据集刻意将训练集和测试集分配给不同品牌的眼底相机(Zeiss vs Canon),使跨设备域适应成为一等评测目标,这在当时的眼科数据集中是独一无二的。

你可以用它来:训练青光眼自动筛查模型、开发视盘/视杯分割算法并计算杯盘比、或者研究跨设备域适应策略以提升模型在未见相机上的鲁棒性。

§1.1 摘要

REFUGE 由 Huazhu Fu(Inception Institute of AI)、José Ignacio Orlando(Medical University of Vienna)、Fei Li 和 Xiulan Zhang(Zhongshan Ophthalmic Center, Sun Yat-sen University)等人组织,作为 MICCAI 2018 第 5 届眼科医学图像分析研讨会(OMIA)的半日挑战赛发布。数据集包含 1,200 张彩色眼底照片,按 1:1:1 等分为训练集(400 张,Zeiss Visucam 500 相机,2,124×2,056 px)、离线测试集(400 张,Canon CR-2 相机,1,634×1,634 px)和在线测试集(400 张,Canon CR-2 相机)。每个子集均按 10% 青光眼比例分层(40 例青光眼 / 360 例非青光眼)。挑战赛设三大任务:(1)青光眼临床分类、(2)视盘/视杯像素级分割、(3)黄斑中心凹定位(可选)。视盘和视杯标注由 7 名来自中山眼科中心的青光眼专科医生(平均 8 年经验)通过椭圆拟合工具完成,再由 1 名资深专家进行多数投票合并与质控。青光眼标签基于完整临床记录(OCT、视野、眼压等),而非仅依赖眼底图像。挑战赛共 28 支团队注册、12 支团队进入现场赛,最终 2 支团队在分类任务上超越了 2 名人类专家。

§1.2 战略价值分析

技术创新维度:REFUGE 的核心创新在于将"全局疾病分类"与"精细解剖结构分割"统一到同一数据集和评测框架中。此前,青光眼 AI 研究面临两大瓶颈:一是公开数据集规模小且标注不统一(ORIGA 650 张、RIM-ONE 159 张、DRISHTI-GS 101 张),缺乏可比性;二是没有标准化评测协议,各论文自定义划分和指标,导致"刷榜"不可复现。REFUGE 通过发布当时最大规模的标注数据集(1,200 张,是此前最大数据集的约 2 倍)并提供统一在线评测平台,一举解决了这两个问题。更关键的是,刻意设置的相机域偏移(Zeiss 训练 → Canon 测试)将跨设备泛化能力从"可选挑战"提升为"必考科目",推动了域适应(Domain Adaptation)在眼科 AI 中的蓬勃发展——CFEA、POTAL、DoFE 等一系列无监督域适应方法直接以 REFUGE 为基准数据集诞生。

应用影响维度:REFUGE 的发布直接催化了青光眼 AI 筛查从实验室走向临床。挑战赛结果显示,顶级算法在分类任务上已超越人类专家(VRT 团队 AUC=0.9885 vs 专家 AUC~0.85),在分割任务上 Dice 系数达到 0.95+(视盘)/ 0.85+(视杯),证明了 AI 辅助青光眼筛查的技术可行性。REFUGE 还推动了后续 REFUGE2(2020,2,000 张,4 种相机)和 GAMMA(2023,多模态)等更大规模挑战赛的诞生,形成了持续演进的青光眼 AI 评估生态。此外,REFUGE 的域偏移设计理念影响了后续医学影像挑战赛的构建范式——RIGA+、AIROGS 等数据集开始明确纳入多设备/多中心因素。

§1.3 同类数据集横向对比

数据集 样本量 相机 标注类型 青光眼标签来源 域偏移设计 许可证
REFUGE 1,200 Zeiss + Canon(2 种) OD/OC 分割 + 分类 + 黄斑定位 临床记录(OCT+VF+IOP) ✅ 刻意设置 CC BY 4.0
REFUGE2 2,000 Zeiss + Canon + KOWA + TOPCON(4 种) 同 REFUGE 临床记录 ✅ 多设备 CC BY 4.0
ORIGA 650 Canon CR-DGi(1 种) OD/OC 分割 + CDR 算法 + 专家确认 研究用途
RIM-ONE-r3 159 NIDEK AFC-210(1 种) OD/OC 分割 临床 研究用途
DRISHTI-GS 101 未知(1 种) OD/OC 分割 + CDR 临床体征 + CDR + 检查 研究用途
ACRIMA 705 Topcon TRC(1 种) 仅分类 2 名专家 研究用途
AIROGS 113,892 未知 仅分类 临床 CC BY 4.0
LAG 11,760 未知 OD/OC 分割 + 分类 模拟眼动实验 研究用途

REFUGE 是当时唯一同时具备临床金标准标签 + 像素级分割标注 + 多设备域偏移 + 标准化评测框架的青光眼数据集。

§1.4 版本演进时间轴

时间 事件
2018-09 REFUGE 挑战赛在 MICCAI 2018(西班牙格拉纳达)OMIA Workshop 举办,1,200 张图像数据集发布
2018-09 28 支团队注册,12 支团队进入现场赛,2 支团队分类性能超越人类专家
2019-10 Medical Image Analysis 期刊正式接收(DOI: 10.1016/j.media.2019.101570)
2020-01 MedIA 论文正式出版(Orlando et al., Vol. 59, 101570)
2020-07 REFUGE2 挑战赛启动(MICCAI 2020),扩展至 2,000 张图像、4 种相机
2020-10 VUNO Inc. 获 REFUGE2 综合排名第一(134 支团队参赛)
2022-02 REFUGE2 论文预印本发布(arXiv: 2202.08994)
2023-12 GAMMA 挑战赛发表(MedIA, Vol. 90, 102938),扩展至多模态(CFP + OCT)

§1.5 典型 AI 应用场景

  1. 青光眼社区筛查:训练基于眼底照片的青光眼自动分类模型,用于资源匮乏地区的大规模筛查
  2. 杯盘比(CDR)量化:通过视盘/视杯分割自动计算垂直杯盘比(vCDR),辅助青光眼进展监测
  3. 跨设备域适应:利用 Zeiss→Canon 域偏移设计,研究无监督域适应(UDA)策略,提升模型在未见相机上的泛化能力
  4. 多任务学习:同时优化分类、分割和定位三个任务,探索任务间知识共享与协同提升
  5. 专家标注共识建模:利用 7 名专家的独立标注,研究标注不确定性建模和标签噪声鲁棒训练

§2 医学背景(Medical Context)

§2.1 ICD-11 疾病编码

ICD-11 编码 疾病名称 说明
9D61.0 原发性开角型青光眼(POAG) 最常见类型,REFUGE 数据集中主要覆盖
9D61.1 原发性闭角型青光眼 REFUGE 未区分亚型
9D61.Z 青光眼(未特指) REFUGE 使用二分类标签(G/Non-G)

ICD-10 对应:H40 青光眼系列编码(H40.1 原发性开角型青光眼 / H40.2 原发性闭角型青光眼 / H40.9 青光眼未特指)

§2.1b SNOMED CT 映射

数据集标签 ICD-11 SNOMED CT SNOMED CT 术语
Glaucoma 9D61 23986005 Glaucoma (disorder)
Optic Disc 313207006 Optic disc structure (body structure)
Optic Cup 313143005 Optic cup structure (body structure)
Cup-to-Disc Ratio 423287001 Cup-disc ratio (observable entity)
Fovea Centralis 244421009 Fovea centralis of retina (body structure)
Visual Field 364235000 Visual field assessment (procedure)
Intraocular Pressure 416329001 Intraocular pressure (observable entity)

§2.2 疾病简介与流行病学

青光眼是一组以视神经进行性损伤为特征的视神经病变,是全球第二大致盲原因和第一大不可逆性致盲原因。全球约有 7,960 万青光眼患者(2020 年),预计 2040 年将达到 1.118 亿。中国是青光眼患者最多的国家,约 2,100 万患者。青光眼的核心病理机制是视网膜神经节细胞凋亡导致视神经纤维层变薄,表现为视盘凹陷扩大(杯盘比增大)和视野进行性缺损。早期青光眼通常无症状,确诊时往往已造成不可逆视力损害,因此早期筛查具有重大公共卫生意义。彩色眼底摄影(CFP)是最经济的眼底成像方式,适合大规模筛查,但其对青光眼的评估主要依赖杯盘比(CDR)等间接生物标志物,缺乏 OCT 的深度信息,这也是 AI 在 CFP 上实现可靠青光眼检测面临的核心挑战。

§2.3 临床任务定义

任务 类型 临床意义 REFUGE 中的实现
青光眼筛查 二分类 识别需要转诊眼科的患者 基于 OCT + 视野 + 眼压的综合临床诊断金标准
视盘分割 语义分割 定量视盘边界,计算盘面积 像素级标注(BMP 掩码,128=盘)
视杯分割 语义分割 定量视杯凹陷,计算杯面积 像素级标注(BMP 掩码,0=杯)
杯盘比量化 回归 vCDR > 0.6-0.7 为青光眼高风险 由分割结果计算垂直直径比
黄斑定位 关键点定位 标识黄斑中心,辅助眼底结构定向 7 名专家标注取均值

§2.4 患者人群特征

维度 特征
数据来源 中山眼科中心(广州),多来源回顾性收集(医院 + 临床研究)
采集时间 未公开具体采集时段
年龄分布 未公开(无患者级元数据释放)
性别比例 未公开
种族分布 中国患者(推断为东亚人群)
就医类型 混合(医院就诊 + 临床研究受试者)
青光眼比例 10%(每子集 40 G / 360 Non-G),按子集分层等比
采集设备 Zeiss Visucam 500(训练集,2,124×2,056 px)+ Canon CR-2(测试集,1,634×1,634 px)

⚠️ 人群偏倚提示:REFUGE 数据来自单一中心、单一族群(中国患者),且未释放年龄/性别等人口统计学元数据,模型在此数据集上的性能可能无法泛化至其他人群。

§2.5 临床意义

青光眼 AI 筛查的核心临床价值在于弥补筛查覆盖缺口。在医疗资源匮乏地区(如中国农村、印度农村、非洲),眼科医生密度远低于 WHO 推荐标准,大量青光眼患者因未及时筛查而错过早期干预窗口。基于眼底照片的 AI 筛查系统可在社区诊所、药店甚至智能手机上部署,实现"拍照即筛查"。REFUGE 的设计直接服务于这一目标:其青光眼标签基于完整临床诊断(而非仅眼底图像),更贴近真实筛查场景;其双相机域偏移设计模拟了"训练用 A 设备、部署到 B 设备"的现实挑战。此外,视盘/视杯分割可直接输出杯盘比这一经典青光眼生物标志物,为临床医生提供可解释的决策依据。

§2.6 金标准/参考标准

数据划分 分类标注 分割标注 黄斑定位 金标准性质
训练集(400 张) 临床诊断(OCT+VF+IOP) 7 专家椭圆拟合 → 资深专家合并 7 专家取均值 临床金标准 + 多专家共识
离线测试集(400 张) 临床诊断(标签不公开) 同上(评测时释放) 同上 临床金标准
在线测试集(400 张) 临床诊断(标签不公开) 同上(MICCAI 现场释放) 同上 临床金标准

标注流程:7 名青光眼专科医生(平均 8 年经验)使用椭圆拟合标注工具对视盘和视杯边界进行勾画 → 计算多数投票掩码 → 1 名资深青光眼专家进行质控(可剔除失败分割并重新投票)→ 合并为最终参考标准。青光眼标签来源于患者完整临床记录,包括眼底照片、OCT、视野检查和眼压测量。

§3 数据集规格(Specifications)

§3.0 版本抉择矩阵

你的需求 推荐版本 大小 理由
青光眼分类/分割基准实验 REFUGE1 ~2.5 GB 1,200 张标注图像 + 标准划分 + 最广泛对比基线
跨设备域适应研究 REFUGE1 ~2.5 GB Zeiss→Canon 刻意域偏移设计,UDA 研究首选
多设备泛化性测试 REFUGE2 ~5 GB 4 种相机(Zeiss/Canon/KOWA/TOPCON),更大规模
仅青光眼分类(大规模训练) AIROGS ~80 GB 113,892 张图像,最大规模青光眼分类数据集

§3.1 模态详细说明

REFUGE 数据全部为彩色眼底摄影(Color Fundus Photography, CFP),即使用眼底相机拍摄视网膜的彩色照片。每张图像覆盖约 45° 视场角(FOV),包含视盘(optic disc,视网膜神经纤维汇聚出眼球处)、视杯(optic cup,视盘中央的凹陷)、黄斑(macula,视网膜中央视觉最敏锐区域)和视网膜血管等结构。眼底照片为 2D 投影图像,缺乏 OCT 的深度信息,因此视杯边界在眼底照片上依赖颜色变化(杯区域较苍白)和血管走形转折来推断,这也是视杯分割比视盘分割更困难的原因。

§3.2 样本数拆分

子集 图像数 相机 分辨率 青光眼/非青光眼 标签公开
训练集 400 Zeiss Visucam 500 2,124×2,056 40/360 ✅ 全部公开
离线测试集 400 Canon CR-2 1,634×1,634 40/360 ❌ 挑战赛后释放
在线测试集 400 Canon CR-2 1,634×1,634 40/360 ❌ MICCAI 现场释放
合计 1,200 2 种 2 种 120/1,080

⚠️ 关键设计:所有 Zeiss 图像在训练集,所有 Canon 图像在测试集——这不是数据收集的偶然结果,而是刻意设计的相机域偏移。训练集和测试集在分辨率、色彩、对比度、视场范围上存在系统性差异,使跨设备泛化成为一等评测目标。

§3.3 数据格式

文件类型 格式 说明
眼底图像 JPEG RGB 彩色,8-bit/通道,两种分辨率
分割掩码 BMP 8-bit 像素标签:0=视杯(黑色)、128=视盘(灰色)、255=背景(白色)
分类标签 文件夹名 训练集:Glaucoma/Non-Glaucoma/ 文件夹
黄斑定位 CSV 图像文件名, X 坐标, Y 坐标
分类结果 CSV 图像文件名, 青光眼概率(0.0-1.0)

§3.4 存储大小

组件 大小 说明
眼底图像(JPEG) ~2.0 GB 1,200 张,两种分辨率
分割掩码(BMP) ~0.4 GB 400 张训练集掩码(仅训练集公开)
元数据与文档 ~0.1 GB README、评估脚本等
总计 ~2.5 GB

§3.5 标注方式与流程

┌─────────────────────────────────────────────────────────────────┐
│                   REFUGE 标注流程                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. 临床数据收集                                                 │
│     ├── 来源:中山眼科中心(医院 + 临床研究)                      │
│     ├── 青光眼诊断:OCT + 视野 + 眼压 → 临床记录金标准             │
│     └── 眼底拍照:Zeiss Visucam 500 / Canon CR-2                 │
│                                                                 │
│  2. 视盘/视杯分割标注                                             │
│     ├── 7 名青光眼专科医生(平均 8 年经验)                        │
│     ├── 工具:椭圆拟合标注器(支持缩放/查看/椭圆调整)               │
│     ├── 每名医生独立标注视盘和视杯边界                              │
│     └── 输出:7 组独立像素级掩码                                   │
│                                                                 │
│  3. 参考标准生成                                                 │
│     ├── 对 7 组标注计算多数投票掩码                                │
│     ├── 1 名资深青光眼专家进行质控                                 │
│     │   ├── 可剔除失败分割                                        │
│     │   └── 可要求重新投票                                        │
│     └── 输出:最终合并掩码(BMP 8-bit: 0/128/255)                 │
│                                                                 │
│  4. 黄斑中心凹定位                                                │
│     ├── 同 7 名专家独立标注黄斑中心坐标                             │
│     └── 资深专家选取各图像的标注取均值                              │
│                                                                 │
│  5. 青光眼分类标签                                                │
│     ├── 基于患者完整临床记录(非仅眼底图像)                         │
│     ├── 包括:OCT、视野、眼压、其他检查                             │
│     └── 输出:G(青光眼)/ Non-G(非青光眼)二分类标签               │
│                                                                 │
│  6. 数据划分                                                     │
│     ├── 1:1:1 等分(400/400/400)                                 │
│     ├── 按青光眼比例分层(10% per subset)                          │
│     └── Zeiss→训练,Canon→测试(刻意域偏移)                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

§3.6 评估指标体系

任务 主指标 辅助指标 排名计算
青光眼分类 AUC(ROC 曲线下面积) Sensitivity @ Specificity=0.85 按 AUC 排名(1=最优)
视盘分割 Dice 系数(DSC_OD) IoU
视杯分割 Dice 系数(DSC_OC) IoU
杯盘比 vCDR MAE(平均绝对误差)
分割综合 S_seg = 0.35·R(DSC_OD) + 0.25·R(DSC_OC) + 0.40·R(MAE_vCDR)
总体排名 S_val = 0.4·R(class) + 0.6·R(seg)

权重设计逻辑:分割权重(0.6)高于分类(0.4),因 vCDR 作为经典青光眼生物标志物,其准确量化综合反映视盘和视杯分割质量。vCDR MAE 权重最高(0.40),因其同时依赖视盘和视杯分割的正确性。

§3.7 工具与平台

工具 用途 说明
Grand Challenge 平台 在线评测与排行榜 https://refuge.grand-challenge.org/
Bitbucket 仓库 数据下载 https://bitbucket.org/woalsdnd/refuge/src
Bob DB(Idiap) Python 数据库接口 bob.db.refuge,支持标准协议加载
OpenDataLab / ModelScope 镜像下载 国内镜像,下载更快

§3.10 深度溯源链

数据采集 → 标注 → 合并 → 划分 → 发布 → 评测

[中山眼科中心] ──回顾性收集──→ 1,200张CFP
    │                              │
    │              ┌───────────────┤
    │              ↓               ↓
    │    [7名青光眼专科医生]    [临床诊断记录]
    │    平均8年经验             OCT+VF+IOP
    │    椭圆拟合标注            → G/Non-G标签
    │              │               │
    │              ↓               │
    │    [多数投票掩码]            │
    │              │               │
    │              ↓               │
    │    [资深专家质控]            │
    │    剔除失败/重新投票          │
    │              │               │
    │              ↓               ↓
    │    [最终参考标准] ←──────────┘
    │    BMP 8-bit: 0/128/255
    │              │
    │              ↓
    │    [1:1:1分层划分]
    │    Zeiss→Train, Canon→Test
    │              │
    │              ↓
    │    [Bitbucket公开发布]
    │    [Grand Challenge在线评测]
    │              │
    │              ↓
    │    [MICCAI 2018现场挑战赛]
    │    12队现场赛 → 排行榜
    │              │
    │              ↓
    │    [MedIA 2020正式出版]
    │    DOI: 10.1016/j.media.2019.101570
    └──────────────────────────────→ 持续开放评测

§4 数据结构详解(Data Schema)

§4.1 目录结构

refuge/
├── README.md
├── REFUGE/
│   ├── Training-400/
│   │   ├── Glaucoma/           # 40张青光眼 (Zeiss, 2124×2056)
│   │   │   ├── g_001.jpg
│   │   │   ├── g_002.jpg
│   │   │   └── ...
│   │   ├── Non-Glaucoma/       # 360张非青光眼 (Zeiss, 2124×2056)
│   │   │   ├── n_001.jpg
│   │   │   └── ...
│   │   ├── Disc_Cup_Masks/     # 视盘视杯掩码 (BMP 8-bit)
│   │   │   ├── g_001_mask.bmp
│   │   │   └── ...
│   │   └── Fovea_Location/
│   │       └── fovea_location.csv
│   │
│   ├── Validation-400/         # 400张离线测试 (Canon, 1634×1634)
│   │   ├── Images/
│   │   └── (标签挑战赛后释放)
│   │
│   └── Test-400/               # 400张在线测试 (Canon, 1634×1634)
│       ├── Images/
│       └── (MICCAI现场释放)
│
├── evaluation/
│   ├── classification_eval.py  # AUC计算脚本
│   ├── segmentation_eval.py    # Dice/CDR计算脚本
│   └── fovea_eval.py           # 欧氏距离计算脚本
│
└── submission_template/
    ├── classification_results.csv
    ├── fovea_location_results.csv
    └── segmentation/
        └── (提交的分割掩码)

§4.2 DAIMS 标准化数据字典

字段名 类型 描述 示例值 必填
image_id string 图像唯一标识符 g_001
image image/jpeg 彩色眼底照片 2,124×2,056 px RGB
subset enum 数据划分 train / val / test
camera enum 采集设备 Zeiss Visucam 500 / Canon CR-2
resolution string 图像分辨率 2124×2056 / 1634×1634
glaucoma_label enum 青光眼诊断 G / Non-G
label_source string 标签来源 clinical_record (OCT+VF+IOP)
od_oc_mask image/bmp 分割掩码 8-bit: 0/128/255
fovea_x int 黄斑中心 X 坐标 850
fovea_y int 黄斑中心 Y 坐标 1023
num_annotators int 分割标注者数 7
annotation_method string 标注方式 ellipse_fitting
annotation_merge string 合并方式 majority_vote + senior_QC

§4.3 标签分布

标签 训练集 离线测试集 在线测试集 合计 占比
青光眼(G) 40 40 40 120 10.0%
非青光眼(Non-G) 360 360 360 1,080 90.0%
合计 400 400 400 1,200 100%

⚠️ 类别不平衡:青光眼与非青光眼比例为 1:9,需采用加权损失、过采样或 SMOTE 等策略处理。

§4.4 相机域偏移可视化

特征 Zeiss Visucam 500(训练集) Canon CR-2(测试集)
分辨率 2,124×2,056 1,634×1,634
图像比例 接近正方形(~1.03:1) 正方形(1:1)
色调 偏暖橙色 偏冷黄绿
对比度 较高 较低
视场范围 较广 较窄
视盘大小(占图像面积比) 较小 较大

域偏移量化:Orlando et al. (2020) 图 4 显示训练集与测试集之间 OD 面积(占视野面积百分比)存在统计显著偏移,与相机/FOV 差异一致。

§4.5 数据完整性

维度 状态 说明
图像完整性 ✅ 完整 1,200 张图像全部有效,无损坏文件
分割掩码完整性 ✅ 完整 训练集 400 张掩码完整,测试集掩码仅评测时释放
分类标签完整性 ✅ 完整 训练集标签公开,测试集标签仅评测时释放
黄斑定位完整性 ✅ 完整 训练集 400 张坐标完整
患者级元数据 ❌ 缺失 无年龄、性别、种族、既往史等元数据
随访信息 ❌ 缺失 无纵向随访数据
图像采集元数据 ⚠️ 部分 仅记录相机型号和分辨率,无采集参数

§5 数据划分与使用建议(Splits & Usage)

§5.1 官方划分方案

REFUGE 提供唯一的官方 1:1:1 划分(400/400/400),按青光眼比例分层。此划分的核心特征是训练集与测试集使用不同相机,形成刻意域偏移。

┌─────────────────────────────────────────────────────┐
│              REFUGE 官方划分方案                       │
├──────────────┬──────────────┬───────────────────────┤
│  训练集 400   │  离线测试 400 │  在线测试 400          │
│  Zeiss       │  Canon       │  Canon                │
│  2124×2056   │  1634×1634   │  1634×1634            │
│  40G/360NG   │  40G/360NG   │  40G/360NG            │
│  标签公开 ✅  │  标签隐藏 🔒 │  标签隐藏 🔒           │
├──────────────┴──────────────┴───────────────────────┤
│  域偏移:Zeiss → Canon(训练→测试)                    │
│  评测:Grand Challenge 在线平台                        │
└─────────────────────────────────────────────────────┘

§5.2 推荐自定义划分

由于官方测试集标签在挑战赛后已公开,研究者可根据需要重新划分:

策略 划分方式 适用场景
官方原版 400/400/400(Zeiss→Canon 域偏移) 域适应研究、与挑战赛结果对比
合并重分 1,200 张混合重分(8:1:1) 不关注域适应时的标准训练
按相机分 Zeiss 全训练 + Canon 全测试 纯域适应实验
交叉相机 Canon 训练 + Zeiss 测试 逆向域适应验证
5-Fold 交叉 1,200 张 5 折交叉验证 最大化数据利用率

§5.3 数据泄漏风险

风险类型 存在性 说明
同患者双眼泄漏 ⚠️ 可能 未提供患者 ID,同患者左右眼可能分到不同子集
同病灶多图泄漏 ❌ 低风险 眼底照片通常每眼一张,无病灶多角度拍摄
训练-测试图像重复 ❌ 低风险 不同相机采集,重复概率低
域泄漏 ✅ 设计性 刻意域偏移是设计特征而非缺陷

§5.4 外部验证推荐数据集

数据集 规模 任务 适合性 说明
ORIGA 650 张 OD/OC 分割 + 分类 ⭐⭐⭐⭐ 最常用外部验证集
RIM-ONE-r3 159 张 OD/OC 分割 + 分类 ⭐⭐⭐ 小规模但多专家标注
DRISHTI-GS 101 张 OD/OC 分割 ⭐⭐⭐ 视盘居中图像,不同分布
REFUGE2 2,000 张 全任务 ⭐⭐⭐⭐⭐ 同源扩展版,4 种相机
ACRIMA 705 张 仅分类 ⭐⭐⭐ 不同人群(西班牙)
AIROGS 113,892 张 仅分类 ⭐⭐⭐⭐ 大规模外部验证

§6 AI 就绪指南(AI-Ready Guide)

§6.0 快速启动

# ============ REFUGE 快速启动 ============
# 环境需求: Python 3.8+, PyTorch 2.0+, torchvision, OpenCV, scikit-learn

import os
import cv2
import numpy as np
import pandas as pd
from pathlib import Path
from sklearn.metrics import roc_auc_score
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, models

# 1. 数据路径配置
DATA_ROOT = Path("refuge/REFUGE")
TRAIN_IMG_DIR = DATA_ROOT / "Training-400"
TRAIN_MASK_DIR = DATA_ROOT / "Training-400" / "Disc_Cup_Masks"
FOVEA_CSV = DATA_ROOT / "Training-400" / "Fovea_Location" / "fovea_location.csv"

# 2. 加载数据列表
def load_refuge_train():
    """加载训练集图像路径和标签"""
    images, labels, masks = [], [], []
    for label_name, label in [("Glaucoma", 1), ("Non-Glaucoma", 0)]:
        folder = TRAIN_IMG_DIR / label_name
        for img_path in sorted(folder.glob("*.jpg")):
            images.append(str(img_path))
            labels.append(label)
            mask_path = TRAIN_MASK_DIR / (img_path.stem + "_mask.bmp")
            masks.append(str(mask_path) if mask_path.exists() else None)
    return images, labels, masks

images, labels, masks = load_refuge_train()
print(f"训练集: {len(images)} 张图像, 青光眼: {sum(labels)} 张, 非青光眼: {len(labels)-sum(labels)} 张")

# 3. 解析分割掩码 (BMP 8-bit: 0=cup, 128=disc, 255=background)
def parse_mask(mask_path, target_size=(512, 512)):
    """将REFUGE掩码解析为二值视盘和视杯掩码"""
    mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)
    mask = cv2.resize(mask, target_size, interpolation=cv2.INTER_NEAREST)
    disc_mask = (mask == 128).astype(np.float32) | (mask == 0).astype(np.float32)  # 视盘 = 盘+杯
    cup_mask = (mask == 0).astype(np.float32)  # 视杯
    return disc_mask, cup_mask

# 4. 计算杯盘比 (vCDR)
def compute_vcdr(disc_mask, cup_mask):
    """计算垂直杯盘比"""
    disc_h = disc_mask.sum(axis=0)  # 每列的视盘像素数
    cup_h = cup_mask.sum(axis=0)
    disc_cols = np.where(disc_h > 0)[0]
    if len(disc_cols) == 0:
        return 0.0
    # 取视盘最大垂直直径
    disc_diam = disc_h.max()
    cup_diam = cup_h[disc_cols].max() if cup_h[disc_cols].max() > 0 else 0
    return cup_diam / disc_diam if disc_diam > 0 else 0.0

# 5. 基线分类模型 (ResNet-50)
model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2)
model.fc = nn.Linear(model.fc.in_features, 1)  # 二分类输出

# 6. 类别加权损失 (处理 1:9 不平衡)
pos_weight = torch.tensor [(9.0)]  # 非青光眼:青光眼 = 9:1
criterion = nn.BCEWithLogitsLoss(pos_weight=pos_weight)
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=1e-4)

print("REFUGE 数据加载完成,模型初始化完成。")
print(f"建议训练配置: batch_size=16, epochs=100, lr=1e-4, AdamW")
print(f"注意: 训练集(Zeiss)与测试集(Canon)存在域偏移,建议使用域适应策略。")

§6.1 预处理 Pipeline

# ============ REFUGE 预处理 Pipeline ============

import albumentations as A
from albumentations.pytorch import ToTensorV2

class REFUGEPreprocess:
    """REFUGE 专用预处理:ROI裁剪 + 域对齐 + 数据增强"""

    def __init__(self, target_size=512, phase=''''''''''''''''train''''''''''''''''):
        self.target_size = target_size
        self.phase = phase

    def detect_disc_center(self, image):
        """通过绿色通道阈值检测视盘中心(视盘在绿色通道中亮度最高)"""
        green = image[:, :, 1]
        # 高斯模糊 + 阈值
        blurred = cv2.GaussianBlur(green, (31, 31), 0)
        _, thresh = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
        # 取最大连通域中心
        contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        if contours:
            c = max(contours, key=cv2.contourArea)
            M = cv2.moments(c)
            if M["m00"] > 0:
                cx = int(M["m10"] / M["m00"])
                cy = int(M["m01"] / M["m00"])
                return cx, cy
        return image.shape[1] // 2, image.shape[0] // 2

    def crop_roi(self, image, center, crop_size=800):
        """以视盘为中心裁剪 ROI"""
        cx, cy = center
        h, w = image.shape[:2]
        x1 = max(0, cx - crop_size // 2)
        y1 = max(0, cy - crop_size // 2)
        x2 = min(w, x1 + crop_size)
        y2 = min(h, y1 + crop_size)
        return image[y1:y2, x1:x2]

    def domain_align(self, image, target_stats=None):
        """域对齐:归一化颜色统计以缓解 Zeiss vs Canon 差异"""
        # 对每个通道进行零均值单位方差归一化
        aligned = np.zeros_like(image, dtype=np.float32)
        for c in range(3):
            channel = image[:, :, c].astype(np.float32)
            mean, std = channel.mean(), channel.std()
            if std > 0:
                aligned[:, :, c] = (channel - mean) / std
        return aligned

    def get_transforms(self):
        if self.phase == ''''''''''''''''train'''''''''''''''':
            return A.Compose([
                A.RandomRotate90(p=0.5),
                A.HorizontalFlip(p=0.5),
                A.VerticalFlip(p=0.5),
                A.RandomBrightnessContrast(brightness_limit=0.2, conevent-blocked=0.2, p=0.5),
                A.GaussNoise(var_limit=(10, 50), p=0.3),
                A.Resize(self.target_size, self.target_size),
                A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
                ToTensorV2(),
            ])
        else:
            return A.Compose([
                A.Resize(self.target_size, self.target_size),
                A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
                ToTensorV2(),
            ])

    def __call__(self, image, mask=None):
        # 1. 视盘中心检测
        center = self.detect_disc_center(image)
        # 2. ROI 裁剪
        image = self.crop_roi(image, center, crop_size=800)
        if mask is not None:
            mask = self.crop_roi(mask, center, crop_size=800)
        # 3. 域对齐
        image = self.domain_align(image)
        # 4. 数据增强
        transform = self.get_transforms()
        if mask is not None:
            augmented = transform(image=image, mask=mask)
            return augmented[''''''''''''''''image''''''''''''''''], augmented[''''''''''''''''mask'''''''''''''''']
        else:
            augmented = transform(image=image)
            return augmented[''''''''''''''''image'''''''''''''''']

# 使用示例
preprocessor = REFUGEPreprocess(target_size=512, phase=''''''''''''''''train'''''''''''''''')

§6.2 PyTorch Dataset 训练模板

# ============ REFUGE PyTorch Dataset(分割 + 分类多任务)============

class REFUGEDataset(Dataset):
    """REFUGE 多任务 Dataset:同时支持分类和分割"""

    def __init__(self, image_paths, labels, mask_paths=None,
                 target_size=512, phase=''''''''''''''''train''''''''''''''''):
        self.image_paths = image_paths
        self.labels = labels
        self.mask_paths = mask_paths
        self.target_size = target_size
        self.phase = phase
        self.preprocessor = REFUGEPreprocess(target_size, phase)

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

    def __getitem__(self, idx):
        # 加载图像
        image = cv2.imread(self.image_paths[idx])
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        label = self.labels[idx]

        # 加载掩码(如有)
        mask = None
        if self.mask_paths and self.mask_paths[idx]:
            mask = cv2.imread(self.mask_paths[idx], cv2.IMREAD_GRAYSCALE)

        # 预处理
        if mask is not None:
            image_t, mask_t = self.preprocessor(image, mask)
            # 解析为视盘和视杯二值掩码
            disc_mask = ((mask_t == 128) | (mask_t == 0)).float()
            cup_mask = (mask_t == 0).float()
            return {
                ''''''''''''''''image'''''''''''''''': image_t,
                ''''''''''''''''label'''''''''''''''': torch.tensor(label, dtype=torch.float32),
                ''''''''''''''''disc_mask'''''''''''''''': disc_mask.unsqueeze(0),
                ''''''''''''''''cup_mask'''''''''''''''': cup_mask.unsqueeze(0)
            }
        else:
            image_t = self.preprocessor(image)
            return {
                ''''''''''''''''image'''''''''''''''': image_t,
                ''''''''''''''''label'''''''''''''''': torch.tensor(label, dtype=torch.float32)
            }

# ============ 多任务训练循环 ============

def train_one_epoch(model, dataloader, optimizer, device):
    model.train()
    total_loss = 0
    for batch in dataloader:
        images = batch[''''''''''''''''image''''''''''''''''].to(device)
        labels = batch[''''''''''''''''label''''''''''''''''].to(device)

        optimizer.zero_grad()

        if ''''''''''''''''disc_mask'''''''''''''''' in batch:
            # 多任务:分类 + 分割
            cls_logits, disc_seg, cup_seg = model(images)
            cls_loss = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([9.0]).to(device))(
                cls_logits.squeeze(), labels
            )
            seg_loss = dice_loss(disc_seg, batch[''''''''''''''''disc_mask''''''''''''''''].to(device)) + \
                       dice_loss(cup_seg, batch[''''''''''''''''cup_mask''''''''''''''''].to(device))
            loss = cls_loss + 0.5 * seg_loss
        else:
            # 仅分类
            logits = model(images).squeeze()
            loss = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([9.0]).to(device))(logits, labels)

        loss.backward()
        optimizer.step()
        total_loss += loss.item()

    return total_loss / len(dataloader)

def dice_loss(pred, target, smooth=1e-5):
    pred = torch.sigmoid(pred)
    intersection = (pred * target).sum(dim=(2, 3))
    union = pred.sum(dim=(2, 3)) + target.sum(dim=(2, 3))
    return 1 - ((2 * intersection + smooth) / (union + smooth)).mean()

# ============ 评估指标 ============

def evaluate_refuge(model, dataloader, device):
    """REFUGE 标准评估:AUC + Dice + vCDR MAE"""
    model.eval()
    all_probs, all_labels = [], []
    all_disc_dice, all_cup_dice, all_cdr_mae = [], [], []

    with torch.no_grad():
        for batch in dataloader:
            images = batch[''''''''''''''''image''''''''''''''''].to(device)
            labels = batch[''''''''''''''''label''''''''''''''''].cpu().numpy()
            cls_logits = model(images).squeeze().cpu().numpy()
            probs = 1 / (1 + np.exp(-cls_logits))
            all_probs.extend(probs)
            all_labels.extend(labels)

    # 分类 AUC
    auc = roc_auc_score(all_labels, all_probs)
    print(f"青光眼分类 AUC: {auc:.4f}")
    print(f"参考: REFUGE 冠军 VRT AUC=0.9885, 人类专家 AUC~0.85")
    return auc

§6.3 坑点与解决方案

# 坑点 影响 解决方案
1 相机域偏移:Zeiss→Canon 导致模型在测试集性能骤降 AUC 可能下降 0.1+ 使用域适应(CFEA/DoFE/POTAL)或域对齐预处理
2 类别极度不平衡(1:9) 模型倾向全预测 Non-G 加权损失(pos_weight=9)、SMOTE、Focal Loss
3 视杯边界模糊 视杯 Dice 通常比视盘低 10-15% 使用极坐标变换(polar transform)增强视杯边界
4 分辨率差异(2,124 vs 1,634) 直接 resize 导致视盘大小不一致 统一裁剪到视盘 ROI 后再 resize
5 无患者 ID 同患者左右眼可能跨划分泄漏 无法完全避免,但可检查图像相似性
6 掩码像素值非标准(0/128/255) 直接二值化可能错误 使用精确阈值:cup=(m==0), disc=(m<=128)
7 黄斑坐标坐标系 坐标原点和方向未明确说明 检查 CSV 格式,通常左上角为原点
8 测试集标签获取 挑战赛后标签已公开但需从论文/镜像获取 使用 Kaggle 镜像或 OpenDataLab

§6.4 数据增强策略

策略 推荐度 说明
随机翻转(水平+垂直) ⭐⭐⭐⭐⭐ 眼底图像无固定方向性
随机旋转(90°/180°/270°) ⭐⭐⭐⭐⭐ 增强方向鲁棒性
颜色抖动 ⭐⭐⭐⭐⭐ 缓解相机域偏移
高斯噪声 ⭐⭐⭐⭐ 增强对成像噪声的鲁棒性
CLAHE ⭐⭐⭐⭐ 增强视盘/视杯对比度
极坐标变换 ⭐⭐⭐⭐⭐ 视杯分割关键技巧:将椭圆形边界转为水平线
Mixup / CutMix ⭐⭐⭐ 小数据集可能有帮助但需验证
域随机化 ⭐⭐⭐⭐ 模拟不同相机色调以增强跨域泛化

§6.5 模型推荐

模型 任务 推荐度 说明
U-Net + ResNet50 分割 ⭐⭐⭐⭐⭐ 经典基线,视盘 Dice 可达 95%+
M-Net + Polar 分割 ⭐⭐⭐⭐⭐ 极坐标 + 多尺度,视杯分割尤其有效
TransUNet 分割 ⭐⭐⭐⭐ CNN+Transformer 混合,OD Dice 0.950
FunduSAM 分割 ⭐⭐⭐⭐ 基于 SAM 微调,OD Dice 0.961, OC Dice 0.867
EfficientNet-B4 分类 ⭐⭐⭐⭐⭐ REFUGE2 冠军 VUNO 使用变体
ResNet-50 分类 ⭐⭐⭐⭐ 稳定基线,配合 vCDR 特征工程
CFEA 域适应 ⭐⭐⭐⭐⭐ 无监督域适应 SOTA,专为 REFUGE 设计
DoFE 域适应 ⭐⭐⭐⭐ 域特征提取,多源域泛化

§6.6 计算需求

配置 最低要求 推荐配置
GPU 8 GB VRAM(如 RTX 3060) 24 GB VRAM(如 RTX 4090)
内存 16 GB 32 GB
存储 10 GB(数据 + 模型) 50 GB(含实验日志)
训练时间 ~2 小时/100 epochs(分类) ~6 小时/200 epochs(多任务)

§6.7 评估指标代码

# ============ REFUGE 完整评估指标 ============

import numpy as np
from sklearn.metrics import roc_auc_score, f1_score, accuracy_score
from scipy.spatial.distance import directed_hausdorff

def dice_coefficient(pred, target, smooth=1e-5):
    """Dice 系数"""
    pred = pred.astype(np.bool_)
    target = target.astype(np.bool_)
    intersection = (pred &amp; target).sum()
    return (2 * intersection + smooth) / (pred.sum() + target.sum() + smooth)

def iou_score(pred, target, smooth=1e-5):
    """IoU / Jaccard 指数"""
    pred = pred.astype(np.bool_)
    target = target.astype(np.bool_)
    intersection = (pred &amp; target).sum()
    union = (pred | target).sum()
    return (intersection + smooth) / (union + smooth)

def compute_vcdr_from_mask(disc_mask, cup_mask):
    """从掩码计算垂直杯盘比"""
    disc_h = disc_mask.sum(axis=0)
    cup_h = cup_mask.sum(axis=0)
    disc_diam = disc_h.max()
    cup_diam = cup_h.max()
    return cup_diam / disc_diam if disc_diam > 0 else 0.0

def evaluate_full(classification_results, segmentation_results, ground_truth):
    """
    REFUGE 完整评估
    classification_results: dict {image_id: probability}
    segmentation_results: dict {image_id: (disc_mask, cup_mask)}
    ground_truth: dict {image_id: (label, disc_mask, cup_mask)}
    """
    # 1. 分类评估
    probs = [classification_results[iid] for iid in ground_truth]
    labels = [ground_truth[iid][0] for iid in ground_truth]
    auc = roc_auc_score(labels, probs)

    # 2. 分割评估
    disc_dices, cup_dices, cdr_maes = [], [], []
    for iid in ground_truth:
        pred_disc, pred_cup = segmentation_results[iid]
        gt_label, gt_disc, gt_cup = ground_truth[iid]

        disc_dices.append(dice_coefficient(pred_disc, gt_disc))
        cup_dices.append(dice_coefficient(pred_cup, gt_cup))

        pred_cdr = compute_vcdr_from_mask(pred_disc, pred_cup)
        gt_cdr = compute_vcdr_from_mask(gt_disc, gt_cup)
        cdr_maes.append(abs(pred_cdr - gt_cdr))

    print("=" * 50)
    print("REFUGE 评估结果")
    print("=" * 50)
    print(f"分类 AUC:           {auc:.4f}")
    print(f"视盘 Dice (均值):   {np.mean(disc_dices):.4f}")
    print(f"视杯 Dice (均值):   {np.mean(cup_dices):.4f}")
    print(f"vCDR MAE:           {np.mean(cdr_maes):.4f}")
    print("-" * 50)
    print("参考基线:")
    print(f"  REFUGE 冠军 VRT:  AUC=0.9885")
    print(f"  人类专家:         AUC~0.85")
    print(f"  vCDR 金标准:      AUC=0.9471")
    print(f"  FunduSAM (2025):  OD Dice=0.961, OC Dice=0.867")
    print(f"  TransUNet:        OD Dice=0.950, OC Dice=0.856")
    print("=" * 50)
    return {''''''''''''''''auc'''''''''''''''': auc, ''''''''''''''''disc_dice'''''''''''''''': np.mean(disc_dices),
            ''''''''''''''''cup_dice'''''''''''''''': np.mean(cup_dices), ''''''''''''''''cdr_mae'''''''''''''''': np.mean(cdr_maes)}

§7 质量评估与局限性(Quality & Limitations)

§7.1 数据偏倚分析

# 偏倚类型 描述 影响程度 缓解建议
1 地理偏倚 单一中心(中山眼科中心,广州),单一族群(中国患者) ⚠️ 高 外部验证(ORIGA/ACRIMA)
2 相机偏倚 2 种相机,训练/测试域不同 ⚠️ 高(设计性) 域适应策略或域对齐预处理
3 患病率偏倚 10% 青光眼比例可能不反映目标人群 ⚠️ 中 按目标人群调整阈值
4 选择偏倚 回顾性收集,来自医院就诊和临床研究 ⚠️ 中 前瞻性验证
5 类别不平衡 1:9(G:Non-G),小绝对青光眼数(120 例) ⚠️ 高 加权损失/过采样/SMOTE
6 标注偏倚 7 名专家来自同一机构,标注风格可能同质 ⚠️ 中 跨机构标注验证
7 模态局限 仅 CFP(2D),无 OCT 深度信息 ⚠️ 中 补充 OCT 数据(如 GAMMA)

§7.2 标注质量评估

维度 评估结果 说明
标注者数量 7 名青光眼专科医生 平均 8 年经验,同机构
标注工具 椭圆拟合标注器 支持缩放/查看/椭圆调整
标注合并 多数投票 + 资深专家质控 可剔除失败分割并重新投票
标注者间一致性 ⚠️ 未正式报告 论文未提供 Kappa/Dice 等一致性指标
标注质量验证 2 支团队分类超人类专家 间接验证标注质量足够支撑 AI 训练
青光眼标签可信度 ⭐⭐⭐⭐⭐ 基于完整临床记录(OCT+VF+IOP),非仅眼底图像

§7.3 泛化性评估

泛化维度 状态 说明
跨相机泛化 ⚠️ 刻意挑战 Zeiss→Canon 域偏移是核心评测目标
跨机构泛化 ❌ 未内建 需外部验证(ORIGA/ACRIMA/RIM-ONE)
跨人群泛化 ❌ 未内建 仅中国患者,需跨种族验证
跨疾病亚型 ❌ 未区分 仅二分类(G/Non-G),无亚型标注
跨时间泛化 ❌ 无纵向数据 无随访,无法评估时间稳定性

§7.4 技术局限性

  1. CFP 模态局限:彩色眼底照片为 2D 投影,缺乏 OCT 的深度信息,视杯边界依赖颜色变化推断,限制了分割精度上限
  2. 视杯标注不确定性:视杯边界在 CFP 上天然模糊(无明确解剖标志),7 名专家的标注可能存在显著差异,但论文未报告标注者间一致性
  3. 椭圆拟合局限:标注工具使用椭圆拟合,但实际视盘/视杯形状可能不规则,椭圆近似引入系统误差
  4. 样本量限制:仅 120 例青光眼,对于深度学习训练偏少,尤其考虑到域偏移进一步降低了有效训练样本
  5. 无患者级元数据:缺乏年龄、性别、种族、青光眼亚型(POAG/PACG/NTG)、分期等信息,无法进行公平性审计

§7.7 DAIMS 24 项数据就绪度评估

# DAIMS 检查项 状态 说明
1 数据集动机与目的 明确:青光眼 AI 评估标准化
2 数据集组成 1,200 张 CFP,3 子集,3 任务
3 数据收集协议 回顾性收集,多来源
4 数据标注者资质 7 名青光眼专科医生,平均 8 年经验
5 标注者培训 ⚠️ 未描述正式培训流程
6 标注者间一致性 未正式报告 Kappa/Dice 等指标
7 标注工具与流程 椭圆拟合 + 多数投票 + 资深专家质控
8 标签质量保证 资深专家质控 + 分类超人类专家间接验证
9 数据划分策略 官方 1:1:1 分层划分
10 域多样性 2 种相机(刻意域偏移)
11 人群多样性 ⚠️ 单中心、单族群(中国)
12 疾病严重度分布 无分期信息
13 人口统计元数据 未释放年龄/性别/种族
14 隐私保护 图像去标识化
15 知情同意 IRB 批准(论文提及)
16 数据格式标准化 JPEG/BMP/CSV,格式清晰
17 元数据完整性 ⚠️ 相机/分辨率完整,患者级缺失
18 数据访问机制 Bitbucket 公开下载
19 许可证明确 CC BY 4.0
20 数据版本管理 REFUGE1 → REFUGE2 演进
21 已知问题文档 论文讨论了域偏移和局限性
22 评估框架 统一在线评测(Grand Challenge)
23 基准性能 12 团队完整结果 + 后续 SOTA
24 外部验证 ⚠️ 多项后续研究在 ORIGA 等外部验证

DAIMS 评分总结:18/24(75.0%,⭐⭐⭐⭐ 4/5)

维度 得分 满分 说明
数据组成与标注 6/7 扣分:标注者间一致性未报告
人群与多样性 2/4 扣分:单中心单族群、无分期
隐私与合规 3/3 满分
格式与访问 4/4 满分
评估与验证 3/4 扣分:外部验证由后续研究补充而非数据集自带
已知问题文档 0/2 扣分:部分局限性已在论文讨论但未系统化文档

§7.8 外部验证矩阵

验证数据集 任务 模型 性能 来源
ORIGA OD/OC 分割 Modified ResUNet OD DC=0.890, OC DC=0.890 Chen et al. 2025
REFUGE2 OD/OC 分割 Modified ResUNet OD DC=0.975, OC DC=0.890 Chen et al. 2025
Drishti-GS OD/OC 分割 ALG-Net OD Acc=95.9%, OC Acc=93.2% Ma et al. 2024
RIM-ONE-r3 OD/OC 分割 M2DS-TransUNet 2023
ACRIMA 分类 ResNet-50 AUC=0.91 多项研究

§8 基准性能与生态(Benchmarks & Ecosystem)

§8.1 排行榜

REFUGE1 挑战赛排行榜(MICCAI 2018 现场赛,12 支团队)
排名 团队 分类 AUC 分类 Sensitivity 说明
1 VRT (VUNO) 0.9885 0.9752 韩国 VUNO Inc.,EfficientNet + 域适应
2 SDSAIRC 0.9817 0.9760
3 CUHKMED 0.9644 0.9500 香港中文大学
4 NKSG 0.9587 0.8917
5 Mammoth 0.9555 0.8918
6 Masker 0.9524 0.8500
7 SMILEDeepDR 0.9508 0.8750
8 BUCT 0.9348 0.8500 北京化工大学
9 WinterFell 0.9327 0.9250
10 NightOwl 0.9101 0.9000
11 Cvblab 0.8806 0.7318
12 AIML 0.8458 0.7250
vCDR 金标准 0.9471 0.8750 基于真实 vCDR 的分类性能
人类专家 A ~0.85 眼科医生
人类专家 B ~0.83 眼科医生

里程碑:VRT 和 SDSAIRC 的 AUC 均超过 2 名人类专家,标志着 AI 在青光眼眼底照片分类上首次系统性地超越人类专家水平。

REFUGE2 挑战赛(MICCAI 2020,134 支团队)
排名 团队 综合排名 说明
1 VUNO EYE TEAM 🥇 第 1 三项任务综合最优,连续两届夺冠
2 cheeron 🥈 分割任务第 1
3 MAI 🥉 分类与定位任务表现突出
SOTA 基准(截至 2025-08,非挑战赛)
方法 年份 OD Dice OC Dice OD IoU OC IoU 分类 AUC 说明
FunduSAM 2025 0.961 0.867 0.882 0.789 SAM 微调 + CBAM + 极坐标
E-DCoAtUNet+CRF 2025 0.985 0.954 CRF 后处理
ALG-Net 2024 0.986 0.959 0.983 对抗学习 + 引导机制
Swin-UNetr 2024 0.953 0.843 0.879 0.745 Transformer
TransUNet 2024 0.950 0.856 0.877 0.759 CNN+Transformer
nnUNet 2024 0.947 0.849 0.873 0.751 自适应配置
MedSAM 2024 0.946 0.828 0.867 0.759 SAM 医学微调
ResUNet 2024 0.929 0.801 0.855 0.723 基线
VRT (挑战赛冠军) 2018 0.9885 EfficientNet + 域适应

§8.2 SOTA 方法分析

  1. FunduSAM(2025):基于 Segment Anything Model(SAM)的医学影像适配版本,加入 CBAM 注意力模块、Adapter 微调策略和极坐标变换。极坐标变换将椭圆形视盘/视杯边界转为水平线,显著提升视杯分割精度(OC Dice 0.867 vs ResUNet 0.801)。
  2. ALG-Net(2024):引入对抗学习和引导融合模块(GFM),利用眼底图像不同通道间的差异信息(绿色通道对视盘最敏感),通过判别器促使分割网络生成更真实的掩码。OD 平衡精度 98.6%,OC 95.9%,分类 AUC 0.983。
  3. 域适应方法(CFEA/DoFE/POTAL):REFUGE 的 Zeiss→Canon 域偏移催生了一系列无监督域适应方法。CFEA(Wang et al., 2019)使用协同特征集成适应,在目标域无标签的情况下显著提升分割性能。DoFE(Wang et al., 2020)通过域导向特征提取实现多源域泛化。

§8.3 评测协议

协议 说明 适用场景
官方协议 1:1:1 划分,Zeiss→Canon,Grand Challenge 在线评测 与挑战赛结果对比
合并重分协议 1,200 张混合 8:1:1 随机划分 不关注域适应的标准训练
跨域协议 Zeiss 训练 → Canon 测试(无目标域标签) 域适应研究
交叉验证协议 5-Fold 或 10-Fold 交叉验证 最大化数据利用率

§8.4 相关数据集生态

数据集 规模 模态 与 REFUGE 的关系
REFUGE2 2,000 张 CFP(4 种相机) 直接扩展版,更大规模更多设备
GAMMA 2,000 例 CFP + OCT 同源团队后续多模态挑战赛
ORIGA 650 张 CFP 最常用外部验证集
RIM-ONE-r3 159 张 CFP 小规模多专家标注验证集
DRISHTI-GS 101 张 CFP 视盘居中图像,不同分布
ACRIMA 705 张 CFP 西班牙人群,不同地理
AIROGS 113,892 张 CFP 最大规模青光眼分类数据集
LAG 11,760 张 CFP 含模拟眼动追踪数据
RIGA+ 750 张 CFP 6 名专家标注 MESSIDOR 子集

§8.5 生态快照

                    ┌──────────────────┐
                    │   REFUGE (2018)  │
                    │   1,200 张 CFP   │
                    │   2 种相机       │
                    │   MICCAI 2018    │
                    └────────┬─────────┘
                             │
              ┌──────────────┼──────────────┐
              ↓              ↓              ↓
     ┌────────────┐  ┌────────────┐  ┌────────────┐
     │ REFUGE2    │  │ GAMMA      │  │ 域适应研究  │
     │ (2020)     │  │ (2023)     │  │ CFEA/DoFE  │
     │ 2,000 张   │  │ CFP + OCT  │  │ POTAL      │
     │ 4 种相机   │  │ 多模态     │  │ DENSe      │
     └────────────┘  └────────────┘  └────────────┘
              │              │              │
              ↓              ↓              ↓
     ┌────────────┐  ┌────────────┐  ┌────────────┐
     │ VUNO 连冠  │  │ 多模态青光 │  │ UDA 基准   │
     │ 134 队参赛 │  │ 眼 AI 新   │  │ 数据集     │
     └────────────┘  │ 方向       │  └────────────┘
                      └────────────┘
                             │
              ┌──────────────┼──────────────┐
              ↓              ↓              ↓
     ┌────────────┐  ┌────────────┐  ┌────────────┐
     │ SAM 系列   │  │ Transformer│  │ 临床部署   │
     │ FunduSAM   │  │ TransUNet  │  │ Aravind    │
     │ MedSAM     │  │ SwinUNetr  │  │ Google     │
     └────────────┘  └────────────┘  └────────────┘

§8.6 社区影响

  • MICCAI 2018 现场赛:28 支团队注册,12 支团队进入现场赛,2 支团队分类超越人类专家

  • MICCAI 2020 REFUGE2:1,300+ 国际选手注册,134 支团队提交,22 支团队进入决赛

  • 持续开放评测:Grand Challenge 平台持续接受在线提交,截至 2026-08 仍有新结果上传

  • 域适应研究催化剂:REFUGE 的 Zeiss→Canon 域偏移设计直接催生了 CFEA、DoFE、POTAL、DENSe 等一系列无监督域适应方法

  • IEEE Dataport:10,225+ 次浏览(截至 2025-12)

§9 相关资源与引用(Resources & Citation)

§9.1 核心论文

@article{orlando2020refuge,
  title={REFUGE Challenge: A unified framework for evaluating automated methods for glaucoma assessment from fundus photographs},
  author={Orlando, Jos{\''''''''''''''''e} Ignacio and Fu, Huazhu and Breda, Jo{\~a}o Barbosa and van Keer, Karel and Bathula, Deepti R. and Diaz-Pinto, Andr{\''''''''''''''''e}s and Fang, Ruogu and Heng, Pheng-Ann and Kim, Jeyoung and Lee, JoonHo and Lee, Joonseok and Li, Xiaoxiao and Liu, Peng and Lu, Shuai and Murugesan, Balamurali and Naranjo, Valery and Phaye, Sai Samarth R. and Shankaranarayana, Sharath M. and Sikka, Apoorva and Son, Jaemin and van den Hengel, Anton and Wang, Shujun and Wu, Junyan and Wu, Zifeng and Xu, Guanghui and Xu, Yongli and Yin, Pengshuai and Li, Fei and Zhang, Xiulan and Xu, Yanwu and Bogunovi{\''''''''''''''''c}, Hrvoje},
  journal={Medical Image Analysis},
  volume={59},
  pages={101570},
  year={2020},
  publisher={Elsevier},
  doi={10.1016/j.media.2019.101570}
}
@article{fang2022refuge2,
  title={REFUGE2 Challenge: A Treasure Trove for Multi-Dimension Analysis and Evaluation in Glaucoma Screening},
  author={Fang, Huihui and Li, Fei and Fu, Huazhu and Sun, Xu and Cao, Xingxing and Son, Jaemin and Yu, Shuang and Zhang, Menglu and Yuan, Chenglang and Bian, Cheng and Lei, Baiying and Zhao, Benjian and Xu, Xinxing and Li, Shaohua and Fumero, Francisco and Sigut, Jose and Almubarak, Haidar and Bazi, Yakoub and Guo, Yuanhao and Zhou, Yating and Baid, Ujjwal and Innani, Shubham and Guo, Tianjiao and Yang, Jie and Orlando, Jos{\''''''''''''''''e} Ignacio and Bogunovi{\''''''''''''''''c}, Hrvoje and Zhang, Xiulan and Xu, Yanwu},
  journal={arXiv preprint arXiv:2202.08994},
  year={2022}
}

§9.2 官方资源

资源 URL
官方主页(Grand Challenge) https://refuge.grand-challenge.org/
数据下载(Bitbucket) https://bitbucket.org/woalsdnd/refuge/src
数据集详情页 https://refuge.grand-challenge.org/Details
IEEE Dataport https://ieee-dataport.org/ (DOI: 10.21227/tz6e-r977)
arXiv 预印本 https://arxiv.org/abs/1910.03667
REFUGE2 论文 https://arxiv.org/abs/2202.08994
REFUGE2 设计文档(Zenodo) https://zenodo.org/records/3714946
MedIA 论文(PubMed) https://pubmed.ncbi.nlm.nih.gov/31630011/
OpenDataLab 镜像 https://opendatalab.com/OpenDataLab/REFUGE_Challenge
ModelScope 镜像 https://modelscope.cn/datasets/OmniData/REFUGE_Challenge

§9.3 社区资源

资源 URL
Kaggle 镜像(含 ORIGA + REFUGE) https://www.kaggle.com/datasets/arnavjain1/glaucoma-datasets
Bob DB Python 接口 https://www.idiap.ch/software/bob/docs/bob/bob.db.refuge/
GAMMA 挑战赛 https://amma.grand-challenge.org/

§9.4 许可证

REFUGE 数据集以 CC BY 4.0(署名 4.0 国际)许可发布,允许商业和非商业使用,前提是注明来源。部分镜像平台(如 ModelScope)标注为 MIT 许可,但原始发布遵循 CC BY 4.0。

引用要求:使用 REFUGE 数据集时须引用 Orlando et al. (2020) MedIA 论文。

§9.5 变更日志

日期 变更
2018-09 REFUGE1 数据集与挑战赛发布(MICCAI 2018)
2019-10 MedIA 论文正式接收
2020-01 MedIA 论文正式出版(Vol. 59, 101570)
2020-07 REFUGE2 挑战赛启动(MICCAI 2020)
2022-02 REFUGE2 论文预印本发布(arXiv: 2202.08994)

§10 AI 使用声明卡

§10.1 AI 声明

本页面的医学描述、技术分析和代码示例由 AI 辅助生成,经千方病案医学编辑部交叉审核。所有事实性信息基于公开发表的文献,引用来源已标注。

§10.2 AI 使用限制

  1. 本页面不提供医疗建议,不构成诊断或治疗依据
  2. 代码示例仅供研究用途,使用前需独立验证安全性
  3. 基准性能数据来自公开发表的论文,可能因实验设置不同而存在差异
  4. 数据集许可信息以官方协议为准,本页面信息仅供参考

§10.3 引用格式

使用本页面时,请引用:

千方病案医数集. REFUGE 青光眼眼底影像数据集 AI-Ready Wikipedia. https://qianfanghub.com/ai-ready-dataset/refuge/62, 访问日期: 2026-08-04.

§10.4 人工校验表

校验项 状态
INFOBOX 字段完整性
ICD-11 / SNOMED CT 编码准确性
数据规模与划分准确性
排行榜数据来源可追溯
代码示例可执行性
JSON-LD @graph 结构合规性
许可证信息准确性
无未定稿状态泄露
无占位符残留
无 HTML/Markdown 注释
无模板说明性文字
页面状态为 published
引用次数标注截止日期
外部链接可访问性
时效性数据标注"截至"日期
中英文排版规范
返回 AI Ready 数据集