早产儿视网膜影像数据集:188 个婴儿的 ROP 筛查与 6,004 张眼底图

六千余张眼底图 / 188 名新生儿 / 三台相机 / CC0

来源 https://www.kaggle.com/datasets/jananowakova/retinal-image-dataset-of-infants-and-rop发布时间: 2026-10-26最后更新: 2026-10-26 阅读 8
早产儿视网膜影像数据集:188 个婴儿的 ROP 筛查与 6,004 张眼底图

信息速览

数据集名称早产儿视网膜影像数据集:188 个婴儿的 ROP 筛查与 6,004 张眼底图
数据类型影像数据,人工标注,原始数据
规模188 名新生儿(94 女 / 94 男)
接入方式https://www.kaggle.com/datasets/jananowakova/retinal-image-dataset-of-infants-and-rop
AI 就绪度

早产儿视网膜病变(Retinopathy of Prematurity,ROP)是新生儿重症监护里少数「查得勤就能防住失明」的病。它的机制很清楚:早产儿视网膜血管没长完,出生后氧环境剧变,血管异常增生,一路发展到视网膜脱离。但只要在窗口期内按时筛查、及时干预,绝大多数患儿可以保住视力。问题在于筛查本身:要反复拍、要专业判读、要在资源有限的新生儿病房里排班。

这个数据集就是那套「反复拍」的产物。捷克俄斯特拉发大学医院从 2010 年代起做常规 ROP 筛查,攒下 188 名新生儿的六千余张眼底图,2022 年以 CC0 放到 Kaggle 上,2024 年在 Scientific Data 上发了数据描述论文。它不大,但它把三件事同时做对了:完全开放、带完整人口学、带 plus 病变标注。这三件事凑齐的早产儿眼底库,全球没几个。

一屏速览。 下面这张表把关键参数一次给全,后续各节展开时不再重复罗列。

维度 内容
原名 Retinal Image Dataset of Infants and Retinopathy of Prematurity
规模 6,004 张图像 / 188 名新生儿
性别构成 94 女 / 94 男(图像数约 3.08k : 2.92k)
胎龄 均值 33 周(SD 5),最小 23 周,最大 41 周(13 人)
出生体重 均值 2,017 g(SD 1,024),480–4,080 g
矫正胎龄 最早 30 周,最晚 113 周
设备 Clarity RetCam 3 / Natus RetCam Envision / Phoenix ICON
分辨率 640×480 / 1440×1080 / 1240×1240
标注 两名眼科专家独立判读,约 4% 需第三方共识
标签 诊断码(ROP 分期 + 其他后极部疾病)、plus 形态
格式 jpg(+ xlsx/csv 元数据表)
体量 约 8.0 GB(含三份目录副本)
许可 CC0 1.0(公有领域,可商用,无需署名)
获取 Kaggle 直下,无需注册申请(需 Kaggle 账号)
论文 Scientific Data 11, 814 (2024),doi:10.1038/s41597-024-03409-7

§1 速览:它到底是什么

1.1 一句话

它是一份完全开放的早产儿眼底筛查档案——188 个孩子的六千余张图,每张都带着这个孩子出生时的胎龄、体重,拍这张图时的矫正胎龄,以及当时的诊断结论。

1.2 为什么它不是普通的「眼底图数据集」

成人眼底数据集(DRIVE、MESSIDOR、ODIR 那一类)解决的问题是「糖尿病视网膜病变分级」「血管分割」。它们的难点在标注一致性,图像本身质量不错——成年人会配合,能注视,能保持不动。

早产儿眼底是完全不同的场景。作者在论文里写得很直白:「婴儿患者不配合,很难只拍到好图」。这句话背后是具体的操作困难:

困难 表现 对数据的影响
不配合 哭闹、扭动、闭眼 运动模糊、偏位、部分视野缺失
眼球小 需开睑器撑开眼睑 边缘可能有器械阴影或压痕
需散瞳 检查前滴散瞳药 瞳孔大小不一,影响进光量
视网膜未发育 血管尚未长到周边,对比度低 分界线、嵴等关键结构不清晰
病变在周边 后极部视野拍不到 完整分期信息天然缺失

所以这个数据集的「难」不在标注,在图像本身的分布。作者的处理方式是保留一部分低质量图,理由是「为了数据多样性」——这句话值得认真读:它意味着这个库刻意不做质量筛选,反映的是真实筛查场景,而不是理想条件下的样本。对研究「模型在真实噪声下能否工作」的人来说这是优点;对只想刷高准确率的人来说这是麻烦。

1.3 三十秒决策卡

你的处境 它能帮你什么
要做 ROP 筛查的 AI 辅助判读,但拿不到 iROP 这类需申请的数据 这是目前门槛最低的开放替代,CC0 直下
要研究「不同相机的图像能不能混训」 三台设备、三种分辨率,天然的多中心替代品
要研究 plus 病变(血管扩张迂曲)的自动识别 有 PF 标签(0 正常 / 2 plus),虽然 pre-plus 缺失
要做小儿眼底的图像增强、去模糊 有一批真实的低质量图,配作者开源的增强方法
要教住院医认识 ROP 的眼底表现 按患者/序列分目录,适合做病例串讲
要做病灶(出血等)的分割 用作者开源的 ReLeSeT 生成候选,再人工修正
要写一篇「用公开数据做 ROP 检测」的论文 引用链清晰,有对应的 Scientific Data 论文兜底

1.4 不适合谁:五条明确边界

要全视网膜视野的,它给不了。 三台相机都是广角但非全视网膜:RetCam 3 与 RetCam Envision 是 130°,Phoenix ICON 是 100°。拍的是后极部到中周部,周边拍不到。而 ROP 最早的征象——分界线与嵴——恰恰常在中周部与周边。所以严格说,这个库不足以支撑「完整 ROP 分期」的任务,只能支撑「后极部病变与 plus 判定」。

要 pre-plus 的,它一张都没有。 论文明确写「the pre-plus form is not observed in the dataset」。而临床上 pre-plus 是治疗决策的关键分界(从「继续观察」翻到「准备干预」)。做三分类(normal / pre-plus / plus)的研究用它,中间那一类会是空的。这不是数据缺失,是这批病例里真的没出现。

要像素级分割金标准的,它没提供。 标签是图像级/序列级的诊断码与 plus 判定。论文里做分割评测时,是在 80 张图(RetCam 3 取 30、RetCam Envision 取 30、Phoenix ICON 取 20)上让两名专家手工标、取平均作 ground truth,这批标注没有随数据集一起发布。

要大规模深度的,它只有 188 人。 相比成人眼底动辄十万张,这个体量做自监督预训练远远不够。它的定位是「小而全的精选集」,不是「大数据集」。真要大数据,得组合 iROP(不开放)、SUNDROP(需申请)、以及各国的筛查登记。

要纵向随访轨迹的,它只覆盖筛查期。 140 名患者有多个序列(多次检查),但序列跨度是筛查窗口(矫正胎龄 30 到 40 周为主,最长到 113 周)。想看「从出生到学龄」的长期结局,这里没有。

