信息速览

FGADR — 细粒度糖网分割与分级基准 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | FGADR(细粒度标注糖尿病视网膜病变数据集) |
| 英文全称 | Fine-Grained Annotated Diabetic Retinopathy Dataset |
| 别名/简称 | FGADR-2842、FGADR-Seg-set、FGADR-Grade-set |
| 疾病分类(ICD-11) | 9A71.0 糖尿病性视网膜病变 |
| SNOMED CT | 37963001(Diabetic retinopathy) |
| 数据模态 | 眼底彩照 + 像素级病灶分割掩码 |
| AI 任务类型 | 病灶分割、DR 分级、联合分类与分割、迁移学习 |
| 样本总数 | 2,842 张(Seg-set 1,842 + Grade-set 1,000) |
| 数据格式 | PNG 图像 + CSV 标签 |
| 许可证 | 研究使用协议(无标准开源许可证) |
| 访问级别 | 开放下载(须遵循作者数据使用协议) |
| DUO 标签 | GRU(通用研究使用)+ DS(特定疾病:糖尿病视网膜病变) |
| 语言 | 英文标注文件 |
| 首发日期 | 2020-06(官方仓库建立);论文 2021-03 正式见刊 |
| 最后更新 | 2020-11-10(官方仓库最后提交) |
| 发布机构 | Inception Institute of Artificial Intelligence(IIAI,阿联酋阿布扎比) |
| 官方主页 | csyizhou.github.io/FGADR |
| 下载地址 | 官方项目页;OpenDataLab 镜像 |
| DOI | 10.1109/TMI.2020.3037771 |
| 引用次数 | 231+(Scopus,截至 2026-09) |
| AI 就绪度 | ⭐⭐⭐⭐(4/5)— PNG/CSV 格式通用、双子集分工清晰;扣分项:官方无划分脚本与预处理代码,掩码加载需自行实现 |
| 页面状态 | published |
§0 E-E-A-T 与审核声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、DR 分级与临床任务定义、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与 IIAI 及论文作者团队无任何商业利益关联。本页面不销售 FGADR 数据集本身,仅提供 AI 就绪指南与学术信息服务。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。FGADR 未附标准开源许可证,使用者须遵循论文作者团队的数据使用协议(data usage agreement),学术发表时须引用原始论文。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? FGADR 是一个专门为糖尿病视网膜病变(DR)诊断研究打造的眼底照片数据集,共 2,842 张。它的独特之处在于"细粒度":其中 1,842 张照片不仅标注了病情严重程度(0-4 级),还把微动脉瘤、出血点、硬性渗出等六类病灶的位置一个像素一个像素地描了出来;另外 1,000 张照片由六名眼科医生投票给出可靠分级,专门用来"考试"。
为什么重要? 大多数 DR 筛查模型只能给一个分级数字,医生无法知道模型为什么这么判。FGADR 同时提供"结果(分级)+ 证据(病灶轮廓)"两类标注,让研究者能训练既准确又可解释的模型。它也是首个把新生血管、IRMA 这类重度 DR 病变纳入像素级标注的公开数据集之一。
我能用它做什么? 训练病灶分割模型(六类掩码)、训练或评估 DR 分级模型(1,000 张高质量考试集)、做"分割帮助分级"的多任务学习研究,或者把在它上面学到的特征迁移到白内障、青光眼等其他眼病识别任务——原始论文已为这三类用法建立了基准。
§1.1 技术摘要
FGADR 由 IIAI(Inception Institute of Artificial Intelligence,阿联酋阿布扎比)研究团队构建,图像采集自阿联酋合作医院并经匿名化,Zhou et al., 2021, IEEE TMI 报告。数据集采用"双集分工"设计:Seg-set 的 1,842 张图像由 3 名眼科医生(2 名住院医师 + 1 名主治医师)完成微动脉瘤(MA)、出血(HE)、硬性渗出(EX)、软性渗出(SE)、视网膜内微血管异常(IRMA)与新生血管(NV)六类病灶的像素级标注,主治医师做最终验证,分级标签由 3 人投票产生;Grade-set 的 1,000 张图像由 6 名认证眼科医生(3 住院 + 3 主治)投票分级并进行评分者内一致性检验。由于 Seg-set 经 EyePACS 预训练分级模型粗筛,其分级分布偏向 2-4 级(101/212/595/647/287)。论文在三大任务上建立基准:Task 1 病灶分割(two-fold 交叉验证,最优 Dense U-Net 的 MA Dice 0.559、NV Dice 0.781)、Task 2 联合分级(Grade-set 上 Accuracy 0.8603、QWK 0.8482)、Task 3 迁移至 ODIR-5K 多疾病识别(Kappa 0.7348)。
§1.2 战略价值
维度一:可解释 DR 诊断的标注基础设施。 在 FGADR 之前,DR 研究存在明显的"标注粒度断层":EyePACS(约 8.87 万张)与 APTOS 2019(约 3,662 张训练图)规模大但只有图像级分级;IDRiD 提供像素级标注但分割子集仅 81 张。FGADR 用 1,842 张像素级标注填补了中间规模带,且首次把 NV、IRMA 等"增殖期信号病变"纳入掩码体系——这正是 3/4 级与轻症鉴别的关键证据,使"分级模型给出病灶依据"的研究路线具备了数据条件。
维度二:分级任务的独立考试集。 社区长期在 EyePACS 测试集上内卷,存在测试集污染与同分布过拟合风险。FGADR Grade-set 的 1,000 张由 6 名医生投票、附评分者内一致性,且与 Seg-set 图像不重叠,来自不同采集批次,为"训练集在 A 分布、考试集在 B 分布"的现实场景提供了官方指定评估环境——这是它区别于其他数据集的方法论价值。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注类型 | 与 FGADR 的差异化 |
|---|---|---|---|---|
| FGADR | 2,842 张(1,842 分割 + 1,000 分级) | 眼底彩照 1280×1280 | 六类病灶像素级掩码 + 五级分级 + LM/PM 图像级标签 | 六类含 NV/IRMA;分级集由 6 名医生投票;三大基准任务 |
| IDRiD | 分割 81 张 + 分级 516 张 | 眼底彩照 4288×2848 | 四类病灶掩码 + DR/DME 分级 | 分辨率更高但规模小 20 倍以上;含 DME 标注而 FGADR 无 |
| EyePACS(Kaggle DR) | 约 88,702 张 | 眼底彩照 | 图像级五级分级 | 大规模无掩码;FGADR 论文将其用作分级预训练与外部训练数据 |
| APTOS 2019 | 3,662 张训练 | 眼底彩照 | 图像级五级分级 | 竞赛型分级数据,无病灶掩码 |
| Messidor-2 | 1,748 张 | 眼底彩照 | 图像级两级(可转诊) | 二分类转诊任务,与 FGADR 五级细粒度分级互补 |
| Retinal Lesions | 1,593 张 | 眼底彩照 896×896 | 八类病灶掩码 | 含 FGADR 没有的 FIP/VB 细分,但标注分辨率更低 |
§1.4 版本时间轴
| 时间 | 事件 |
|---|---|
| 2020-06-14 | GitHub 仓库 csyizhou/FGADR-2842-Dataset 建立 |
| 2020-08-22 | 论文 arXiv v1(arXiv:2008.09772)发布,数据同步公开 |
| 2020-11-10/11 | 官方仓库 README 最后更新;论文 arXiv v3 |
| 2020-11-12 | IEEE TMI 在线发表(DOI 10.1109/TMI.2020.3037771) |
| 2021-03 | IEEE TMI 正式版 Vol 40 No 3, pp.818-828 |
| 2022-11-02 | OpenDataLab/OpenXLab 建立镜像收录 |
§1.5 典型应用场景
- 六类 DR 病灶分割基准:以官方 two-fold 协议或自划训练/测试集,复现或超越 Dense U-Net(Dice 基线)到 Transformer、SAM 系列新架构。
- "分割助力分级"多任务学习:用 Seg-set 掩码监督分割分支,Grade-set 评估分级,验证病灶证据对分级准确率的增益(论文报告 grade-1 准确率提升 12.8%)。
- 眼部多疾病迁移学习:以 FGADR 为源域预训练,迁移到 ODIR-5K 八类眼病多标签分类(论文 DSAA 方法 Kappa 0.7348)。
- 标注质量与标签噪声研究:利用社区发现的"粗标注掩码"现象(Son et al., 2023 清洗后余 1,494 张),做噪声标签学习、标注一致性分析。
- 眼底图像合成与数据增广:基于六类病灶掩码的条件生成(如 freestyle lesion map → 合成眼底)研究以 FGADR 为真实参照分布。
§2 医学背景
§2.1 ICD-11 编码映射
| FGADR 标签 | 疾病/病变 | ICD-11 编码 | ICD-10-CM 参考 |
|---|---|---|---|
| grade 0-4 总体 | 糖尿病性视网膜病变 | 9A71.0 | H36.0*(糖尿病性视网膜病变) |
| grade 1-3(NPDR 期) | 非增殖性糖尿病性视网膜病变 | 9A71.0(细分不单列) | H35.051-H35.053 |
| grade 4 | 增殖性糖尿病性视网膜病变 | 9A71.0(细分不单列) | H35.041-H35.043 |
§2.1b SNOMED CT 映射
| FGADR 标签/病变 | ICD-11 | SNOMED CT 码 | 术语 |
|---|---|---|---|
| DR 总体(grade 0-4) | 9A71.0 | 37963001 | Diabetic retinopathy(糖尿病性视网膜病变) |
| 微动脉瘤(MA) | — | —(病灶级 SNOMED 码未收录于常见映射表) | Microaneurysm |
| 出血(HE) | — | — | Retinal hemorrhage |
| 硬性渗出(EX) | — | — | Hard exudate |
| 软性渗出/CWS(SE) | — | — | Cotton-wool spot |
| 新生血管(NV) | — | — | Neovascularization |
§2.2 疾病简介与流行病学
糖尿病视网膜病变(DR)是高血糖与高血压长期损伤视网膜血管导致的进展性眼病,是全球工作年龄人群致盲的主要原因之一。原始论文援引国际通行估计:约三分之一的糖尿病患者存在不同程度的 DR,每名糖尿病患者都有发生 DR 的风险。临床上按国际分级协议(ICDR 五级法)将严重程度分为:0 级无 DR、1 级轻度 NPDR、2 级中度 NPDR、3 级重度 NPDR、4 级增殖性 DR(PDR)。分级取决于病变的种类、数量与分布:微动脉瘤是最早的临床可见证据;中度 NPDR 出现点状/斑状出血与硬性渗出;重度 NPDR 以大量出血、软性渗出(棉绒斑)、IRMA 与静脉串珠为特征;一旦出现新生血管(NV)、激光斑(LM)或增殖膜(PM)即进入增殖期。FGADR 的标注体系正是围绕这一分级逻辑设计的——这也是它把 NV/IRMA/LM/PM 一并纳入标注的原因。
§2.3 临床任务定义
| 任务 | 输入 | 输出 | 临床定位 | FGADR 支持 |
|---|---|---|---|---|
| DR 筛查 | 眼底彩照 | 转诊与否(二分类) | 社区/基层大规模筛查 | 间接支持(五级标签可合并) |
| DR 分级 | 眼底彩照 | 0-4 级 | 门诊严重度评估与随访 | Grade-set 1,000 张专测 |
| 病灶分割 | 眼底彩照 | 六类病灶像素掩码 | 病灶定量、病程监测、可解释依据 | Seg-set 1,842 张掩码 |
| 联合分级与分割 | 眼底彩照 | 分级 + 掩码 | 可解释诊断、质控 | 论文 Task 2 官方设定 |
| 迁移学习 | FGADR 预训练特征 | 其他眼病多标签 | 多疾病眼筛平台 | 论文 Task 3 官方设定 |
§2.4 患者人群
| 维度 | 描述 |
|---|---|
| 来源机构 | 阿联酋当地合作医院(论文未具名) |
| 采集时间 | 未公开 |
| 年龄/性别分布 | 未公开 |
| 种族/地域 | 阿联酋就诊人群(未细分) |
| 就医类型 | 眼科/内分泌就诊患者的散瞳眼底检查 |
| 纳入策略 | 每名患者仅选质量最好的一张图;Seg-set 经模型预筛偏向 2-4 级 |
| 知情同意/伦理 | 论文说明个人信息已匿名化处理 |
§2.5 临床价值
对临床而言,FGADR 支撑的模型能力对应三个实际痛点。其一是筛查降本:分级模型可将非转诊病例自动过滤,缓解眼科医生读片负荷;其二是病程量化:像素级病灶掩码使微动脉瘤计数、硬性渗出面积等定量指标可用于随访对比,比单一级别数字更贴近指南对"病变数量与分布"的要求;其三是诊断可信度:联合分割分支输出的病灶热图可作为医生复核依据——论文实验显示,引入分割特征后重度级(grade 3)判别准确率提升 15.25%,且 grade 4 无一例被误判为 0/1 级,这类"证据型"输出正是自动筛查进入临床流程的前提。
§2.6 金标准描述
| 属性 | Seg-set | Grade-set |
|---|---|---|
| 划分 | 1,842 张,官方基准 two-fold 交叉验证(50%/50%) | 1,000 张,整集作为分级测试 |
| 标注方式 | 六类病灶像素级手工描画 + 图像级分级 + LM/PM 图像级标签 | 仅图像级分级 |
| 标注者 | 3 名眼科医生(2 住院 + 1 主治),主治最终验证;分级 3 人投票 | 6 名认证眼科医生(3 住院 + 3 主治)投票 |
| 标注性质 | 金标准(像素级,主治验证) | 金标准(多人共识 + 评分者内一致性检验) |
§2.7 六类病灶形态学速查
分割研究者的"识病灶"基本功——六类病灶在眼底彩照上的典型外观与其在 DR 分级中的意义:
| 病灶 | 缩写 | 典型外观 | 常见位置 | 分级意义 |
|---|---|---|---|---|
| 微动脉瘤 | MA | 直径极小的红色圆点,边缘锐利 | 后极部毛细血管区 | DR 最早的可临床检出证据,0/1 级即出现 |
| 出血 | HE | 点状/斑片状红色病灶,边界较 MA 模糊 | 视网膜各层 | 2 级起显著增多,形态随视网膜层位变化 |
| 硬性渗出 | EX | 黄白色脂质沉积,边界清楚,可呈环状 | 黄斑区为主 | 提示血-视网膜屏障破坏,与 DME 相关 |
| 软性渗出/CWS | SE | 灰白色棉絮状斑,边界弥散 | 神经纤维层 | 前增殖期信号,重度 DR 特征 |
| 视网膜内微血管异常 | IRMA | 螺旋状/迂曲的异常微血管结构 | 缺血区周围 | 预示即将进入增殖期 |
| 新生血管 | NV | 细分叉状新生血管网,可伴纤维增殖 | 视盘或视网膜周边 | 4 级(增殖期)的决定性标志 |
§3 数据集规格
§3.0 版本抉择矩阵
FGADR 无多版本迭代,抉择点在于"子集组合"与"获取渠道":
| 你的需求 | 推荐选择 | 大小 | 理由 |
|---|---|---|---|
| 病灶分割 / 多任务研究 | Seg-set(1,842 张 + 掩码) | 官方未公开,预留 10 GB 磁盘空间 | 掩码与分级齐全,官方基准协议在此子集上定义 |
| 分级模型评估 | Grade-set(1,000 张) | 官方未公开 | 6 人投票标签,官方指定测试集 |
| 完整复现论文三大任务 | Seg-set + Grade-set 全集 | 官方未公开 | Task 2/3 需要两个子集协作 |
| 国内网络快速获取 | OpenDataLab 镜像 | 以镜像页为准 | 免国际网络依赖,内容与官方发布一致 |
| 严格出处引用 | 官方项目页 | — | DOI 与论文对应,许可条款以官方渠道为准 |
§3.1 模态详情
单一模态:眼底彩照(color fundus photography)。图像以 PNG 格式提供,第三方文献记载分辨率为 1280×1280。每张 Seg-set 图像配套一张同尺寸像素级掩码图,掩码以像素值区分背景与六类病灶(MA、HE、EX、SE、IRMA、NV);Seg-set 另附激光斑(LM)与增殖膜(PM)两类"全局性病变"的图像级标签——这两类病变在重度 DR(3/4 级)常见,但形态弥散、边界不清,作者判断不适合像素级描画,故仅以"是否存在"的 0/1 标签提供。Grade-set 仅提供图像与分级标签。文件名形如 0001_2.png。
§3.2 按子集样本数
| 子集 | 图像数 | 像素掩码 | 分级标签 | LM/PM 图像级标签 |
|---|---|---|---|---|
| Seg-set | 1,842 | ✅ 六类病灶 | ✅ 3 人投票 | ✅ |
| Grade-set | 1,000 | ❌ | ✅ 6 人投票 | ❌ |
| 合计 | 2,842 | — | — | — |
分级分布(张数):
| 分级 | Seg-set | Grade-set |
|---|---|---|
| 0 无 DR | 101 | 143 |
| 1 轻度 NPDR | 212 | 125 |
| 2 中度 NPDR | 595 | 566 |
| 3 重度 NPDR | 647 | 105 |
| 4 增殖期 DR | 287 | 61 |
| 合计 | 1,842 | 1,000 |
§3.3 数据格式
| 对象 | 格式 | 说明 |
|---|---|---|
| 原始图像 | PNG | 眼底彩照,1280×1280(第三方记载) |
| 病灶掩码 | PNG | 与原图同尺寸,像素值编码背景 + 六类病灶 |
| 分级标签 | CSV | DR_Seg_Grading_Label.csv,两列 img_name,label(首行为表头) |
| LM/PM 标签 | 图像级标签列/文件 | 仅 Seg-set,0/1 指示是否存在 |
§3.4 存储大小
官方渠道未公开压缩包与解压后的确切体积。按 1,842 张 1280×1280 PNG 原图加同尺寸掩码、再加 1,000 张分级集图像的构成,建议下载与预处理时预留 10 GB 以上磁盘空间(含解压副本与中间产物)。以实际下载页显示为准。
§3.5 标注方式
- 像素级病灶掩码:人工描画。住院医师完成初步标注,主治医师逐例验证,属"人工 + 上级复核"的高质量流程。
- Seg-set 图像级分级:3 名医生投票产生。
- Grade-set 图像级分级:6 名医生投票产生,并做评分者内一致性(intra-rater consistency)检验,是全集内可信度最高的标签。
- LM/PM 图像级标签:人工判断存在与否。
- 无任何自动/弱监督生成的最终标签;论文中弱监督方法仅用于方法对比实验。
§3.6 标注者资质与一致性
| 子集 | 标注者 | 资质 | 一致性保障 |
|---|---|---|---|
| Seg-set 病灶掩码 | 3 名眼科医生 | 2 名住院医师初标 + 1 名主治医师终审 | 主治逐例验证 |
| Seg-set 分级 | 同上 3 人 | 眼科医生 | 投票共识 |
| Grade-set 分级 | 6 名 board-certified 眼科医生 | 3 住院 + 3 主治 | 投票共识 + 评分者内一致性 |
| 第三方复检 | Son et al. 视觉抽检 | 独立研究团队 | 发现 1 名标注者掩码系统性粗糙 |
§3.6b Seg-set 标注流程时序
| 步骤 | 执行者 | 产出 | 质控点 |
|---|---|---|---|
| 1. 源图预清洗 | 数据团队 | 每患者 1 张最优质量图 | 去重(血管结构唯一性检查) |
| 2. 模型预筛 | EyePACS 预训练分级模型 | 候选集(偏向 2-4 级) | 允许混入误分类的 0/1 级 |
| 3. 病灶像素初标 | 2 名住院医师 | 六类掩码草稿 | 统一标注软件与规程 |
| 4. 主治终审 | 1 名主治医师 | 定稿掩码 | 逐例验证、驳回重标 |
| 5. Seg-set 分级 | 3 名标注医生投票 | 图像级 0-4 标签 | 少数服从多数 |
| 6. LM/PM 判定 | 标注医生 | 图像级 0/1 标签 | 仅重度图常见 |
| 7. Grade-set 分级 | 6 名认证医生(3 住院 + 3 主治) | 投票分级 | 评分者内一致性检验 |
| 8. 发布 | IIAI | Seg-set + Grade-set + CSV | 匿名化核验 |
§3.7 采集周期
论文未披露图像采集的起止时间与总周期,仅说明图像"主要从当地合作医院收集"并于建库时完成匿名化。检索期间未见任何官方渠道补充此信息,故本页不给出采集区间。
§3.8 地域覆盖
全部图像来自阿联酋(UAE)当地合作医院,属单一国家、少量机构来源。第三方文献明确记载图像归 Inception Institute of Artificial Intelligence(阿布扎比)所有。设备来源集中既是优点(域内同质性好)也是局限(跨地域泛化需额外验证,见 §7.3)。
§3.9 设备规格
论文未披露眼底相机品牌、型号、视野角与是否散瞳。已知硬参数仅分辨率 1280×1280(第三方文献记载)。对同域实验影响有限(图像全部同源),但跨数据集迁移时需注意 IDRiD(4288×2848、50° 视野)等来源的尺度差异。
§3.10 深度溯源链
| 环节 | 记录 | 可信度 |
|---|---|---|
| 采集 | 阿联酋合作医院眼底彩照 | 论文正文陈述 |
| 预清洗 | 每患者保留 1 张质量最优图;模型预筛 2-4 级 | 论文 II-C 节 |
| 匿名化 | 建库时去除个人信息 | 论文正文陈述 |
| 标注 | 3 人像素标注 + 主治终审;6 人分级投票 | 论文 II-C 节 |
| 发布 | 官方项目页 + GitHub 仓库(2020-06 至 2020-11) | 官方仓库提交历史 |
| 质量审计 | Son et al. 独立视觉复检(2023) | 同行评审论文 |
| 引用影响 | Scopus 231 次(截至 2026-09) | PlumX 指标页 |
§4 数据结构
§4.0 目录树
解压后的典型目录结构如下(依据官方仓库说明与社区加载代码整理,以官方压缩包实际结构为准):
FGADR/
├── Seg-set/
│ ├── Original_Images/ # 1,842 张眼底彩照,PNG,文件名形如 0001_2.png
│ ├── Segmentation_Masks/ # 1,842 张同尺寸掩码 PNG,与原图同名
│ └── DR_Seg_Grading_Label.csv # 表头 img_name,label;label 为 DR 分级 0-4
└── Grade-set/
└── Original_Images/ # 1,000 张分级集眼底彩照,PNG
要点:
- Seg-set 的 CSV 首行是表头,逐行给出
图像文件名,DR 分级,覆盖全部 1,842 张图。 - 掩码与原图同名对应,读掩码时以图像文件名拼接路径即可。
- LM/PM 图像级标签随 Seg-set 提供,作为额外监督信号使用。
- 官方不提供 train/test 划分文件(见 §5 与坑点 3)。
§4.1 DAIMS 字段字典
| 字段 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| img_name | string | 图像文件名(含分级后缀),全集主键 | 0001_2.png | 唯一标识、文件定位 | 无 | 不适用 | Seg-set 1,842 个 / Grade-set 1,000 个唯一值 |
| label(DR 分级) | int | ICDR 五级严重度,0-4 | 2 | 分级任务标签、分层抽样 | 标注者间差异;投票共识 | 无缺失 | |
| mask(病灶掩码) | image | 与原图同尺寸 PNG,像素值编码背景 + 六类病灶 | 掩码 PNG | 六类病灶分割监督 | 掩码质量异质(存在粗标注个体) | 背景像素值表示"无病灶" | 离散像素值集合,以 np.unique 动态识别 |
| MA 掩码通道 | binary | 微动脉瘤像素 | 0/1 | 微小病灶分割、计数 | 微动脉瘤直径极小、易漏标 | 0 = 无 | |
| HE 掩码通道 | binary | 出血像素 | 0/1 | 出血分割 | 与血管走行易混淆 | 0 = 无 | |
| EX 掩码通道 | binary | 硬性渗出像素 | 0/1 | 渗出定量 | 与反光伪影易混淆 | 0 = 无 | |
| SE 掩码通道 | binary | 软性渗出/棉绒斑像素 | 0/1 | 重度前兆识别 | 边界弥散 | 0 = 无 | |
| IRMA 掩码通道 | binary | 视网膜内微血管异常像素 | 0/1 | 增殖前兆识别 | 仅 159 张图含此病灶 | 0 = 无 | |
| NV 掩码通道 | binary | 新生血管像素 | 0/1 | 增殖期关键证据 | 仅 49 张图含此病灶 | 0 = 无 | |
| LM 标签 | int | 激光斑是否存在(图像级) | 0/1 | 重度 DR 辅助证据 | 形态弥散、不宜像素标注 | 无缺失 | |
| PM 标签 | int | 增殖膜是否存在(图像级) | 0/1 | 增殖期辅助证据 | 同上 | 无缺失 |
§4.2 标签分布
- 分级分布见 §3.2 表:Seg-set 集中于 2/3 级(合计 1,242 张,占 67.4%),0/1 级仅 313 张(17.0%);Grade-set 集中于 2 级(566 张,56.6%)。
- 病灶出现频率(含该病灶掩码的图像数,SSMD-UNet 论文统计):MA/HE/EX/SE 掩码随图像全量提供,NV 仅 49 张图含掩码、IRMA 仅 159 张图含掩码,二者是极稀疏类别。
- 病灶与分级的联动规律(论文 Figure 4 归纳):微动脉瘤最早出现于 0/1 级;各类病灶数量随分级升高总体增长;NV、LM、PM 是区分 3 级与 4 级的关键因素。
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 总图像数 | 2,842 | 官方论文 |
| Seg-set / Grade-set | 1,842 / 1,000 | 官方论文 |
| 分辨率 | 1280×1280 | 第三方文献记载 |
| 分割基准协议 | two-fold,50%/50% | 官方论文 |
| 最优分割 Dice(六类) | MA 0.559 / HE 0.617 / EX 0.649 / SE 0.723 / IRMA 0.649 / NV 0.781 | 官方论文 Table II |
| 最优分级 Acc / QWK | 0.8603 / 0.8482 | 官方论文 Table IV |
| 论文引用 | 231+(Scopus,截至 2026-09) | PlumX |
§4.4 数据层级
患者(未披露人口学信息,匿名)
└── 眼底检查(每名患者仅 1 张最优质量图,无随访多图)
└── 图像(1,842 Seg-set / 1,000 Grade-set,两子集图像不重叠)
├── 图像级标签:DR 分级(0-4);Seg-set 另有 LM/PM
└── 像素级:六类病灶掩码(仅 Seg-set)
由于"每患者一图",数据层级是扁平的两层(图像 → 标签),不存在同一患者多图导致的组内相关;这也意味着患者级划分与图像级划分等价(见 §5.3)。
§4.5 缺失值与信息性缺失
| 字段 | 缺失情况 | 处理建议 |
|---|---|---|
| img_name / label(CSV) | 无缺失,行数 = 图像数 | 仍建议加载后断言 len(df) == 图像文件数 |
| 六类病灶掩码 | 每图均提供掩码文件;某类病灶不存在时该区域为背景值 | 分割头用 BCE 时"不存在"即全负样本,属信息性表达而非缺失 |
| IRMA/NV 掩码 | 大多数图像该类为空(159/49 张非空) | 稀疏正类,考虑 focal loss 或按图采样加权 |
| LM/PM 标签 | 无缺失(仅 Seg-set 有此字段) | Grade-set 使用时直接忽略 |
| 人口学/设备元数据 | 全集缺失(未发布) | 无法做亚组分析;勿虚构协变量 |
§5 划分与使用建议
§5.1 官方划分
- Task 1(病灶分割):仅用 Seg-set,two-fold 交叉验证,每次 50% 训练 / 50% 测试;除多类模型外,每类病灶单独训练一个二值分割网络。官方未发布固定划分文件,复现时需自行随机二分。
- Task 2(DR 分级):分类模型用 Kaggle EyePACS 图像级标签 + Seg-set 分级标签训练;Grade-set 的 1,000 张整体作为测试集。
- Task 3(迁移学习):FGADR 作为源域预训练,ODIR-5K 的 7,000 张训练/验证,五折交叉验证。
§5.2 社区惯例划分
| 工作 | 划分方案 | 备注 |
|---|---|---|
| Zhou et al. 2021(官方) | Seg-set two-fold 50/50;Grade-set 全测试 | 无固定文件,需自划 |
| SSMD-UNet(Sci Rep 2023) | 70% / 5% / 25%(1,290 / 92 / 460) | 训练/验证/测试,逐病灶四模型 |
| LVM-Med | 发布 pkl 划分文件(Training/Testing) | 512×512 预处理 |
| Son et al. 2023 | 清洗后 1,494 张,1,400 训练 / 94 测试 | 剔除粗标注个体 |
§5.3 划分策略与泄漏风险
- 图像级随机划分即可:每患者一图,图像级划分即患者级划分,无跨集同患者泄漏。但随机划分应做分级分层,否则 0/1 级稀少样本可能分布不均。
- Seg-set 与 Grade-set 不重叠:用 Grade-set 评估时,严禁把 Grade-set 图像混入训练(包括以其分级标签做预训练);官方 Task 2 训练源是 EyePACS + Seg-set。
- 分割特征向分级迁移时:分割模块只在 Seg-set 上训练,分级特征在 EyePACS/Grade-set 上学习——照抄该数据流可避免掩码信息泄漏进测试分级。
- 清洗偏倚警告:若按 Son et al. 剔除粗掩码(剩 1,494 张),与"全集 1,842 张"的结果不可比,须在论文中声明所用子集。
- 交叉验证建议:小数据沿用官方 two-fold 50/50 或升级为 5-fold 分层交叉验证;同一折划分下跑所有对比模型。
§5.4 外部验证建议
优先顺序:IDRiD(不同相机、更高分辨率、印度人群)→ Messidor-2 / APTOS 2019(不同分级体系,需标签映射)→ 本院自查数据。跨域时注意 §6.5 坑点 8 的分辨率陷阱;任何外部结果须与 §7.8 矩阵中已发表数字对齐协议后比较。
§5.5 常见错误用法(反模式)
| 反模式 | 后果 | 正确做法 |
|---|---|---|
| 用 Seg-set 训练分级后直接在 Seg-set 内部测试 | 训练测试同源,指标虚高 | 分割任务用 two-fold;分级测试用 Grade-set |
| 把 Grade-set 图像混入训练或做早停 | 考试集污染(坑点 7) | Grade-set 只在最终评估使用一次 |
| 直接对全 1,842 张随机划分、不分层 | 0/1 级在测试集中缺失或不稳定 | 按分级分层抽样 |
| 六类病灶合成一个 binary mask 训练 | 无法做逐类定量、与官方协议不可比 | 每类独立通道/模型(坑点 4) |
| 用全集训练后宣称与 Son et al. 1,494 张子集可比 | 子集口径不一致 | 声明子集与划分文件 |
| 对掩码使用双线性插值缩放 | 边界产生不存在的类别值 | 最近邻插值(§6.6) |
| 把 FGADR 的 DME 能力写进论文 claim | 数据集无 DME 标注 | 换 IDRiD 做 DME 任务 |
§6 AI 就绪指南
§6.0 云端快速启动
国内网络推荐经 OpenDataLab 镜像获取后上传至云环境;海外网络可直接从官方项目页下载。以下以 Colab/通用 Linux + 单 GPU 环境为准:
# 假设已下载两个压缩包到 ./data
mkdir -p data && cd data
unzip -q FGADR-Seg.zip && mv FGADR-Seg-Set* FGADR/Seg-set 2>/dev/null || true
unzip -q FGADR-Grade.zip && mv FGADR-Grade-Set* FGADR/Grade-set 2>/dev/null || true
# 结构对齐 §4.0 目录树后再运行 §6.4 代码
§6.1 快速上手
代码预期目录结构:data_root/Seg-set/{Original_Images, Segmentation_Masks, DR_Seg_Grading_Label.csv};data_root 即你解压后包含 Seg-set 文件夹的路径。最小可用子集:Seg-set 的 CSV + Original_Images 即可跑通分级基线;加 Segmentation_Masks 才能训练分割。
# 最小可用子集:Seg-set(CSV + 原图目录即可运行;掩码目录可选)
# data_root 拼接关系:data_root + "Seg-set/" + 子目录名 + 文件名
import os
import pandas as pd
data_root = "data/FGADR" # <-- 改成你的解压路径
seg_root = os.path.join(data_root, "Seg-set")
csv_path = os.path.join(seg_root, "DR_Seg_Grading_Label.csv")
df = pd.read_csv(csv_path) # 列:img_name, label
print(df.shape) # 期望 (1842, 2)
print(df["label"].value_counts().sort_index()) # 101/212/595/647/287
# 校验图像与标签一一对应
img_dir = os.path.join(seg_root, "Original_Images")
assert len(os.listdir(img_dir)) == len(df), "图像数与标签行数不一致"
# 任取一张查看分级
row = df.iloc[0]
print(os.path.join(img_dir, row["img_name"]), "->", row["label"])
§6.1b 数据体检脚本(下载后先跑)
对齐 §4.0 目录树后运行以下脚本,一次性校验图像数、CSV 对齐、掩码齐全性与分级分布,避免把目录结构问题带进训练:
# 体检对象:Seg-set + Grade-set 的完整性与一致性
# 依赖:仅 pandas / PIL(或 cv2);预期通过标准见各断言注释
import os
from collections import Counter
import pandas as pd
data_root = "data/FGADR" # <-- 改成你的解压路径
seg_root = os.path.join(data_root, "Seg-set")
# 1) CSV 结构
df = pd.read_csv(os.path.join(seg_root, "DR_Seg_Grading_Label.csv"))
assert list(df.columns) == ["img_name", "label"], f"列名异常: {df.columns}"
assert len(df) == 1842, f"标签行数应为 1,842,实际 {len(df)}"
assert df["img_name"].is_unique, "存在重复图像名"
# 2) 原图与标签一一对应
img_dir = os.path.join(seg_root, "Original_Images")
imgs = set(os.listdir(img_dir))
assert imgs == set(df["img_name"]), "原图与 CSV 文件名集合不一致"
# 3) 分级分布(与论文一致:101/212/595/647/287)
dist = Counter(df["label"])
expected = {0: 101, 1: 212, 2: 595, 3: 647, 4: 287}
assert dict(sorted(dist.items())) == expected, f"分级分布异常: {dist}"
# 4) 掩码齐全与像素值集合抽查(官方掩码与原图同名)
mask_dir = os.path.join(seg_root, "Segmentation_Masks")
if os.path.isdir(mask_dir):
masks = set(os.listdir(mask_dir))
assert len(masks) == 1842, f"掩码数量异常: {len(masks)}"
import numpy as np, cv2
for name in df["img_name"].sample(20, random_state=0):
m = cv2.imread(os.path.join(mask_dir, name), cv2.IMREAD_GRAYSCALE)
assert m is not None, f"掩码读取失败: {name}"
assert m.shape == (1280, 1280), f"掩码尺寸异常: {name} {m.shape}"
print(name, "像素值集合:", sorted(np.unique(m).tolist()))
else:
print("警告:未找到掩码目录,请核对压缩包结构")
# 5) Grade-set 数量
grade_dir = os.path.join(data_root, "Grade-set", "Original_Images")
assert len(os.listdir(grade_dir)) == 1000, "Grade-set 应为 1,000 张"
print("体检通过 ✔")
§6.2 数据获取
| 渠道 | 链接 | 说明 |
|---|---|---|
| 官方项目页 | csyizhou.github.io/FGADR | 论文官方发布页,含下载入口与引用信息 |
| GitHub 仓库 | csyizhou/FGADR-2842-Dataset | 仓库本体仅 README,指向项目页 |
| OpenDataLab 镜像 | OpenDataLab/FGADR | 国内镜像,注册账号后下载 |
| 向作者请求 | 论文通信作者(见 IEEE TMI 页面) | SSMD-UNet 论文记载的获取方式 |
申请流程:无注册审核门槛,直接从项目页/镜像下载;使用前阅读论文与官方页面的使用说明,发表成果时引用 Zhou et al., 2021。官方未公开压缩包体积(建议预留 10 GB 空间,见 §3.4)。
§6.3 预处理全流程
流程:PNG 读取 → 掩码像素值动态映射 → 尺寸归一 → 裁黑边/标准化 → 增强。关键点:掩码像素值与病灶类的对应关系务必用 np.unique 现场确认,不要硬编码。
import cv2
import numpy as np
import torch
IMG_SIZE = 512 # 论文级实验常用 512 或 256;1280 全图训练显存开销大
def load_pair(img_path: str, mask_path: str | None, img_size: int = IMG_SIZE):
"""读取图像与(可选的)掩码,返回 float 张量与多值掩码索引。"""
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
if img is None:
raise FileNotFoundError(img_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
if mask_path is not None:
mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE) # 同尺寸单通道
# 关键:动态确认像素值集合(例如 {0,1,2,3,4,5,6} 或 {0,10,20,...})
values = np.unique(mask).tolist()
# 把像素值压缩为 0..K-1 的类别索引(保持出现顺序,背景假设为最小值)
remap = {v: i for i, v in enumerate(values)}
mask_idx = np.vectorize(remap.get)(mask).astype(np.int64)
else:
mask_idx = None
img = cv2.resize(img, (img_size, img_size), interpolation=cv2.INTER_AREA)
if mask_idx is not None:
mask_idx = cv2.resize(mask_idx, (img_size, img_size),
interpolation=cv2.INTER_NEAREST) # 掩码必须最近邻
img_t = torch.from_numpy(img).permute(2, 0, 1).float() / 255.0
mean = torch.tensor([0.485, 0.456, 0.406]).view(3, 1, 1)
std = torch.tensor([0.229, 0.224, 0.225]).view(3, 1, 1)
img_t = (img_t - mean) / std
return img_t, (None if mask_idx is None else torch.from_numpy(mask_idx))
def crop_black_margin(img: np.ndarray, tol: int = 10) -> np.ndarray:
"""裁掉眼底图四周黑边(官方图像主体居中,裁边可减少无效背景)。"""
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
m = gray > tol
if not m.any():
return img
ys, xs = np.where(m)
return img[ys.min():ys.max() + 1, xs.min():xs.max() + 1]
§6.4 PyTorch DataLoader
<details>
<summary>完整可运行 Dataset + DataLoader 代码(点击展开,约 70 行)</summary>
# 目录结构预期(与 §4.0 一致):
# data_root/Seg-set/Original_Images/*.png
# data_root/Seg-set/Segmentation_Masks/*.png (掩码与原图同名)
# data_root/Seg-set/DR_Seg_Grading_Label.csv
# data_root/Grade-set/Original_Images/*.png
import os
import cv2
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
MEAN = torch.tensor([0.485, 0.456, 0.406]).view(3, 1, 1)
STD = torch.tensor([0.229, 0.224, 0.225]).view(3, 1, 1)
class FGADRSegDataset(Dataset):
"""Seg-set:分级标签 + 六类病灶掩码的多任务数据集。
掩码像素值编码以 np.unique 动态识别:索引 0 视为背景,
其余索引按出现顺序对应各病灶通道;训练分割头时按需展开为 K-1 个二值通道。
"""
def __init__(self, data_root: str, split_indices=None, img_size: int = 512,
with_mask: bool = True, augment: bool = False):
self.seg_root = os.path.join(data_root, "Seg-set")
self.img_dir = os.path.join(self.seg_root, "Original_Images")
self.mask_dir = os.path.join(self.seg_root, "Segmentation_Masks")
self.df = pd.read_csv(os.path.join(self.seg_root, "DR_Seg_Grading_Label.csv"))
if split_indices is not None: # 传入分层划分后的索引
self.df = self.df.iloc[split_indices].reset_index(drop=True)
self.img_size = img_size
self.with_mask = with_mask
self.augment = augment
def __len__(self):
return len(self.df)
def _augment(self, img, mask): # 只做保标注的几何/光度增强
if not self.augment:
return img, mask
if np.random.rand() < 0.5: # 小角度旋转(不镜像,见坑点 6)
ang = np.random.uniform(-15, 15)
h, w = img.shape[:2]
M = cv2.getRotationMatrix2D((w / 2, h / 2), ang, 1.0)
img = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_LINEAR,
borderValue=(0, 0, 0))
if mask is not None:
mask = cv2.warpAffine(mask, M, (w, h), flags=cv2.INTER_NEAREST,
borderValue=0)
if np.random.rand() < 0.5: # 亮度/对比度微扰
img = np.clip(img * np.random.uniform(0.9, 1.1) +
np.random.uniform(-10, 10), 0, 255).astype(np.uint8)
return img, mask
def __getitem__(self, idx):
row = self.df.iloc[idx]
img = cv2.imread(os.path.join(self.img_dir, row["img_name"]),
cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
mask = None
if self.with_mask:
mask = cv2.imread(os.path.join(self.mask_dir, row["img_name"]),
cv2.IMREAD_GRAYSCALE)
img, mask = self._augment(img, mask)
img = cv2.resize(img, (self.img_size, self.img_size),
interpolation=cv2.INTER_AREA)
img_t = torch.from_numpy(img).permute(2, 0, 1).float() / 255.0
img_t = (img_t - MEAN) / STD
grade = torch.tensor(int(row["label"]), dtype=torch.long)
if mask is None:
return img_t, grade
mask = cv2.resize(mask, (self.img_size, self.img_size),
interpolation=cv2.INTER_NEAREST)
vals = np.unique(mask) # 动态映射像素值 -> 0..K-1
remap = {v: i for i, v in enumerate(vals)}
mask_idx = np.vectorize(remap.get)(mask).astype(np.int64)
return img_t, grade, torch.from_numpy(mask_idx)
def make_loaders(data_root: str, batch_size: int = 8, num_workers: int = 4):
full = FGADRSegDataset(data_root, augment=False)
# 官方未发布划分文件:这里给分层二分示例(对应官方 two-fold 思路)
from sklearn.model_selection import train_test_split
tr_idx, te_idx = train_test_split(
np.arange(len(full)), test_size=0.5, random_state=42,
stratify=full.df["label"])
train_set = FGADRSegDataset(data_root, tr_idx, augment=True)
test_set = FGADRSegDataset(data_root, te_idx, augment=False)
return (
DataLoader(train_set, batch_size=batch_size, shuffle=True,
num_workers=num_workers, pin_memory=True),
DataLoader(test_set, batch_size=batch_size, shuffle=False,
num_workers=num_workers, pin_memory=True),
)
if __name__ == "__main__":
train_loader, test_loader = make_loaders("data/FGADR")
for batch in train_loader:
if len(batch) == 3:
imgs, grades, masks = batch
print(imgs.shape, grades.shape, masks.shape) # [B,3,512,512] [B] [B,512,512]
break
</details>
§6.4b Grade-set 分级评测集加载器
Grade-set 无掩码、仅分级标签,作为官方分级测试集使用(注意坑点 7:只读不训):
# 目录结构预期:data_root/Grade-set/Original_Images/*.png(1,000 张)
# data_root 拼接关系:data_root + "Grade-set" + "Original_Images" + 文件名
# Grade-set 的分级标签通常随发布以 CSV/标注文件提供;若目录内未含标签文件,
# 请以官方发布内容为准补齐路径,代码逻辑保持一致
import os
import cv2
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset
class FGADRGradeDataset(Dataset):
"""Grade-set:官方分级测试集(1,000 张,6 人投票标签)。"""
def __init__(self, data_root: str, label_csv: str, img_size: int = 512):
self.img_dir = os.path.join(data_root, "Grade-set", "Original_Images")
self.df = pd.read_csv(label_csv) # 期望列:img_name, label
assert len(self.df) == 1000, "Grade-set 应为 1,000 张"
self.img_size = img_size
def __len__(self):
return len(self.df)
def __getitem__(self, idx):
row = self.df.iloc[idx]
img = cv2.imread(os.path.join(self.img_dir, row["img_name"]),
cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (self.img_size, self.img_size),
interpolation=cv2.INTER_AREA)
img_t = torch.from_numpy(img).permute(2, 0, 1).float() / 255.0
img_t = (img_t - MEAN) / STD # 复用 §6.4 中的 MEAN/STD
return img_t, torch.tensor(int(row["label"]), dtype=torch.long)
评测纪律:该 Dataset 只在最终评估实例化一次;任何超参搜索、模型选择、早停都不得触碰它。
§6.5 坑点 8 个
⚠️ 坑点 1:Seg-set 分级分布严重偏斜,0/1 级仅约 17%(分类:偏倚陷阱)
问题:Seg-set 由 EyePACS 预训练分级模型粗筛、偏向选择 2/3/4 级图像(101/212/595/647/287),直接训练的分级模型会系统性偏向前期病例,对轻症(恰是筛查最需要抓住的)灵敏度虚低。
症状:宏平均指标远低于加权平均;0/1 级召回率接近随机;混淆矩阵中轻症大量落入 grade 0。
解决:
- 简单方法:训练集按分级分层重采样(WeightedRandomSampler),测试集保持原分布并报告按级指标。
- 进阶方法:用 Grade-set 的 0/1 级图像补充训练(其 0/1 级占 268/1,000,更均衡),但不得把 Grade-set 的测试用法破坏——补充训练需自备独立评估集。
- SOTA 方法:融合 EyePACS 级别标签做联合训练并使用 class-balanced focal loss,按官方 Task 2 数据流(EyePACS + Seg-set 训练,Grade-set 测试)。
参考:Zhou et al., 2021, IEEE TMI(Seg-set 分布与 Task 2 设计)
⚠️ 坑点 2:存在系统性粗标注掩码,训练前必须质量过滤(分类:标签理解)
问题:第三方复检发现 Seg-set 中某一位标注者的掩码整体粗颗粒化,与其他标注者风格差异显著,直接训练会把这些粗掩码当真值学进去。
症状:分割边缘锯齿状过拟合;loss 对同一类病灶在不同图间震荡;用细掩码验证的模型在含粗标注图上 IoU 异常低。
解决:
- 简单方法:训练若干 epoch 后按 per-image loss 排序,人工抽检高 loss 图并剔除。
- 进阶方法:计算掩码"块状度"指标(如掩码边界复杂度/矩形度),过滤异常图。Son et al. 视觉审查后剔除粗标注,全集从 1,842 降至 1,494 张(0-4 级为 99/157/355/605/278)。
- SOTA 方法:采用噪声标签鲁棒训练(如 noise-adapter 类方法或协同监督),把标注者不确定性显式建模。
参考:Son et al., 2023, PMID 36874499;gist-ailab/noise-adapter
⚠️ 坑点 3:官方无固定划分文件,跨论文 Dice 不可直接比较(分类:评估误用)
问题:官方协议是 two-fold 50/50 且未发布划分文件;SSMD-UNet 用 70/5/25、Son et al. 用清洗后 1,400/94、LVM-Mem 用自有 pkl。同一模型在不同划分上差异可达数个 Dice 点。
症状:复现值对不上原文;A、B 论文的"最优模型"在你自己的统一划分上排名反转。
解决:
- 简单方法:自建分层划分并用固定随机种子,论文中公布划分脚本。
- 进阶方法:跑官方 two-fold 两个方向取平均,同时报告 per-fold 方差。
- SOTA 方法:提交到统一评测(如把划分文件与代码一起开源),社区逐步收敛到可比较协议。
参考:Zhou et al., 2021;SSMD-UNet, 2023, Sci Rep
⚠️ 坑点 4:单病灶二值模型与多类语义分割的协议差异(分类:评估误用)
问题:官方基准除 Multi-class U-Net 外均为"每类病灶单独训一个二值网络";很多复现者直接用一个多类 softmax 头,指标口径不同(多类头下稀有类相互挤压)。
症状:多类头在 NV/IRMA 上 Dice 明显低于论文单病灶模型;误以为是实现 bug。
解决:
- 简单方法:对齐官方口径——六类各训一个二值头再汇总。
- 进阶方法:共享 encoder + 六个独立 sigmoid 解码头(多标签形式),BCE 逐通道计算。
- SOTA 方法:多任务解码器 + 逐病灶损失加权(如 SSMD-UNet 的主/辅任务设计)。
参考:Zhou et al., 2021;SSMD-UNet, 2023
⚠️ 坑点 5:MA 等微小病灶导致前景占比极小,全图 BCE 训不动(分类:预处理陷阱)
问题:微动脉瘤仅数像素至数十像素,1280×1280 全图正负像素比可达 1:10,000 以上,朴素 BCE 会把网络推向"全背景"。
症状:Dice 收敛到 0;预测全黑但 accuracy 高达 99%+;PR 曲线 AUC 远低于 ROC AUC。
解决:
- 简单方法:Dice loss 或 Dice+BCE 组合损失,替代纯 BCE。
- 进阶方法:以病灶中心挖 patch 训练、推理时滑窗聚合;或对正像素加权(focal loss,γ=2)。
- SOTA 方法:注意力 U 形结构(论文 Attention/Gated/Dense U-Net 均优于朴素 U-Net)+ 多尺度深监督。
参考:Zhou et al., 2021(Table II:MA Dice 0.468-0.559,全模型皆难)
⚠️ 坑点 6:水平镜像增强破坏鼻颞方位,可能引入左右眼混淆(分类:预处理陷阱)
问题:眼底图像视盘偏鼻侧、黄斑偏颞侧,水平镜像会把左眼形态变成右眼形态。FGADR 未发布眼别标签,无法事后校正。
症状:依赖方位先验的模型(视盘定位、分区病灶统计)在镜像增强后性能下降;生成式下游任务产出解剖学不一致样本。
解决:
- 简单方法:只用旋转(≤15°)、亮度对比度、缩放裁剪,不用镜像。
- 进阶方法:若坚持镜像,先训练一个左右眼分类器给无标签图补眼别标注,镜像后再翻转回同眼别。
- SOTA 方法:以视盘-黄斑相对位置自动判定眼别并在数据管线中统一标准化方位,再做任意几何增强。
参考:社区在 IDRiD/EyePACS 增强讨论中的通行做法;Son et al. 2023 的合成管线同样规避方位破坏
⚠️ 坑点 7:Grade-set 是"考试集",混入训练即自我作弊(分类:数据泄漏)
问题:官方 Task 2 把 Grade-set 全部 1,000 张留作测试,训练源是 EyePACS + Seg-set。若把 Grade-set 图像(哪怕只拿标签分布)混入训练或模型选择,报告的分级成绩将严重虚高。
症状:QWK 轻松超过 0.90,远高于官方最优 0.8482;审稿要求解释时无法自洽。
解决:
- 简单方法:物理隔离目录,训练代码白名单只读 Seg-set 与 EyePACS。
- 进阶方法:模型选择/早停用 EyePACS 内部验证折,Grade-set 只在最终一次评估。
- SOTA 方法:把"训练/测试隔离"写进 CI 检查(数据清单哈希校验)。
参考:Zhou et al., 2021(Task 2 协议原文)
⚠️ 坑点 8:跨域迁移的分辨率与相机域差,IDRiD→FGADR 可致 Dice 崩塌(分类:偏倚陷阱)
问题:IDRiD 为 4288×2848、50° 视野、印度单中心,FGADR 为 1280×1280、阿联酋来源。在 IDRiD 上训练的分割模型直接用到 FGADR,域差叠加尺度差会导致性能崩塌。
症状:文献实测 IDRID→FGADR 时 U-Net(R50) 平均 Dice 从 49.46 跌至 13.51(-22.21);而 MedSAM 仅从 58.49 跌至 44.63。
解决:
- 简单方法:迁移前统一缩放策略(保长宽比 + 视野角换算),并用目标域少量图微调。
- 进阶方法:域自适应(风格迁移/直方图匹配)或 BN 层统计重估计。
- SOTA 方法:采用在多中心眼底数据上预训练的医学基础模型(如 MedSAM/LVM-Med)作为初始化。
参考:On the Out of Distribution Robustness of Foundation Models in Medical Image Segmentation
§6.6 数据增强
| 类别 | 操作 | 说明 |
|---|---|---|
| ✅ 安全 | 小角度旋转(±15°) | 保标注几何,模拟拍摄角度差 |
| ✅ 安全 | 亮度/对比度微扰 | 模拟相机与曝光差异 |
| ✅ 安全 | 随机缩放裁剪(0.9-1.1×) | 模拟视野变化 |
| ✅ 安全 | 通道内高斯噪声/轻微模糊 | 提升低质量图鲁棒性 |
| ❌ 危险 | 水平/垂直镜像 | 破坏鼻颞方位,FGADR 无眼别标签无法校正(坑点 6) |
| ❌ 危险 | 大角度旋转(>30°) | 眼底解剖方位失去生理意义 |
| ❌ 危险 | 过强 CLAHE/直方图均衡 | 放大噪声伪影,可生成"伪病灶"混淆掩码监督 |
| ❌ 危险 | 掩码最近邻以外的插值 | 灰度插值会在病灶边界产生不存在的像素类别 |
§6.7 模型推荐
| 任务 | 推荐模型 | 起点理由 | 参考性能 |
|---|---|---|---|
| 病灶分割(六类) | Attention U-Net / Dense U-Net / U-Net++ | 论文基准最优梯队,实现简单 | Dense U-Net:MA 0.559、NV 0.781(Dice) |
| 病灶分割(通用架构) | MedSAM / LVM-Med 微调 | 跨域鲁棒性显著更好 | MedSAM 在 FGADR 平均 Dice 58.49 |
| DR 分级 | DenseNet-121 / EfficientNet + 分层采样 | 官方最强单模型骨干 | Grade-set Acc 0.8239(纯分类) |
| 联合分级与分割 | 分割分支 + 分级分支融合(论文 Zhou 方法) | 分割证据直接提升分级 | Grade-set Acc 0.8603 / QWK 0.8482 |
| 迁移学习 | FGADR 预训练 + DSAA 迁移 ODIR-5K | 官方 Task 3 方法 | ODIR-5K Kappa 0.7348 |
§6.8 硬件需求
| 场景 | GPU 显存 | 说明 |
|---|---|---|
| 512×512 分割训练(batch 8) | ≥ 11 GB | RTX 3090/4090 或同级云卡即可 |
| 512×512 多任务(分割+分级) | ≥ 16 GB | 共享 encoder 双头 |
| 1280×1280 全图训练 | ≥ 24 GB | 显存紧张时改用 patch 训练 |
| 推理/评估 | ≥ 6 GB | 单图推理开销小 |
| CPU 环境 | 8 GB 内存 | 仅做数据检查与统计,不建议训练 |
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import cohen_kappa_score, roc_auc_score, average_precision_score
def dice_per_class(y_true: np.ndarray, y_pred: np.ndarray, cls: int, eps=1e-7):
"""单类病灶 Dice。y_true/y_pred 为整数掩码索引图。"""
t, p = (y_true == cls), (y_pred == cls)
return (2 * (t & p).sum() + eps) / (t.sum() + p.sum() + eps)
def seg_report(y_true, y_pred, n_classes):
"""逐类 Dice + 前景 PR-AUC(官方论文口径:Dice/ROC/PR/MAE)。"""
out = {}
for c in range(1, n_classes): # 0 为背景
t = (y_true == c).astype(np.uint8).ravel()
p = (y_pred == c).astype(np.uint8).ravel()
out[f"class_{c}"] = {
"dice": 2 * (t & p).sum() / max(t.sum() + p.sum(), 1),
"pr_auc": average_precision_score(t, p) if t.any() else float("nan"),
}
return out
def qwk(y_true, y_pred, n_levels=5):
"""DR 分级:二次加权 Kappa(官方 Task 2 口径 Q.W.Kappa)。"""
return cohen_kappa_score(y_true, y_pred, weights="quadratic",
labels=list(range(n_levels)))
def grade_report(y_true, y_pred, n_levels=5):
"""分级完整报告:QWK + 逐级准确率 + 混淆矩阵(对齐 §5.3 建议的按级报告)。"""
from sklearn.metrics import confusion_matrix
labels = list(range(n_levels))
cm = confusion_matrix(y_true, y_pred, labels=labels)
per_grade_acc = {
f"grade_{g}": (cm[g, g] / cm[g].sum()) if cm[g].sum() else float("nan")
for g in labels
}
return {
"qwk": qwk(y_true, y_pred, n_levels),
"accuracy": float(np.trace(cm) / np.sum(cm)),
"per_grade_accuracy": per_grade_acc,
"confusion_matrix": cm.tolist(),
}
§6.10 MLOps 笔记
- 版本管理:数据不可变发布(Seg-set 1,842 张为事实版本),任何清洗(如剔除粗掩码后的 1,494 张子集)都要作为派生数据集单独登记并记录剔除清单哈希。
- 评估协议固化:把划分种子、图像尺寸、指标口径(逐类 Dice + QWK)写入配置文件,与模型权重同库存档。
- 数据漂移监控:上线筛查模型后监控输入图像的分辨率、视野占比、黑边比例分布;FGADR 训练分布偏向 2-4 级,线上轻症占比异常升高时复核阈值。
- 复现归档:因官方无划分文件,发表论文时必须附划分索引文件;建议把 two-fold 两个方向的种子都公开。
- 许可合规:内部立项时登记数据使用协议条款与引用义务,商业评估前联系权利方(IIAI)。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 选择偏倚 | Seg-set 经模型预筛偏向 2-4 级,0/1 级仅约 17% | 高 | 分层重采样;融合 EyePACS 训练(坑点 1) |
| 标注偏倚 | 掩码由 3 人完成,存在系统性粗标注个体 | 高 | 训练前质量过滤或噪声鲁棒训练(坑点 2) |
| 地域/设备偏倚 | 全部来自阿联酋少量合作医院,相机型号未披露 | 中 | 外部验证(IDRiD/Messidor-2)后再泛化宣称 |
| 类别稀疏偏倚 | NV 仅 49 图、IRMA 仅 159 图含掩码 | 高 | focal loss / patch 采样;谨慎解读这两类的 Dice |
| 标签共识偏倚 | 分级为小规模投票共识,无大规模仲裁 | 中 | 报告 per-grade 混淆矩阵而非仅总体 QWK |
§7.2 标注质量
- 分级标签:Grade-set 的 6 人投票 + 评分者内一致性设计是全集最高置信度标签;Seg-set 分级为 3 人投票,置信度次之。
- 病灶掩码:住院医师初标 + 主治终审的结构化流程,但无公开的标注者间一致性系数(如 Dice-between-annotators);第三方复检证实掩码质量存在个体差异(粗标注者问题),清洗后子集 1,494 张的分布见坑点 2。
- LM/PM 图像级标签:形态弥散病变,作者主动降级为图像级标注,避免低质量像素标签污染——这一决策本身提高了掩码体系的整体可信度。
§7.3 泛化性
| 场景 | 失效风险 | 证据 |
|---|---|---|
| FGADR 内部(同域)分割 | 低-中 | U-Net(R50) 平均 Dice 49.46,MedSAM 58.49 |
| IDRiD → FGADR 跨域分割 | 高 | 同文献:U-Net(R50) 跌至 13.51(-22.21),仅 MedSAM 维持 44.63 |
| FGADR → 其他人群分级 | 中-高 | 单一国家来源;分级协议虽通用,人群/设备域差未验证 |
| 轻症(0/1 级)识别 | 中 | 训练分布 0/1 级占比低(坑点 1) |
| DME(黄斑水肿)任务 | 不可用 | FGADR 无 DME 标注,勿宣称支持 |
§7.4 伦理
论文说明建库时对个人信息做了匿名化处理,每名患者仅保留一张最优质量图;数据发布未附可识别人口学信息。原始采集的知情同意流程、伦理批准编号未在论文中披露,使用者开展敏感研究时应自行补充伦理审查。发布机构为 IIAI(阿布扎比),使用受其数据使用协议约束。
§7.5 公平性
数据集未发布年龄、性别、种族等人口学标签,无法进行亚组公平性审计;且全部图像来自阿联酋就诊人群,模型在其他人群(如东亚、南亚)上的表现需外部验证。建议下游研究在部署前用本地人群数据校准,勿直接跨人群移植阈值。
§7.6 数据漂移
- 采集设备漂移:相机型号未披露,若实际采集跨多台设备,域内亦可能存在设备间色温/视野差异;建议训练前对图像统计(绿通道直方图、黑边占比)做聚类检查。
- 时间漂移:采集周期未公开,无法评估时间跨度效应。
- 标注标准漂移:掩码标注跨标注者存在风格差异(坑点 2),跨 batch 分析 per-image loss 分布可定位。
- 下游漂移:分级模型上线后,真实人群 0/1 级占比将远高于训练分布,须按 §6.10 监控。
§7.7 DAIMS 24 项数据质量评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | CSV 一行一图,img_name 为主键 |
| 2 | 唯一标识 | ✅ | 文件名全局唯一,Seg-set 与 Grade-set 不重叠 |
| 3 | 特殊字符 | ✅ | 文件名仅数字与下划线,无 Unicode 风险 |
| 4 | 重复行 | ✅ | 标签行数 = 图像数(1,842),无重复 |
| 5 | 缺失编码 | ⚠️ | 标签无缺失;但"病灶不存在"与"未标注"仅能靠背景值区分,无显式编码 |
| 6 | 标签标识 | ⚠️ | 分级标签清晰;掩码像素值与病灶名的对应需用户自行用 np.unique 确认,官方未给映射文档 |
| 7 | 罕见类分组 | ⚠️ | NV 49 图、IRMA 159 图极稀疏,需专门采样策略 |
| 8 | 偏倚评估 | ✅ | 预筛偏倚、地域偏倚在论文与第三方文献中有明确记载(§7.1) |
| 9 | 数据字典 | ⚠️ | 无官方字段字典;CSV 两列含义经社区加载代码确认 |
| 10 | 信息性缺失解释 | ❌ | 官方未解释掩码背景值语义与"无病灶"表达 |
| 11 | 设备记录 | ❌ | 相机品牌/型号/视野角均未披露 |
| 12 | 共线性 | ✅ | 单模态扁平结构,无共线性问题 |
| 13 | 编码映射 | ⚠️ | 分级 0-4 与 ICDR 对应明确;病灶类别无 ICD/SNOMED 官方映射 |
| 14 | 时间戳处理 | ❌ | 无采集时间戳,无法做时间维度分析 |
| 15 | 划分建议 | ✅ | 官方定义 three-task 协议(two-fold 50/50 等) |
| 16 | 泄漏讨论 | ✅ | 每患者一图、两子集不重叠,泄漏面小(§5.3) |
| 17 | 标签分布 | ✅ | 分级分布完整公开(§3.2) |
| 18 | 测量偏倚 | ⚠️ | 标注者差异存在且被第三方证实,但无量化一致性系数 |
| 19 | 外部验证建议 | ✅ | 官方 Task 3 即迁移学习范式;跨域数字已有文献(§7.8) |
| 20 | 版本记录 | ⚠️ | 单一事实版本(2020 发布),无版本号管理 |
| 21 | 预处理脚本 | ❌ | 官方未发布加载/预处理代码,需自行实现(§6 提供参考) |
| 22 | 合规要求 | ⚠️ | 有使用协议但无标准许可证文本,商业用途边界需与权利方确认 |
| 23 | 多模态对齐 | ✅ | 图像-掩码-标签同名对齐,工程上易于校验 |
| 24 | 去标识化 | ✅ | 论文明确说明匿名化,无人口学字段发布 |
DAIMS 评分:15.5 / 24
评分解读:核心标注资产(分级 + 掩码)结构清晰、对齐可靠、泄漏面小,达到可直接开展 DL 实验的水平;主要失分在"元数据匮乏"(设备、时间、人口学全缺)与"官方工程配套缺失"(无数据字典、无预处理脚本、掩码编码无文档)。这是一份"标注优秀、文档欠缺"的学术数据集。
对你意味着什么:
- 直接可用:图像-掩码-分级的多任务训练,无需复杂 ETL(§6.4 代码可跑通)。
- 必须自建:划分脚本(坑点 3)、掩码像素值映射确认(§6.3)、粗掩码过滤流程(坑点 2)。
- 不要期待:亚组公平性分析、时间演变研究、设备归因分析——元数据不存在,硬做即编造。
- 发表纪律:声明所用子集(全集 1,842 vs 清洗后 1,494)与划分,否则结果不可比。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| ODIR-5K | 官方论文 Task 3 | 八类眼病多标签分类 | Kappa 0.7348 / F-1 0.9426 / AUC 0.9498 | DSAA 较纯 baseline +7.92% Kappa | FGADR 预训练特征可迁移至多疾病识别 |
| IDRiD → FGADR | OOD 鲁棒性研究(arXiv 2311.11096) | 跨域病灶分割 | U-Net(R50) Dice 13.51;MedSAM 44.63 | U-Net -22.21 / MedSAM -13.86 | 分辨率与相机域差致传统模型崩塌;基础模型更稳 |
| FGADR 自域(参照) | 同上 | 病灶分割 | U-Net(R50) 49.46;MedSAM 58.49 | — | 基础模型在同域亦领先 |
| FGADR(Swin U-Net) | Mok et al., ACCV 2024 | 病灶分割 | Dice 0.89 / IoU 0.86 | 协议自定,与官方 two-fold 不可比 | 展示病灶条件生成的下游增益 |
| FGADR 70/5/25 子集 | SSMD-UNet, Sci Rep 2023 | 四类病灶半监督分割 | 逐病灶 Dice/PR-AUC 优于对照 | 划分不同,不可与官方直接比较 | 多任务解码器 + 重建分支有效 |
§8 基准性能与生态
§8.1 排行榜
Task 1 病灶分割(官方协议:two-fold 50/50,逐类二值模型,Dice)
| 排名 | 模型 | MA | HE | EX | SE | IRMA | NV | 年份 | 完整引用 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Dense U-Net | 0.559 | 0.617 | 0.649 | 0.723 | 0.649 | 0.781 | 2021 | Zhou et al., 2021, IEEE TMI. DOI 10.1109/TMI.2020.3037771 |
| 2 | U-Net++ | 0.533 | 0.597 | 0.644 | 0.719 | 0.645 | 0.777 | 2021 | 同上(论文内对比) |
| 3 | Attention U-Net | 0.536 | 0.576 | 0.637 | 0.689 | 0.641 | 0.769 | 2021 | 同上 |
| 4 | U-Net | 0.521 | 0.570 | 0.607 | 0.655 | 0.633 | 0.750 | 2021 | 同上 |
| 5 | DeepLabV3+ (s=16) | 0.502 | 0.558 | 0.597 | 0.653 | 0.625 | 0.741 | 2021 | 同上 |
⚠️ 数值不可直接比较提示:以上为官方 two-fold 且每类独立二值模型的结果;其他论文(如 Swin U-Net Dice 0.89、MedSAM 58.49 平均 Dice)协议不同,不能并列排名。
Task 2 DR 分级(Grade-set 1,000 张,Accuracy / QWK)
| 排名 | 模型 | Accuracy | QWK | 年份 | 完整引用 |
|---|---|---|---|---|---|
| 1 | Zhou 联合方法(DenseNet-121 骨干) | 0.8603 | 0.8482 | 2021 | Zhou et al., 2021, IEEE TMI. DOI 10.1109/TMI.2020.3037771 |
| 2 | Wu 联合方法(DenseNet-121) | 0.8560 | 0.8425 | 2021 | 同上(论文内对比) |
| 3 | Lin 方法 | 0.8362 | 0.7846 | 2021 | 同上 |
| 4 | Model Ensemble 2 | 0.8305 | 0.7786 | 2021 | 同上 |
| 5 | DenseNet-121(纯分类) | 0.8239 | 0.7678 | 2021 | 同上 |
Task 3 迁移学习(ODIR-5K 五折,Kappa / F-1 / AUC)
| 排名 | 模型 | Kappa | F-1 | AUC | 年份 | 完整引用 |
|---|---|---|---|---|---|---|
| 1 | Baseline + MTC + DSAA | 0.7348 | 0.9426 | 0.9498 | 2021 | Zhou et al., 2021, IEEE TMI. DOI 10.1109/TMI.2020.3037771 |
| 2 | Baseline + MTC + AA | 0.7152 | 0.9351 | 0.9442 | 2021 | 同上 |
| 3 | Baseline + MTC | 0.6843 | 0.9211 | 0.9316 | 2021 | 同上 |
| 4 | DenseNet baseline | 0.6556 | 0.9163 | 0.9274 | 2021 | 同上 |
§8.2 SOTA 总结与选型建议
- 分割:想复现官方口径,选 Attention/Dense U-Net 系;想要跨域稳健或快速 SOTA,选医学基础模型(MedSAM 在域转移下显著更稳)。MA/IRMA/NV 三类仍是开放问题(官方最优 Dice 仅 0.559/0.649/0.781)。
- 分级:纯分类天花板约 Acc 0.82-0.83;突破点在"分割证据融合"(官方最优 0.8603/0.8482)。新工作建议直接采用联合框架并在 Grade-set 上报告。
- 迁移:FGADR 作为预训练源域对 ODIR-5K 有效;若目标是其他眼底分布,先按坑点 8 处理域差。
§8.2b 新工作复现与超越清单
在 FGADR 上开展新实验的推荐动作序列:
- 跑通 §6.1b 数据体检,确认 1,842/1,000 图像与标签完整。
- 决定子集口径(全集 1,842 vs Son et al. 清洗后 1,494)并登记。
- 固定划分:two-fold 50/50(复现官方)或分层 5-fold(更稳),公布种子与索引。
- 基线先行:先跑 U-Net(分割)与 DenseNet-121(分级)对齐官方 Table II/IV,确认管线无偏。
- 报告口径:逐类 Dice + PR-AUC(分割)、Accuracy + QWK + 逐级混淆矩阵(分级)。
- 外部验证:至少加入 IDRiD 一个方向(注意坑点 8 的分辨率对齐)。
- 开源:划分索引 + 预处理脚本随代码发布,帮助社区收敛可比协议。
§8.3 评测协议
- 分割:逐类二值 Dice + ROC-AUC + PR-AUC + MAE,two-fold 50/50,单类单模型(或多标签多头时明示)。
- 分级:五级 Accuracy + 二次加权 Kappa(QWK),训练源 EyePACS + Seg-set,测试仅 Grade-set。
- 迁移:源域 FGADR 预训练,ODIR-5K 五折,Kappa/F-1/微平均 AUC。
- 任何自定划分须公布索引文件与随机种子(坑点 3)。
§8.4 相关数据集
| 数据集 | 规模 | 任务 | 获取 |
|---|---|---|---|
| IDRiD | 分割 81 / 分级 516 | 病灶分割 + DR/DME 分级 | IEEE Dataport(CC BY 4.0) |
| EyePACS(Kaggle DR) | 约 88,702 张 | 五级分级 | Kaggle |
| APTOS 2019 | 3,662 张训练 | 五级分级 | Kaggle |
| Messidor-2 | 1,748 张 | 可转诊二分类 | 官方申请 |
| ODIR-5K | 7,000 张 | 八类眼病多标签 | 官方页面 |
| Retinal Lesions | 1,593 张 | 八类病灶掩码 | 官方申请 |
§8.5 关键论文 Top 6
- Zhou Y, Wang B, Huang L, Cui S, Shao L. A Benchmark for Studying Diabetic Retinopathy: Segmentation, Grading, and Transferability. IEEE TMI, 40(3):818-828, 2021. DOI 10.1109/TMI.2020.3037771 — 数据集原始论文,定义三大基准任务。
- Porwal P, et al. Indian Diabetic Retinopathy Image Dataset (IDRiD). Data, 3(2):25, 2018 — 像素级标注先例,FGADR 常与其做对比与跨域实验。
- Son J, et al. High-fidelity diabetic retina fundus image synthesis from freestyle lesion maps. 2023. PMID 36874499 — 独立复检发现粗标注个体并清洗出 1,494 张子集。
- Rana A, et al. SSMD-UNet: semi-supervised multi-task decoders network for diabetic retinopathy segmentation. Sci Rep, 2023. DOI 10.1038/s41598-023-36311-0 — 半监督多任务分割代表工作。
- Mok TCW, et al. Cross Feature Fusion of Fundus Image and Generated Lesion Map. ACCV 2024 — 基于病灶图生成的跨特征融合,FGADR 分割 Dice 0.89。
- On the Out of Distribution Robustness of Foundation Models in Medical Image Segmentation. arXiv:2311.11096 — 量化 IDRiD↔FGADR 跨域崩塌与基础模型鲁棒性。
§8.6 社区活跃度
- 官方 GitHub 仓库自 2020-11 后无实质更新(仅 README 指向项目页),官方维护强度低。
- 数据集被多条研究线持续使用:LVM-Med(基础模型)、noise-adapter(标签噪声)、条件 StyleGAN 合成(Son et al.)、SSMD-UNet(半监督)、ACCV 2024(生成增强)等。
- OpenDataLab/OpenXLab 自 2022-11 起提供国内镜像,降低获取门槛。
- 无官方排行榜/竞赛;社区比较依赖论文内 baseline 与各自划分(坑点 3)。
§8.7 生态快照
| 资源 | 类型 | 链接 | 推荐理由 |
|---|---|---|---|
| 官方项目页 | 发布页 | csyizhou.github.io/FGADR | 首选下载与引用入口 |
| GitHub 仓库 | 代码仓库 | csyizhou/FGADR-2842-Dataset | 官方 Issue 渠道 |
| OpenDataLab 镜像 | 镜像 | OpenDataLab/FGADR | 国内网络快速获取 |
| IEEE TMI 论文页 | 论文 | ieeexplore.ieee.org/document/9257400 | 权威引用与元数据 |
| arXiv 预印本 | 论文 | arXiv:2008.09772 | 免费全文(含基准表) |
| LVM-Med 划分脚本 | 第三方代码 | duynhm/LVM-Med | 现成划分与预处理参考 |
| noise-adapter | 第三方代码 | gist-ailab/noise-adapter | 标签噪声研究的加载实现 |
§9 相关资源与引用
§9.1 官方资源
- 项目主页(下载入口):csyizhou.github.io/FGADR
- GitHub 仓库:csyizhou/FGADR-2842-Dataset
- 论文全文(免费):arXiv:2008.09772;IEEE TMI 正式版
- 国内镜像:OpenDataLab/FGADR
- PubMed 收录:PMID 33180722
§9.2 引用指南
使用 FGADR 发表成果时,必须引用原始论文(Zhou et al., 2021, IEEE TMI);若使用了清洗子集或第三方划分,还应引用对应工作(如 Son et al., 2023)。商业用途前联系权利方确认授权范围。
§9.3 BibTeX 引用块
@article{zhou2021fgadr,
title = {A Benchmark for Studying Diabetic Retinopathy: Segmentation,
Grading, and Transferability},
author = {Zhou, Yi and Wang, Boyang and Huang, Lei and Cui, Shanshan
and Shao, Ling},
journal = {IEEE Transactions on Medical Imaging},
volume = {40},
number = {3},
pages = {818--828},
year = {2021},
publisher = {IEEE},
doi = {10.1109/TMI.2020.3037771}
}
@misc{zhou2020fgadr,
title = {A Benchmark for Studying Diabetic Retinopathy:
Segmentation, Grading, and Transferability},
author = {Zhou, Yi and Wang, Boyang and Huang, Lei and Cui, Shanshan
and Shao, Ling},
year = {2020},
eprint = {2008.09772},
archivePrefix = {arXiv},
primaryClass = {cs.CV},
doi = {10.48550/arXiv.2008.09772}
}
§9.4 数据获取方式回顾
官方项目页直接下载(无注册审核门槛);国内网络建议 OpenDataLab 镜像;Seg-set 亦可按 SSMD-UNet 论文记载向通信作者合理请求。下载前确认磁盘余量(建议预留 10 GB),下载后按 §4.0 目录树核对完整性。
§9.5 常见问题 FAQ
Q1:FGADR 和 IDRiD 应该选哪个做病灶分割?
规模与分辨率二选一:要训练集大小和病灶类别覆盖(六类含 NV/IRMA)选 FGADR(1,842 张、1280×1280);要高分辨率与 DME 标注选 IDRiD(81 张、4288×2848)。严谨的做法是两个都用:FGADR 训练、IDRiD 做外部验证(见坑点 8)。
Q2:掩码 PNG 里的像素值到底怎么对应病灶?
官方未提供像素值映射文档。工程上用 np.unique 现场确认像素值集合并动态映射(§6.3 的做法);如与社区通用约定不符,以官方发布内容为准,勿硬编码假设。
Q3:能把 Seg-set 的分级标签和 Grade-set 合并训练一个更大的分级模型吗?
可以合并 Seg-set + EyePACS 训练(这正是官方 Task 2 训练源),但 Grade-set 必须整集留作测试,不得参与训练、验证或早停(坑点 7)。
Q4:论文引用次数和影响力如何?
原始论文发表于 IEEE TMI(医学影像领域顶刊),Scopus 收录引用 231+(截至 2026-09,PlumX 数据),被基础模型、标签噪声、图像合成等多个方向作为基准使用。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 环节 | 模型/工具 | 用途 |
|---|---|---|
| 内容起草 | 大语言模型写作助手 | 章节撰写、代码示例生成 |
| 事实核验 | 联网检索工具 | 官方页面、论文与指标数据交叉核实 |
§10.2 AI 参与范围
AI 参与本页面的资料检索、初稿撰写与代码草拟;全部医学编码映射、偏倚结论、DAIMS 评分与外部验证数字经人工交叉审核(见 §10.4)。AI 未接触任何 FGADR 原始数据文件,本页面不包含 AI 生成的研究结论。
§10.3 输入来源列表
- Zhou Y, Wang B, Huang L, Cui S, Shao L. A Benchmark for Studying Diabetic Retinopathy: Segmentation, Grading, and Transferability. IEEE TMI, 40(3):818-828, 2021. DOI 10.1109/TMI.2020.3037771
- Zhou Y, et al. arXiv:2008.09772(2020,论文预印本全文,含基准表)
- IEEE Xplore 收录页 https://ieeexplore.ieee.org/document/9257400(卷期页码与发表日期)
- PubMed 收录页 https://pubmed.ncbi.nlm.nih.gov/33180722/(MEDLINE 摘要)
- Son J, et al. High-fidelity diabetic retina fundus image synthesis from freestyle lesion maps. 2023. PMID 36874499(粗标注发现与 1,494 张子集)
- Rana A, et al. SSMD-UNet: semi-supervised multi-task decoders network for diabetic retinopathy segmentation. Sci Rep, 2023. DOI 10.1038/s41598-023-36311-0(NV/IRMA 稀疏统计与 70/5/25 划分)
- On the Out of Distribution Robustness of Foundation Models in Medical Image Segmentation. arXiv:2311.11096(跨域 Dice 数字)
- Mok TCW, et al. Cross Feature Fusion of Fundus Image and Generated Lesion Map. ACCV 2024(Swin U-Net Dice 0.89)
- University of Waterloo 学位论文 https://uwspace.uwaterloo.ca/bitstreams/34c135bb-f496-4a3c-9fab-85180cc0e149/download(1280×1280 分辨率与病灶类别对照)
- 官方 GitHub 仓库 https://github.com/csyizhou/FGADR-2842-Dataset(仓库历史与项目页指向)
- 官方项目页 https://csyizhou.github.io/FGADR/(官方发布入口)
- OpenDataLab/OpenXLab 镜像页 https://openxlab.org.cn/datasets/OpenDataLab/FGADR(镜像收录信息)
- LVM-Med 数据划分脚本 https://huggingface.co/duynhm/LVM-Med/blob/main/datasets_split/FGADR_split.py(目录结构与命名)
- gist-ailab/noise-adapter https://github.com/gist-ailab/noise-adapter/blob/main/utils/fgadr.py(CSV 格式佐证)
- PlumX 指标页 https://plu.mx/plum/a/1ODQpXLnVW5_Pl95PqZIqkjHxDZXssgVoSzJjyARrMA(Scopus 引用 231)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与规模数字 | 千方病案医学编辑部 | 对照论文摘要与官方仓库逐数核对 | ✅ 已验证 |
| §2 医学背景与编码映射 | 千方病案医学编辑部 | ICD-11/SNOMED 检索与分级协议核对 | ✅ 已验证 |
| §3-§4 规格与数据结构 | 千方病案医学编辑部(数据工程) | 第三方加载代码交叉确认目录与 CSV 格式 | ✅ 已验证 |
| §5 划分与泄漏分析 | 千方病案医学编辑部(数据工程) | 对照官方协议原文与社区划分 | ✅ 已验证 |
| §6 就绪指南与坑点 | 千方病案医学编辑部(数据工程) | 代码逻辑走查、坑点溯源至文献 | ✅ 已验证 |
| §7 质量评估与 DAIMS | 千方病案医学编辑部 | 偏倚证据链逐条回溯 | ✅ 已验证 |
| §8 基准与生态 | 千方病案医学编辑部 | 基准表与论文 Table II/IV/V 对齐 | ✅ 已验证 |
§10.5 AI 生成章节标注
全部章节由 AI 辅助起草;§0 审核声明、§7.7 DAIMS 评分与 §10 声明卡由人工编辑主导并最终定稿。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)。
页面状态:published(全部内容已完成审核并发布)
