PALM — 病理性近视眼底多任务分割 AI-Ready Wikipedia | 千方病案医数集

1,200 张眼底照 · 病理性近视分类+病灶/视盘分割+中央凹定位

来源 iChallenge / Zhongshan Ophthalmic Center & Baidu(IEEE DataPort / FigShare 存档) url: https://palm.grand-challenge.org发布时间: 2026-09-09最后更新: 2026-09-09 阅读 2

信息速览

数据集名称PALM — 病理性近视眼底多任务分割 AI-Ready Wikipedia | 千方病案医数集
数据类型1,200 张眼底彩照,400/400/400 官方划分,4 项任务多标签,研究用途注册获取
规模720 名受试者 / 1,200 只左眼眼底照
接入方式iChallenge / Zhongshan Ophthalmic Center & Baidu(IEEE DataPort / FigShare 存档) url: https://palm.grand-challenge.org
AI 就绪度

PALM — 病理性近视眼底多任务分割挑战 AI-Ready Wikipedia


INFOBOX

数据集名称 PALM(Pathologic Myopia Challenge 2019)
英文全称 PAthoLogic Myopia Challenge 2019
别名/简称 PALM、PALM19、iChallenge-PM、PALM 病理性近视眼底分割挑战
疾病分类 病理性近视 / 高度近视致视网膜病变(ICD-11:9B76 Degenerative high myopia,含 9B76.1 Myopic maculopathy、9B76.4 Retinal detachment in high myopia;myopia 本体 9D00.0;ICD-10 对应 H44.2 / H52.1,详见 §2.1)
SNOMED CT 32022003 Degenerative progressive high myopia(同义含 Pathological myopia)/ 57190000 Myopia(详见 §2.1)
数据模态 彩色眼底照相(Color Fundus Photography, CFP)+ 像素级分割掩膜(BMP)+ 中央凹坐标
AI 任务类型 病理性近视二分类、视盘检测与分割、中央凹定位、病灶(斑片状萎缩 / 视网膜脱离)检测与分割
样本总数 1,200 张眼底照 / 720 名受试者(左眼)/ 官方 400+400+400 划分
数据大小 约 1.7 GB(社区 JPEG 镜像版);原版 JPEG 眼底图 + BMP 掩膜
数据格式 JPEG(8bit 眼底图)/ BMP(8bit 掩膜)/ XLSX(分类标签、中央凹、补充信息)
许可证 研究/教育用途,非商业;重分发或商用需作者许可,正式获取需注册
访问级别 注册后开放(Grand Challenge / IEEE DataPort 申请;2024 年 Scientific Data 重发至 FigShare 可公开访问)
DUO 标签 GRU(研究用途,非商用,需注册声明)
语言 英文(标注/文档)/ 中文(社区资料)
首发日期 2019-04(ISBI 2019 挑战);2019-07-08 IEEE DataPort 归档
最后更新 2024-01-20(Scientific Data 描述论文 + FigShare 重发版)
发布机构 iChallenge 系列(百度灵医 / 中山大学中山眼科中心 / 维也纳医科大学等);图像由中山眼科中心采集
官方主页 https://palm.grand-challenge.org
下载地址 https://doi.org/10.21227/55pk-8z03(IEEE DataPort)
DOI 10.21227/55pk-8z03(数据)/ 10.1038/s41597-024-02911-2(Scientific Data 描述论文)
引用次数 数据集已用于 100+ 篇论文(Scientific Data 2024 官方自述);其 2024 描述论文获引 38+(Google Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方固定划分+基线代码齐全,可直接训练;扣分项:掩膜反相(前景=0)需自行反转、双相机分辨率不齐需对齐、病灶稀有小类样本少
页面状态 published

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

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11/SNOMED CT 映射、病理性近视与高度近视定义、临床任务定义、金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(掩膜反相约定、双分辨率设备字段)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

审核方式:交叉审核

利益冲突声明:千方病案医数集与百度、中山大学中山眼科中心、维也纳医科大学、IEEE DataPort、FigShare 及 iChallenge 无任何商业利益关联。本页面不销售 PALM 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构任何形式资助。

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。PALM 官方获取需在 Grand Challenge / IEEE DataPort 以真实完整信息注册并同意挑战规则,匿名或重复注册会被移除;2024 年 Scientific Data 版本在 FigShare 提供公开访问。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

PALM 是 2019 年在国际生物医学成像研讨会(ISBI 2019)上推出的病理性近视(Pathologic Myopia,PM)眼底公开数据集,由百度与中山大学中山眼科中心等共同构建,隶属眼科 iChallenge 系列(iChallenge-PM)。它提供 1,200 张彩色眼底照片,官方固定划分为训练 400 / 验证 400 / 测试 400 张——这是眼科医学图像挑战社区里"小而精"的经典规模,与青光眼数据集 REFUGE 同源同构。

它的独特价值在于不止有疾病标签:除"病理性近视 / 非病理性近视"二分类外,每张图还带视盘像素级分割、中央凹坐标,以及两类视网膜病灶(斑片状萎缩与视网膜脱离)的逐像素掩膜。这种"分类+解剖结构+病灶"多任务捆绑,让研究者能用同一批眼底图同时训练并解释模型。

你可以用它来:做病理性近视风险分类、复现 ISBI 2019 的视盘分割与中央凹定位基线、在极稀疏病灶上研究小样本分割、或与 REFUGE / ADAM 组合做跨中心泛化。开始前务必读 §6.5 的 8 个坑点——尤其是"掩膜反相(病灶=0)"这个最容易踩的陷阱。

关键速记(详情见对应章节):

  • 规模:1,200 张眼底照 / 720 名受试者左眼 / 官方 400+400+400 划分(§1.1、§3.2)。
  • 四任务:PM 二分类、视盘分割、中央凹定位、病灶分割(§2.3、§8.1)。
  • 两类病灶:斑片状萎缩(含视盘周围)、视网膜脱离(§2.2)。
  • 相机:Zeiss Visucam 500(1,047 张)+ Canon CR-2(153 张)(§3.9)。
  • 金标准:7 医生标注 + ≥1 资深仲裁(§2.6、§3.6)。
  • 最该避开的坑:掩膜反相(前景=0)、掩膜缺失≠空、脱离仅 24 张阳性(§6.5)。

§1.1 摘要

PALM(PAthoLogic Myopia Challenge,iChallenge-PM)是一个针对病理性近视自动诊断与病灶分析的多任务眼底影像数据集。数据来自中国中山大学中山眼科中心的高度近视检查队列,回顾性采集 720 名受试者左眼、共 1,200 张彩色眼底照相(单视野或双视野拍摄),经中山眼科中心伦理委员会批准后去标识化发布。图像按受试者分组、无跨子集泄漏地划分为训练 400、验证 400、测试 400。相机混合两台眼底相机:1,047 张由 Zeiss Visucam 500 拍摄(2,124×2,056 像素),153 张由 Canon CR-2 拍摄(1,444×1,444 像素)。每个图像的疾病参考标签来自病历结合 OCT、视野等综合判定,非仅眼底图;训练子集文件名编码了 PM / 高度近视(HM)/ 正常三类细标签,但官方任务为"PM 与非 PM"二分类。此外,7 名十年以上资历的眼科医生独立完成视盘分割、中央凹定位与两类病灶(斑片状视网膜萎缩、视网膜脱离)的勾画,再由 ≥1 名更资深的上级医生仲裁合并为金标准。数据首次公开于 ISBI 2019 挑战赛,2019-07-08 归档于 IEEE DataPort(DOI 10.21227/55pk-8z03),2024-01-20 由 Fang 等人在 Nature 旗下 Scientific Data 发表完整描述论文(DOI 10.1038/s41597-024-02911-2)并上传 FigShare,官方自述已支撑 100 余篇眼底 AI 论文。

技术读解:PALM 在"影像 + 临床定标 + 多专家标注"三者上都做到可追责——疾病标签不以眼底图自证(避免"标签循环"),掩膜由多人仲裁(降低单一医生主观性),掩膜极性约定(前景=0)虽反直觉却是挑战赛一致的规则。这让它既适合直接做有监督训练,也适合做"标注不确定性、任务间混淆、小样本病灶"这一类 AI 可信度研究。

§1.2 战略价值分析

填补 PM 数据空白维度:在 PALM 之前,病理性近视——高度近视人群中主要的致盲性视网膜退变——几乎没有公开可用的带精细标注眼底数据集,这直接限制了该方向的 AI 研究。Scientific Data 描述论文明确将其定位为"首个可供 AI 研究者训练病理性近视自动诊断与筛查模型的数据集"。它把临床迫切性与公开性第一次结合:纳入大量在常规数据集中会被剔除的"低质量"真实影像(如因萎缩/出血/玻璃体混浊而视盘黄斑模糊的图),复现了真实筛查场景,这对提升算法鲁棒性有独特价值。

多任务互补范式维度:PALM 是少数同时提供"疾病二分类标签 + 解剖结构(视盘/中央凹)+ 病灶(萎缩/脱离)像素标注"的眼底公开集。官方基线显示 PM 病灶会干扰视盘分割与中央凹定位、但萎缩分割在 PM 中反而更好——这种"任务间互补"证据启发多任务/可解释方法设计。作者也明确建议与同系列 REFUGE(青光眼)、ADAM 组合使用,为跨中心、跨疾病迁移提供了现成素材,是"用互补特征提升下游结果"的典型示范。

教学与复现基准维度:得益于 400/400/400 的小规模与官方基线代码开源,PALM 是"低门槛可复现"的医学影像基准——单 GPU 即可在分钟到小时级复现一次分类或分割实验。这让它非常适合作为教学数据集带学生入门眼底 AI、验证新损失/新结构、或做方法学消融(采样、不平衡、域迁移)的快速原型平台。其"工程正确性决定成绩"的特点(掩膜极性、缺失处理、双分辨率)又恰好构成训练数据工程师数据体检能力的绝佳教材——8 个坑点几乎对应 8 条可迁移到任意影像分割集的经验。

§1.3 同类数据集横向对比

数据集 规模 模态 标注类型 任务/疾病 核心差异化
PALM(本文) 1,200(400/400/400) 彩色眼底照 PM 二分类+视盘分割+中央凹+萎缩/脱离病灶分割 病理性近视 首个 PM 公开集;多任务捆绑;含大量"低质量"真实影像
REFUGE(iChallenge,青光眼) 1,200(400/400/400) 彩色眼底照 青光眼分级+视盘/视杯分割 青光眼 与 PALM 同 iChallenge 同构;常用于跨集预训练
IDRiD 516(DR 病灶集) 彩色眼底照 DR 病灶像素标注+分级+OD/中央凹定位 糖尿病视网膜病变 含微动脉瘤/出血/硬渗/软渗等病灶(参赛者常混合使用)
ADAM(iChallenge) 眼底 AMD 挑战 彩色眼底照 病灶/解剖结构标注 年龄相关性黄斑变性 与 PALM 同源建议组合泛化
ODIR 数千张级(2019 Grand Challenge) 彩色眼底照 多病种标签 八类眼病分类 分类为主、无精细像素病灶标注

注:PALM 病灶只标注斑片状萎缩与视网膜脱离两类;"出血 / 渗出 / 微动脉瘤"等糖尿病视网膜病变病灶属于 IDRiD,勿混淆。表格仅列可核实的对比要点,具体规模以各自官方为准。

§1.4 版本演进时间轴

时间 事件
2018 图像在中山大学中山眼科中心高度近视检查队列中回顾性采集(伦理批准)
2019-02 至 04 PALM 预选赛在线进行,约 345 支队伍注册参赛(媒体口径)
2019-04-08 ISBI 2019(意大利威尼斯)现场挑战赛;总成绩 = 0.3×离线下成绩 + 0.7×现场成绩
2019-07-08 IEEE DataPort 正式归档(Fu et al., DOI 10.21227/55pk-8z03),挑战数据对外提供
2019-07-19 IEEE DataPort 记录最后更新(约 4,894 次浏览)
2020-02-01 Grand Challenge 重开提交与评测,在线榜每周更新
2024-01-20 Fang et al. 在 Scientific Data(11:99)发表描述论文(DOI 10.1038/s41597-024-02911-2),数据重发至 FigShare(10.6084/m9.figshare.21299148.v1)

§1.5 典型 AI 应用场景

  1. 病理性近视风险分类:以训练文件名细标签为起点、按官方"PM vs 非 PM"二分类评测(AUC),是筛查 PM 最直接的入口任务。
  2. 视盘分割与中央凹定位:解剖结构任务,用于辅助青光眼、近视性视神经病变的结构量化,也是跨数据集迁移(REFUGE)的常用预训练任务。
  3. 病灶检测与分割(小样本挑战):斑片状萎缩(含视盘周围萎缩)与视网膜脱离的逐像素分割——脱离阳性样本极少,是研究极端类别不平衡与稀疏病灶的好素材。
  4. 多任务互补与可解释性研究:利用"分类标签+结构+病灶"同时训练,研究任务间信息互补与模型可解释(哪些病灶驱动 PM 判定)。
  5. 低质量影像鲁棒性研究:官方用自动质量模型把约 74.9% 的 PM 图判为 reject,但作者强调它们代表真实临床,可用于训练能扛模糊/遮挡眼底图的鲁棒模型。
场景 入口数据 评测指标 关键坑点
PM 分类 train 400 张 + pm_label AUC 文件名细标签口径(坑点 4)
视盘/中央凹 train 视盘掩膜 / 中央凹坐标 Dice / 平均欧氏距离 掩膜反相与缺失(坑点 1/3);PM 干扰结构
病灶分割 train 萎缩/脱离掩膜 F1 / Dice 脱离稀疏(坑点 6);用 F1 别用纯 Dice
多任务/可解释 全标签 组合指标 双分辨率 batch(坑点 5)
低质量鲁棒 含 reject 图全量 分层指标 别把 reject 当脏数据删(坑点 7)

§2 医学背景

§2.1 疾病编码映射

术语(中/英) ICD-11 ICD-10 SNOMED CT 备注
病理性近视 / Pathological Myopia(与退行性近视同义) 9B76 Degenerative high myopia(含同义词) H44.2 Degenerative myopia 32022003 Degenerative progressive high myopia 目前 ICD-11 主术语仍为"退行性高度近视",病理学界建议未来以 Pathologic myopia 取代
近视性黄斑病变 / Myopic maculopathy 9B76.1 (并入 H44.2 谱系) (归入 32022003 下属) META-PM 分期(见 §2.2)
高度近视视网膜脱离 / Retinal detachment in high myopia 9B76.4 H33.0 等 (病灶学概念) PALM 病灶分割的 detachment 对应此并发症
近视 / Myopia(屈光本底) 9D00.0 H52.1 57190000 Myopia 高度近视定义见 §2.2;本底编码供参照
病理性近视分类目标(非 PM 侧) PALM 非 PM 组含高度近视(HM)与正常眼底

注:本文按文献惯例将 PM 主映射到 ICD-11 9B76(Degenerative high myopia)及其 ICD-10 对应 H44.2,SNOMED CT 32022003。ICD-11 尚无独立的 “Pathologic myopia” 主码,术语学界仍在推动修订;使用时请留意这一编码学细节。

编码口径速查(便于在病历/术语系统里对齐):

  • PM 的 SNOMED 主码为 32022003(Degenerative progressive high myopia,同义词含 Pathological myopia / Degenerative myopia)。
  • ICD-11 下 PM 并发症分散在 9B76 谱系(黄斑病变 9B76.1、高度近视视网膜脱离 9B76.4 等),无单一聚合码。
  • "高度近视"是屈光阈值概念(≤ −6.00 D 或眼轴 ≥ 26.5 mm),本身不是独立 ICD-11 结构码,通常落到 9D00.0 Myopia 并加注程度。
  • 在 PALM 里,"PM vs 非 PM"的二分不等价于任一单一 SNOMED 概念——非 PM 侧混有 9D00.0 与正常眼底,映射到术语系统时要拆开表达。

§2.2 疾病简介与流行病学

病理性近视(PM)是高度近视人群中常见的致盲性视网膜退行性疾病。屈光分类上,高度近视通常定义为等效球镜屈光度 ≤ −6.00 D 或眼轴 ≥ 26.5 mm(PALM 官方采用此阈值口径)。随着近视屈光度加深与眼轴过度延长,眼底后极部可发生不可逆病理性改变,即进展为病理性近视。其典型的解剖并发症分布在前述三个部位:①后极部——视网膜脱离、后巩膜葡萄肿、脉络膜视网膜退行变;②视盘——视盘周围萎缩、倾斜;③近视性黄斑病变——漆裂纹、Fuchs 斑、脉络膜新生血管(CNV)等。临床上最常用的分级是 2015 年 META-PM 共识(Ohno-Matsui 等):近视性黄斑病变分 0-4 级(0 无病变、1 豹纹状、2 弥漫性萎缩、3 斑片状萎缩、4 黄斑萎缩),并叠加 lacquer cracks、近视性 CNV、Fuchs 斑三类"plus"特征;通常 ≥2 级或出现任一 plus 特征判为 PM。

从解剖改变看,PM 眼轴过度延长主要引发三层结构的改变:①后巩膜与前部——后巩膜葡萄肿、玻璃体后脱离、视网膜裂孔乃至视网膜脱离;②视盘区——视盘倾斜、视盘周围萎缩(peripapillary atrophy),此区病变常干扰视盘自动分割,也是 PALM 中 56 张图视盘无法可靠勾画的原因之一;③黄斑区——豹纹状眼底(tessellation)、弥漫性/斑片状脉络膜视网膜萎缩、漆裂纹、近视性脉络膜新生血管(CNV)、Fuchs 斑、黄斑劈裂与黄斑孔。眼底照相上的"斑片状萎缩"对应 META-PM 分级 3 级,"视网膜脱离"对应 9B76.4 的急症范畴。PALM 的病灶标注正是选了这两类在眼底彩照上最典型、也最常干扰解剖结构识别的病变(另一常见干扰源为玻璃体混浊)。

流行病学层面:近视已成为全球公共卫生负担,2020 年全球约 30% 人口近视,预计 2050 年升至约 50%;近视人群约 10% 为高度近视(另一资料口径称约 35% 的近视者存在高度近视)。高度近视若不加以控制随访,可发展为 PM 并造成不可逆视力损害。在全球范围内,尤其是东亚与东南亚近视高流行地区,PM 是工作年龄人群不可逆视力损害的重要原因之一,早期筛查、定期随访与 AI 辅助诊断因此具有重要公共卫生意义。PALM 正是瞄准这一"早筛能减少眼底病灶损害、防止视力丧失"的临床需求而构建:其纳入大量结构不清的真实影像,正是为了训练能在真实筛查中工作的模型,而非只在"挑选过的清晰图"上表演。

对 PALM 分类口径的临床辨析:PALM 把分类做成"PM vs 非 PM",其中"非 PM"又细分为高度近视(HM)与正常眼底——即"未达 PM 的近视眼底"与"几乎无近视改变的眼底"被归为同一负类。这一设计与临床分层一致:临床上高度近视与病理性近视的边界本就模糊(都可有豹纹状、盘周萎缩),医生真正关心的是"是否已进展到不可逆的 PM"。因此 PALM 的 PM 阳性多为严重 PM(病灶显著),分类相对易学(AUC 可逼近 0.99);真正困难的是边界上"重度 HM vs 早期 PM"的判别,而训练细标签(P/H/N)恰为研究这一细分提供了素材。

§2.3 临床任务定义

临床环节 数据集内任务 输入 输出 临床意义
筛查 PM 二分类 单张眼底照 PM / 非 PM 风险评分 从高度近视人群中筛出已进展为 PM 者
结构量化 视盘检测与分割 眼底照 视盘像素掩膜 视盘形态量化,辅助青光眼/近视性视神经改变分析
结构量化 中央凹定位 眼底照 黄斑中央凹坐标 (x,y) 黄斑区定位,辅助病变定标与随访
病灶分析 病灶分割 眼底照 萎缩区/脱离区像素掩膜 定位需干预的视网膜病灶(脱离属急症)

PALM 的四个官方子任务基本对应眼科"筛查(分类)→ 结构定位(视盘/中央凹)→ 病灶分割"完整管线,是"端到端可解释眼底分析"的最小可训练闭环。

四任务的临床分工逻辑:分类回答"是否 PM"(决定是否转诊/治疗),视盘/中央凹回答"解剖结构在哪"(为量化病变与随访定标,近视眼常有视盘倾斜/盘周萎缩干扰结构识别),病灶分割回答"哪里有需处理的病变"(脱离须急处置,萎缩提示进展风险)。把三者放在同一数据上,可训练出"既能筛出 PM、又能解释依据"的模型——这正是 PALM 相较纯分类眼底集(如 ODIR、AIROGS)的核心差异。对希望用 AI 做"可视化辅助诊断"的研究者,这套"结构锚点 + 病灶证据"的组合是理想起点。

§2.4 患者人群表

维度 内容
来源 中山大学中山眼科中心高度近视检查队列(回顾性),中国广东广州
采集时间 2018 年前后(数据取自检查队列,发布于 2019)
受试者 720 人(左眼),48.1% 为男性
年龄 平均 37.5 ± 15.91 岁
种族 中国人(族裔单一)
眼别 仅左眼;每眼保留 1-3 张合格眼底照
就医类型 高度近视门诊/检查队列(非随机人群筛查)
设备 Zeiss Visucam 500(1,047 张,2,124×2,056)/ Canon CR-2(153 张,1,444×1,444)
拍摄视野 单视野(视盘与黄斑中点居中)或双视野(分别以视盘、黄斑为中心)

人群解读:该队列是"就诊/检查人群"而非随机人群筛查——受试者因高度近视就医或体检,故 PM 占比偏高(637/1200 ≈ 53%),远高于一般人群筛查中的 PM 流行率。这意味着:①数据集对"在高度近视就诊人群中筛 PM"特别贴合;②若你的目标是社区普筛(PM 流行率低得多),直接用它训练会造成阳性先验偏差,需做先验校准或补充阴性样本;③平均年龄约 37.5 岁且含较年轻受试者,与东亚近视高发的年龄结构部分一致,但与中老年为主的黄斑病变人群不同。

§2.5 临床价值

PALM 的临床价值在于"让 PM 早筛可被 AI 训练"。PM 一旦漏检可能发展为不可逆视力损害,而眼底照相(CFP)是目前该病最具成本效益的影像模态。通过提供带病灶/解剖标注的公开 PM 数据,研究者可以训练出能解释"模型为何判 PM"(萎缩、脱离、结构变形)的模型,帮助临床医生综合判读并落实早期筛查与定期随访。作者特别指出:临床中大量真实眼底图(因萎缩、出血、玻璃体混浊而结构不清)恰恰是既往公开集刻意剔除的对象,而 PALM 保留它们,使训练出的模型更贴近真实筛查场景。

§2.6 金标准描述

维度 内容
划分 官方固定 400/400/400(train/validation/test),同患者同子集
疾病标签来源 病历/OCT/视野等综合判定(非仅眼底图),PM 与 HM/正常在训练文件名中编码
标注方式 7 名眼科医生独立标注 → ≥1 名资深上级医生仲裁合并(多数表决/资深确认)
病灶勾画 自由闭合曲线(区别于 SUSTech-SYSU 的有向曲线,更贴近真实边界)
掩膜格式 BMP 8bit;病灶/视盘区域 = 0(黑),背景 = 255(白)——反相约定,见 §6.5 坑点 1
中央凹 医生标注坐标;不可见时记 (0,0)
脱敏 发布前移除一切可识别患者信息

§3 数据集规格

§3.0 版本抉择矩阵

PALM 存在两个主要发布版本,选择依据你的用途:

你的需求 推荐版本 说明
复现挑战赛 / 对齐官方评测 IEEE DataPort 2019 原版(DOI 10.21227/55pk-8z03) 与 Grand Challenge 提交/榜单口径一致;需注册获取
最新最规范的训练 FigShare 2024 重发版(10.6084/m9.figshare.21299148.v1) Scientific Data 配套;含分类/中央凹/补充三个 XLSX 及更清晰目录
快速跑通/教学演示 社区 Hugging Face JPEG 镜像(约 1.72 GB) 已把掩膜归一化为 255=前景,但需自核;非官方,勿用于正式评测
跨数据集中预训练 结合 REFUGE / ADAM / IDRiD 官方建议互补结构任务

选版本时务必先确认掩膜极性是否已被归一化(原版前景=0、背景=255;部分社区版已反转)。跨版本混用前做极性一致性校验。

§3.1 模态详情

属性 内容
模态 二维彩色眼底照相(2D RGB CFP),标准非增强眼底摄影
格式 JPEG 8bit/通道(眼底图);BMP 8bit(掩膜,单通道二值)
分辨率 2,124×2,056(Zeiss Visucam 500,1,047 张)/ 1,444×1,444(Canon CR-2,153 张)
视野 约 45° 视野眼底图像;单视野或双视野拍摄
掩膜 与对应眼底图同尺寸的二值图:视盘、萎缩、脱离各一张(该结构存在时)

§3.2 按子集样本数表

子集 眼底图 PM 非 PM 视盘掩膜* 萎缩掩膜* 脱离掩膜*
train(训练) 400 213 187 381 311 12
validation(验证) 400 211 189 379 271 6
test(测试) 400 213 187 384 288 6
合计 1,200 637 563 1,144 870 24

* 掩膜计数为"该结构存在于图中"的阳性数(镜像复核口径);结构不存在的图像无对应掩膜(非全零背景),详见 §6.5 坑点 3。脱离阳性极稀疏(仅 24 张),是极端类别不平衡的来源。

§3.3 文件格式表

文件 类型 位深 说明
眼底图 JPEG 8bit×3 彩色眼底照片,命名 H/V/T + 编号(train/val/test)
视盘掩膜 BMP 8bit 单通道 {0,255};0=视盘
萎缩/脱离掩膜 BMP 8bit 单通道 {0,255};0=病灶
Classification Labels XLSX PM=1 / 非PM=0
Fovea Localization XLSX 中央凹 (x,y);不可见记 (0,0)
Supplementary Information XLSX 设备(Zeiss=1/Canon=2)、拍摄中心(1 视盘/2 黄斑/3 中点)

§3.4 存储大小

官方原版由 JPEG 眼底图与 BMP 掩膜构成,压缩后体量较小;社区 JPEG 镜像版(1,200 行,含掩膜转换)文件总大小约 1.72 GB。建议下载后为掩膜反相与双分辨率对齐预留约 2-4 倍工作空间。

§3.5 标注方式

全人工标注:图像级 PM 参考标签基于病历+OCT/视野综合判定;视盘、病灶、中央凹由 7 名十年以上眼底医生独立标注,再经资深上级医生仲裁合并为单一金标准。病灶用自由闭合曲线勾画。疾病分类为高度近视/正常眼底者也经医生按参考标准确认。

逐结构标注方式明细:

结构 标注形态 标注者 特殊规则
疾病标签(PM/非 PM) 图像级标量 依据病历+OCT/视野综合判定 不依赖单一眼底图外观
视盘 像素掩膜(闭合轮廓) 7 医生 → 资深仲裁 病灶遮蔽时按可辨边界勾画
斑片状萎缩(含视盘周围) 病灶掩膜(自由闭合曲线) 7 医生 → 资深仲裁 萎缩渐晕边界主观性高于脱离
视网膜脱离 病灶掩膜(自由闭合曲线) 7 医生 → 资深仲裁 边界锐利,通常只出现在 PM
中央凹 点坐标 7 医生 不可见记 (0,0)

标注流程:医生使用专用标注工具以闭合曲线勾画 → 多人独立标注 → 资深上级医生把各份标注合并/复核为金标准 → 病灶与视盘走同一套修订流程。图像质量亦经自动 MCF-Net(good/usable/reject)分级作为附加信号,但不替代人工审核。

§3.6 标注者资质与一致性

  • 初标:7 名中山眼科中心高年资(≥10 年)眼底专业医生独立标注。
  • 终审:≥1 名更资深上级医生对七份标注合并与复核(多数表决式仲裁)。
  • 一致性:病灶与解剖结构共享同一套修订流程;官方公布的是合并后的金标准掩膜,未单列各医生差异(无逐医生统计公开)。

给一致性使用者的提示:①合并金标准比任何单一医生更稳健,理论上自带"多专家去噪",但您拿不到票方差,想研究标注不确定性的需自行设计;②病灶边界的"内在噪声"(萎缩渐晕 vs 脱离锐利)会在 Dice 上限上设一个天花板——报指标时别把接近这个天花板误当模型已饱和;③疾病标签来自病历综合,因此"分类模型学到的"是"临床综合判断在眼底影像上的投影",解读 AUC 需注意此口径。

§3.7 采集周期

图像自中山眼科中心高度近视检查队列回顾性采集;每受试者同一次检查时间内取 1-3 张合格眼底图。具体逐例拍摄日期未在发布包中逐张公开(描述论文仅报告队列整体口径),涉及精确时间戳的时序研究不支持。

§3.8 地域覆盖

单中心、单国别:中国广东省广州市中山大学中山眼科中心。所有受试者为中国人、左眼。跨种族/跨地区泛化需自行外部验证(见 §7.3、§7.8)。

地域对泛化的三层含义:①受试者族群(中国人为主)意味着肤色/虹膜色素/视网膜色素分布等影像学特征同质,跨人种测试会明显掉点;②单中心拍摄协议(同一批技师、同一类设备、固定视野习惯)会带来"中心风格"捷径,模型可能学会辨识该中心的成像特征而非真实病灶;③仅左眼排除了双眼配对/眼别差异分析。若目标是全球 PM 筛查,单靠 PALM 不足以支撑——需补多中心、多民族数据。

§3.9 设备规格

设备 拍摄张数 分辨率 备注
Zeiss Visucam 500 1,047 2,124×2,056 主力相机,45° 视野
Canon CR-2 153 1,444×1,444 辅助相机,分辨率更低(方形)

两相机输出分辨率不齐,是预处理必须处理的结构性差异(见 §6.5 坑点 5)。设备还引入两处易被忽略的差异:①色域/色调——不同眼底相机的白平衡与色彩还原不同,萎缩的灰色调和出血的暗度会偏移,仅做 resize 不足、建议做颜色标准化或把 device 作为域条件;②分辨率与病灶尺寸的耦合——相同物理病灶在低分辨率 Canon 图上像素占比更小,分割模型的"最小可辨病灶"会随设备漂移。做跨设备评测时,请把"是否在 Canon 上仍检出小病灶"纳入报告,而不只看 Zeiss 上的指标。

§3.10 深度溯源链

中山眼科中心高度近视队列(伦理批准)→ 按质量标准筛选合格眼底图(剔除治疗痕迹、曝光异常、屈光间质重度混浊、大范围污染、来源信息缺失者)→ 7 医生标注 → 资深医生仲裁 → 去标识化 → ISBI 2019 挑战发布(2019)→ IEEE DataPort 归档(2019-07-08)→ Scientific Data 描述论文 + FigShare 重发(2024-01-20)。

溯源链逐步核验表:

环节 关键约束 对使用者的意义
采集 中山眼科中心高度近视检查队列,单/双视野,伦理批准 数据属"就诊/检查人群"非随机人群
筛选 剔治疗痕迹/曝光异常/混浊/污染/来源缺失 保证影像可用性,但保留"结构不清"真实图
标注 7 医生独立 + ≥1 资深仲裁 金标准为多专家合并,稳健性高于单医生
脱敏 发布前移除个人可识别信息 影像与标签均不含受试者身份
划分 同受试者同子集(400/400/400) 可直接训练,无跨子集泄漏
归档 2019 IEEE DataPort → 2024 FigShare + Scientific Data 双版本并存,注意掩膜极性一致性

一句话溯源结论:PALM 是一条"临床队列 → 多专家标注 → 挑战发布 → 期刊背书"的完整链路,数据可信度高;其可迁移性上限由"单中心、中国、左眼、双设备"这组采集条件决定,而非标注质量。

§3.11 文件命名与掩膜对齐细节

  • 命名:train 用 P/H/N 前缀(对应 PM/HM/正常细标签),validation 用 V,test 用 T;后续 4 位编号(如 P0001、V0233)。
  • 对齐:掩膜(BMP)与对应眼底图(JPEG)同 stem 同尺寸;加载时务必把 stem 作为配对键,避免仅凭顺序假设。
  • 中央凹坐标单位:与图像像素坐标一致(0 基或 1 基以官方 Excel 说明为准),不可见统一记 (0,0)。
  • 设备/中心编码:Supplementary_Information 的 device 列 1=Zeiss、2=Canon;center_type 列 1=视盘居中、2=黄斑居中、3=视盘黄斑中点居中——此列对构偏差分析(坑点相关)有直接价值。

§4 数据结构详解

§4.0 目录树

PALM/
├── images/                        # 彩色眼底照片(JPEG, 8bit)
│   ├── train/
│   │   ├── P0001.jpg  …          # P*: 病理性近视(PM)样本(文件名编码细类)
│   │   ├── H0001.jpg  …          # H*: 高度近视(HM)样本
│   │   └── N0001.jpg  …          # N*: 正常(Normal)样本
│   ├── validation/
│   │   └── V0001.jpg … V0400.jpg # V*: 验证子集
│   └── test/
│       └── T0001.jpg … T0400.jpg # T*: 测试子集
├── masks/                         # 分割掩膜(BMP, 8bit, 前景=0/背景=255)
│   ├── train/       (视盘与病灶掩膜,结构与 images 对应)
│   ├── validation/
│   └── test/
└── 标签文件
    ├── Classification_Labels.xlsx    # PM=1 / 非PM=0(官方重发版带此文件)
    ├── Fovea_Localization.xlsx       # 中央凹 (x, y);不可见记 (0,0)
    └── Supplementary_Information.xlsx # 设备与拍摄中心编码

注:不同发布版目录略有差异——2019 原版按 images/masks + H/V/T 划分;2024 FigShare 版在每个子集下细分为 Images / Disc Masks / Lesion Masks(Atrophy、Detachment 两子文件夹)+ 三个 Excel。用哪一版就以该版 README 目录为准,此树为逻辑示意。

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
image_id Text 图像文件名茎(H/V/T+编号) P0001, V0233, T0112 主键与 train/val/test 归属 命名即泄露部分细标签(见坑点 6) 各子集恒有 H/V/T + 4 位数字
image ImageObject 彩色眼底图 JPEG 字节 视觉输入 双相机色差/分辨率差异 该结构不存在时不产出掩膜 RGB 图
pm_label Label(Int) 病理性近视分类标签 1(PM)/ 0(非 PM) 分类监督 参考标准来自病历综合,非纯影像
subclass(文件名编码) Text PM/HM/Normal 细标签(仅 train) P/H/N 前缀 可用作三分类或预训练 与官方二分类口径不同 test 不带 P / H / N
disc_mask Image 视盘二值掩膜 视盘分割 病灶遮蔽时视盘边界难定 56 张无此掩膜(缺失≠空) 0=视盘, 255=背景
atrophy_mask Image 斑片状萎缩(含视盘周围)掩膜 萎缩分割 萎缩边界主观性强 330 张无(图内无萎缩) 0=萎缩, 255=背景
detachment_mask Image 视网膜脱离掩膜 脱离分割 稀疏(24 张阳性) 1,176 张无 0=脱离, 255=背景
fovea_x / fovea_y Float 中央凹坐标 (1203.5, 1001.2) 中央凹定位回归 不可见时记 (0,0) (0,0) 表示不可见 ≥0
device Text 采集设备 Zeiss / Canon 域自适应/分组验证 与分辨率强相关 由 Supplementary 给出 zeiss / canon
center_type Int 拍摄中心 1/2/3 构图偏置建模 视盘居中时脱离少见 1 视盘 / 2 黄斑 / 3 中点

§4.2 标签分布

PM / 非 PM 二分类总体基本均衡:总 637 / 563(train 213/187、val 211/189、test 213/187),利于直接做分类。但病灶层极不平衡:脱离阳性仅 24 张、萎缩阳性 870 张、视盘 1,144 张。结构缺失(无掩膜)本身也是信号——脱离几乎只见于 PM,且视盘居中拍摄的图不出现脱离(见 §7.1)。

分类/细标签/掩膜三者的对应关系(官方与镜像的读取逻辑)可用如下片段核对:

import os, re, pandas as pd

def build_label_table(image_dir, cls_xlsx):
    """返回 DataFrame:image_id, subclass(train 前缀), pm_label。"""
    rows = []
    cls = pd.read_excel(cls_xlsx)          # 列如 image/stem 与 pm_label
    for f in sorted(os.listdir(image_dir)):
        stem = os.path.splitext(f)[0]
        pref = stem[0]                     # P/H/N(train)或 V/T(验证/测试)
        rows.append({"image_id": stem, "prefix": pref})
    df = pd.DataFrame(rows).merge(cls, on="image_id", how="left")
    return df

# 细标签只对 train 有效(P=PM, H=高近, N=正常);非 train 前缀不提供细标签
df = build_label_table("PALM/images/train", "Classification_Labels.xlsx")
print(df.groupby("prefix")["pm_label"].mean())   # 观察三类细标签与 PM 的关系

文件级对象关系:眼底图(1 主对象,恒有)→ 可选 3 结构掩膜(disc/atrophy/detachment,缺失≠空)+ 中央凹坐标(可 (0,0))+ 图像级标签(恒有)。一份眼底图最多对应 1 个 disc、1 个 atrophy、1 个 detachment 掩膜与 1 个 fovea 坐标——无切片/多帧层级,层级极浅。

§4.3 关键统计

  • 受试者 720,48.1% 男,平均年龄 37.5 ± 15.91 岁。
  • 眼底图 1,200 张;每受试者 1-3 张(同一次检查)。
  • 视盘掩膜 1,144 / 萎缩掩膜 870 / 脱离掩膜 24 张阳性。
  • 质量分级(自动 MCF-Net):PM 中 reject 约 477/637(≈74.9%)、非 PM 中仅 35/563(≈6.2%);train/val/test 三子集 good/usable/reject 分布近似(如 test 104/127/169),利于无偏后验。

复现上述关键统计的可执行脚本(用于自检是否拿对数据):

import os, numpy as np, pandas as pd
from glob import glob

def mask_presence(mask_dir, stems):
    files = {os.path.splitext(os.path.basename(f))[0] for f in glob(mask_dir + "/*")}
    return np.mean([s in files for s in stems])   # 存在比例

stems = [os.path.splitext(os.path.basename(f))[0] for f in glob("PALM/images/train/*.jpg")]
print("train 图像数:", len(stems))
print("视盘存在率:", mask_presence("PALM/masks/train/disc", stems))     # ≈381/400
print("脱离存在率:", mask_presence("PALM/masks/train/detachment", stems)) # ≈12/400

若你下载的是 2024 FigShare 重发版,目录可能已是 Images/Disc Masks/Lesion Masks(Atrophy, Detachment) 结构,把上方 mask_dir 路径按实际调整即可;存在率应与官方(视盘 1,144、萎缩 870、脱离 24)吻合,偏差过大说明拿错子集/版本。

§4.4 数据层级

受试者(720,去标识)→ 单只左眼 → 一次检查 1-3 张眼底照 → 每张带 图像 + 疾病标签 +(结构存在时的)视盘/萎缩/脱离掩膜 + 中央凹坐标。划分按受试者分组:同一受试者所有图进同一子集,避免泄漏。

层级对建模的含义:①最底粒度是"一张眼底图",所有任务都在图像级做监督与评测(无病例级聚合指标的必要性不强);②因每受试者 1-3 张且编号相邻常属同一人,任何"图像级随机拆 train/val/test"都可能把同一人拆到两侧造成隐性泄漏——官方已按受试者隔离,自行重拆须当心;③若未来要扩展为"受试者级模型"(多张图投票),当前层级不足以支撑,需额外获取患者分组线索。

§4.5 缺失值与信息性缺失编码

缺失对象 表现 性质 处理建议
视盘掩膜(56 张缺) 无该掩膜文件 信息性(图内视盘不可清晰勾画,多因 PM 病变遮蔽) 不做"全零背景";用 has_*_mask 布尔显式编码
萎缩掩膜(330 张缺) 无该掩膜 信息性(该图确无斑片状萎缩) 视为阴性,勿当缺失
脱离掩膜(1,176 张缺) 无该掩膜 信息性(绝大多数无脱离,属极端不平衡) 作为负样本但注意采样
中央凹 (0,0) 坐标置零 表示"图中不可见"而非原点 训练时掩码掉或用 visible 标志

§4.6 装载与配对注意清单

把 PALM 正确装载进训练/评测管线,建议逐条核对:

  • stem 为唯一配对键:图、视盘掩膜、萎缩掩膜、脱离掩膜、中央凹坐标都以 image_id(P/V/T+编号)为键,绝不可依赖文件顺序。
  • 结构掩膜可选:disc/atrophy/detachment 各自只在"图内存在该结构"时产出,缺失时无文件;用 has_*_mask 显式编码,勿当全零图。
  • 掩膜极性反相:原版前景=0、背景=255,加载后统一 mask == 0 反转;只做一次并落盘,避免重复反转。
  • 双分辨率:Zeiss 2,124×2,056 与 Canon 1,444×1,444 混在批内,需统一尺寸或用 device 列分组。
  • 标签两张表:分类用 pm_label(XLSX);train 细类靠文件名前缀 P/H/N(非 test)。
  • 中央凹 (0,0):表示不可见,回归前先过滤,勿当原点真值。
  • 不跨子集:直接用官方 400/400/400;自行划分须按受试者隔离并做 stem 交集自检。

装载自检三连:①打印 np.unique(mask) 应为 {0,255};②核对三子集图数各 400;③确认掩膜存在率与官方(视盘 1,144、萎缩 870、脱离 24)吻合。三者都过,你的数据装载大概率是对的。


§5 数据划分与使用建议

§5.1 官方划分

官方固定 400/400/400,且同受试者同子集。训练可同时取 train+validation 微调后于 test 评测,但正式报告以"训练即训练集、评测测试集"为惯例;验证集用于调参与早停。

为何这样设计:三子集内部 good/usable/reject 质量分布近似一致(官方在 Scientific Data 中特意核验),保证用 validation 选模型不引入分层采样偏差,test 结果可平移。因此直接信任官方划分是性价比最高的策略——不要为了"多训一点"而在 test 上早停选模,那会污染评测。

§5.2 社区惯例划分

多数论文直接用官方 train 训练、validation 早停/选模型、test 报指标(各子集内部质量分布一致,官方设计如此)。需自己随机再划训练/验证时,务必按 image_id 前缀在 H/V/T 之外自行按受试者(同一前缀内不同编号未必不同人,谨慎)分组;更稳妥是直接用官方划分避免麻烦。

PALM 的分类任务已接近饱和(AUC≈0.99),因此许多近期工作把重点放在:①加入 validation 扩大训练集再在 test 上做公平报告;②改用"细分类或病灶辅助"的更强监督;③与 REFUGE/IDRiD 混合做跨集迁移。无论哪种,都应把 test 隔离到最后一次触碰,避免无意中把 test 统计纳入早停。

§5.3 泄漏风险

  • 文件名前缀泄漏:train 前缀 P/H/N 直接编码细分类,若被下游偶然当成额外信号会"作弊式"提升——它们本就是训练标签的一部分,但不要把它当作测试提示。
  • 同受试者跨子集:官方已按受试者隔离;若自建划分需校验不把同一前缀不同图拆开(每受试者 1-3 张,编号相邻者常属同一人)。
  • 跨数据集:PALM 与 REFUGE/ADAM 同机构、同相机、同 400/400/400 结构,混入同一 benchmark 时建议做感知哈希(perceptual hash)去重(Zeiss 子集尺寸相同尤需查)。
  • 低质量图:约 74.9% PM 图被自动质量模型判 reject,但它们代表真实临床;"为提高分数而剔除 reject 图"会造成过乐观评估与临床失真。
  • 掩膜/坐标的信息性缺失:若把"无脱离掩膜"误解为"空图",会在监督与评测两个层面引入系统性偏差(坑点 3),这是一种易被忽视的"标签泄漏",务必用 presence 显式编码。

一个可直接执行的"泄漏自检"脚本:训练/验证/测试 stem 集合两两取交集,若非空即存在跨子集重叠(正常应恒为空),同时统计各子集 prefix 细标签分布,确认没有把细类当监督漏洞。

§5.4 交叉验证建议

因脱离阳性仅 24 张且集中于 PM,病灶任务做 Stratified 折叠时需确保每折含脱离样本;萎缩/脱离大类别不平衡下建议按"图像是否有病灶"分层的 K 折,而不是按类别数分层(类别极不平衡时按层数会失效)。

实践建议:①分类/结构任务因二分类均衡,官方划分足够,无需 K 折;②病灶任务若做 K 折,请按 has_detachment 与 has_atrophy 联合分层,避免某折完全没有脱离阳性;③每折内再做 presence 级子指标,折间方差应较小才算稳定。若需要更稳的小样本统计,可考虑用多个 seed 而非依赖单个随机折叠。

§5.5 外部验证建议

官方建议与 REFUGE、ADAM 组合做跨中心/跨疾病验证;若做 PM 泛化,更宜引入另一非中国队列的眼底图(同任务或转学习)。跨相机(Zeiss↔Canon)也可作为一种"域内但设备异构"的合理外部验证划分。

三种外部验证梯度(由易到难):①域内异构——官方 Canon 153 张作外部集,查设备迁移;②跨疾病(同族)——REFUGE/ADAM(不同病种但同采集协议)验证结构任务迁移;③跨人群——引入其他国家/不同种族的眼底 PM 队列,是断言"PM 筛查泛化"的最低要求。仅①②不足以支撑跨人群推广声明。


§6 AI 就绪指南

§6.1 快速上手

前置环境:Python 3.9+、PyTorch(示例用 2.x)、OpenCV、pandas、Pillow。

代码块预期目录结构与 data_root 拼接关系如下——假设已解压官方包到 data_root/PALM/,内含 images/(H/V/T 子文件夹)、masks/(视盘与病灶)以及分类/中央凹 Excel。最小可用子集即官方 train 的 400 张图 + 对应标签,无需额外文件即可训出首个分类/分割模型。

import os, cv2, numpy as np, pandas as pd

data_root = "./data_root"            # 解压后所在目录
split = "train"                      # "train" | "validation" | "test"

# 官方训练文件名的三类前缀会"泄露"细标签;二分类用 Excel 的 pm_label
labels = pd.read_excel(os.path.join(data_root, "PALM", "Classification_Labels.xlsx"))
img_dir = os.path.join(data_root, "PALM", "images", split)

def load_image_and_mask(img_stem, mask_dir, mask_name="disc_mask"):
    img = cv2.imread(os.path.join(img_dir, f"{img_stem}.jpg"))
    mpath = os.path.join(mask_dir, f"{img_stem}_{mask_name}.png")
    if not os.path.exists(mpath):
        return img, None                      # 缺失≠空,见坑点 3
    mask = cv2.imread(mpath, cv2.IMREAD_GRAYSCALE)
    mask = (mask == 0).astype(np.uint8)       # 原版前景=0 → 反转成 1=前景(坑点 1)
    return img, mask

§6.2 数据获取

渠道 链接/标识 说明
Grand Challenge 主页 https://palm.grand-challenge.org 注册(禁止匿名,须真实完整信息)后可下载/提交;在线榜参考
IEEE DataPort(2019 原版) DOI 10.21227/55pk-8z03 挑战归档;需在 IEEE DataPort 免费注册后获取
FigShare(2024 重发版) DOI 10.6084/m9.figshare.21299148.v1 Scientific Data 配套,官方推荐引用版
描述论文 DOI 10.1038/s41597-024-02911-2 完整标注/质量/基线说明
社区 HuggingFace 镜像 hf.co/datasets/MedOtter/iChallenge-PALM19 约 1.72 GB JPEG;已归一化掩膜(非官方)
官方基线代码 https://github.com/tianyizheming/ichallenge_baseline 分类/分割/定位基线
质量评估代码(EyeQ) https://github.com/hzfu/EyeQ 眼底图质量分级
# 示例:拉取社区镜像(仅演示获取流程;正式评测请用官方 FigShare 版)
pip install huggingface_hub datasets
python - <<'PY'
from datasets import load_dataset
ds = load_dataset("MedOtter/iChallenge-PALM19")
print(ds)   # 查看 train/validation/test 结构
PY

申请/许可提示:以官方渠道为准,注册信息须完整真实;匿名/重复注册会被移除。研究/教育用途,重分发或商用需作者许可。

获取流程分四步(以官方 IEEE DataPort / FigShare 为准):

  1. 注册:在 IEEE DataPort(或 Grand Challenge)用真实、完整的个人/团队信息注册——匿名或重复注册会被平台清理。
  2. 同意规则:阅读并同意挑战/数据使用规则(研究/教育用途,不重分发、不商用)。
  3. 下载并校验:解压后核对文件数(train/val/test 各 400 张眼底图 + 对应掩膜/Excel),并做一次极性体检(§6.3 的 sanity_check_masks)。
  4. 记录版本:记下是 IEEE DataPort 原版还是 FigShare 重发版;两者掩膜极性约定可能已被不同社区镜像改动,混用前统一。

下载后的快速核对(推荐在训练前跑一次):

import os
for split, n in [("train", 400), ("validation", 400), ("test", 400)]:
    imgs = os.listdir(f"PALM/images/{split}")
    assert len([f for f in imgs if f.endswith((".jpg",".jpeg",".png"))]) == n, split
print("图像计数 OK:三子集各 400 张")

注意:掩膜总数 ≠ 图像总数——结构缺失时无对应掩膜(56 张无视盘、330 无萎缩、1,176 无脱离),因此"计数掩膜=400"的校验只对有该结构的子集成立。

§6.3 预处理全流程

预处理按"格式转换 → 掩膜反相对齐 → 双分辨率标准化 → 数据拆分/统计"执行:

import os, cv2, numpy as np
from glob import glob

def invert_palm_masks(mask_dir):
    """原版 PALM:前景=0、背景=255 → 统一为前景=1、背景=0 后覆写。"""
    for m in glob(os.path.join(mask_dir, "*.png")):
        msk = cv2.imread(m, cv2.IMREAD_GRAYSCALE)
        msk = (msk == 0).astype(np.uint8)     # 反相核心步骤
        cv2.imwrite(m, msk * 255)

def resize_like(mask, ref_size):
    """掩膜尺寸需与对应眼底图一致;眼底图尺度不一致时统一 resize 到 ref_size。"""
    return cv2.resize(mask, ref_size, interpolation=cv2.INTER_NEAREST)

# 步骤 1:仅对原始反相掩膜执行一次,转为标准前景约定
# invert_palm_masks("PALM/masks/train")

# 步骤 2:建立 image_id -> device 的映射以识别双分辨率
# 步骤 3:批次内按最大分辨率 pad 或统一 resize 到 (224,224) 之类的训练尺寸

落盘前做一次数据体检与极性自检(每套掩膜都必须过这一关,防止把某张被社区反转过的图混进原始约定):

import os, cv2, numpy as np, pandas as pd
from glob import glob

def sanity_check_masks(mask_dir, sample=8):
    """校验:值域仅 {0,255}、四角是否全 255(原版背景在角上)、前景占比分布。"""
    vals, corners, fg = set(), [], []
    files = glob(os.path.join(mask_dir, "*.png"))
    for i, f in enumerate(files[:sample]):
        m = cv2.imread(f, cv2.IMREAD_GRAYSCALE)
        vals |= set(np.unique(m).tolist())
        h, w = m.shape
        corners.append([m[0, 0], m[0, w-1], m[h-1, 0], m[h-1, w-1]])
        fg.append((m == 0).mean())          # 原版前景=0 → 直接统计 0 的占比
    print("value set:", sorted(vals), "| 前景(0)占比样本:", [round(x,3) for x in fg])
    # 期望:vals ⊆ {0,255};若前景在角上出现(0),说明已被反转为前景=255,需统一
    return np.array(corners).mean(axis=0)   # 返回四角均值,全 255 说明反相约定未被动过

# 反相前:PALM 原版应为 {0,255} 且四角≈255
print(sanity_check_masks("PALM/masks/train/disc"))

要点:①掩膜必须用最近邻(INTER_NEAREST)resize,避免插值制造伪边界;②所有空间对齐(旋转/裁剪/翻转)都必须对图像与对应掩膜做同一几何变换;③反相只对原始发布包执行一次并落盘,避免每次加载重复反转;④若掩膜值域出现 {0,255} 之外的值,先判它是否来自 REFUGE(0/128/255),勿贸然二值化。

§6.4 PyTorch DataLoader 完整示例

import os, cv2, glob, torch
import numpy as np
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

class PALMDataset(Dataset):
    """多任务 PALM:返回图、pm_label、视盘掩膜(存在时)、脱离掩膜(存在时)。"""
    def __init__(self, image_dir, mask_dirs, label_file, img_size=224):
        self.image_dir = image_dir
        self.mask_dirs = mask_dirs                  # {"disc": path, "det": path}
        self.files = sorted(glob.glob(os.path.join(image_dir, "*.jpg")))
        self.labels = {}                            # image_stem -> pm_label
        self.img_size = img_size
        self.tf = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225]),
        ])
        # 此处假定已把 label_file 解析为 {stem:int}; 简写略去 XLSX 解析细节
    def _resize(self, img):
        img = cv2.resize(img, (self.img_size, self.img_size))
        return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    def __len__(self):
        return len(self.files)
    def __getitem__(self, i):
        stem = os.path.splitext(os.path.basename(self.files[i]))[0]
        img = self._resize(cv2.imread(self.files[i]))
        item = {"img": self.tf(img), "stem": stem,
                "pm": torch.tensor(self.labels.get(stem, -1), dtype=torch.long)}
        for name, mdir in self.mask_dirs.items():
            mp = os.path.join(mdir, f"{stem}.png")
            if os.path.exists(mp):
                m = cv2.imread(mp, cv2.IMREAD_GRAYSCALE)
                m = (m == 0).astype(np.float32)     # 前景=1(原版反相已处理)
                m = cv2.resize(m, (self.img_size, self.img_size),
                               interpolation=cv2.INTER_NEAREST)
                item[name] = torch.tensor(m).unsqueeze(0)
            else:
                item[name] = None                   # 缺失掩膜:见坑点 3
        return item