§2 数据构成与规格

2.1 三层组织方式

同一批图像在包里放了三份,用三种目录结构组织。这不是三份不同数据,理解这一点能省掉一次错误的合并。

目录 组织方式 适合什么
images/ 患者编号/序列号/图像文件 人工浏览、病例串讲、按患者切分
images_stack/ 全部图像平铺一层 批量脚本、DataLoader 直接扫
images_stack_without_captions/ 平铺,且抹掉相机角标文字 怕角标泄漏元信息的训练场景

第三份的存在说明了一件小事:相机自动在图像角落烧录了亮度、日期一类信息。作者用黑色矩形覆盖了这些角标——理由是相机本身已把眼底外围置黑,覆盖不改变眼底区域。这个细节值得留意:如果你用平铺版做训练,模型可能从角标文字里「偷」到与标签相关的线索(不同设备角标样式不同,而设备与诊断又不是独立的)。

2.2 命名即标签:一个文件名十段

这是整个数据集最实用的设计。文件名格式:

患者编号_性别_胎龄_出生体重_矫正胎龄_诊断码_plus形态_设备_序列号_图像号.jpg

论文给的例子:

001_F_GA41_BW2905_PA44_DG2_PF0_RC3_S01_1.jpg

逐段拆开:

段 值 含义
001 患者编号 纯整数,不可回溯
F 性别 女(M 为男)
GA41 胎龄 41 周
BW2905 出生体重 2,905 克
PA44 矫正胎龄 44 周
DG2 诊断码 出血(hemorrhage),正常后极部
PF0 plus 形态 0 = 正常
RC3 设备 Clarity RetCam 3
S01 序列号 第 1 次检查
1 图像号 该序列第 1 张

这种「把元数据编进文件名」的做法有真实的好处:不用读 xlsx、不用 join 表,一条 ls 加一个正则就能把整个数据集切分完。

import re, os
from collections import Counter, defaultdict

PAT = re.compile(
    r'^(?P<pid>\d+)_(?P<sex>[MF])_GA(?P<ga>\d+)_BW(?P<bw>\d+)'
    r'_PA(?P<pa>\d+)_DG(?P<dg>\d+)_PF(?P<pf>\d+)'
    r'_(?P<dev>[A-Z0-9]+)_S(?P<series>\d+)_(?P<img>\d+)\.jpg$'
)

rows = []
for fn in os.listdir("images_stack"):
    m = PAT.match(fn)
    if m:
        rows.append(m.groupdict())

print("图像数:", len(rows))
print("患者数:", len({r['pid'] for r in rows}))
print("设备分布:", Counter(r['dev'] for r in rows))
print("plus 分布:", Counter(r['pf'] for r in rows))

代价也很清楚:改名就丢标签。如果你要把图导进 DICOM 或别的命名体系,务必先把这张表落到数据库里,再改名。

2.3 患者级人口学

论文给的分布,是理解这个库适用边界的第二把钥匙。

变量 统计量 值
患者数 合计 188
性别 女 / 男 94 / 94
图像按性别 女 / 男 3,081 / 2,923
胎龄 均值 ± SD 33 ± 5 周
胎龄 最小 / 最大 23 周 / 41 周
胎龄 41 周 人数 13
出生体重 均值 ± SD 2,017 ± 1,024 g
出生体重 最小 / 最大 480 g / 4,080 g
矫正胎龄 最早检查 30 周
矫正胎龄 最晚记录 113 周

两处值得注意。

第一,患者数在性别上完全平衡(94/94),但图像数不平衡(约 3.08k 对 2.92k)。 这不是抽样设计的结果,是自然发生的:女性患儿平均每次检查拍得更多一点。做按图像计的分类任务时,这个 5% 的偏斜会进入损失函数。

第二,胎龄最大到 41 周、出生体重最大到四千余克。 这说明入组不严格限定「早产」——按论文的筛查方案,胎龄 <32 周或体重 <1500 g 是常规入组,但临床状态不稳定的较大婴儿也会被纳入(如需要氧疗的呼吸窘迫综合征患儿)。这个细节解释了为什么库里有足月儿:他们的 ROP 风险来自氧疗等后天因素,而不是早产。

2.4 诊断码:序列级而非图像级

这是全文最容易被误读的地方,值得单开一节。

论文的 DG 字段覆盖的类别包括:正常后极部、ROP 第 1/2/3 期、ROP 4A/4B/5、plus 病变、以及若干其他后极部疾病(出血、玻璃体混浊、脉络膜视网膜病变等)。4A、4B、5 三期在数据集中没有任何图像——不是错误,是这批病例里没进展到那个阶段。

关键点在标签粒度:

同一个患者的不同序列可以有不同诊断码(诊断随时间变化)。因此论文 Table 10 里按诊断统计的患者数不能相加,加起来会大于 188。

这句话的实际含义:

你以为 实际
188 个患者,按诊断分成若干互斥的组 188 个患者,每个序列一个诊断,患者可跨组
按患者统计各类别的人数,加起来等于 188 加起来大于 188,因为有人被重复计数
图像级标签独立 图像继承其序列的标签,同序列内完全一致

对做机器学习的人,这一条直接决定了切分方式——见 §5.2。

2.5 设备:三台相机,三种分辨率

论文 Section「Device Description」把三台机器的参数讲得很细,这张表是核对图像规格的底本:

设备 代码 分辨率 视野 论文点出的特点
Clarity RetCam 3 RC3 640 × 480 130°(用对应镜头) 广角小儿专用、可拍短片段、外置卤素光源 100–6000 lux、电动手动对焦
Natus RetCam Envision RE 1440 × 1080 130°(单镜头) 分辨率是 RetCam 3 的 2.25 倍、双可拆镜头(130° 与竖拍)、双向 DICOM 自动上传
Phoenix ICON ICON 1240 × 1240 100° 环形直接照明、手持件比 RetCam 3 小 30%、瞳孔 5.6 mm 即可拍、可实时变焦

分辨率跨度是 2.25 倍(长边 640 → 1440),而且长宽比都不一样(4:3 / 4:3 / 1:1)。这意味着:

  1. 不能简单 resize 后混训。 640×480 的图放大到 1440×1080 只是插值放大,不会凭空出现细节;反而让模型在两个分布上学到「清晰度 = 设备」这个伪相关。
  2. 有研究价值。 三台设备覆盖了小儿眼底相机的三个世代,正好可以研究「跨设备迁移」——这在真实部署里是刚需,因为基层医院买不起最新的机器。
  3. 一台设备对应一个患者全程。 论文写「All series for one patient were done with the same device」,所以设备与患者是嵌套关系,不是一个可以自由交叉的因子。做「设备不变、患者变」的消融要小心。

2.6 序列:一行数据的真实单位

「序列」是同一患者同一天、同一次检查的一组图像。它的存在理由,论文讲得很实在:

序列号看起来冗余,因为可以用矫正胎龄识别。但一周内可能做两次检查,矫正胎龄相同,所以必须额外加序列号字段。