ds = PALMDataset(
    image_dir="./data_root/PALM/images/train",
    mask_dirs={"disc": "./data_root/PALM/masks/train/disc",
               "det":  "./data_root/PALM/masks/train/detachment"},
    label_file="./data_root/PALM/Classification_Labels.xlsx",
)
loader = DataLoader(ds, batch_size=16, shuffle=True, num_workers=4)
batch = next(iter(loader))
print("batch keys:", list(batch.keys()))

当任务需要在同一批里同时训练分类与多个分割掩膜、而部分样本缺掩膜时,用自定义 collate_fn + presence 掩码处理"缺失≠空":

def palm_collate(batch, structure_keys=("disc", "det")):
    """把含 None 掩膜的样本组到一批:缺失结构置零并附 presence 标志。"""
    imgs = torch.stack([b["img"] for b in batch])
    pm = torch.stack([b["pm"] for b in batch])
    out = {"img": imgs, "pm": pm}
    for k in structure_keys:
        present = torch.zeros(len(batch), dtype=torch.bool)
        masks = torch.zeros(len(batch), 1, 224, 224)
        for i, b in enumerate(batch):
            if b.get(k) is not None:
                present[i] = True
                masks[i] = b[k]
        out[f"{k}_mask"] = masks      # 缺失处为 0(不参与 loss 的加权区域)
        out[f"{k}_present"] = present # presence 布尔,loss 里用它过滤
    return out

loader = DataLoader(ds, batch_size=16, shuffle=True, num_workers=4,
                    collate_fn=palm_collate)

配套的分割+分类训练步示意(分段损失只在 presence 样本上回传,并用 F1/Dice 而非被背景拉满的 Dice 选模型):

def train_step(model, batch, device, seg_loss, ce_loss, opt):
    img = batch["img"].to(device)
    pm_true = batch["pm"].to(device)
    # 模型输出:pm_logit + 各结构 logits(这里仅示范 disc 一路)
    pm_logit, disc_logit = model(img)
    loss = ce_loss(pm_logit, pm_true)
    present = batch["disc_present"].to(device)
    if present.any():                     # 仅对有视盘掩膜的样本算分割损失
        disc_mask = batch["disc_mask"].to(device)[present]
        loss = loss + seg_loss(disc_logit[present], disc_mask)
    opt.zero_grad(); loss.backward(); opt.step()
    return loss.item()

本示例为完整可运行骨架:请把 self.labels 解析补全为 XLSX 读取(示例从略以聚焦数据流),模型输出维度与结构数对齐。批内若含 None 掩膜(缺失结构),训练需按 key 过滤或给 absent 掩膜填零并带 presence 掩码,避免把"缺失"当"空病灶"反向监督。

§6.5 坑点 8 个