每个序列内部:

  • 矫正胎龄相同(同一天检查)
  • 设备相同(同一台机器)
  • 诊断码相同(同一份判读结论)
  • 图像数不等(取决于这次检查拍了几张、单眼还是双眼)

140 名患者有多个序列,其余只查过一次。这个「多次检查」的比例(约四分之三)是这个库的隐藏价值:它带纵向信息,虽然跨度只覆盖筛查窗口。

2.7 一条记录逐行解剖

把 §2.2 的例子完整读一遍,看每一段如何共同构成一个「临床时刻」:

001_F_GA41_BW2905_PA44_DG2_PF0_RC3_S01_1.jpg
读法 信息 临床含义
患者 001,女 性别 女婴,胎龄 41 周出生(足月),体重 2,905 g(正常范围)
GA41 / BW2905 足月、正常体重 不是典型早产儿——她的 ROP 风险来自出生后的氧疗等临床因素
PA44 矫正胎龄 44 周 出生后约 3 周做的检查
DG2 诊断码 2 出血,后极部其余正常
PF0 plus 0 血管形态正常,无扩张迂曲
RC3 Clarity RetCam 3 640×480,这批图分辨率最低一档
S01 / 1 第 1 次检查第 1 张 这是她筛查轨迹的起点

这一段解剖说明了一个容易被忽略的事实:这个数据集里「早产儿」和「ROP 患者」不是同一个集合。有足月儿(因为氧疗被纳入筛查)、有早产儿但眼底正常、也有早产儿发展成 ROP。做队列描述时这三类要分开。

2.8 与同类 ROP 数据集的定位差异

论文 Table 2 综述了国际上的同类资源,这张对照表是判断「该不该用它」的直接依据:

数据集 来源 规模 开放性 有无 plus 标注
本数据集 捷克俄斯特拉发 六千余图 / 188 人 CC0 完全开放 有(PF0/PF2)
iROP(USA-iROP) 美国 5,561 图 不开放 有
USA-1 美国 77 图 不开放 有(plus/pre-plus/normal 三档)
USA-4 美国 248 眼 / 67 人 不开放 有
德国 ROP 登记 德国 90 人 无图像 —
韩国 NHI 队列 韩国 181,582 人 无图像 —
e-ROP 美国多中心 胎龄 22–35 周、体重 <1251 g 需申请 有
SUNDROP 斯坦福 远程筛查网络 需申请 有

结论很清楚:能拿到的里面它最大,大的里面只有它能拿到。 这不是说它质量最好——iROP 的标注体系更成熟、病例更多——而是说在「零门槛 + 带临床元数据 + 带 plus 标签」这个交集上,它目前是唯一选项。

§3 影像来源层:谁被拍、怎么拍

3.1 入组规则

论文写得很具体:筛查对象是胎龄 <32 周或出生体重 <1500 g 的新生儿;但「depending on their current clinical condition」,临床状态不稳定的较大婴儿也会纳入——论文举的例子是需要氧疗的患儿,如呼吸窘迫综合征(RDS)。

这解释了 §2.3 里那两个「异常」值:胎龄 41 周、体重四千余克。他们不是数据错误,是筛查方案本身的宽容度。

筛查节奏:每两周一次,直到全视网膜血管化完成——论文说这通常发生在矫正胎龄 40 周。间隔可按临床情况缩短。这个节奏决定了序列的时间结构:一个从 28 周出生的孩子,可能被拍 6 到 8 次。

3.2 一次检查的完整动作

理解拍摄流程,才能理解图像里那些「瑕疵」从哪来:

  1. 散瞳:检查前滴散瞳药,人工散瞳(artificial mydriasis)。瞳孔大小因此不完全一致,直接影响进光量与成像亮度。
  2. 开睑:用开睑器撑开眼睑。器械可能进入视野边缘。
  3. 体位:患儿仰卧,医师俯身操作。
  4. 拍摄:先用间接检眼镜做临床检查,再用数字成像系统拍后极部。广角镜头贴角膜拍摄。
  5. 多次尝试:因为患儿不配合,一次检查往往拍多张,好的留下、坏的也可能留下。

这五步解释了数据集里的四类「噪声」:瞳孔大小不一导致的亮度差异、器械阴影、运动模糊、以及同一序列内图像质量的巨大波动。

3.3 为什么保留低质量图

作者的取舍值得单独说:

部分低质量图像被删除,但另一部分(即使质量较差)保留在数据集中,以维持数据的多样性。

这句话背后的判断是:真实筛查场景中,坏图是常态,不是例外。一个只在好图上训练的模型,部署到病房里会立刻失效——因为病房里拍出来的就是这些坏图。

对使用者的实际含义是双向的:

  • 如果你的目标是发论文刷指标,先按质量分层评测,否则好图和坏图混在一起,指标的意义会模糊;
  • 如果你的目标是做能上线的系统,那这批坏图是必需品,不要筛掉——它们是分布的一部分。

§4 标注体系层:两个人判、第三个人裁

4.1 双人独立 + 第三方共识

论文原话:

两名眼科专家独立完成诊断与 plus 形态判定;结果不同的病例经讨论,与第三名专家达成共识。只有约 4% 的病例需要第三方意见。

这个流程在小规模数据集里算标准配置。它的意义和局限都值得说清。

意义:4% 的分歧率是一个可量化的标注难度指标。它告诉你「ROP 分期 + plus 判定」这件事在专家之间的可重复性相当高(96% 一致),比很多影像任务好。

局限:没有报告 kappa 或 ICC。4% 是「最终需要第三方」的比例,不是「初始不一致率」——两者可能不同(如果两名专家先讨论再决定是否找第三方,初始不一致率会被讨论掩盖)。这一点在论文里没写清。

4.2 plus 形态:三档变两档

plus 病是 ROP 的危险征象:后极部视网膜血管异常扩张与迂曲。临床分三档:normal、pre-plus、plus。

数据集的 PF 字段取值是 0、1、2:

PF 含义 数据集中是否存在
0 正常(normal) 有
1 数据集里未被使用(pre-plus) 无
2 非正常(plus) 有(2 例患者)

论文明确写 pre-plus 未观察到。而 plus 只有 2 名患者——这也是论文自己点出的一个容易被误读的点:

两名观察到非正常 plus 形态(PF2)的患者,最初被判为正常(PF0),所以这两名患者在 PF0 和 PF2 里各计一次。

也就是说,PF 的取值在患者层面不是互斥的。按 PF 分组统计人数时,这两名患者会被数两次。做「plus 检测」的二分类模型时,这意味着正样本极少(2 人),类别极度不平衡。

4.3 诊断码的类别结构

论文 Table 10 给出每个诊断码对应的患者数、序列数与图像数。有条件的原则:不能相加(§2.4)。

从数据处理角度,这个表最实用的读法是「哪些类别图像多、哪些类别图像少」。论文自己说了:

生理性(正常)图像与其余图像的比例在某些角度看并不理想。

这句话是委婉的。对分类任务来说,正常类占大头、各病理类零散,意味着:

  1. 直接做多分类会严重偏向正常类;
  2. 「正常 vs 非正常」的二分类更稳,且论文明确说这本身就有临床价值——能筛掉正常人,剩下的就都值得看;
  3. ROP 4A/4B/5 三类图像数为零,任何声称「做五期分类」的工作都不可能是用这个库做的。

4.4 案例:DG2 + PF0 的那张足月儿眼底图

用 001_F_GA41_BW2905_PA44_DG2_PF0_RC3_S01_1.jpg 走一遍标签的完整含义,这是理解这套标注体系最快的路径(后文 §5、§7 会反复回到它):

第一层,诊断。 DG2 是「出血,其余正常」。出血是 ROP 之外的后极部表现,常见于早产儿视网膜——血管脆弱、压力波动。它不是 ROP 的分期,是一条独立的病理发现。

第二层,plus。 PF0 表示血管形态正常。这一条与 DG2 不冲突:有出血不等于有 plus。两者是独立的判读维度。

第三层,时间。 PA44 是矫正胎龄 44 周。按论文的筛查终止条件(约 40 周全血管化),这个孩子已经超过常规筛查窗口——她之所以还在被查,说明临床上有别的原因(足月 + 氧疗 + 出血)。

第四层,设备。 RC3 意味着 640×480。如果要做病灶分割,这张图的可分割性远低于 ICON 的 1240×1240。同一份标注,在不同设备上的「可学习性」完全不同。

结论。 这一张图说明:这个数据集的标签不是一个标签,是四个正交维度(诊断、plus、时相、设备)。做实验设计时,任何一个维度没控制住,结论都会有歧义。

后文 §5.4 会回到 §4.4 的案例讲病灶分割的定位,§7.3 会用同一个案例的性别段核对论文的一处数字笔误,§9.2 的解析脚本也以它为自检样例。

§5 任务与评测层:能做什么、怎么切分

5.1 四类可行任务

按数据能支撑的程度排序:

任务 输入 输出 数据充分性
正常 vs 非正常(二分类) 单图 0/1 充分,论文自己推荐
plus 检测(PF0 vs PF2) 单图 0/2 不充分,正样本仅 2 人
诊断码多分类 单图 DG 各类 中等,类别极不平衡
病灶分割 单图 掩膜 需自标或用 ReLeSeT 生成
跨设备迁移 设备 A 训练、B 测试 — 充分,三台设备正好

论文自己点出的用法是第一个:「如果我们能识别健康患者,剩下的就可以当作有病」。这句话看着像取巧,实际是很务实的临床逻辑——筛查的第一目标是不漏,第二目标才是分类准确性。

5.2 切分:为什么必须按患者

这是用这个数据集最容易犯的错,值得单独强调。

同一患者有多个序列,同一序列有多张图,同一序列内所有图共享诊断码。如果按图像随机切 8:2:

训练集可能包含 001 号患者的 S01 序列的第 1、3、5 张
测试集可能包含 001 号患者的 S01 序列的第 2、4 张

这两组图的眼底几乎一样(同一天、同一台设备、同一次检查)。模型在训练集见过这个眼底,在测试集再认出来毫不费力。指标会虚高,而且虚高的幅度不可估计。

正确的做法是三级 group 切分,从粗到细:

import pandas as pd
from sklearn.model_selection import GroupKFold

df = pd.DataFrame(rows)
df["pid"] = df["pid"].astype(int)
df["series"] = df["pid"].astype(str) + "_S" + df["series"]

#--按患者切分:保证同一患者的所有序列、所有图落在同一侧
gkf = GroupKFold(n_splits=5)
for tr, te in gkf.split(df, groups=df["pid"]):
    assert set(df.iloc[tr]["pid"]) & set(df.iloc[te]["pid"]) == set()

如果研究目标是「同一患者不同时间的泛化」(比如预测下一次检查会不会恶化),才按序列切:

#--按序列切分:允许同一患者跨侧,但同一序列不跨
gkf = GroupKFold(n_splits=5)
for tr, te in gkf.split(df, groups=df["series"]):
    assert set(df.iloc[tr]["series"]) & set(df.iloc[te]["series"]) == set()

两种切法的指标不能放在一起比。论文里没给基准划分,所以任何「在这个数据集上达到 X%」的说法,都必须说明切法。

5.3 跨设备:一个天然的消融实验

三台设备覆盖了小儿眼底相机的三个世代,分辨率从 640×480 到 1440×1080。这给了三种实验设计:

设计 训练 测试 回答什么问题
同设备 RC3 RC3 上限性能(同分布)
跨设备 RC3 ICON 换机器还能用吗
混合 RC3 + ICON RE 多设备混训是否提升泛化

第三种最有实际价值:基层医院用的是旧机器(RC3 一代),三甲用的是新机器。一个只在 ICON 上训练的模型,部署到基层就是跨设备场景。

论文自己的分割评测就做了这个比较,并给了一个具体的结论:Clarity RetCam 3 的图在特异度、MSE、相关系数与 Sørensen-Dice 上略好,而只有敏感度是 Phoenix ICON 更好。这个结论的方向值得记:分辨率高不等于分割好——ICON 是 1240×1240,比 RC3 的 640×480 高得多,但分割指标反而略低。可能的原因是 ICON 的环形照明让病灶边界对比度更强但内部灰度更不均匀,活动轮廓模型在这种分布上更难收敛。

5.4 病灶分割:ReLeSeT 的用法

论文配套发布了一个 Matlab 工具 ReLeSeT(Retinal Lesion Segmentation Tool),流程三步:

  1. 预处理:分离红、绿通道,自适应直方图均衡,双边滤波(bilateral filter)
  2. 分割:无边缘活动轮廓模型(active contour without edges),400 次迭代
  3. 特征:对分割出的掩膜计算几何特征(面积、周长、圆度等)与灰度特征

为什么用双边滤波而不是中值滤波,论文给了数据:在 MSE、相关系数、Sørensen-Dice 三个指标上双边滤波都更好,且在验证集与测试集上表现一致。

为什么是 400 次迭代,论文也说了:这是「分割性能、计算时间、病灶形态多样性」之间的折中。小病灶少迭代就够,大病灶需要更多。选 400 是对大病灶的保险。

把这个工具放到 §4.4 的案例上看:那张 640×480 的图(RC3)上,DG2 标注的是一个出血点,ReLeSeT 的作用就是把那个点勾出来并算出面积——它是「追踪某个具体病灶随时间的变化」,不是「把全图的病灶都找出来」。这个定位要看清:它做的是单病灶的交互式分割,不是全图自动分割。论文自己写「physicians are standardly focused on tracking specific lesions」——临床上医生看的是某一个具体的出血点有没有变大,不是全图的病灶总面积。这个设计与临床工作流是对齐的。

5.5 图像增强:五种方法及其适用条件

论文 Technical Validation 一节用 Python 3.9 + OpenCV 4.6.0 实现了五种增强方法,每种对应一个具体问题:

方法 解决什么 代价
Gamma 校正 整体过暗/过亮(深色皮肤患儿更常见) 全局调整,局部对比度不变
平均亮度归一化 不同设备/散瞳程度导致的亮度差异 需要设定阈值 b_min
固定宽高比裁剪 去除黑边、统一输入尺寸 损失视野边缘
CLAHE 局部对比度低(血管、病灶不清晰) 噪声也被放大
通道分离 绿通道对血管/出血对比度最高 丢色彩信息