⚠️ 坑点 1:掩膜反相——PALM 前景 = 0、背景 = 255(分类:预处理陷阱)

问题:PALM 官方视盘与病灶掩膜沿用挑战赛约定,0 = 视盘/病灶(黑),255 = 其他(白),与多数分割框架"255=目标、0=背景"的直觉相反。
症状:直接 mask > 0 当目标会训练出"整图背景=目标"的模型,损失不降、Dice≈0 或反直觉的 100%。
解决

  1. 简单方法:加载后统一执行 mask = (mask == 0).astype(uint8) 再使用。
  2. 进阶方法:写进 Dataset 一次性转换并落盘缓存,且用"掩膜仅含 {0,255} 两值 + 角点是否全 255"做极性自检(PALM 无 128 中间值)。
  3. SOTA 方法:在 __getitem__ 内固化归一化并加一个单测:随机图某结构掩膜前景占比与官方统计(如萎缩 870/1200 阳性)对照,防版本混用。
    参考https://ieee-dataport.org/documents/ichallenge-palm-pathologic-myopia-challenge

⚠️ 坑点 2:把 REFUGE 的 0/128/255 约定套到 PALM(分类:标签理解)

问题:REFUGE(青光眼)用 0=杯、128=盘、255=背景;PALM 只有 {0,255} 且语义相反。同 iChallenge 系列极易被混用。
症状:代码里写死 mask==128 判盘 会在 PALM 上全部判空;或把 {0,255} 硬分成"杯/盘/背景"导致标签语义错乱。
解决

  1. 简单方法:先打印 np.unique(mask),确认只出现 {0,255} 再选语义。
  2. 进阶方法:在配置/字典里显式记录每个数据集的极性(REFUGE 255=盘 vs PALM 0=结构),不靠记忆。
  3. SOTA 方法:多数据集中训练时,为每个源实现独立 mask 解码层并在日志标注来源,避免跨集污染。
    参考https://huggingface.co/datasets/MedOtter/iChallenge-PALM19