作者还给了高斯平滑加权叠加这一招,参数是 α=5、β=−5、γ=128。这个组合的效果是「颜色失真但结构显著增强」——适合给人看,不适合直接喂给依赖色彩统计的模型。

一个实用建议:如果做的是 plus 检测(看血管扩张迂曲),绿通道 + CLAHE 是最直接的组合;如果做病灶分割,双边滤波(ReLeSeT 用的)比 CLAHE 更合适,因为 CLAHE 会放大噪点,干扰活动轮廓的收敛。

§6 与库内条目的关系

库内眼科与儿科影像条目可以分成三条线,这个数据集处在「儿科 + 眼底 + 筛查」的交点上。

条目 关系
deepdrid、odir、messidor 一类成人糖网库 任务相近(眼底病变分级),场景完全不同(成人 vs 新生儿、配合 vs 不配合)
oct2017、octdl、kermany 一类 OCT 库 成像原理不同(断层 vs 表面照),不能互换
idrid、drive、stare 一类血管分割库 都是成人眼底的血管分割金标准;本数据集无像素级标注,做血管分割要另找标注源
neo 类新生儿影像条目 模态不同(超声/监护),但人群重叠

检索路径建议:想找「小儿眼底」→ 这一篇;想找「眼底血管分割金标准」→ DRIVE/STARE/IDRiD;想找「ROP 分期大库」→ 目前公开库里没有,只能靠这份数据集加申请制资源组合。

§7 质量评估与局限性

7.0 读这一节之前需要知道的一件事

这个数据集不应当用「大数据集」的标准来评价。按 ImageNet 式的直觉,188 个患者、六千余张图是「太小了」。但这种评价框架在这里是错位的,原因有三:

第一,ROP 筛查本身是个小样本问题。 一个中等规模 NICU 一年筛查的新生儿就是一两百人。要凑到「十万张」,需要几十家医院合作十年——这也是为什么 iROP 这类大库至今不开放。

第二,这个库的价值不在规模,在「标签完整度」。 每一张图都带胎龄、体重、矫正胎龄、诊断、plus、设备。同样这批图,如果只有图像没有元数据,对 ROP 研究的价值会掉一个数量级——因为 ROP 的风险模型本质上是「人口学 + 影像」的联合模型。

第三,它的不可替代性在「可及性」。 iROP 有 5,561 张图,比它少不了多少,但不开放。SUNDROP 也要申请。在「今天就能下载、明天就能跑实验」这个维度上,它是目前唯一选项。

所以正确的评价框架是:给定它的规模上限,它在标签、开放性、文档完整度上做到了什么程度。

7.1 DAIMS 五维评分

维度 评分 依据
Data Collection(采集) ★★★☆☆ 真实临床筛查数据、单一中心、连续入组;扣分项:单中心、无多设备交叉验证设计、采集时间跨度未披露
Annotation(标注) ★★★★☆ 两名专家独立 + 第三方共识(4%)、双维度(诊断 + plus)、序列级一致性维护;扣分项:未报告 kappa/ICC、pre-plus 缺失、4A/4B/5 无样本
Intrinsic Quality(内在质量) ★★★☆☆ 图像为 jpg、无压缩参数披露、三台设备分辨率差异大;扣分项:低质量图保留但未标注质量等级
Metadata(元数据) ★★★★★ 胎龄、体重、矫正胎龄、诊断、plus、设备、序列、图像号八维齐全,且编进文件名;xlsx + csv 双份;这是它最强的一项
Standardization(标准化) ★★★☆☆ 命名规则清晰、目录结构合理;扣分项:非 BIDS/DICOM 标准格式、无官方数据字典 schema 文件、无官方划分

四项里 Metadata 是五星,这不是凑数——把八个维度同时编进文件名,同时给 xlsx 与 csv,还保留三种目录组织方式,这个工程量在小型数据集里不常见。

7.2 逐条局限

局限 具体表现 后果
单中心 捷克俄斯特拉发一家医院 人群、设备、筛查方案都单一,外推性未知
pre-plus 缺失 PF 只用了 0 与 2 三分类研究无法进行
plus 正样本极少 仅 2 名患者 plus 检测模型无法可靠训练
ROP 4/5 期无图 4A/4B/5 图像数为零 无法做五期分类,重症识别缺样本
视野局限 100–130°,非全视网膜 周边病变(最早期的分界线/嵴)拍不到
无像素级标注 只有图像级/序列级标签 分割任务需自建金标准
无官方划分 未给 train/val/test 各文献指标不可直接比较
低质量图混入 刻意保留以维持多样性 不做质量分层会低估真实难度
采集时段未披露 论文未给起止年份 无法判断设备演进对图像分布的影响
患者/图像性别计数不一致 正文一处写 96 女,表格与图像数为 94 引用时要指明以哪个为准

7.3 一个具体的、可核对的内部不一致

论文在描述患者构成时出现两处数字:

  • 「Briefly, there are 6,004 images from 188 patients, 96 female and 94 male subjects, recalculated to 3,081 images from female patients and 2,923 from male patients.」(原文照录)
  • 后文「The dataset contains images from 188 patients - 94 male and 94 female patients.」

96 + 94 = 190 ≠ 188,而 94 + 94 = 188。所以前者是笔误,后者与总数自洽。图像数两侧相加恰好等于总量,也是自洽的。

回到 §4.4 的案例:那张图的文件名里 F 写的是女,若按 96 女 94 男的算法,库里应有 190 名患者,与 188 对不上,也与每张图只有一个性别段的编码方式对不上。所以这类不一致在小数据集论文里并不罕见,处理原则是:用能与总数自洽的那个,并在引用时注明。这也提醒一件事——infant_retinal_database_info.xlsx 是可以自己统计的,遇到数字疑问直接数表,比争论哪句话对更快。

7.4 隐私与伦理边界

论文的声明是:完全匿名,任何人(包括患者本人)都无法将图像与数据对应到具体患者。图像角标已被覆盖,患者编号是纯整数。

但有一个技术层面的保留值得写出来:眼底血管形态具有生物识别性。已有研究证明视网膜血管模式可用于个体识别。所以「匿名」在这里的含义是「无法通过常规信息关联」,不是「在生物特征意义上不可识别」。对于 188 人这个规模的库,实际风险很低,但在伦理审查层面应当知情。

数据集本身由医院按机构与伦理规范采集,论文未提及单独的知情同意豁免细节——这一点在二次使用(尤其是商用,CC0 允许)时值得向使用方说明。

§8 版本与生态

8.1 版本节奏

Kaggle 上的四个版本:

版本 日期 说明
v1 2022-11-02 首发
v2 2024-05-24 论文正式发表前后的更新
v3 2024-07-23 与论文定稿同步
v4 2025-06-25 最近一次更新

论文给出的数据发布日是 2023-04-04,并写明「可能的数据库更新总会附带发布日期」。这说明作者把「更新」当作常规操作,而不是一次性发布。