⚠️ 坑点 3:掩膜"缺失 ≠ 空病灶"(分类:标签理解)

问题:PALM 中 56 张无视盘掩膜、330 无萎缩、1,176 无脱离——这些图根本没有对应掩膜文件,而不是"全零背景图"。
症状:把缺失文件当全零/全背景会教模型"该结构普遍不存在"(尤其脱离),或反之当"图被污染"误删合法阴性样本。
解决

  1. 简单方法:掩膜按"该结构存在"的 has_*_mask 布尔显式管理,缺失就设 None 不进该任务批。
  2. 进阶方法:训练/评估时分别统计"有掩膜子集"指标,避免把 24 张脱离稀释在 1,176 个阴性里把 Dice 拉满。
  3. SOTA 方法:用 presence-aware 损失(对存在结构才计算分割损失)并同时学一个 presence 分类头。
    参考https://huggingface.co/datasets/MedOtter/iChallenge-PALM19

⚠️ 坑点 4:三态文件名 vs 二分类标签的错位(分类:标签理解)

问题:train 文件名前缀 P/H/N 编码 PM/高度近视/正常三类细标签,但官方任务指标是"PM vs 非 PM"二分类;高度近视被并入非 PM 侧。
症状:把 H 当第三类训练、却在二分类测试上评测会口径混乱;或误把文件名细类当 test 可用标签(test 无细类)。
解决

  1. 简单方法:分类一律用 Classification_Labels 的 pm_label 训练二分类;细类仅供三分类/预训练实验,勿用于 test 报二分类指标。
  2. 进阶方法:可把 PM 视作正、HM+Normal 视为负做多类到二类的兼容 loss(如 softmax 后对负类求和概率)。
  3. SOTA 方法:把细标签当作辅助任务做多任务(分类+细类共训)以提升表征,正式指标仍报二分类。
    参考https://ieee-dataport.org/documents/ichallenge-palm-pathologic-myopia-challenge

⚠️ 坑点 5:双相机分辨率不齐导致的批次错位(分类:工程陷阱)

问题:1,047 张为 2,124×2,056(Zeiss),153 张为 1,444×1,444(Canon),批内张量形状不一致会直接报错或静默错位。
症状RuntimeError: size mismatch 或掩膜与图像尺寸不对齐导致 IoU 恒低。
解决

  1. 简单方法:统一 resize 到训练尺寸(如 224×224),几何变换与掩膜用最近邻保持一致。
  2. 进阶方法:batch 内 pad 到最大分辨率并记录真实尺寸,或在 collate 时按分辨率分组做"尺度桶"。
  3. SOTA 方法:把 device 当域标签做域自适应/归一化,或在数据里保留 Zeiss/Canon 分组做设备异构外部验证。
    参考https://www.nature.com/articles/s41597-024-02911-2

⚠️ 坑点 6:脱离类极端稀疏(仅 24 张阳性)(分类:数据泄漏)

问题:视网膜脱离掩膜仅 24 张阳性且几乎全在 PM,直接分割会因不平衡学到"永远输出阴性"的高 Dice 假象。
症状:Dice 看似很高(因为背景占绝对多数),但 F1 极低、脱离区域完全漏检。
解决

  1. 简单方法:用 Dice/Binary Cross-Entropy 混合损失 + 前景加权,并对阳性别过采样。
  2. 进阶方法:把它当"病灶检测/分割"而非纯分割,配合 presence 分类头;用验证集 F1(而非 Dice)作为模型选择指标。
  3. SOTA 方法:参考 IDRiD/REFUGE 的病灶分割技术做预训练后再微调,或用多任务共享编码器缓解稀疏监督。
    参考https://pmc.ncbi.nlm.nih.gov/articles/PMC10799845/

⚠️ 坑点 7:把自动"质量 reject"当脏数据删掉(分类:偏倚陷阱)

问题:自动质量模型(MCF-Net/EyeQ)把约 74.9% 的 PM 图判为 reject(因萎缩/出血/玻璃体混浊致结构不清),但作者强调这些正是真实临床影像。
症状:为提高分数筛掉 reject 图会得到一个"只认清晰眼底"的模型,遇到真实 PM 图(本就多模糊)性能崩盘,也造成乐观评估。
解决

  1. 简单方法:保留全部图训练,报告时按 quality 分层展示鲁棒性。
  2. 进阶方法:训练阶段做针对模糊/遮挡的强增强(高斯模糊、随机遮罩)增强泛化。
  3. SOTA 方法:做质量条件式/不确定性建模,让模型学会对看不清的结构主动"声明不可见",与中央凹 (0,0) 缺失机制呼应。
    参考https://pmc.ncbi.nlm.nih.gov/articles/PMC10799845/

⚠️ 坑点 8:中央凹 (0,0) 表示"不可见"而非坐标原点(分类:标签理解)

问题:官方对中央凹不可见的图统一记 (0,0),与像素原点混淆,回归网络会把它当"图像左上角"的真值。
症状:训练出的定位模型把 (0,0) 附近当成高频目标区,评估 MSE 被大量不可见图拉高却无从归因。
解决

  1. 简单方法:训练/评估前用 visible 标志过滤 (0,0) 样本,只在可见子集上回归与报 MSE。
  2. 进阶方法:做"定位 + 可见性"双头,让模型同时预测坐标与是否可见,不可见图不计坐标损失。
  3. SOTA 方法:对 (0,0) 样本生成 soft-target 或直接排除定位任务,只在分类/分割任务监督这些图。
    参考https://pmc.ncbi.nlm.nih.gov/articles/PMC10799845/

§6.6 数据增强建议

安全(✅):水平翻转(注意与掩膜同步)、小幅旋转、亮度/对比度扰动、随机裁剪缩放(双分辨率归一化后)、随机遮罩块——这些不改变病灶/结构语义且能缓解 PM 图的模糊差异。
危险(❌):垂直翻转(会颠倒视盘/黄斑相对方位,改变解剖布局语义);对掩膜用线性/三次插值(制造伪边界);先对图像增强却不给掩膜做同变换;在脱离稀疏任务上用过强几何增强破坏病灶细边界。

一套对图像与掩膜"同步"增强的实现(掩膜保持最近邻),避免增强错位:

import random, cv2, numpy as np

def apply_sync_aug(image, mask=None, rot_deg=15, flip=True):
    # 旋转(图像与掩膜同一角度)
    h, w = image.shape[:2]
    ang = random.uniform(-rot_deg, rot_deg)
    M = cv2.getRotationMatrix2D((w/2, h/2), ang, 1.0)
    img = cv2.warpAffine(image, M, (w, h))
    msk = cv2.warpAffine(mask, M, (w, h),
                         flags=cv2.INTER_NEAREST) if mask is not None else None
    if flip and random.random() < 0.5:
        img = cv2.flip(img, 1)                    # 水平翻转
        msk = cv2.flip(msk, 1) if msk is not None else None
    return img, msk

关键:图像用默认线性插值即可,掩膜必须 INTER_NEAREST;二者用同一变换矩阵。垂直翻转破坏解剖方位,默认关闭。

§6.7 模型推荐表

任务 推荐模型基线 理由
PM 二分类 ResNet50(ImageNet 迁移) 官方基线用 ResNet50 达到良好 AUC;迁移学习有效
视盘/病灶分割 U 形网络 + 残差块 / U-Net 变体 官方基线;掩膜小目标需保边界
中央凹定位 ResNet50 / 回归网络 官方基线;可用 Euclidean 距离损失
多任务联合 共享编码器多头 利用分类+结构+病灶互补提升可解释性

选型与实践建议:

关注点 建议
分类(AUC≈0.99 易饱和) 400 张迁移即够;瓶颈在模糊/结构不清图与细分类,可加辅助分割任务提升
视盘分割 官方 U-Net 可复现;PM 图视盘常被萎缩干扰,可在清眸子集上早停再微调
中央凹定位 坐标回归 + (0,0) 可见性双头;只报可见子集 Euclidean 距离
脱离分割 最难、最不饱和;务必 presence 头 + 平衡采样,别被 Dice 假象骗
小数据 优先迁移 ImageNet/REFUGE 预训练;避免从头大网络

§6.8 硬件需求表

任务 建议显存 说明
分类(ResNet50 @ 224) ≥ 4 GB 单卡即可训练 400 张
分割(U-Net @ 512) ≥ 8 GB 病灶边界清晰建议高分辨率
全分辨率分割(2,124×2,056) ≥ 24 GB 或分块推理 原图过大,建议 resize 或滑窗

运行预算提示:400 张训练图规模下,单 GPU 一个分割实验通常在分钟到小时级可完成一次训练;做多任务消融或跨数据集迁移时,瓶颈在数据 IO 与掩膜预处里,建议把"反相+resize+presence"结果缓存成 tensors/npy 以提速。

§6.9 评估指标代码

import numpy as np

def dice_score(pred, target, eps=1e-6):
    inter = (pred * target).sum()
    return (2 * inter + eps) / (pred.sum() + target.sum() + eps)

def f1_score(pred, target, eps=1e-6):
    tp = (pred * target).sum()
    fp = (pred * (1 - target)).sum()
    fn = ((1 - pred) * target).sum()
    precision = tp / (tp + fp + eps)
    recall = tp / (tp + fn + eps)
    return 2 * precision * recall / (precision + recall + eps)

def euclidean_dist(pred, gt):
    """中央凹定位:平均欧氏距离(官方指标之一)。"""
    return float(np.sqrt(((np.asarray(pred) - np.asarray(gt)) ** 2).sum()))

评测口径:PALM 挑战用 AUC(分类)、平均 Dice / F1(分割)、平均欧氏距离(定位)。做 lesion 分割时优先报 F1 而非仅 Dice(因脱离背景占绝对多数,Dice 会虚高)。

病灶评测建议按结构存在性分层并补报 presence 指标,避免被阴性稀释:

import numpy as np
from sklearn.metrics import roc_auc_score

def report_split_metrics(y_pred, y_true, presence, masks_pred=None, masks_true=None):
    """同时报告分类 AUC 与仅在 presence=1 子集上的分割指标。"""
    print("AUC(全样本):", roc_auc_score(y_true, y_pred))
    if presence is not None and masks_pred is not None:
        sel = np.asarray(presence).astype(bool)
        dices = [dice_score(p[m], g[m]) for p, g, pr in
                 zip(masks_pred, masks_true, presence) if pr]
        print(f"分割 Dice(仅阳性子集 n={len(dices)}):", np.mean(dices))
        print("presence AUC:", roc_auc_score(presence, y_pred))

§6.10 MLOps 笔记

  • 因脱敏且无 DUA 强制(相对 MIMIC 轻),但仍应做版本化:把"反相后掩膜 + device 列 + presence 布尔"固化成一个预处理 manifest,供复现。
  • 固定官方划分后,记录每个 stem 的 train/val/test 归属;复现论文时用同一 stem 列表。
  • 病灶指标按"有该结构子集"报告并另列 presence 任务指标,避免被阴性稀释。
  • 上传模型卡时注明用了哪版数据(IEEE DataPort 原版 vs FigShare 重发)与掩膜极性约定。

建议把划分与极性做成可复现清单(manifest),作为一切实验的单一事实源:

# prep_manifest.csv 示例列
# image_id, split, pm_label, device, center_type,
# has_disc, has_atrophy, has_detachment, mask_polarity(=inverted)
import pandas as pd

manifest = pd.read_csv("prep_manifest.csv")
train_stems = manifest.query("split=='train'")["image_id"].tolist()
# 训练仅遍历 train_stems;评测统一 test_stems,杜绝自造划分不一致

MLOps 实践要点:①把"掩膜已反转"写成 manifest 中一列,任何下游脚本加载时校验,杜绝人肉记忆极性;②双分辨率图像在批次内统一但保留原始 device 列,供域分析与消融;③提交到论文/榜单时固定一套 stem 顺序(同 seed),保证不同方法可比;④数据集版本号 + 预处理 commit 一起存档,便于多年后复现。


§7 质量评估与局限性

§7.1 已知偏倚表

偏倚类型 描述 严重程度 缓解
人群偏倚 单中心中国高度近视队列,左眼,非随机 跨种族/多中心外部验证(§7.8)
性别分布 48.1% 男 报告按性别分层指标
设备偏倚 两台相机分辨率/色差不同 device 分组验证/域自适应
病灶偏倚 脱离阳性仅 24 张、几乎全 PM presence-aware + F1 + 过采样
结构性偏倚 视盘居中拍摄无脱离、图均左眼 认识拍摄协议对构图的影响
质量偏倚 约 74.9% PM 图被自动判 reject(结构不清) 中(也是特征) 保留真实影像并做鲁棒性评估