对使用者的实际含义:记录你用的是哪个版本。Kaggle 的下载 URL 带版本号,可以锁定;但如果你只记了「Kaggle 上的那个数据集」,半年后重跑可能对不上。

8.2 三处分发点

同一份数据放在三个地方,各有用途:

位置 用途 备注
Kaggle 主分发点,带版本管理与讨论区 需 Kaggle 账号(免费)
Figshare 学术存档,带 DOI 引用时更规范
GitHub 代码(增强方法 + ReLeSeT) 不放图像

这个三分布局是小型学术数据集的典型做法:Kaggle 拿流量、Figshare 拿可引用性、GitHub 放代码。三者互补,没有冗余冲突。

8.3 它为什么存在,靠什么持续

需求侧的空洞:ROP 筛查是「该做但没人愿做」的活。它需要反复检查、需要专科判读、需要在 NICU 里排时间。全球每年有大量早产儿,而能做 ROP 筛查的眼科医生严重不足——在中等收入国家尤其明显。远程筛查(telemedicine)是公认的解法,而远程筛查的前提是「有人工智能辅助判读」。要做 AI,就得有开放数据;而开放的 ROP 数据长期不存在,因为病历敏感、患儿是未成年人、标注成本高。

这个数据集填的就是这个洞。 它不追求成为最大的库,而是成为「第一个能让人马上开始做实验的库」。

供给侧的三个条件:

  1. 有一家愿意公开的医院。 俄斯特拉发大学医院眼科做了十几年筛查,愿意把影像拿出来——这在儿科影像领域不常见,未成年人数据的公开门槛远高于成人。
  2. 有一组跨学科的人。 作者名单里有眼科医生(Timkovič、Kolarčík、Maršolková)、计算机学院的研究者(Nowaková、Hasal、Snášel)、生物医学工程(Kubíček、Augustynek、Varyšová)。这种组合是小型医学数据集的典型配置:临床方提供数据与判读,工程方做整理与工具。
  3. 选了 CC0。 这是最关键的一步。CC BY 已经足够开放,但 CC0 把「署名」这个最后的摩擦也去掉了。代价是放弃了署名权带来的学术可见度;收益是任何人(包括商业公司)都能无门槛使用,扩散速度最快。

它不可替代的部分:同时满足「CC0 + 完整人口学 + plus 标注 + 三设备」的早产儿眼底库,目前只有它。任何一项放宽,都能找到替代;四项同时要,没有。

那它靠什么持续? 这个问题在小型数据集上比大型库更尖锐,因为它没有专门的工程团队、没有年度经费、也没有「不更新就断供」的下游依赖。答案有三条:

一是更新成本低。 数据是在常规筛查里顺带积累的,医院不停诊就一直在产生新图像。作者要做的只是定期导出、编码文件名、上传。这种「边际成本接近零」的维护模式,是它能持续的前提。

二是学术激励成立。 数据集本身有 Scientific Data 论文可引,配套工具(ReLeSeT、增强方法)各有会议论文,形成一条小型的成果链。对高校团队来说,维护它有明确的产出回报。

三是许可不构成负担。 CC0 之后,作者不再需要回应「能不能商用」「要不要签协议」这类请求——这正是很多数据集在发布两三年后停更的真实原因:维护者被咨询淹没。放弃署名权换来的,是维护工作的可持续。

三种可能的失效情形:

  • 若 iROP 或某个更大规模的多中心库转为开放,它的「唯一可及选项」地位会立刻消失;
  • 若 ROP 筛查的临床路径被新技术改写(例如广域 OCT 或 AI 直接床旁判读成为标准),这个数据集的任务定义会过时;
  • 若 Kaggle 的分发策略变化(账号门槛、商用条款),CC0 的承诺虽然不会失效,但实际可及性会受影响——这也是为什么 Figshare 的副本很重要。

8.4 生态位:上游与下游

上游:它是 NICU 筛查流程的副产品。任何做新生儿信息化的团队,理论上都能产出类似的库——这也是它可能被复制的原因。

下游:它被用在三类工作里。

下游类型 典型用法 代表工作
分类模型 正常 vs 异常、plus 检测 论文引用的多项 ROP 检测研究
分割与增强 病灶分割、图像增强方法对比 作者自己的两篇 INCoS 论文
教学 病例库、住院医培训 论文明确提到「educators」用途

第三类容易被忽略,但论文里专门写了「Such a division is a user-oriented solution enabling, e.g., educators, quick orientation in the database」——按患者/序列分目录就是为了教学。这是一个「数据集设计考虑教学场景」的少见例子。

§9 使用指引

9.1 三种角色的最短路径

做筛查 AI 的(想尽快出结果):下载 images_stack → 用 §2.2 的正则解析文件名 → 做「正常 vs 非正常」二分类 → GroupKFold 按患者切分 → 报告时说明切法。这条路一周能跑通。

做跨设备研究的(关心部署):先看 dev 字段的分布 → 按设备做 GroupKFold → 训练 RC3、测试 ICON,再反过来 → 对比退化幅度。论文 §5.3 的分割对比是这个思路的现成模板。

做教学的(要给人看):用 images/ 目录,按患者编号走。一个患者一个文件夹,文件夹里按序列分子目录,序列号就是检查次序。给住院医讲「这个孩子从正常到出现 plus 用了三周」,直接按 S01、S02、S03 顺序放图即可。

9.2 一段能跑的最小管线

下面这段代码把「解析文件名 → 建表 → 按患者切分 → 统计每类样本量」串起来,是任何实验的起点:

import os, re
import pandas as pd
from sklearn.model_selection import GroupKFold

PAT = re.compile(
    r'^(?P<pid>\d+)_(?P<sex>[MF])_GA(?P<ga>\d+)_BW(?P<bw>\d+)'
    r'_PA(?P<pa>\d+)_DG(?P<dg>\d+)_PF(?P<pf>\d+)'
    r'_(?P<dev>[A-Z0-9]+)_S(?P<series>\d+)_(?P<img>\d+)\.jpg$'
)

def build_table(root: str) -> pd.DataFrame:
    rows = []
    for fn in os.listdir(root):
        m = PAT.match(fn)
        if not m:
            continue
        r = m.groupdict()
        for k in ("pid", "ga", "bw", "pa", "dg", "pf", "series", "img"):
            r[k] = int(r[k])
        r["file"] = os.path.join(root, fn)
        r["sid"] = f"{r['pid']}-S{r['series']:02d}"
        rows.append(r)
    return pd.DataFrame(rows)

df = build_table("images_stack")
print(df.shape)                                   # 期望 (6004, 12)
print("患者", df.pid.nunique(), "序列", df.sid.nunique())

#--完整性自检:论文的四个数
assert df.pid.nunique() == 188
assert len(df) == 6004
assert (df.sex == "F").sum() == 3081
assert (df.sex == "M").sum() == 2923

#--按患者切分(唯一正确的默认切法)
for i, (tr, te) in enumerate(GroupKFold(5).split(df, groups=df.pid)):
    print(f"fold {i}: train {len(tr)} / test {len(te)}")