对上述偏倚的两点补充解读,直接关系到实验设计:

  • 设备与病灶/结构偏倚叠加:两台相机的分辨率差异(2,124×2,056 对 1,444×1,444)在模型里常被当作"域"信号,若训练/验证比例不均衡会诱导模型走捷径(看到高分辨率就倾向某类病灶)。做设备异构分析时最好把 device 作为显式协变量而非隐藏特征。
  • 脱离病灶几乎只在 PM:这意味着任何"脱离分割模型"实际上很大程度是"PM 先行判定 + 病灶定位"的复合;若脱离只在 PM 图出现,模型可能把"萎缩或 PM 外观"当作脱离的间接线索。要区分这一混淆,需在非 PM 图上补充脱离阳性样本或单独报告 presence 层级的可解释性(归因在萎缩还是在脱离区)。
  • 质量偏倚的"双刃剑":约 74.9% 的 PM 图被自动质量模型判为 reject,这既是挑战(模型要扛住结构不清)也是筛选机会(若你的研究只关心"结构清晰的典型 PM",用 quality 分列可以圈出子集;但若你宣称筛查模型,就绝不能剔除它们)。

§7.2 标注质量

金标准由 7 名高年资医生独立标注、资深医生仲裁合并,病灶用自由闭合曲线贴合真实边界,医学严谨性高。局限:官方仅发布合并后掩膜,未提供逐医生一致性/ICC 统计,用户无法自行量化标注者间差异;图像级 PM 标签来自病历综合而非纯影像,其"金标准"含义是临床参考而非影像学标签。

对标注质量的使用提示:①合并后的金标准以资深仲裁为准,理论上比任何单一医生更稳,但您拿不到"7 票方差",若想量化标注不确定性需要另做一致性研究;②萎缩边界主观性大于脱离(脱离边界锐利、萎缩常渐晕),报告指标时应承认这一内在噪声;③PM 标签以病历/OCT/视野综合定标,因此"分类模型学到的"更接近"临床综合判断在眼底影像上的投影",而不是纯眼底征象——解读 AUC 时注意这一口径。

§7.3 泛化性表

场景 失效风险 证据/依据
同中心同设备(Zeiss) 官方建议直接使用,质量分布三子集一致
跨设备(Zeiss→Canon) 分辨率/色差差异;建议分组验证
跨种族/其他国家 单一族裔、单国中心;需外部 PM 队列验证
真实模糊/结构不清图 中(但 PALM 已含此类图) 74.9% PM 被自动判 reject,属真实临床样本
脱离分割推广 仅 24 张阳性,统计效能极有限

§7.4 伦理

采集经中山眼科中心伦理委员会批准;发布前移除一切可识别患者信息。为研究/教育用途、非商用。病灶中视网膜脱离属急症,任何 PM 分割/筛查模型在临床落地前必须经独立临床验证与监管审批,并警惕"漏检急症"的潜在危害。

伦理使用注意:①眼底图虽去标识,仍需按医学影像数据规范管理,不做逆向/再识别;②"漏检急症"是 PM 筛查模型的最高风险——若模型把视网膜脱离漏掉,后果是视力不可逆损害,研发应把召回(recall)安全置于精度之上,并在临床方案中设计"低置信转诊"策略;③研究/教育用途的边界要求不以该集重训练商用筛查产品、不擅自再分发。

§7.5 公平性

PALM 仅覆盖中国(汉族为主)高度近视就诊人群、仅左眼,性别 48.1% 男。跨族群/年龄/地区公平性无法由该集保证;用于异质人群筛查时应补充代表性数据并做亚组公平评估。

落地公平性清单:①在非中国人群上评估时,按性别、年龄带、是否高度近视亚组分别报告 AUC/敏感度,识别失效亚组;②因脱离几乎只在 PM,需警惕"模型把 PM 外观当脱离线索",用亚组混淆矩阵核实误诊模式;③在泛化到不同肤色/眼底色素人群前,把"对浅色眼底 vs 深色眼底"的识别差异作为一个显式公平维度;④训练时避免让 device(分辨率)成为隐性人口代理特征——若某相机与某亚组相关,跨域即退化为跨亚组退化。

§7.6 数据漂移

无随时间戳的纵向随访(每受试者单次检查 1-3 张),不支持疾病进展/时间漂移研究。设备更新(未来更广视野/无赤光)与人群结构变化会引入漂移,需要新版眼底数据持续校准;官方划分的三子集质量分布一致降低了内部漂移。

漂移应对:①做部署时建议周期性对比"入网新图质量分布"与 PALM 的 good/usable/reject 比例,若 reject 占比上升说明设备/人群漂移;②把 device 列作为监测特征,若未来图全来自不同机型需先做颜色/分辨率标准化再喂模型;③因无纵向随访,跨时间疾病进展的预测需引入其他有随访的 PM 数据集,而非在此集上声称"进展预测"能力。

§7.7 DAIMS 24 项评估

# 检查项 状态 说明
1 宽格式(tidy data) 图-标签-掩膜按图像粒度组织,官方 Excel 明确
2 唯一标识 H/V/T+编号唯一可作主键
3 特殊字符/编码 JPEG/BMP/XLSX 标准编码
4 重复行 图像唯一、同受试者同子集
5 缺失编码 ⚠️ 掩膜"缺失"未显式(需自行建 has_* 布尔)
6 标签标识 pm_label 二分类;细标签靠文件名(坑点 4)
7 罕见类分组 ⚠️ 脱离仅 24 张,未官方做罕见类提示
8 偏倚评估 ⚠️ 论文讨论质量偏倚,但缺种族/性别分层统计公开
9 数据字典 ⚠️ 目录与文件口径清楚,但无机器可读逐字段 schema
10 信息性缺失解释 中央凹 (0,0) 语义有官方说明
11 设备记录 Supplementary 记录 Zeiss/Canon
12 共线性 ⚠️ 设备与分辨率强相关(共线),未提示
13 编码映射 PM 与病种术语在描述论文中说明
14 时间戳处理 逐张拍摄时间未公开,不支持时序
15 划分建议 官方 400/400/400 且按受试者隔离
16 泄漏讨论 论文明确同受试者同子集
17 标签分布 描述论文含各子集分类表
18 测量偏倚 ⚠️ 双相机差异存在但未提供分设备性能
19 外部验证建议 明确建议与 REFUGE/ADAM 组合
20 版本记录 2019 IEEE DataPort / 2024 FigShare 双版本
21 预处理脚本 ⚠️ 官方基线代码在,但掩膜极性需用户自行反转
22 合规要求 伦理批准+去标识化+研究用途声明
23 多模态对齐 ⚠️ 掩膜缺失导致批次不对齐(需自行处理)
24 去标识化 明确发布前移除个人身份信息

DAIMS 评分:17.5 / 24

评分解读良好——作为医疗影像挑战数据集,PALM 在"官方划分、受试者隔离、版本记录、外部验证建议"上做得教科书级,疾病标签与结构/病灶标注俱全,2024 年又补齐了高质量 Scientific Data 描述论文。扣分集中在影像类数据的常见结构性短板:无逐张时间戳(不支持时序)、掩膜缺失/反相/设备共线等需用户自行甄别、无机器可读逐字段 schema、罕见类(脱离)与人群偏倚缺少系统化量化公开。

对你意味着什么:若你要做 PM 分类或视盘/中央凹结构分析,PALM 的 15 个 ✅ 项(另有 8 个 ⚠️ 需使用者补齐、1 个 ❌ 结构性缺失)保证你"拿来即用、跑通快、复现稳"——直接用官方划分、按 stem 隔离、报告有结构子集指标即可。真正要你自己补的功课集中在:①反相掩膜与缺失掩膜的显式处理(坑点 1/3,务必落地)——这决定分割任务成败;②双相机共线与分辨差异建议当域来做(坑点 5);③脱离小样本必须用 F1 + presence 头而别被背景拉满的 Dice 欺骗(坑点 6);④任何"跨种族推广"都不可信,PALM 是单中心中国左眼数据(§7.3)。把这几项在方法论文里写清楚,你的结果才具备可比性与可信度。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
REFUGE(青光眼,同 iChallenge) iChallenge / 多家中国中心 视盘分割、中央凹定位迁移 Dice / Euclidean 内部较优 官方建议组合以提升结构任务鲁棒性(描述论文)
ADAM(AMD 眼底) iChallenge 结构/病灶迁移 分割指标 内部较优 官方明确推荐跨疾病互补泛化
跨设备 Canon 子集(153 张) 同一 PALM 域内设备异构验证 分类/分割指标 需自行评估 分辨率/色差不齐,建议作为域内外部验证划分

同行评审支撑的独立外部 PM 队列对比结果在公开文献中尚不充分;上方以官方在 Scientific Data 中陈述的组合建议与设备/中心内变体为主,引用跨人群外部验证时需自行补充。


§8 基准性能与生态

§8.1 排行榜

名次/成绩 模型/方法 性能 年份 关键技术 完整引用 代码
PM 分类第 1(AUC 0.998) ResNet50 + 迁移学习 AUC 0.998(final 排名第 1) 2019 ImageNet 预训练 ResNet50 + 交叉熵 + 高斯噪声/随机旋转增强 Xie, Liu, Liu & Qiu, “Pathological Myopic Image Analysis with Transfer Learning”, MIDL 2019 见论文
中央凹定位第 1 修正 VGG19 混合特征回归 Mean Euclidean Dist 0.0295 2019 VGG19 第 4/5 块特征混合 + 平均欧氏距离损失 Xie, Liu, Liu & Qiu, MIDL 2019 见论文
视盘分割第 2 ResNet34-U-Net + ASPP 分割(挑战规则度量) 2019 残差编码器 + ASPP + Dice/交叉熵 Xie, Liu, Liu & Qiu, MIDL 2019 见论文
挑战总榜冠军(媒体) 平安科技(Ping An)方案 三项核心指标综合领先;含视盘分割与病灶分割子任务冠军 2019 多任务综合模型 中国日报/国际在线报道(媒体口径)
官方基线(论文给出) U-Net(残差) / ResNet50 分类与视盘/中央凹较好;病灶分割偏弱(论文自评) 2024 见 Scientific Data 基线 Fang et al., Scientific Data 2024 github.com/tianyizheming/ichallenge_baseline

数值不可直接比较的原因:PALM 各子任务指标体系不同(AUC vs Dice vs 欧氏距离),挑战总榜为"0.3×离线下 + 0.7×现场"加权,不同任务的第 1 名方法互相不可横向比较;单任务第 1 与总榜冠军并非同一方法,引用时须注明任务口径。官方基线论文明确指出病灶(尤其脱离)分割结果偏弱(受不规则病灶形态与阳性样本稀疏限制),这恰是留给后续工作的空间。详细各子任务 validation/test 榜单见 Grand Challenge 官方页面。

§8.2 SOTA 总结与选型建议

对 PM 分类,迁移学习(ResNet50 等)在 400 张训练集上即可逼近 AUC≈0.99,说明该任务在当前规模下相对"易饱和",瓶颈转向真实模糊/结构不清图与细分类;视盘分割与中央凹定位用共享残差编码器的 U 形/回归结构即可取得竞争力成绩,病灶(尤其脱离)分割仍是最难、最不饱和的子任务。选型建议:结构任务可先从官方 U-Net 基线复现;病灶分割重点放在 presence 建模与不平衡处理,不必追求单一巨大模型。

按任务给出的落地选型判据:

任务 现状 下一步值得做的 不建议做
PM 分类 已接近饱和(AUC≈0.99) 报告 blur/reject 分层指标;多任务解释 仅追求更高 AUC
视盘/中央凹 稳定但受 PM 病灶干扰 与 REFUGE 组合预训练;分设备报告 脱离上下文做结构量化
萎缩分割 中等,PM 中较好 presence 建模;多尺度增强 忽略萎缩细边界
脱离分割 最不饱和、样本极少 检测式 presence 头 + 平衡采样 只报全图 Dice

一句话选型:结构任务先复现官方基线、病灶任务先把"presence + 不平衡"做对——在 PALM 上,工程正确性(掩膜极性、缺失处理、双分辨率)对成绩的影响往往大于换更大网络。

§8.3 评测协议

  • 分类:AUC / 概率风险分;输出 CSV(每行 filename + 0-1 概率)。
  • 分割:平均 Dice / F1(对视盘、萎缩、脱离分别报告);提交掩膜与金标准同命名同尺寸。
  • 定位:平均欧氏距离(预测与医生标注中央凹坐标)。
  • 总成绩:0.3×离线下 + 0.7×现场(挑战赛期),后期为离线下在线榜每周更新。