四个断言是有意加的:它们对上了论文的四个数,说明文件解析没问题。任何一条不过,先检查是不是下错了版本,再检查正则。

9.3 放进 AI 流程时的三个注意点

第一,别把它当预训练语料。 六千余张图的规模做自监督预训练远远不够,且同一患者的图高度相似,会放大有效样本的冗余。它适合做下游微调与评测,不适合做预训练。

第二,别用随机的 train/test split。 §5.2 讲过了,这里再强调一次:同一序列的图几乎相同,随机切分会造成严重泄漏。这是用这个库最常见的错误,而且错了不会报错,只会得到漂亮但无意义的指标。

第三,别忽略设备字段。 如果训练集里 RC3 占多数、测试集里 ICON 占多数(随机切分很容易这样),模型会同时学到「设备 → 标签」的伪相关。按设备做分层统计是必要的。

§10 AI 使用声明

项 内容
性质 真实临床筛查影像,非合成、非增强生成
用途(推荐) 筛查辅助判读、跨设备迁移、图像增强、教学
不建议用途 直接临床决策、作为唯一训练源做五期 ROP 分类、自监督预训练语料
标注来源 两名眼科专家独立判读 + 第三方共识(约 4%)
伦理 完全匿名;眼底血管具生物识别性,二次使用应知情
许可 CC0 1.0,可商用、可再分发、无需署名(学术写作仍建议引用)
引用 Timkovič J, Nowaková J, Kubíček J, et al. Sci Data 11, 814 (2024). doi:10.1038/s41597-024-03409-7
版本 Kaggle v4(2025-06-25);记录版本号是复现的前提
状态 活跃(作者声明会持续更新并附发布日期)
案例参照 全文以 001_F_GA41_BW2905_PA44_DG2_PF0_RC3_S01_1.jpg 为贯穿样例(§4.4 解剖、§5.4 分割定位、§7.3 数字核对、§9.2 脚本自检)

常见误读(避坑清单)

常见说法 实际情况 证据
「这个数据集有 96 名女性患者」 论文正文一处笔误;正式数字是 94 女 94 男 论文同时给出「188 patients - 94 male and 94 female」,96+94=190≠188
「按诊断码统计,加起来是 188 人」 不能相加,同一患者不同序列可诊断不同 论文原话「the number of patients in Table 10 can not be summed」
「可以做三分类:normal / pre-plus / plus」 pre-plus 未出现,PF 只用了 0 与 2 论文「the pre-plus form is not observed in the dataset」
「能做 ROP 五期分类」 4A/4B/5 三期图像数为零 论文「ROP 4 A, 4B and 5 are not observed in the dataset」
「有多少张图就有多少个独立样本」 188 人、约 400 个序列;同序列内图像高度相似 序列定义见论文 Dataset parameters 一节
「随机切分 train/test 没问题」 会严重泄漏,必须按患者或按序列切 同序列共享诊断码、同设备、同一天
「Kaggle 写着 non-commercial,不能商用」 许可正文是 CC0,不限制商业用途;那句是描述文字 论文写「available under CC0 licensing at Figshare, Kaggle, and GitHub」
「三个目录加起来是 18,000 张图」 三份是同一批图的三种组织方式 论文「The set of identical images is stored in three different root folders」
「分辨率高所以 ICON 的图更好分割」 论文数据显示 RC3 在多数分割指标上略优 论文 Technical Validation 表 7 的对比结论
「8 GB 全是图像」 三份副本各占一份,唯一图像约 2 GB 量级 Kaggle API 报告 7,974,013,608 字节,含三份副本

FAQ

问:这个数据集和 iROP 有什么区别?
答:iROP(美国)规模相近(约 5,561 张)但不对外开放;本数据集 CC0 完全开放。两者标注体系不同:iROP 的 plus 分三档(normal/pre-plus/plus),本数据集只有两档(pre-plus 缺失)。

问:能做早产儿 vs 足月儿的对比研究吗?
答:能。胎龄字段直接给,且库里有胎龄 41 周的足月儿(13 人)。但要注意足月儿入组的原因是氧疗等临床因素,不是随机样本,不能当「正常足月对照」用。

问:为什么 plus 只有 2 个患者?
答:因为 plus 是 ROP 里相对少见的征象,且只在 ROP 诊断下出现。论文说得很清楚:「the plus form is a symptom that can occur in any ROP stage but only in connection with ROP diagnosis, so the number of occurrences is not high」。

问:图像里能看到 ROP 的分界线(demarcation line)吗?
答:多数不能。分界线常在中周部到周边,而这批图是后极部视野(100–130°)。能看到的多是后极部的出血、血管形态、以及部分中周部结构。

问:能用它做血管分割吗?
答:技术上可以,但没有金标准。成年人眼底有 DRIVE/STARE/CHASE_DB1 等像素级标注库,本数据集没有。作者另一篇论文(Hasal 等,INCoS 2023)用 U-Net + VGG-16 做过血管分割,但那篇的标注是从哪儿来的、是否公开,需要查原文。

问:数据集的图像是什么时候拍的?
答:论文未披露起止年份,只说「首版发布 2023-04-04」,Kaggle 首发 2022-11-02。从设备构成看(RC3 是老机型、Envision 与 ICON 是后续机型),采集跨越了设备换代的时段。

问:能用它训练一个能直接上临床的模型吗?
答:不能。188 人、单中心、无外部验证队列,任何模型在这个规模上都无法证明泛化性。它可以作为原型验证与论文基线,不能作为临床部署的依据。

问:为什么保留低质量图像?
答:作者的判断是「婴儿患者不配合,很难只拍到好图」,所以保留部分低质量图以反映真实分布。对做部署的人来说这是好事,对刷指标的人来说是噪声。

术语表

术语 解释
ROP(Retinopathy of Prematurity) 早产儿视网膜病变,未成熟视网膜血管异常增生导致的疾病,可致盲
矫正胎龄(PA, postconceptional age) 胎龄 + 出生后实足周数;也叫经后年龄(postmenstrual age)
胎龄(GA, gestational age) 出生时的孕周数
plus 病(plus disease) 后极部视网膜血管异常扩张与迂曲,是 ROP 恶化的危险征象
pre-plus plus 的前期状态,介于正常与 plus 之间;本数据集未收录
分界线 / 嵴(demarcation line / ridge) ROP 最早期的视网膜表现,位于血管化区与无血管区交界,多在周边
序列(series) 同一次检查产生的一组图像,同患者、同天、同设备、同诊断码
后极部(posterior pole) 视网膜中央区域,含视盘与黄斑,广角相机的主要成像区
开睑器 撑开眼睑的器械,ROP 检查必需(患儿不会主动睁眼)
人工散瞳(artificial mydriasis) 用滴眼液扩大瞳孔,ROP 检查前的准备步骤
活动轮廓模型(active contour) 一种基于能量最小化的图像分割方法,ReLeSeT 用它分割病灶
双边滤波(bilateral filter) 保边去噪的滤波方法,ReLeSeT 用它做预处理
CLAHE 限制对比度的自适应直方图均衡,增强局部对比度
RC3 / RE / ICON 三台相机的代码:Clarity RetCam 3、Natus RetCam Envision、Phoenix ICON
DG / PF 诊断码(diagnosis code)与 plus 形态(plus form)字段
CC0 Creative Commons 公有领域贡献,放弃全部权利,不要求署名
NICU 新生儿重症监护病房

附录 A:核心数字核对表

项 值 来源 可否自行复算
图像总数 六千余 论文摘要 + Kaggle 描述 可,数文件
患者数 188 论文 可,数唯一 pid
女 / 男 94 / 94 论文 可
女性图像 / 男性图像 3,081 / 2,923 论文 可
胎龄均值 33 周 论文 可
胎龄范围 23–41 周 论文 可
出生体重均值 2,017 g 论文 可
出生体重范围 480 g 至四千余克 论文 可
矫正胎龄范围 30–113 周 论文 可
多次检查的患者数 140 论文 可,数序列
需第三方裁定的比例 约 4% 论文 不可(未给原始分歧记录)
plus 患者数 2 论文 可
数据集体量 约 8.0 GB Kaggle API 可
分辨率 640×480 / 1440×1080 / 1240×1240 论文设备一节 可,读图像尺寸

附录 B:文件与目录清单

路径/文件 内容
images/ 按 患者编号/序列号/ 组织的图像
images_stack/ 平铺的全部图像
images_stack_without_captions/ 平铺、无角标文字的图像
infant_retinal_database_info.xlsx 患者信息汇总(含字段说明)
infant_retinal_database_info.csv 患者信息(无字段说明,纯数据)

附录 C:外部资源对照

资源 类型 与本文的关系
iROP(Imaging and Informatics in ROP) 美国多中心影像库 规模相近,不开放
SUNDROP(Stanford University Network for Diagnosis of ROP) 远程筛查数据集 需申请
e-ROP 美国多中心前瞻研究 入组胎龄 22–35 周、体重 <1251 g
德国 ROP 登记 登记库 90 人,无图像
DeepROP(中国成都) 模型工作 自带数据集,未公开
ReLeSeT Matlab 工具 本文配套的病灶分割工具
Image_enhancement_retinopathy_of_prematurity Python 代码 本文配套的图像增强实现

附录 D:一张图的完整信息流

以 001_F_GA41_BW2905_PA44_DG2_PF0_RC3_S01_1.jpg 为例,看信息在系统里怎么走:

NICU 筛查排班
    ↓ 患者 001 到了检查日
滴散瞳药 → 开睑 → 医师用 RetCam 3 拍摄
    ↓ 相机自动烧录角标(亮度、日期)
原始 jpg(含角标)
    ↓ 覆盖角标黑矩形
清洗后 jpg
    ↓ 编码元数据到文件名
001_F_GA41_BW2905_PA44_DG2_PF0_RC3_S01_1.jpg
    ↓ 复制三份 + 不同目录组织
images/  images_stack/  images_stack_without_captions/
    ↓ 上传
Kaggle v1 → v2 → v3 → v4
    ↓ 下载 + 正则解析
DataFrame(6004 行 × 12 列)
    ↓ GroupKFold(groups=pid)
可用的训练/评测切分

这条链上有三个地方会丢信息:角标覆盖(丢掉拍摄参数)、文件名编码(丢掉未编码的字段)、三份副本(可能被误当三份数据)。三处都有对策,但都需要知道。

附录 E:环境与依赖

跑通本文所有代码只需要标准数据栈:

pip install pandas scikit-learn pillow opencv-python

如果要复现 ReLeSeT 的分割流程,需要 Matlab(ReLeSeT 是 .m 与打包的 .exe);如果想在 Python 里做等价实现,用 scikit-image 的 active_contour 或 morphsnakes,但要自己实现「无边缘」版本的 C-V 模型能量项。

如果要读 DICOM(本数据集不是 DICOM,但用同一批病例做临床管线对接时可能需要),加 pydicom。

附录 F:三个可以直接开跑的实验设计

实验一:正常 vs 非正常二分类。
标签:dg == 正常类 为 0,其余为 1。切分:GroupKFold 按 pid。评测:AUC + 敏感度(优先,因为筛查要「不漏」)+ 按设备分层的 AUC。预期:同设备 AUC 高,跨设备下降。

实验二:跨设备迁移。
训练 RC3 → 测试 ICON,再训练 ICON → 测试 RC3。看退化幅度。加一个「混训」对照组(RC3+ICON 一起训,测 RE)。这个设计直接回答「基层旧机器上训的模型能不能给新机器用」。

实验三:图像增强的增益。
在同一划分下,比较「原图」与「绿通道 + CLAHE」两种输入的模型性能。控制变量:同一网络、同一超参、同一划分。论文的 Technical Validation 给了增强方法的实现,可以直接搬。

三个实验的共同前提是:按患者切分。这一点在任何实验里都不能省。

另外,三个实验都建议先拿 §4.4 那张案例图做一次手工验证:把它的文件名解析出来,看 dg、pf、dev、pa 四个字段是否与论文描述一致。这一步能在一分钟内确认整条解析链没写错。

编辑说明

本篇数字分三层来源:作者在 Kaggle 数据集页面上的官方描述(规模、文件结构、命名规则、许可、引用格式);Scientific Data 论文 doi:10.1038/s41597-024-03409-7(人口学统计、设备参数、标注流程、技术验证结果);以及 Kaggle 数据集 API 的元信息(版本历史、体量、下载量、标签)。核验时间 2026-10-26。

凡属「逐图统计可复算」的数字,附录 A 已标注「可」。凡属论文叙述性的(分歧率 4%、低质量图保留策略),标注「不可」,因为这些依赖未公开的原始记录。

已知的内部不一致:患者性别计数(正文 96 女 vs 表格 94 女),已在 §7.3 与避坑清单中存照,按与总数自洽的 94/94 采用。

未做的核验:未下载全量图像做逐图尺寸与色彩统计;未复现 ReLeSeT 的分割指标;未核对 Figshare 侧版本的 DOI 与 Kaggle v4 是否内容一致;论文引用的 iROP、SUNDROP 等对比数据集当前的可申请状态未逐一核实。

许可以 Kaggle 页面与论文表述为准(CC0)。Kaggle 描述里「free-for-non-commercional usage」一句与 CC0 冲突,按 CC0 文本执行,已在 FAQ 与避坑清单中说明。


相关数据集导航

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

  • hvdropdb — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 儿科
  • corn-nerve — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 评测基准
  • fpus23 — 共享标签:医学影像 / 图像分类 / 医学图像分割 / 儿科 / 评测基准
  • cataract-1k — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 评测基准
  • origa-light — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 评测基准
  • riga — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 评测基准
  • stare — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 评测基准
  • octa-25k — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割 / 评测基准
  • oimhs — 共享标签:医学影像 / 眼科影像 / 图像分类 / 医学图像分割
  • tn3k — 共享标签:医学影像 / 图像分类 / 医学图像分割 / 评测基准

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

返回 AI-Ready 数据集