指标-语义对照:①AUC 适合"排序筛查"但不反映实际阈值下的敏感度——落地筛查还需报 fixed-threshold 的敏感度/特异度;②Dice 在脱离这种背景占优任务上会虚高,务必补 F1 与 presence 层指标;③平均欧氏距离受 (0,0) 不可见图污染,评测需限定"可见子集";④若你重开榜单/自建 leaderboard,请沿用官方 CSV/掩膜提交规范,保持结果可比。

数据集 疾病 关系
REFUGE 青光眼 同 iChallenge、同 400/400/400、同相机协议;官方建议组合
ADAM AMD 同 iChallenge;官方建议跨疾病互补
IDRiD 糖尿病视网膜病变 常见联合预训练/病灶分割参照(微动脉瘤/出血/硬软渗)
ODIR / AIROGS / SCES 眼病多分类/青光眼 描述论文对比的外部眼底分类集

为何可与 REFUGE/ADAM 组合:三者同属 iChallenge 系列,共享中山眼科中心采集协议、部分同相机、同 400/400/400 结构与相似标注流程,但队列疾病不同(近视检查 vs 青光眼筛查 vs AMD),官方明示影像无重叠、可无泄漏地联合训练结构任务(视盘/中央凹)。若把它们放进同一 benchmark,需先做感知哈希去重(Zeiss 同尺寸子集风险最高),并确认掩膜极性一致(REFUGE 为 255=目标,与 PALM 原版反相不同——跨集时逐源解码,勿共用一份反相逻辑)。

§8.5 关键论文 Top 名单

  1. Fang, H., Li, F., Wu, J., Fu, H., Sun, X., Orlando, J. I., Bogunović, H., Zhang, X., Xu, Y. Open fundus photograph dataset with pathologic myopia recognition and anatomical structure annotation. Scientific Data, 11:99, 2024. DOI: 10.1038/s41597-024-02911-2. —— 数据集官方描述论文(采集/标注/质量/基线完整说明)。
  2. Fu, H., Li, F., Orlando, J. I., Bogunović, H., Sun, X., Liao, J., Xu, Y., Zhang, S., Zhang, X. PALM: PAthoLogic Myopia Challenge. IEEE DataPort, 2019. DOI: 10.21227/55pk-8z03. —— 数据对象原始 DOI/归档记录(挑战提交引用)。
  3. Xie, R., Liu, L., Liu, J., Qiu, C. S. Pathological Myopic Image Analysis with Transfer Learning. MIDL 2019. arXiv:1908.00410. —— ISBI/PALM 迁移学习方案:PM 分类 AUC 0.998 居首、中央凹定位居首、视盘分割第 2,是任务级方法的直接参考文献。
  4. Ohno-Matsui, K., et al. International photographic classification and grading system for myopic maculopathy. Ophthalmology, 2015. —— META-PM 病理性近视分型金标准框架(描述论文依托的临床分型),理解 PM 定义与病灶类别的基础。
  5. Freire, C. R., et al. Automatic lesion segmentation and Pathological Myopia classification in fundus images. arXiv:2002.06382. —— PALM 四任务(分类/视盘/中央凹/病灶)联合方法,基于 Xception + YOLO 思路,含 REFUGE/RIGA/IDRiD 迁移实践。
  6. Wu, J., et al. / Fu, H. 团队眼底质量分级工作(EyeQ / MCF-Net). —— PALM 描述论文所用眼底图质量自动分级方法(good/usable/reject),论文直接引用的质量评估工具。

引用建议:正式复现或投稿优先引 1(描述论文)+ 2(数据 DOI);涉及方法对比时可加 3-6。PALM 各任务指标口径不同,引用来历时须注明是分类 AUC、分割 Dice/F1 还是定位距离。

§8.6 社区活跃度

数据集官方自述截至 2024 已用于 100+ 篇眼底 AI 论文;Grand Challenge 在线榜持续供提交参考;社区存在 Hugging Face 镜像与多语言复现赛(如飞桨 PaddleSeg 的"PALM 病灶检测与分割"常规赛)。作为 iChallenge 家族成员,其在青光眼/眼底结构迁移研究里复用度高。

活跃度观察:①引用驱动上,2024 年 Scientific Data 描述论文(获引 38+,截至 2026-09)为数据集提供了稳定、规范化的引用锚点,使新增论文更易溯源;②任务竞争上,PM 分类与视盘/中央凹已接近饱和,近几年的新增贡献更多转向病灶(尤其脱离)与多任务/迁移方法,这从官方"病灶分割偏弱、留待后续"的自评也可印证;③工具生态上,官方 baseline 代码、EyeQ 质量工具与社区 Hugging Face 镜像并存,降低了上手门槛,但版本/极性差异需要使用者自行对齐——这也是本文 8 个坑点的出发点。社区讨论集中在飞桨复现赛、Kaggle 类平台与 GitHub issues,检索"PALM iChallenge"即可看到大量训练经验与指标报告。

§8.7 生态快照表

资源 类型 链接 Star/规模(截至 2026-09) 推荐理由
iChallenge PALM 镜像 Hugging Face hf.co/datasets/MedOtter/iChallenge-PALM19 月下载数十次 已归一化掩膜、含 presence 布尔,适合快速原型
官方基线代码 GitHub github.com/tianyizheming/ichallenge_baseline 分类/分割/定位官方基线
EyeQ 质量评估 GitHub github.com/hzfu/EyeQ 眼底图质量分级(论文所用 MCF-Net)
官方挑战主页 网站 palm.grand-challenge.org 子任务榜单与规则权威来源

使用提示:Hugging Face 镜像便捷但非官方,已对掩膜做归一化,正式论文/提交请回官方 FigShare 或 IEEE DataPort,并核对极性是否一致(原版前景=0)。


§9 相关资源与引用

§9.1 官方资源

官方权威来源

遇到问题去哪求助

  • 数据申请/下载:Grand Challenge 主页、IEEE DataPort / FigShare 页面均有联系渠道(组织方邮箱见主页)。
  • 数据/标注疑问:优先查 Scientific Data 描述论文(含标注流程、质量分级、基线说明)。
  • 复现/代码问题:官方基线 GitHub 仓库可提 Issue;社区飞桨复现赛有讨论区。
  • 术语/疾病疑问:参考 META-PM 分型与 ICD-11/SNOMED 术语标准,避免术语歧义。

社区与辅助资料

建议获取路径速查

目的 路径
正式研究/投稿 FigShare 2024 重发版 + 引 Fang et al. 2024
复现挑战赛/对比榜单 IEEE DataPort 原版 + 引 Fu et al. 2019
快速教学/原型 官方 FigShare 或 Hugging Face JPEG 镜像(注意极性)

§9.2 BibTeX 引用

% 主引用(推荐):Scientific Data 2024 数据集描述论文
@article{fang2024palm,
  title   = {Open fundus photograph dataset with pathologic myopia recognition
             and anatomical structure annotation},
  author  = {Fang, Huihui and Li, Fei and Wu, Junde and Fu, Huazhu and Sun, Xu
             and Orlando, Jos{\'e} Ignacio and Bogunovi{\'c}, Hrvoje
             and Zhang, Xiulan and Xu, Yanwu},
  journal = {Scientific Data},
  volume  = {11},
  number  = {1},
  pages   = {99},
  year    = {2024},
  doi     = {10.1038/s41597-024-02911-2}
}

% 挑战数据对象引用(IEEE DataPort)
@data{fu2019palm,
  author    = {Fu, Huazhu and Li, Fei and Orlando, Jos{\'e} Ignacio
               and Bogunovi{\'c}, Hrvoje and Sun, Xu and Liao, Jingan
               and Xu, Yanwu and Zhang, Shaochong and Zhang, Xiulan},
  publisher = {IEEE DataPort},
  title     = {PALM: PAthoLogic Myopia Challenge},
  year      = {2019},
  doi       = {10.21227/55pk-8z03}
}

引用指南:挑战提交与复现请同时引用 Fu et al. 2019 数据 DOI 与 Fang et al. 2024 描述论文;单发数据集使用常以 Scientific Data 论文为主引用。引用前核对最新官方页面要求。

§9.3 复现元信息与版本对齐

元信息
url_name palm
首选数据版本 FigShare 2024 重发版(10.6084/m9.figshare.21299148.v1)
官方划分 train/validation/test = 400/400/400(同受试者同子集)
掩膜极性 原版前景=0、背景=255;加载需反转,勿与社区归一化版混用
主引用 Fang et al., Scientific Data 11:99, 2024
数据引用 Fu et al., IEEE DataPort, 2019(DOI 10.21227/55pk-8z03)
文件格式 JPEG(图)+ BMP(掩膜)+ XLSX(分类/中央凹/补充)
图集统计 1,200 图 / 720 左眼 / PM 637 非 PM 563

复现实验清单建议:①固定数据版本并写入 README;②落一份 prep_manifest.csv(stem + split + device + presence 布尔 + 极性已反转标志);③固定评测 stem 顺序与 seed;④分割指标同时报 Dice 与 F1,定位只报可见子集 Euclidean;⑤提交前做一次泄漏自检(跨子集 stem 交集为空)。遵守上述即可让不同方法在 PALM 上严格可比。


§10 AI 使用声明卡

§10.1 AI 模型列表

本页面由大型语言模型(LLM)辅助撰写,用于资料检索整理、结构编排与规范化排版;未使用图像/医学诊断类生成模型生成临床判断。

§10.2 AI 参与范围

AI 参与范围:事实检索组织、章节结构化、术语双映射草拟、代码骨架编写。医学专业判定与最终事实核对由人工完成。

§10.3 输入来源列表

  1. PALM Grand Challenge 官方主页(palm.grand-challenge.org
  2. IEEE DataPort PALM 记录(DOI 10.21227/55pk-8z03)
  3. Scientific Data 描述论文 Fang et al. 2024(DOI 10.1038/s41597-024-02911-2)
  4. Scientific Data 描述论文 PubMed 记录(PMID 38245589 / PMC10799845)
  5. FigShare 数据重发记录(10.6084/m9.figshare.21299148.v1)
  6. Xie et al., Pathological Myopic Image Analysis with Transfer Learning, MIDL 2019(arXiv:1908.00410)
  7. Freire et al., Automatic lesion segmentation and PM classification in fundus images(arXiv:2002.06382,PALM 四任务描述)
  8. Awesome-Medical-Dataset PALM19 资源页(openmedlab)
  9. MedOtter iChallenge-PALM19 Hugging Face 数据集卡片
  10. ctmedtech PALM Hugging Face 数据集卡片
  11. 中国新闻网/中国日报/国际在线关于 ISBI 2019 PALM 挑战的报道
  12. 飞桨 AI Studio PALM 病灶检测与分割常规赛方案(php.cn/aistudio)
  13. IMI / META-PM(Ohno-Matsui 等)近视与 PM 分型标准文献
  14. ICD-11 浏览器、MedGen/UMLS/SNOMED 术语映射资料
  15. 千方病案医数集写作规范与内部校检

§10.4 人工校验表

内容模块 审核者 审核方式 审核状态
frontmatter schema_org / INFOBOX 千方病案医学编辑部 交叉审核 ✅ 已通过
§0 E-E-A-T 与免责声明 千方病案医学编辑部 交叉审核 ✅ 已通过
§1-§2 概览与医学背景映射 千方病案医学编辑部 交叉审核 ✅ 已通过
§3-§5 规格与划分 千方病案医学编辑部 交叉审核 ✅ 已通过
§6 数据管道与 8 坑点 千方病案医学编辑部 交叉审核 ✅ 已通过
§7 质量评估与 DAIMS 评分 千方病案医学编辑部 交叉审核 ✅ 已通过
§8-§9 基准、生态与引用 千方病案医学编辑部 交叉审核 ✅ 已通过

§10.5 AI 生成章节标注

全篇章节由 AI 起草,人工逐节核对事实与术语后定稿;医学编码与疾病定义由人工依据权威文献校正。

§10.6 最后人工审核日期

2026-09-05

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

返回 AI-Ready 数据集