信息速览

OCTA-500 — 全球最大公开 OCTA 视网膜血管三维数据集 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | OCTA-500 |
| 英文全称 | OCTA-500: A Retinal Dataset for Optical Coherence Tomography Angiography Study |
| 别名/简称 | OCTA500、OCTA-500 6M/3M 子集、IPN-V2 数据集 |
| 疾病分类(ICD-11) | 9B71 糖尿病性视网膜病变;9B76 年龄相关性黄斑变性;9B74 视网膜血管阻塞;9B75.2 中心性浆液性脉络膜视网膜病变;9B75 黄斑疾患(CNV 语境) |
| SNOMED CT | 312912009(糖尿病性视网膜病变);367651003(年龄相关性黄斑变性);57190008(增殖性视网膜病变) |
| 数据模态 | OCT 三维体数据 + OCTA 三维体数据 + 视网膜分层投影图 |
| AI 任务类型 | 视网膜血管/动脉/静脉/毛细血管分割、FAZ 分割、视网膜分层分割、CAVF 多目标分割、OCTA 量化 |
| 样本总数 | 500 名受试者(500 只眼;OCTA_6M 300 例 + OCTA_3M 200 例) |
| 数据大小 | 压缩包合计约 36 GB(Label.zip 158.19 MB + 体数据分卷约 36 GB) |
| 数据格式 | ZIP 分卷 + PNG(体数据切片、投影图与分割掩码) |
| 许可证 | IEEE DataPort 开放获取,无标准开源许可证,使用须引用官方论文 |
| 访问级别 | 注册后开放(免费 IEEE 账号)+ 邮件申请解压密码 |
| 语言 | 标签文本为英文/数字编码;影像数据无语言属性 |
| 首发日期 | 2020-10(IEEE DataPort 创建于 2019-12-23) |
| 最后更新 | 2026-08-04(IEEE DataPort 页面;标签内容稳定于 2023.11 优化版) |
| 发布机构 | 南京理工大学计算机科学与工程学院 & 南京医科大学第一附属医院眼科 |
| 官方主页 | https://ieee-dataport.org/open-access/octa-500 |
| 下载地址 | https://ieee-dataport.org/open-access/octa-500(登录后逐分卷下载) |
| DOI | 10.1016/j.media.2024.103092 |
| 引用次数 | OCTA-500 数据论文 205 次(Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方提供实验划分、基线代码(Code.zip 与 IPN-V2 仓库)与逐例统一目录,但标签需旋转 90° 与灰度重映射预处理,且 2023 年标签优化后历史结果可比性受损 |
| 页面状态 | published |
§0 E-E-A-T 审核与免责声明
- 医学审核:[千方病案医学编辑部交叉审核] 眼科影像方向编辑,审核范围:§2 医学背景(ICD-11/SNOMED CT 映射、OCTA 临床任务定义)、§7 偏倚分析。
- 数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。OCTA-500 通过 IEEE DataPort 以开放获取方式发布,注册免费 IEEE 账号后即可下载,解压密码需按固定格式向官方邮箱申请,使用时须引用官方数据论文。该数据集未纳入 DUO 标签体系,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? OCTA-500 是一个包含 500 名受试者黄斑区 OCT 血管造影(OCTA)与结构 OCT 配对三维体数据的公开数据集,由南京理工大学陈强教授团队与南京医科大学第一附属医院眼科合作采集发布。它覆盖 6×6 mm 与 3×3 mm 两种视野,每例同时提供原始三维体数据、6 种视网膜分层投影图、年龄/性别/眼别/疾病 4 类文本标签,以及从大血管到毛细血管、动脉、静脉、中心凹无血管区和视网膜分层的 7 类像素级分割标注。
为什么重要? 在 OCTA-500 发布之前,公开可用的 OCTA 数据集极少,且没有数据集同时提供 OCTA 原始三维信息与多种像素级标注,OCTA 图像分析研究长期受制于数据稀缺。OCTA-500 以约 36 GB 的体量、配对 OCT/OCTA 双模态和逐版本扩充的标注体系,成为 OCTA 分割、OCTA 量化指标计算与多模态研究的事实基准,其配套论文发表于医学影像顶刊 Medical Image Analysis。
我能用它做什么? 训练视网膜血管/动脉/静脉/毛细血管分割模型,计算血管密度、FAZ 面积等 OCTA 定量指标;研究 OCT 与 OCTA 的模态互补(去噪、模态转换、融合);做半监督、多目标(CAVF)分割与疾病间泛化分析。注意它不提供 DR 严重程度分级标签,不适合直接做 DR 分级任务。
§1.1 技术摘要
OCTA-500 的原始数据于 2018 年 3 月至 9 月在江苏省人民医院以 Optovue RTVue-XR 频域 OCT 设备采集,中心波长 840 nm,A 扫速率 70 kHz,血流信息由分光谱振幅去相关(SSADA)算法从多次重复 B-scan 中计算得到。每个受试者提供黄斑区 OCT 与 OCTA 配对体数据:OCTA_6M 子集 300 例,视野 6 mm×6 mm×2 mm,体素尺寸 400×400×640;OCTA_3M 子集 200 例,视野 3 mm×3 mm×2 mm,体素尺寸 304×304×640(编号分别为 No.10001–10300 与 No.10301–10500)。团队以视网膜分层分割为桥梁,从三维体数据生成 6 种标准投影图(OCT 三层平均投影与 OCTA 三层最大/平均投影),并组织医师以"粗粒度人工标注 + 细粒度人工修正 + 阈值化"流程产出 7 类分割标签,于 2020 年 10 月首发后经 5 轮扩充与优化形成 2023.11 稳定版。基于该标注体系,论文提出统一框架下的 CAVF 多目标分割任务(毛细血管 + 动脉 + 静脉 + FAZ),并给出 IPN-V2 基线与训练集规模、输入模态、疾病构成的影响性分析(Li et al., 2024, Medical Image Analysis)。
§1.2 战略价值
维度一:OCTA 领域的"ImageNet 级"基础设施稀缺性。 OCTA 自 2014 年首款商用产品落地以来在 AMD、DR、CNV、青光眼等疾病定量评估中快速普及,但公开三维 OCTA 数据长期空白。OCTA-500 是首个同时提供 OCTA 原始三维体数据与多种像素级标注的公开数据集,且体量(500 例、约 361,600 张 B-scan)在其发布时点为同类最大。对算法研究者而言,它把 OCTA 分割从"各自私有数据、无法复现"推进到统一基准时代,CAVF 任务与 IPN-V2 基线使新方法可以直接与已发表数字对标。
维度二:OCT/OCTA 配对双模态的乘数效应。 每例受试者同时拥有结构 OCT 与血流 OCTA 两个严格配准的三维体数据,这在公开数据集中罕见。双模态数据支持模态转换(OCT→OCTA 生成)、去噪、伪影去除与多模态融合等方向,也为"结构信息能否替代造影信息"这类临床问题提供实验土壤。7 类分割标签与分层投影进一步让同一批数据可服务于血管分割、分层分割、FAZ 量化三条研究线,边际复用价值高。
维度三:疾病多样性与量化指标验证平台。 6M 子集覆盖 AMD、DR、CNV、CSC、RVO 与其他视网膜病变共约 209 例患病眼,疾病多样性在 OCTA 公开数据集中领先,且分割标签直接对应血管密度、FAZ 面积/周长等临床量化指标的计算管线,使算法改进可以翻译为临床可解释的终点(Li et al., 2024)。
战略价值小结:OCTA-500 的不可替代性在于"三维体数据 + 双模态配准 + 七类标注"三者同时成立;单独任一维度都有替代数据集,三者交集唯有 OCTA-500。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注 | 与 OCTA-500 的差异化 |
|---|---|---|---|---|
| OCTA-500 | 500 只眼(6M 300 + 3M 200) | OCT + OCTA 三维体数据 + 6 种投影图 | 7 类分割标签 + 4 类文本标签 | 唯一同时提供三维体数据、双模态与 7 类标注的 OCTA 数据集 |
| ROSE | 229 例圆锥角膜 + 正常受试者 | OCTA 投影图(平均/最大) | 大血管分割标签 | 单一 2D 投影图任务,无三维体数据,同门数据集(iMED-Lab) |
| ROSSA | 918 张 OCTA 图像 | 2D 投影图 | 血管分割掩码(含弱标注) | 规模大但为 2D 图像级,含半监督设定,无疾病文本标签体系 |
| DRAC | 1,103 张超广角 OCTA 图像 | 2D UW-OCTA | DR 分级 + 病灶分割(NPA/IRMAs/NVE) | 面向 DR 分级与病灶分割,非黄斑三维数据,无 OCT 配对 |
| Giarratano et al. | 79 例 | OCTA 投影图 | 血管分割 | 早期小规模数据集,无三维信息 |
| FAZID | 小规模 | OCTA 图像 | FAZ 标注 | 单一 FAZ 任务 |
(ROSE/ROSSA/DRAC 信息见 COSNet 论文数据可用性声明、VQ-VAE 论文、FRNet V2 与 OCTA-500 论文对公开 OCTA 数据集的综述表。)
§1.4 版本时间轴
| 时间 | 版本/事件 | 内容变化 |
|---|---|---|
| 2019-12-23 | IEEE DataPort 建项 | 数据集条目创建(DataPort) |
| 2020-06 | IPN 论文发表 | 数据集概念随 IEEE TMI IPN 论文首次进入学术界(IEEE Xplore 9085991) |
| 2020-10 | OCTA-500 首发 | 发布 OCT/OCTA 体数据 + 大血管与 FAZ 标签 |
| 2020-12-14 | arXiv v1 | IPN-V2 与数据集方法论论文公开(arXiv 2012.07261) |
| 2021-03 | 标签扩充 v2 | 新增毛细血管标签 |
| 2022-03 | 标签扩充 v3 | 新增 3D FAZ 标签 |
| 2022-07 | 标签扩充 v4 | 新增动静脉分离标签与视网膜分层标签 |
| 2022-12-25 | arXiv v3 | 方法论论文更新至 MedIA 投稿版内容 |
| 2023-10 | 标签优化 v5 | 优化毛细血管标签 |
| 2023-11 | 标签优化 v6(稳定版) | 优化视网膜分层标签,此后标签内容未再变更 |
| 2024-01/02 | MedIA 数据论文发表 | Medical Image Analysis 93:103092 正式出版(PubMed 38325155) |
| 2026-08-04 | DataPort 页面维护 | 条目元数据最近一次更新 |
§1.5 典型应用场景
| # | 场景 | 推荐输入 | 所用标签 | 评估要点 |
|---|---|---|---|---|
| 1 | 视网膜血管分割基线研究 | B5 投影图(ILM-OPL 最大投影) | 大血管 / RV | Dice、mIoU;3M/6M 双子集分别报告 |
| 2 | CAVF 多目标分割 | B5 投影图 | 毛细血管 + 动脉 + 静脉 + 2D FAZ | 四目标平均 Dice/IoU(对标 H2C-Net) |
| 3 | OCTA 量化指标计算 | B5/B6 投影图 + 血管/FAZ 掩码 | 大血管、FAZ | 指标与临床参考区间的一致性 |
| 4 | OCT/OCTA 跨模态学习 | 配对三维体数据 | —(自监督/生成任务) | SSIM、血流信号保真度 |
| 5 | 半监督/标签高效学习 | 投影图 + 少量标签 | 大血管(5–50% 标签口径) | 低标签量下的 Dice 衰减曲线 |
- 视网膜血管分割基线研究:在大血管/RV 任务上对比 U-Net、IPN-V2、SAM 微调等架构,3M/6M 双子集提供分辨率泛化检验。
- CAVF 多目标分割:统一框架下同时输出毛细血管、动脉、静脉与 FAZ 四类结构,服务于一站式 OCTA 量化。
- OCTA 量化指标计算:利用血管分割与 FAZ 分割结果计算血管密度、FAZ 面积/周长、分形维度等临床指标,构建疾病-指标关联分析。
- OCT/OCTA 跨模态学习:以配对体数据研究模态转换、去噪、伪影去除与融合,探索免造影血流信息推断。
- 半监督与标签高效学习:官方标签成本高昂,社区已形成 50%/5% 标签量的半监督评测设定(见 §8.1)。
§2 医学背景
§2.1 ICD-11 编码映射
OCTA-500 的 Disease 文本标签覆盖健康眼与多种视网膜/黄斑疾病,下表按数据集标签与 WHO ICD-11(MMS)的对应关系给出映射。
| 数据集标签 | 含义 | ICD-11 编码 | ICD-11 名称(中文) |
|---|---|---|---|
| Normal(3M 160 例 / 6M 91 例) | 健康对照眼 | —(非疾病状态) | — |
| DR(3M 29 例 / 6M 35 例) | 糖尿病性视网膜病变 | 9B71 | 糖尿病性视网膜病变 |
| AMD(3M 6 例 / 6M 43 例) | 年龄相关性黄斑变性 | 9B76 | 年龄相关性黄斑变性 |
| CNV(3M 5 例 / 6M 11 例) | 脉络膜新生血管 | 9B75(黄斑疾患) | 脉络膜新生血管(多继发于湿性 AMD) |
| CSC(6M 14 例) | 中心性浆液性脉络膜视网膜病变 | 9B75.2 | 中心性浆液性脉络膜视网膜病变 |
| RVO(6M 10 例) | 视网膜静脉阻塞 | 9B74 | 视网膜血管阻塞 |
| Other retinal pathology(6M 96 例) | 其他视网膜病变 | 9B7 系列逐例归码 | 视网膜疾患(按具体诊断归码) |
疾病构成计数来自第三方对数据集 Disease 标签的逐例统计(medRxiv 2024.02.23.24303275),官方论文以直方图形式报告分布(Fig. 4)而未给出逐类计数表;ICD-11 映射为按概念匹配的参考映射,官方未提供编码映射表。DR 的 ICD-11 编码规则要求另加糖尿病主码(如 5A11)。
§2.1b SNOMED CT 映射
| 标签/概念 | ICD-11 | SNOMED CT 码 | 术语 |
|---|---|---|---|
| 糖尿病性视网膜病变 | 9B71 | 312912009 | Diabetic retinopathy (disorder) |
| 年龄相关性黄斑变性 | 9B76 | 367651003 | Age-related macular degeneration (disorder) |
| 增殖性视网膜病变(DR 晚期形态) | 9B71 | 57190008 | Proliferative retinopathy (disorder) |
| 视网膜静脉阻塞 | 9B74 | — | Retinal vein occlusion |
| 中心凹无血管区(分割目标) | — | — | Foveal avascular zone |
OCTA-500 官方文档未提供 SNOMED CT 映射;上表仅列已在术语库核实的概念码,“—” 表示本条目未核实到权威码值,使用时建议保留数据集原始标签并另行维护映射表。
§2.2 疾病简介与流行病学
OCTA(光学相干断层扫描血管造影)是在 OCT 平台上发展出的功能性成像模态,通过干涉原理测量反射光振幅与延迟获得视网膜血管造影体积,无需注射造影剂即可在微米级分辨率下呈现视网膜血管的三维结构。自 2014 年首款商用产品推出以来,OCTA 已在年龄相关性黄斑变性、糖尿病性视网膜病变、脉络膜新生血管、青光眼等眼病临床评估中快速普及;近年来还被用于阿尔茨海默病、帕金森病、亨廷顿病等神经疾病中视网膜血流的功能性研究(Li et al., 2024, Medical Image Analysis)。
OCTA-500 覆盖的疾病谱即围绕 OCTA 最主要的应用场景,各病种在 OCTA 投影图上的典型形态学改变如下:
| 疾病 | OCTA 典型血管/FAZ 改变 | 对应数据集标注的利用点 |
|---|---|---|
| DR | 浅层血管密度下降、毛细血管丢失、FAZ 扩大与形态不规则 | 血管/毛细血管分割 → VD;FAZ 分割 → 面积/周长 |
| AMD/CNV | 外层投影出现异常血管网(CNV)、深层结构紊乱 | OPL-BM 投影 + 全层投影对照分析 |
| CSC | 浆液性脱离区血管形态扭曲、RPE 层改变 | 分层标签 + 深层投影联合解读 |
| RVO | 阻塞流域血管稀疏/迂曲、侧支循环形成 | 分区域血管密度对比(依赖血管分割) |
定量 OCTA 分析依赖血管密度、血管直径指数、血管长度分数、分形维度、FAZ 面积与周长等指标,而这些指标的计算均以准确的血管/FAZ 分割为前提——这正是 OCTA-500 标注体系的设计动机(Li et al., 2024)。
§2.3 临床任务定义
| 临床任务 | 定义 | OCTA-500 支持方式 | 边界说明 |
|---|---|---|---|
| 筛查 | 在人群中识别血管形态异常眼 | 血管/FAZ 自动分割 → 血管密度、FAZ 指标异常检测 | 无分级标签,不能直接输出 DR 严重程度 |
| 诊断 | 鉴别健康眼与病变眼 | Disease 文本标签 + 6 种投影图支持正常/疾病分类研究 | 6M 子集"其他视网膜病变"96 例构成异质混合类 |
| 量化评估 | 计算血管密度、FAZ 面积/周长、分形维度 | 7 类分割标签直接对应指标计算管线 | 指标有效性依赖分割精度与投影层选择 |
| 随访/预后 | 纵向监测血流变化 | 不支持 | 单次横断面采集,无随访时间点 |
§2.4 患者人群画像
| 维度 | OCTA_6M(300 例) | OCTA_3M(200 例) |
|---|---|---|
| 来源机构 | 江苏省人民医院(南京医科大学第一附属医院) | 同左 |
| 采集时间 | 2018-03 至 2018-09 | 同左 |
| 平均年龄 | 49.18 ± 17.28 岁 | 33.12 ± 16.17 岁 |
| 患病比例 | 69.79%(含其他视网膜病变) | 20% |
| 疾病谱 | AMD/CNV/DR/CSC/RVO/其他 + 正常 | AMD/DR/CNV + 正常 |
| 性别/眼别 | 标签提供 Gender 与 OS/OD 字段;官方论文以直方图报告分布(Fig. 4),无机器可读逐例清单 | 同左 |
| 种族 | 未逐例记录;为南京单中心中国人群 | 同左 |
| 就医类型 | 眼科门诊/检查人群 | 同左 |
(年龄与患病比例来自第三方逐例统计:VQ-VAE 论文 与 medRxiv 2024.02.23.24303275。)
§2.5 临床价值
OCTA-500 的分割标签与临床量化流程一一对应:血管分割支持血管密度(VD)与血管直径指数计算,FAZ 分割支持 FAZ 面积与周长测量,视网膜分层支持分层厚度与分层特异性投影(如 ILM-OPL 浅层、OPL-BM 深层)。这些指标正是 OCTA 在 DR、AMD 等疾病中评估微血管改变的核心终点。数据集同时覆盖健康眼与多病种异常眼,使算法在"健康形态学"与"疾病重塑形态学"(血管迂曲、缺失、FAZ 扩大)两类场景下都可被检验,为后续临床级 OCTA 定量工具的开发提供训练与验证土壤。
数据集标签与临床 OCTA 指标的对应关系:
| 临床指标 | 计算所需标签 | 数据集支持 |
|---|---|---|
| 血管密度(VD) | 大血管 + 毛细血管分割 | ✅ 直接支持 |
| 血管直径指数 / 长度分数 | 血管骨架化 + 直径估计 | ✅ 以分割结果为输入 |
| 血管分形维度 | 血管二值图分形分析 | ✅ 以分割结果为输入 |
| FAZ 面积 / 周长 | 2D FAZ 分割 | ✅ 直接支持 |
| FAZ 容积(3D 指标) | 3D FAZ 标注 | ✅ 2022-03 起支持 |
| 分层厚度 / 定制层间投影 | 视网膜分层标签 | ✅ 支持 B1–B6 之外的再投影 |
§2.6 金标准参考表
| 属性 | 内容 |
|---|---|
| 划分方式 | 官方论文按实验设置划分训练/测试集;社区沿袭 6M 180/20/100、3M 140/10/50 的训练/验证/测试划分(详见 §5) |
| 标注方式 | 大血管:OCTA 内层投影上"粗粒度人工标注 → ‘Screen’ 模式可视化 → 细粒度人工修正 → 阈值化"生成最终标签;毛细血管/动静脉/FAZ/分层标签经多轮人工标注与算法辅助生成,2023 年两轮优化 |
| 标注者 | 南京理工大学医学影像研究团队与临床合作者;官方未公布逐例标注者人数与资质矩阵 |
| 性质 | 像素级分割金标准(2D 投影图)+ 体素级标签(3D FAZ、视网膜分层)+ 文本标签 |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 下载量级 | 理由 |
|---|---|---|---|
| 快速跑通 2D 血管分割 pipeline | OCTA_3M(3 个分卷) | 约 10.5 GB | 图幅小(304×304)、含全部标签类型,训练开销低 |
| 对标 CAVF/大血管 SOTA | OCTA_6M(8 个分卷) | 约 25.6 GB | 多数新方法与半监督基准在 6M 上报告 |
| OCT→OCTA 模态转换/去噪研究 | 全量(两子集) | 约 36 GB | 需要配对 OCT/OCTA 体数据最大化样本量 |
| 仅做数据结构评估/代码学习 | Label.zip + Code.zip | 约 159 MB | 标签齐全且体积极小,可先行验证解析逻辑 |
§3.1 模态详情
- OCT 三维体数据:结构断层体,6M 尺寸 400×400×640(物理约 6×6×2 mm),3M 尺寸 304×304×640(物理约 3×3×2 mm),以 PNG 切片序列存储。
- OCTA 三维体数据:血流断层体,由 SSADA 算法从同一位置的多次重复 B-scan 计算得到。OCTA 原始轴向采样约 160 层,经双线性插值拉伸至 640 层以与 OCT 体逐像素对齐——使用时须注意轴向并非原生分辨率(Politecnico di Torino 学位论文对 IPN 论文的转述)。
- 6 种投影图:B1 OCT FULL(平均)、B2 OCT ILM_OPL(平均)、B3 OCT OPL_BM(平均)、B4 OCTA FULL(平均)、B5 OCTA ILM_OPL(最大)、B6 OCTA OPL_BM(最大);6M 为 400×400,3M 为 304×304。定义与用途详表:
| 编号 | 模态 | 投影层范围 | 投影方式 | 典型用途 |
|---|---|---|---|---|
| B1 | OCT | 全层(FULL) | 平均 | 结构参考底图、层分割输入 |
| B2 | OCT | ILM–OPL(内层) | 平均 | 内层结构观察 |
| B3 | OCT | OPL–BM(外层) | 平均 | 外层结构/RPE 相关分析 |
| B4 | OCTA | 全层(FULL) | 平均 | 全层血流总体观 |
| B5 | OCTA | ILM–OPL(内层) | 最大 | 血管/RV 分割主输入(大血管标签在此层生成) |
| B6 | OCTA | OPL–BM(外层) | 最大 | 深层血流分析(注意投影伪影,见坑点 5) |
- 文本标签:Age、Gender、OS/OD(眼别)、Disease 四字段。
- 分割标签:大血管、毛细血管、动脉、静脉、2D FAZ、3D FAZ、视网膜分层共 7 类(详见 §4)。
§3.2 按子集样本数
| 子集 | 编号区间 | 例数 | FOV | 体数据尺寸 | 投影图尺寸 |
|---|---|---|---|---|---|
| OCTA_6M | No.10001–No.10300 | 300 | 6 mm × 6 mm × 2 mm | 400 × 400 × 640 | 400 × 400 |
| OCTA_3M | No.10301–No.10500 | 200 | 3 mm × 3 mm × 2 mm | 304 × 304 × 640 | 304 × 304 |
| 合计 | No.10001–No.10500 | 500 | — | — | — |
§3.3 数据格式
| 内容 | 格式 | 说明 |
|---|---|---|
| 分发包 | ZIP 分卷(3M 3 卷 / 6M 8 卷) | 需全部分卷齐备后合并解压 |
| 体数据与投影图 | PNG 切片/单幅图像 | 8-bit 灰度 |
| 分割标签 | PNG 掩码(Label.zip 内) | 灰度值需重映射(见坑点 1) |
| 文本标签 | 表格文件(Label.zip 内) | Age/Gender/OS-OD/Disease |
| 基线代码 | Code.zip(64.54 KB) | 投影生成与基线训练脚本 |
§3.4 存储大小明细
| 文件 | 大小 |
|---|---|
| Label.zip | 158.19 MB |
| Code.zip | 64.54 KB |
| OCTA_3mm_part1/2/3.zip | 4.06 GB / 4.05 GB / 2.39 GB(合计约 10.5 GB) |
| OCTA_6mm_part1–6.zip | 各约 3.5 GB(合计约 21.1 GB) |
| OCTA_6mm_part7/8.zip | 2.16 GB / 2.34 GB |
| 总计(压缩) | 约 36.1 GB |
(明细来自 IEEE DataPort 文件清单;解压后占用进一步增大,建议预留 ≥ 60 GB。)
§3.5 标注方式
| 标签类型 | 方式 | 说明 |
|---|---|---|
| 大血管(Large Vessel) | 人工 + 阈值化 | 在 OCTA 内层投影(B5)上先粗粒度人工标注,"Screen"模式叠加可视化后细粒度人工修正,最后阈值化得到二值标签(论文 Fig. 5 流程) |
| 毛细血管(Capillary) | 人工标注 + 2023.10 优化 | 2021-03 新增,2023-10 优化 |
| 动脉/静脉(Artery/Vein) | 人工标注 | 2022-07 与分层标签同期新增 |
| 2D FAZ | 人工标注 | 首发即含 |
| 3D FAZ | 人工标注 + 算法辅助 | 2022-03 新增(配套 Optics Express 2022 3D FAZ 分割工作) |
| 视网膜分层(Retinal Layer) | 算法辅助 + 人工优化 | 配套 MICCAI 2020 与 JBHI 2022 分层分割工作,2023.11 优化 |
大血管标签的官方生成流程(论文 Fig. 5 记录,可作为自建标注 SOP 参考):
(a) OCTA 内层投影(B5) → (b) 粗粒度人工标注 → (c) "Screen"模式叠加可视化
→ (d) 细粒度人工修正 → (e) 阈值化 → (f) 最终二值大血管标签
该流程说明官方标签并非纯"一次画完",而是带可视化质检的迭代式标注;使用者自行扩充标注时建议沿用同一路径以保持分布一致。
§3.6 标注者资质与一致性
标注由南京理工大学医学影像研究团队与临床眼科合作者完成,大血管标签流程中含两阶段人工核对;官方未公布逐例标注者人数、资质层级与标注者间一致性系数(如 Dice/Kappa)。使用者若需高质量金标准声明,建议自行抽样复测标签一致性(抽样 30–50 例,计算与自家标注的 Dice)。
§3.7 采集周期
2018 年 3 月至 2018 年 9 月,横断面单次采集;无随访时间点(Politecnico di Torino 学位论文转述 IPN 论文)。
§3.8 地域覆盖
中国南京单中心(江苏省人民医院/南京医科大学第一附属医院眼科),无多地域分层设计。
§3.9 设备规格
| 参数 | 规格 |
|---|---|
| 设备 | RTVue-XR(Optovue,加拿大) |
| 模态 | 频域 OCT(SD-OCT) |
| 中心波长 | 840 nm |
| A 扫速率 | 70,000 次/秒(70 kHz) |
| 血流算法 | SSADA(分光谱振幅去相关血管造影) |
| 分辨率 | 轴向约 5 μm,横向约 15 μm |
| 成像深度 | 约 2 mm(黄斑模式,6M/3M FOV 一致) |
(设备参数综合自 Al-Hinnawi et al., 2023, IEEE Access 与 IPN 论文转述。)
§3.10 深度溯源链
| 环节 | 生成方式 | 可追溯性 |
|---|---|---|
| 原始采集 | RTVue-XR 黄斑模式,单眼受检 | 受试者编号 No.10001–10500 |
| OCTA 血流体 | SSADA 算法(设备内置) | 设备型号与参数公开 |
| 轴向插值 | OCTA 160 层 → 640 层双线性拉伸 | 官方论文与转述文献记录 |
| 视网膜分层 | MICCAI 2020/JBHI 2022 分层分割算法 + 2023.11 人工优化 | 配套论文可查 |
| 投影图 B1–B6 | 基于分层边界的层间平均/最大投影 | Code.zip 提供生成逻辑 |
| 血管/FAZ 标签 | 人工粗标 → 人工细修 → 阈值化 | 论文 Fig. 5 记录流程 |
§4 数据结构
§4.0 目录树
数据解压合并后(分卷 zip 自动合并为单一目录)的典型布局如下;具体文件名可能随标签版本略有差异,以所下载版本的 Label.zip 实际内容为准。
OCTA-500/
├── Code.zip # 官方基线代码(64.54 KB)
├── Label.zip # 全部标签(158.19 MB)
│ ├── OCTA_6mm_Label/
│ │ ├── 10001/
│ │ │ ├── Segmentations/ # 大血管/毛细血管/动脉/静脉/FAZ/分层 PNG 掩码
│ │ │ └── TextLabels/ # Age / Gender / OS-OD / Disease
│ │ ├── 10002/
│ │ └── 10300/
│ └── OCTA_3mm_Label/
│ ├── 10301/
│ └── 10500/
├── OCTA_3mm/ # 由 OCTA_3mm_part1-3.zip 解压合并
│ ├── 10301/
│ │ ├── OCT/ # OCT 体数据切片(304×304 PNG × 640 层)
│ │ ├── OCTA/ # OCTA 体数据切片(304×304 PNG × 640 层)
│ │ ├── OCT_Full_Avg.png # B1:OCT FULL 平均投影
│ │ ├── OCT_ILM_OPL_Avg.png # B2:OCT ILM-OPL 平均投影
│ │ ├── OCT_OPL_BM_Avg.png # B3:OCT OPL-BM 平均投影
│ │ ├── OCTA_Full_Avg.png # B4:OCTA FULL 平均投影
│ │ ├── OCTA_ILM_OPL_Max.png # B5:OCTA ILM-OPL 最大投影(血管任务主输入)
│ │ └── OCTA_OPL_BM_Max.png # B6:OCTA OPL-BM 最大投影
│ └── 10500/
└── OCTA_6mm/ # 由 OCTA_6mm_part1-8.zip 解压合并
├── 10001/
│ └── (同上结构,图幅 400×400)
└── 10300/
§4.1 DAIMS 字段字典
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| subject_id | Integer | 受试者编号,全局唯一 | 10001 | 样本索引与划分主键 | 无 | 无 | 10001–10500 |
| OCT volume | ImageObject | 结构 OCT 三维体(PNG 切片序列) | 640 层 × 304×304 | 去噪/模态转换/分层输入 | 散斑噪声、运动伪影 | 无 | 8-bit 灰度 |
| OCTA volume | ImageObject | 血流 OCTA 三维体(与 OCT 对齐) | 640 层 × 400×400 | 3D 分割/血流分析 | 轴向为插值分辨率 | 无 | 8-bit 灰度 |
| 投影图 B1–B6 | ImageObject | 分层平均/最大投影 | B5 ILM-OPL 最大投影 | 2D 分割主输入 | 投影伪影 | 无 | 304² 或 400² |
| Age | Integer | 受检时年龄 | 55 | 年龄偏倚分析 | 未公布采集时点差 | 需自行核查空值 | 官方论文直方图报告 |
| Gender | Text | 性别 | F | 公平性分析 | 无 | 需自行核查空值 | M/F |
| Eye(OS/OD) | Text | 眼别 | OD | 单眼独立性判断 | 无 | 无 | OD(右眼)/OS(左眼) |
| Disease | Text | 疾病标签 | DR | 分类/分层评估 | 第三方统计与官方直方图一致性需复核 | 无 | Normal/DR/AMD/CNV/CSC/RVO/其他 |
| Large Vessel mask | ImageObject | 大血管二值掩码 | 0/1 | 大血管分割监督 | 粗标+细修残余误差 | 无 | 0(背景)/1(血管) |
| Capillary mask | ImageObject | 毛细血管二值掩码 | 0/1 | 细血管分割监督 | 细结构标注难度最高 | 无 | 0/1 |
| Artery mask | ImageObject | 动脉二值掩码 | 0/1 | 动静脉分离 | 交叉重叠区判定难 | 无 | 0/1 |
| Vein mask | ImageObject | 静脉二值掩码 | 0/1 | 动静脉分离 | 同上 | 无 | 0/1 |
| 2D FAZ mask | ImageObject | 中心凹无血管区掩码 | 0/1 | FAZ 面积/周长量化 | 边界定义依赖投影层 | 无 | 0/1 |
| 3D FAZ mask | ImageObject | 体素级 FAZ 标注 | 0/1 体 | 3D FAZ 分割与容积指标 | 2022-03 新增,历史论文未用 | 无 | 0/1 |
| Retinal Layer mask | ImageObject | 视网膜分层边界/区域标签 | 分层索引 | 分层分割、投影再生成 | 2023.11 优化过 | 无 | 分层编码(见 Label.zip 说明) |
§4.2 标签分布
| 疾病 | OCTA_3M(n=200) | OCTA_6M(n=300) |
|---|---|---|
| Normal | 160(80.0%) | 91(30.3%) |
| DR | 29(14.5%) | 35(11.7%) |
| AMD | 6(3.0%) | 43(14.3%) |
| CNV | 5(2.5%) | 11(3.7%) |
| CSC | 0 | 14(4.7%) |
| RVO | 0 | 10(3.3%) |
| 其他视网膜病变 | 0 | 96(32.0%) |
(逐例计数来自第三方统计 medRxiv 2024.02.23.24303275;官方论文 Fig. 4 以直方图形式报告一致趋势。)
7 类分割标签的任务定位与评价惯例:
| 标签 | 层级 | 评价惯例 | 难度要点 |
|---|---|---|---|
| 大血管(Large Vessel) | 2D 投影(B5 层) | Dice/IoU,社区主流任务 | 粗细血管过渡处易断裂 |
| 毛细血管(Capillary) | 2D 投影 | Dice,细结构权重高 | 信号弱、与噪声难区分 |
| 动脉(Artery) | 2D 投影 | 多类 Dice(动静脉联合评估) | 动静脉交叉/重叠区 |
| 静脉(Vein) | 2D 投影 | 同上 | 同上 |
| 2D FAZ | 2D 投影 | Dice + 面积/周长指标 | 边界定义依赖投影层与阈值 |
| 3D FAZ | 体数据 | 体素级 Dice、容积指标 | 2022-03 新增,历史基线少 |
| 视网膜分层 | 体数据/投影生成依赖 | 分层边界误差(μm) | 2023.11 优化,需版本对齐 |
§4.3 关键统计
- 体数据总量:500 例 × 2 模态 × 640 层 B-scan,合计约 361,600 张 B-scan;投影图 500 例 × 6 种 = 3,000 张(Politecnico di Torino 学位论文)。
- 像素物理尺寸:6M 横向 15 μm/像素(6 mm/400 px),3M 横向约 9.9 μm/像素(3 mm/304 px)——两子集空间分辨率不同,训练混用时须重采样对齐。
- 轴向物理尺寸:OCTA 轴向按 2 mm/640 层计算约 3.1 μm/层,但其中约 480 层为插值生成(原生约 160 层),做 3D 卷积或层厚测量时必须区分原生与插值轴向(坑点 4)。
- 采集窗口 7 个月(2018-03 至 2018-09),单次横断面检查。
§4.4 数据层级
受试者(500)→ 眼(1 只/人,OS 或 OD)→ 单次检查(横断面)
→ 体数据对(OCT + OCTA,逐像素对齐,640 层)
→ 切片级:B-scan PNG(体输入/3D 分割用)
→ 投影级:B1–B6 en face 图(2D 分割/量化用)
→ 标签级:7 类掩码 + 4 字段文本标签
§4.5 缺失值与信息性缺失
- 结构完整性:官方编号连续(No.10001–10500),两子集内每例均含体数据、6 投影与文本标签;标签类型随版本逐步扩充,早期论文只用到首发子集(大血管 + FAZ),2022-07 后的标签需确认下载版本 ≥ 2022.7。
- 文本标签缺失:官方未提供机器可读的逐例标签清单文件说明(如性别/年龄的空值统计),解析 Label.zip 后应先运行完整性检查(见 §6.3 代码),发现空值时按"未知"类别处理而非删除样本。
- 无信息性缺失编码约定:数据集未定义"-999/NaN"类信息性缺失编码;掩码为二值 PNG,无像素级缺失概念。
§5 划分与使用建议
§5.1 官方划分与社区惯例
官方论文的实验设置按子集划分训练/测试集,社区主流沿袭以下两种版本:
| 子集 | 主流划分(训练/验证/测试) | 采用文献 |
|---|---|---|
| OCTA_6M | 180 / 20 / 100 | FRNet V2, Biomimetics 2025、medRxiv 2024.02.23.24303275 |
| OCTA_3M | 140 / 10 / 50 | 同上 |
| OCTA_6M(变体) | 250 / 0 / 50 | arXiv 2608.15195 基准(“两子集各 50 例测试”) |
⚠️ 两版划分并存导致 6M 测试集有 100 例与 50 例两种口径,跨论文数字不可直接比较(详见坑点 3)。
§5.2 划分策略建议
- 复现已发表结果:直接采用 180/20/100 与 140/10/50 划分,并在论文中显式声明沿用口径与下载的标签版本。
- 自定义研究:按 subject_id 分层(疾病 × 子集)做分层抽样,保持测试集中 Normal/患病比例与训练集一致;3M 子集患病样本仅 40 例,建议交叉验证而非单次划分。
- 跨子集泛化实验:以 3M 训练 → 6M 测试(或反向)时,先重采样到统一像素尺度,并报告按疾病分层的指标。
§5.3 泄漏风险
- 低风险:每名受试者仅 1 只眼、1 次检查,受试者级划分天然无跨样本身份泄漏;官方划分以受试者编号为单位。
- 高风险操作:把体数据按"层"或"切片"随机切分训练/测试集(3D 任务)——同一受试者的相邻 B-scan 高度相关,切片级混分将造成严重泄漏,务必保持体/受试者为单位划分。
- 伪影复制泄漏:数据增强生成的副本不得同时落入训练与验证集(自动增强框架中设置 seed 隔离)。
§5.4 交叉验证建议
小样本疾病(3M 的 AMD/CNV,6M 的 CSC/RVO)建议 5 折分层交叉验证,按 Disease 分层;逐折报告 Dice/mIoU 的均值与标准差,避免在罕见病类上以单次划分下结论。推荐的折间协议:
| 要素 | 建议做法 |
|---|---|
| 分层键 | Disease × 子集联合分层,保证每折两子集、各病种比例一致 |
| 折大小 | 6M 每折 60 例、3M 每折 40 例(5 折) |
| 早停 | 每折内部再切 10% 做早停验证,早停集不参与折间汇报 |
| 汇报 | mean ± std 逐病种报告;总体均值仅作参考列 |
| 固定性 | 折分配表(subject_id → fold)随代码仓库提交,保证复现 |
from sklearn.model_selection import StratifiedKFold
import pandas as pd
# df: index=subject_id, columns=[subset, disease]
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
df["fold"] = -1
for k, (_, val_idx) in enumerate(
skf.split(df, df["subset"] + "_" + df["disease"])):
df.iloc[val_idx, df.columns.get_loc("fold")] = k
df.to_csv("fold_assignment.csv") # 折分配表随仓库提交
§5.5 外部验证建议
单设备单中心数据训练的模型在外部验证时预期出现性能衰减。已有同行评审示范:在 DRAC 超广角 OCTA 上训练的异常检测模型于 OCTA-500 上做独立外部测试(VQ-VAE 论文, Bioengineering 2024);反之亦建议在 ROSE/ROSSA/DRAC 上验证 OCTA-500 训练的分割模型,并报告跨设备(Optovue vs 其他厂商)与跨视野(广角 vs 黄斑)两个维度的衰减。
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
IEEE DataPort 下载需登录且解压需官方密码,无法直链云端拉取。推荐路径:本地完成下载与解压后,将 OCTA-500/ 上传至云端网盘/对象存储,在 Colab/AutoDL 中挂载;或仅上传 Label.zip(159 MB)+ 一个子集的投影图先行联调,验证通过后再同步体数据。以下代码假设数据已就位于 data_root。
§6.1 快速上手
# ============================================================
# 最小可用路径:OCTA_3M 子集 + 大血管标签 + B5 投影图
# ------------------------------------------------------------
# 目录结构预期(data_root 指向解压后的 OCTA-500/):
# data_root/
# ├── Label.zip → 解压得到 OCTA_3mm_Label/10301..10500/...
# └── OCTA_3mm/10301..10500/OCTA_ILM_OPL_Max.png (304×304)
# data_root 拼接关系:img = data_root/OCTA_3mm/{sid}/OCTA_ILM_OPL_Max.png
# lbl = data_root/OCTA_3mm_Label/{sid}/Segmentations/
# 最小可用子集:先只用 10301–10500 中的 10 例做加载冒烟测试
# ============================================================
from pathlib import Path
from PIL import Image
import numpy as np
data_root = Path("data_root")
sid = 10301 # 3M 子集首例
img = Image.open(data_root / f"OCTA_3mm/{sid}/OCTA_ILM_OPL_Max.png")
print("投影图尺寸:", img.size, "灰度范围:",
np.array(img).min(), np.array(img).max())
# 输出预期:size=(304, 304),8-bit 灰度
成功读出第一张 B5 投影图后,再进入 §6.3 的标签预处理与 §6.4 的训练管线。
6M 子集的对应冒烟测试(图幅更大,验证重采样路径):
sid_6m = 10001
img_6m = Image.open(data_root / f"OCTA_6mm/{sid_6m}/OCTA_ILM_OPL_Max.png")
print("6M 投影图尺寸:", img_6m.size) # 预期 (400, 400)
# 3M/6M 像素物理尺寸不同(9.9 vs 15 μm/px):混用前统一重采样(坑点 6)
§6.2 数据获取
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 注册免费 IEEE 账号 | IEEE 会员资格非必需(DataPort) |
| 2 | 访问官方页逐分卷下载 | Label.zip + Code.zip + 3M×3 卷 + 6M×8 卷,合计约 36 GB |
| 3 | 邮件申请解压密码 | 标题固定格式 OCTA500: 组织: 姓名,正文写明机构/工作/用途 |
| 4 | 校验并合并解压 | 分卷 zip 须全部下载后解压第一个分卷 |
| 5 | 引用义务 | 使用数据集须至少引用 MedIA 2024 主论文或 IEEE TMI 2020 IPN 论文之一 |
# 解压密码申请邮件模板(格式不符可能被忽略,标题 OCTA500 不可为空)
# ------------------------------------------------------------
# Title: OCTA500: Nanjing University of Science and Technology: Your Name
# Body:
# Organization Detail: <机构全称、院系、国家>
# Main Works: <在研项目/论文题目>
# Usages: <具体使用方式,如 vessel segmentation research>
# 收件:chen2qiang@njust.edu.cn
# 分卷合并解压(示例:3M 子集)
unzip OCTA_3mm_part1.zip # 自动串联 part2/part3
# 标签包
unzip Label.zip -d OCTA-500/
# 校验解压完整性:两子集各应有 300/200 个编号连续目录
ls OCTA-500/OCTA_3mm | wc -l # 预期 200
ls OCTA-500/OCTA_6mm | wc -l # 预期 300
# 大体积分卷的稳妥校验(每卷约 3.5 GB,解压前逐一核对字节数)
stat -c "%s %n" OCTA_6mm_part*.zip # 与 DataPort 页面标注大小比对
# zip64 大分卷建议用 7z 串联解压,避免 unzip 的 4 GB 边界问题
7z x OCTA_6mm_part1.zip -oOCTA-500/
§6.3 预处理全流程
核心三步:标签方向与灰度重映射 → 完整性体检 → 归一化与输入组装。
import numpy as np
from pathlib import Path
from PIL import Image
def load_label(mask_path: Path, num_classes: int = 1) -> np.ndarray:
"""官方标签需两步预处理(IPNV2_pytorch README 要求):
1) 旋转 90 度以与三维体数据方向对齐;
2) 灰度值重映射:0=背景, 1=FAZ(大血管任务下 2=RV)。
"""
arr = np.array(Image.open(mask_path))
arr = np.rot90(arr, k=1).copy() # ① 方向对齐
if num_classes == 1: # ② 二值化(大血管/毛细血管等)
return (arr > 0).astype("uint8")
return arr.astype("int64") # 多类(如 FAZ+RV 复合标签)保留原编码
def integrity_check(data_root: Path, subset: str, ids: range):
"""解析前体检:每例应有 B1–B6 六张投影图与标签目录。"""
proj = ["OCT_Full_Avg", "OCT_ILM_OPL_Avg", "OCT_OPL_BM_Avg",
"OCTA_Full_Avg", "OCTA_ILM_OPL_Max", "OCTA_OPL_BM_Max"]
missing = []
for sid in ids:
d = data_root / subset / str(sid)
if not d.exists():
missing.append((sid, "dir")); continue
for p in proj:
if not (d / f"{p}.png").exists():
missing.append((sid, p))
return missing # 空列表 = 通过;发现空值记录为"未知"而非删例
def normalize(img: np.ndarray) -> np.ndarray:
"""OCTA 投影图对比度个体差异大:百分位截断后 z-score。"""
lo, hi = np.percentile(img, [1, 99])
img = np.clip((img - lo) / max(hi - lo, 1e-7), 0, 1)
return (img - 0.5) / 0.5 # → [-1, 1]
def stack_volume(case_dir: Path, modality: str = "OCTA") -> np.ndarray:
"""PNG 切片 → 三维体:注意轴向是插值出来的(160→640),3D 任务勿当原生分辨率。"""
slices = sorted(case_dir.glob(f"{modality}/*.png"))
return np.stack([np.array(Image.open(s)) for s in slices], axis=0) # (640, H, W)
§6.4 PyTorch DataLoader 完整代码
import torch
from torch.utils.data import Dataset, DataLoader
class OCTA500Projection(Dataset):
"""2D 投影图分割数据集(大血管/RV 任务,3M+6M 混合训练示例)。
预期目录:
data_root/OCTA_3mm/{sid}/OCTA_ILM_OPL_Max.png 304×304
data_root/OCTA_6mm/{sid}/OCTA_ILM_OPL_Max.png 400×400
data_root/OCTA_{3,6}mm_Label/{sid}/Segmentations/ 掩码 PNG
掩码文件名以所下载 Label.zip 内实际结构为准,先人工确认再填 mask_name。
"""
def __init__(self, data_root, split_ids, mask_name="LargeVessel",
out_size=304):
self.root = Path(data_root)
self.samples = []
for sid in split_ids:
subset = "OCTA_3mm" if sid >= 10301 else "OCTA_6mm"
img = self.root / subset / str(sid) / "OCTA_ILM_OPL_Max.png"
lbl = (self.root / f"{subset}_Label" / str(sid)
/ "Segmentations" / f"{mask_name}.png")
if img.exists() and lbl.exists():
self.samples.append((sid, img, lbl))
self.out_size = out_size
def __len__(self):
return len(self.samples)
def __getitem__(self, idx):
sid, img_p, lbl_p = self.samples[idx]
img = np.array(Image.open(img_p).convert("L"))
lbl = load_label(lbl_p) # 含 90° 旋转 + 二值化
# 两子集分辨率不同:双线性对齐到统一训练尺寸(最近邻保掩码取值)
img_t = torch.from_numpy(normalize(img)).float()[None]
lbl_t = torch.from_numpy(lbl).float()[None]
img_t = torch.nn.functional.interpolate(
img_t[None], size=(self.out_size,)*2, mode="bilinear",
align_corners=False)[0]
lbl_t = torch.nn.functional.interpolate(
lbl_t[None], size=(self.out_size,)*2, mode="nearest")[0]
return {"image": img_t, "mask": lbl_t, "sid": sid}
# ---- 实例化:沿用社区主流划分(3M 140/10/50,6M 180/20/100)----
ids_6m = list(range(10001, 10301)); ids_3m = list(range(10301, 10501))
train_ids = ids_6m[:180] + ids_3m[:140] # 演示用顺序划分,正式实验请分层抽样
train_ds = OCTA500Projection("data_root", train_ids)
train_loader = DataLoader(train_ds, batch_size=8, shuffle=True,
num_workers=4, pin_memory=True)
batch = next(iter(train_loader))
print(batch["image"].shape, batch["mask"].shape) # (8,1,304,304) (8,1,304,304)
3D 体数据任务(3D FAZ、分层)建议改用
torchio或自定义 5D Dataset(B×1×D×H×W),并按 patch 采样 640 层深度方向。
3D 体数据 Dataset 补充实现(patch 采样版):
class OCTA500Volume(Dataset):
"""3D 体数据 patch 数据集:轴向按原生分辨率降采样(坑点 4),
以 (D=64, H, W) 的 patch 输入,避免 640 层整体积进显存。"""
def __init__(self, data_root, split_ids, patch_d=64, patch_hw=256,
axial_stride=4):
self.root = Path(data_root)
self.samples = []
for sid in split_ids:
subset = "OCTA_3mm" if sid >= 10301 else "OCTA_6mm"
self.samples.append(self.root / subset / str(sid))
self.patch_d, self.patch_hw = patch_d, patch_hw
self.axial_stride = axial_stride # 640→160 原生尺度
def __getitem__(self, idx):
case = self.samples[idx]
vol = stack_volume(case, "OCTA")[::self.axial_stride] # (160,H,W)
D, H, W = vol.shape
d0 = np.random.randint(0, D - self.patch_d)
h0 = np.random.randint(0, H - self.patch_hw)
w0 = np.random.randint(0, W - self.patch_hw)
patch = vol[d0:d0+self.patch_d,
h0:h0+self.patch_hw, w0:w0+self.patch_hw]
patch = normalize(patch).astype("float32")
return torch.from_numpy(patch)[None] # (1, D, H, W)
注意:3D patch 的空间索引必须与标签体共享同一套随机坐标(训练时同步裁剪 mask 体),以上示例仅演示输入侧。
§6.5 坑点清单(8 个)
⚠️ 坑点 1:标签方向与灰度编码不合预期(分类:预处理陷阱)
问题:Label.zip 中的掩码 PNG 与投影图方向不一致,且灰度值并非干净的 0/1 编码,直接喂给训练循环会产生静默错位或错误损失。
症状:loss 收敛但可视化掩码整体旋转/翻转;或交叉熵报出越界类别值。
解决:
- 简单方法:按官方 IPNV2_pytorch README 统一
np.rot90旋转 90°,并把灰度重映射为 0=背景、1=FAZ(大血管任务 2=RV)。- 进阶方法:写带断言的加载函数(如 §6.3
load_label),对每类标签打印唯一灰度值集合,确认后再进入训练。- SOTA 方法:把预处理固化为一次性 DVC 管线步骤,产出标准化掩码副本,训练代码不再接触原始 Label.zip。
参考:IPNV2_pytorch README
⚠️ 坑点 2:不同时间下载的标签不可比(分类:评估误用)
问题:官方在 2023.10 与 2023.11 优化了毛细血管与分层标签,2020–2023 间发表的论文训练自旧标签。
症状:你的模型用新标签训练,Dice 系统性低于(或高于)论文数字但代码完全一致;审稿人质疑复现性。
解决:
- 简单方法:记录 Label.zip 下载日期并在论文中声明标签版本(≥2023.11 为稳定版)。
- 进阶方法:需要与旧结果对标时,向作者申请历史版本标签或仅与明确声明"使用最新标签"的论文比较。
- SOTA 方法:在自己复测的固定测试集上重跑 1–2 个已发表基线(U-Net、IPN-V2)建立新锚点,再比较自己的模型。
参考:IEEE DataPort 更新日志
⚠️ 坑点 3:6M 测试集存在 100 例与 50 例两种口径(分类:评估误用)
问题:社区沿袭 6M 180/20/100 划分,但部分新基准采用"两子集各 50 例测试"的变体,同一任务两套口径数字可差 1–3 个 Dice 点。
症状:自己模型在 6M 测试集上的 Dice 明显低于另一篇论文的"SOTA",细分口径后发现测试集不同。
解决:
- 简单方法:复现时显式声明划分口径与样本编号规则,优先使用 180/20/100 与 140/10/50。
- 进阶方法:两种口径都报告(表格双列),并给出测试集编号列表保证可复现。
- SOTA 方法:按疾病分层的 5 折交叉验证报告均值±方差,绕开单次划分敏感性。
参考:FRNet V2 与 arXiv 2608.15195 划分对照
⚠️ 坑点 4:OCTA 轴向是插值出来的伪分辨率(分类:预处理陷阱)
问题:OCTA 体数据原始约 160 层,被双线性拉伸至 640 层与 OCT 对齐;轴向相邻切片高度相关,且体素各向异性严重(轴向约 3.1 μm/体素 vs 横向 9.9–15 μm/体素)。
症状:3D 卷积模型在轴向"记住"插值平滑度,验证集指标虚高;跨设备迁移到原生 OCTA 体数据时性能骤降。
解决:
- 简单方法:3D 任务中把 640 层降采样回约 160 层原生尺度再训练。
- 进阶方法:使用各向异性卷积核/池化(轴向步长大于横向),或各向同性重采样到立方体素。
- SOTA 方法:参照 IPN 思路,3D→2D 投影学习避免直接在插值轴上做重型 3D 计算(IPN-V2 在 CAVF 上较 IPN 提升约 10% mIoU)。
参考:IPN 论文、MedIA 2024
⚠️ 坑点 5:投影伪影混入深层标签(分类:标签理解)
问题:en face 投影会把浅层血管"投影"到深层(OPL-BM 平面),浅层血管影子在深层投影图中仍可见;OCTA 伪影图像还会干扰分割训练。
症状:深层(OPL_BM)投影上训练的"血管"模型实际学到浅层投影残影;FAZ 边界被残影切割得支离破碎;含伪影样本的预测出现整片缺失。
解决:
- 简单方法:血管分割任务固定使用 ILM-OPL 层投影(B5),避开深层伪影重灾区。
- 进阶方法:训练时做伪影样本增广与质量筛选;评估时按疾病分层报告,识别伪影高发疾病(如 CNV)。
- SOTA 方法:利用 OCT 结构体定位分层边界后做"受控深度投影",或在损失中抑制跨层泄漏。
参考:SAM-OCTA(指出伪影图像影响分割)、OCTA 伪影综述语境
⚠️ 坑点 6:3M/6M 子集分布漂移(分类:偏倚陷阱)
问题:6M 平均年龄 49.18±17.28 岁、患病比例 69.79%;3M 平均年龄 33.12±16.17 岁、患病比例 20%。两子集在年龄、疾病谱、像素分辨率(15 vs 9.9 μm/px)三重维度上均不同。
症状:混合训练模型在两子集指标显著分化;3M→6M 跨子集测试 Dice 掉 5–10 点,误判为模型缺陷。
解决:
- 简单方法:评估永远按子集分开报告,不合并平均。
- 进阶方法:把子集 ID 作为协变量做分层评估;跨子集实验前先做分辨率对齐(重采样至同像素尺寸)。
- SOTA 方法:域适应/域泛化方法(如风格一致化),并报告按疾病分层指标验证偏移是否来自疾病谱差异。
参考:VQ-VAE 论文数据集统计
⚠️ 坑点 7:解压密码邮件格式错误石沉大海(分类:工程陷阱)
问题:DataPort 下载的 zip 带密码,密码需邮件申请;标题不符合固定格式可能被自动过滤。
症状:下载完成后卡在解压,等数日无回复,项目排期延误。
解决:
- 简单方法:严格按
OCTA500: 组织: 姓名的标题格式发送至 chen2qiang@njust.edu.cn,正文按官方模板填全机构/工作/用途三段。- 进阶方法:标题中
OCTA500字符串不可为空;一周未回可在 DataPort 条目评论区留言催复。- SOTA 方法:组内把申请、下载、解压、校验固化为 SOP 文档与新版本快照,避免重复申请。
参考:IEEE DataPort 官方说明
⚠️ 坑点 8:眼动运动伪影导致 B-scan 错位与标注漂移(分类:预处理陷阱)
问题:OCTA 依赖同一位置多次重复扫描做去相关计算,不自主眼动会造成 B-scan 错位、条纹状运动伪影与低信噪比区域,体数据内个别切片质量显著劣化。
症状:3D 训练中含伪影切片的损失贡献异常;投影图出现水平条纹;FAZ 区域被拉扯变形。
解决:
- 简单方法:训练前做切片级质量过滤(梯度能量/信噪比阈值),剔除极端切片。
- 进阶方法:对投影图先做去条纹(方向滤波)与对比度均衡再训练;评估集固定不做清洗以免虚高。
- SOTA 方法:用 OCTA 专用去噪/运动校正网络(官方建议的多模态研究方向之一)做前置处理,保留原始数据副本以便追溯。
参考:Al-Hinnawi et al., 2023, IEEE Access、MedIA 2024 多模态研究展望
§6.6 数据增强(安全 ✅ / 危险 ❌)
| 类别 | 操作 | 说明 |
|---|---|---|
| ✅ 安全 | 随机水平/垂直翻转 | 视网膜血管分布近似旋转对称;掩码同步变换 |
| ✅ 安全 | 小角度旋转(±15°)、随机缩放(0.9–1.1) | 模拟检查眼位差异 |
| ✅ 安全 | 高斯噪声、轻微模糊 | 模拟散斑与低信噪比;强度克制 |
| ✅ 安全 | 亮度/对比度抖动 | 归一化前的百分位截断鲁棒性 |
| ✅ 安全 | 弹性形变(小系数) | 血管形态个体差异 |
| ❌ 危险 | 大角度旋转(>45°)与大幅形变 | 血管走向与 FAZ 位置具有解剖方向性 |
| ❌ 危险 | 90°/镜像之外的轴向重排(3D 体数据) | 破坏解剖连续性与层序 |
| ❌ 危险 | 强直方图均衡(CLAHE 强参数) | OCTA 血流信号强度具量化意义,过度拉伸破坏强度-血流对应 |
| ❌ 危险 | 跨子集风格迁移增广用于评估 | 3M/6M 分布差异是评测对象,不能被增广抹平 |
| ❌ 危险 | 掩码最近邻插值之外的插值方式 | 产生非 0/1 的伪灰度标签 |
(增强项参考 FRNet V2 所用组合:随机旋转、高斯噪声、锐度调节、四向翻转。)
§6.7 模型推荐
| 任务 | 推荐起点 | 进阶选择 | 依据 |
|---|---|---|---|
| 大血管/RV 分割 | U-Net(强基线) | IPN-V2、FRNet V2(0.29M 参数轻量) | U-Net RV Dice 0.9068(3M);IPN-V2+ 0.9274 |
| CAVF 多目标分割 | IPN-V2 | H2C-Net(两子集平均 Dice 90.40%/93.76%) | H2C-Net 超前基准 0.42–0.94 点 |
| FAZ 分割 | U-Net/迁移学习 | SAM-OCTA(prompt 微调) | SAM 直接零样本失效(Dice 0.3730),微调后 0.8520 |
| 动静脉分离 | U-Net + 多类头 | 带提示点的 SAM-OCTA 局部模式 | 动静脉形态相似,提示点收益大 |
| 半监督(5–50% 标签) | Mean Teacher 类 | VAMAE、双路 SAM 半监督 | 50% 标签 Dice 78.4;5% 标签 Dice 0.8924–0.9134 |
§6.8 硬件需求
| 场景 | 显存 | 说明 |
|---|---|---|
| 2D 投影分割(304×304,batch 8) | 8–12 GB | 消费级 GPU 即可;3M 子集单卡可跑通 |
| 2D 混合两子集 + 中型 backbone | 16–24 GB | 6M 图幅大,重采样后显存可控 |
| 3D 体分割(patch 化) | 24 GB+ | 640 层体数据务必 patch 采样 |
| 仅评估/推理 | 4–6 GB | 逐例批处理即可 |
§6.9 评估指标代码
import numpy as np
def dice_iou(pred: np.ndarray, gt: np.ndarray):
"""二值分割 Dice 与 IoU;pred/gt 为 0/1 二维数组。"""
pred, gt = pred.astype(bool), gt.astype(bool)
inter = np.logical_and(pred, gt).sum()
dice = 2 * inter / max(pred.sum() + gt.sum(), 1)
iou = inter / max(np.logical_or(pred, gt).sum(), 1)
return dice, iou
def auc_score(scores: np.ndarray, gt: np.ndarray):
"""像素级 AUC:以连续概率图与二值 GT 计算(等价手写 ROC)。"""
from sklearn.metrics import roc_auc_score
return roc_auc_score(gt.astype(bool).ravel(), scores.ravel())
def hausdorff(pred: np.ndarray, gt: np.ndarray):
"""95% Hausdorff 距离(对离群边界更稳);scipy 实现。"""
from scipy.spatial.distance import directed_hausdorff
p_pts = np.argwhere(pred.astype(bool))
g_pts = np.argwhere(gt.astype(bool))
if len(p_pts) == 0 or len(g_pts) == 0:
return float("nan")
d1 = directed_hausdorff(p_pts, g_pts)[0]
d2 = directed_hausdorff(g_pts, p_pts)[0]
return max(d1, d2) # 严格 HD;95% 分位版本可对点距取分位数
def stratified_report(df):
"""按 {子集} × {Normal/患病} 分层汇总(df 含 dice/iou/subset/disease 列):
任何总体均值必须伴随分层明细一起报告,见 §8.3 评测协议。"""
return df.groupby(["subset", "disease"])[["dice", "iou"]].agg(
["mean", "std", "count"])
# 社区惯例:报告 Dice / mIoU / Accuracy / AUC(+ 部分工作含 HD),
# 按子集与疾病分层分别汇总,避免 3M/6M 与 Normal/患病混池平均。
§6.10 MLOps 笔记
- 数据版本化:以 Label.zip 的下载日期 + SHA256 作为标签版本号写进实验配置;2023.10/2023.11 前后标签不可混用(坑点 2)。
- 划分固化:把训练/验证/测试的 subject_id 列表作为 artifact 提交(json/yaml),杜绝"顺序切分"与"随机切分"混用的隐性口径漂移。
- 预处理即代码:90° 旋转、灰度重映射、归一化参数全部入配置;禁止在训练脚本里内联魔法常数。
- 评估分层:按 {3M, 6M} × {Normal, 患病} 四格分层汇总指标,任何合并均值需同步报告分层明细。
- 可复现性:固定 seed(含 DataLoader worker seed);记录 GPU 型号与 PyTorch 版本,3D 任务对 cudnn 确定性算法敏感。
配套实验配置模板(config.yaml 片段):
data:
root: data_root
label_version: "2023.11" # Label.zip 下载日期 + SHA256 短码
subsets: ["OCTA_3mm", "OCTA_6mm"]
input: OCTA_ILM_OPL_Max # B5 投影
out_size: 304
axial_stride: 4 # 3D 任务:640→160 原生尺度
split:
scheme: official_community # 180/20/100 + 140/10/50
assignment_file: fold_assignment.csv
preprocess:
rot90: true # 官方标签必须旋转 90°
remap_gray: {0: background, 1: faz, 2: rv}
normalize: percentile_zscore # 1%/99% 截断
train:
seed: 42
batch_size: 8
amp: true
eval:
metrics: [dice, iou, auc]
stratify_by: [subset, disease] # 强制分层汇总
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解建议 |
|---|---|---|---|
| 单中心单设备 | 全部 500 例来自江苏省人民医院一台 RTVue-XR(840 nm),设备/厂商特异模式可能被模型当作特征 | 🔴 高 | 外部验证(ROSE/DRAC 等),风格增广,报告中明确声明设备边界 |
| 子集分布不一致 | 6M 平均年龄 49.18±17.28 岁、患病 69.79%;3M 平均年龄 33.12±16.17 岁、患病 20%,年龄/疾病/分辨率三重混杂 | 🔴 高 | 按子集分层评估;跨子集实验前重采样对齐(坑点 6) |
| 疾病类不平衡 | 3M 中 Normal 占 80%;罕见类(3M AMD 6 例/CNV 5 例、6M CSC 14 例/RVO 10 例)样本极少 | 🟡 中 | 罕见类不进测试下结论;分层交叉验证;加权损失 |
| 异质"其他病变"类 | 6M 的 96 例"其他视网膜病变"诊断谱未细分,分类任务中构成噪声大类 | 🟡 中 | 分类研究将其单列或排除,避免与具体病种混池 |
| 标注版本演化 | 毛细血管(2023.10)与分层标签(2023.11)被优化,历史结果与新标签不可比 | 🟡 中 | 记录下载日期与标签版本(坑点 2) |
| 年龄跨度大 | 3M 含大量年轻受试者(均龄 33 岁),与典型眼底病就诊人群(老年)分布不同 | 🟢 低 | 年龄分层报告;对外部署时声明适用人群 |
§7.2 标注质量
- 正面:大血管标注采用"粗标 → 可视化核对 → 细修 → 阈值化"的双阶段人工流程(论文 Fig. 5),有明确的质控路径;分层标签经 2023.11 专项优化。
- 待验证:官方未公布标注者间一致性(Dice/Kappa)与每例标注者数量;毛细血管等细结构标注难度最高,2023 年的优化本身就说明早期版本存在质量空间。
- 行动建议:关键实验前抽样 30–50 例自行复测一致性;对毛细血管任务的历史论文数字保持"旧标签"语境解读。
标签质量自检清单(接入管线前执行):
| 检查项 | 方法 | 通过标准 |
|---|---|---|
| 掩码方向一致性 | 抽 10 例叠加掩码与投影图可视化 | 血管走向与图像走向一致(经 90° 旋转后) |
| 灰度值域 | 统计每类掩码唯一值集合 | 二值掩码只含 {0,1}(或官方复合编码 {0,1,2}) |
| 非空率 | 逐例统计前景像素占比 | FAZ 每例必有前景;异常空掩码标记"未知" |
| 疾病-形态抽样核对 | 每疾病类抽 3 例人工目检 | 形态与疾病预期一致(如 DR 血管稀疏) |
| 标签版本指纹 | 记录 Label.zip 下载日期 + 字节数 | 与实验记录中的版本字段一致(坑点 2) |
§7.3 泛化性风险
| 部署场景 | 失效风险 | 证据/机制 |
|---|---|---|
| 跨厂商设备(Heidelberg/Zeiss 等) | 高 | 全部训练数据来自 Optovue RTVue-XR,SSADA 参数与噪声特性厂商特异 |
| 跨视野(黄斑 3/6 mm → 超广角) | 高 | DRAC 超广角 OCTA 与黄斑数据视场/血管形态差异大,已有跨库测试示范 |
| 跨人群(非中国人群) | 中 | 单中心中国人群,种族构成未逐例记录 |
| 跨年龄段外推 | 中 | 3M/6M 年龄分布差异大(坑点 6),模型可能学到年龄相关形态 |
| 病变晚期(大量出血/渗出遮蔽血管) | 高 | 数据集以黄斑中心区为主,极端病变形态覆盖有限 |
§7.4 伦理与合规
数据采集遵循赫尔辛基宣言并获机构伦理委员会批准(Al-Hinnawi et al., 2023 转述)。数据经去标识化处理,文本标签仅含年龄/性别/眼别/疾病四类非直接标识信息。获取上采用"注册 + 邮件申请解压密码"的双重门槛,且使用义务要求引用官方论文;未附带正式法律许可协议文本,商用场景应先联系发布团队(chen2qiang@njust.edu.cn)确认边界。
§7.5 公平性
- 性别与眼别标签虽随数据发布,但官方未公布机器可读的逐例分布清单,公平性审计需自行解析 Label.zip 完成。
- 两子集年龄结构差异(均龄 33 vs 49 岁)本身就是公平性风险:混合训练模型可能对年轻/老年血管形态表现不一致,建议按年龄段分层报告 Dice。
- 数据集未覆盖儿童眼底影像人群,相关应用(儿童视网膜血管发育研究)需谨慎外推。
- 若开展性别/眼别维度的公平性研究,应先从 Label.zip 解析出逐例清单并在论文中发布统计表,弥补官方未提供机器可读分布清单的空白。
§7.6 数据漂移
单设备单时段(7 个月窗口)采集意味着数据集内部时间漂移有限,但这也使其对真实世界漂移最不鲁棒:设备固件更新、扫描协议调整、操作员更换都会造成训练-部署分布差异。建议部署侧持续监控输入图像的百分位强度分布与投影图质量指标,发现分布偏移即在本地数据上微调。
部署侧漂移监控指标建议:
| 监控指标 | 计算方式 | 报警阈值(示例) |
|---|---|---|
| 输入强度分布 | 逐图 1%/50%/99% 分位强度的分布漂移检验 | 分位数偏移超过校准期 ±3σ |
| 信号占比 | 前景(血流信号)像素占比均值 | 相对基线下降 >20% |
| FAZ 可分割率 | FAZ 连通域置信度低于阈值的图像比例 | 上升 >10 个百分点 |
| 运动伪影率 | 投影图水平条纹能量占比 | 超过训练集 99 分位 |
§7.7 DAIMS 数据就绪度自评(24 项)
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 每受试者固定目录结构,逐例字段一致 |
| 2 | 唯一标识 | ✅ | 编号 No.10001–10500 全局唯一且连续 |
| 3 | 特殊字符 | ✅ | 文件名与标签值为纯 ASCII 编码 |
| 4 | 重复行 | ✅ | 一受试者一眼一检查,无重复记录 |
| 5 | 缺失编码 | ⚠️ | 未定义统一缺失编码约定,需解析后自行检查 |
| 6 | 标签标识 | ✅ | 7 类分割标签 + 4 类文本标签语义清晰、官方文档完整 |
| 7 | 罕见类分组 | ⚠️ | CSC/RVO/CNV 等罕见类样本少且未提供分组/合并指引 |
| 8 | 偏倚评估 | ⚠️ | 官方分析了训练规模与疾病影响,但未系统评估年龄/性别偏倚 |
| 9 | 数据字典 | ✅ | DataPort 结构说明 + MedIA 论文 §3–4 完整描述 |
| 10 | 信息性缺失解释 | ⚠️ | 无信息性缺失机制与文档 |
| 11 | 设备记录 | ✅ | 设备型号、波长、A 扫速率、算法完整可查 |
| 12 | 共线性 | ⚠️ | 影像集无表格共线性问题,但子集/疾病/年龄强混杂需在分析中处理 |
| 13 | 编码映射 | ✅ | 标签灰度编码官方 README 明确(0/1/2) |
| 14 | 时间戳处理 | ❌ | 无逐例检查时间戳,仅有 2018-03 至 2018-09 采集窗口 |
| 15 | 划分建议 | ⚠️ | 官方实验设置存在,但社区已分化出两种 6M 测试口径 |
| 16 | 泄漏讨论 | ⚠️ | 官方未讨论泄漏风险;受试者级划分天然安全,切片级划分有隐患 |
| 17 | 标签分布 | ✅ | 论文 Fig. 4 直方图 + 第三方逐例计数可交叉核对 |
| 18 | 测量偏倚 | ⚠️ | 单设备消除设备方差的同时屏蔽了跨设备鲁棒性学习 |
| 19 | 外部验证建议 | ✅ | 存在 DRAC→OCTA-500 跨库同行评审示范与多数据集基准实践 |
| 20 | 版本记录 | ✅ | 官方更新日志精确到月份,标签演化全程可追溯 |
| 21 | 预处理脚本 | ✅ | Code.zip + 官方 IPNV2_pytorch 仓库提供可运行基线 |
| 22 | 合规要求 | ⚠️ | 引用义务清晰,但无正式许可协议文本,商用地带模糊 |
| 23 | 多模态对齐 | ✅ | OCT/OCTA 逐像素对齐(OCTA 轴向插值实现) |
| 24 | 去标识化 | ⚠️ | 影像天然去标识、文本标签最小化,但无正式脱敏声明文档 |
DAIMS 评分:18.0 / 24(13 项完全满足 + 10 项部分满足计 0.5 + 1 项不满足)
评分解读:18 分处于"研究可用性良好、治理细节欠账"区间。结构化程度(编号体系、目录、数据字典、版本日志)与多模态对齐是显著强项,反映工业级数据管理水准;短板集中在治理文书侧——无正式许可协议、无标注者一致性报告、无逐例时间戳与缺失编码约定。这些短板多数可通过使用方自行建立 SOP 弥补,而非数据本身的硬伤。
对你意味着什么:
- 可以直接把该数据集纳入生产级研究管线——编号唯一、结构稳定、官方脚本齐全,数据工程接入成本低。
- 立项前必须补三份自有文档:标签版本登记表、受试者级划分清单(冻结为 artifact)、抽样一致性复测报告。
- 若成果面向临床转化或商用,先与发布团队书面确认许可边界;学术发表则满足引用义务即可。
- 时间维度分析(纵向建模)在此数据集上不可行,需求方应在设计阶段就排除。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| OCTA-500(500 例全量)作为 DRAC 模型的外部测试集 | DRAC 挑战赛数据(超广角 OCTA,1,103 图) | 图像级异常/分割外部迁移 | 以 AUROC 与像素级指标报告(见原文结果表) | 相比 DRAC 内部测试有衰减但方法保持有效 | 超广角→黄斑视野的跨库迁移可行,是 OCTA 领域少有的同行评审外部验证示范(VQ-VAE 论文, Bioengineering 2024) |
| ROSSA(918 图)与 OCTA-500 双库训练评估 | ROSAA 挑战赛社区 | 血管分割 | FRNet V2 在两库同时报告 Dice/Acc(原文 Table 2) | 双库设定下性能稳定 | 跨 OCTA 数据集的轻量模型验证范式(FRNet V2, Biomimetics 2025) |
§8 基准性能与生态
§8.1 排行榜(RV / CAVF 分割)
| 排名 | 模型 | 性能(Dice) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | IPN-V2+ | 0.9274(RV,3M)/ 0.8667(FAZ,3M) | 2021/2022 | 投影学习模块改进,克服分块训练棋盘效应 | Li et al., 2022, arXiv:2012.07261. DOI 10.48550/arXiv.2012.07261 | IPNV2_pytorch |
| 2 | H2C-Net | 两子集平均 Dice 90.40% / 93.76%(CAVF) | 2025 | 高度-通道无损降维(3D→2D),多目标统一分割 | Cao et al., 2025, Pattern Recognition. DOI 10.1016/j.patcog.2024.111123 | H2C-Net |
| 3 | SAM-OCTA | 0.9199(RV,3M)/ 0.8520(FAZ,3M) | 2023/2024 | LoRA 微调 SAM + 提示点,支持局部模式 | Chen et al., 2023, arXiv:2310.07183. DOI 10.48550/arXiv.2310.07183 | SAM-OCTA-extend |
| 4 | FARGO | 0.9112(RV,3M)/ 0.8374(FAZ,3M) | 2021 | 拓扑感知血管分割 | 见 SAM-OCTA Table 8 复现口径 | — |
| 5 | U-Net(基线) | 0.9068(RV,3M)/ 0.8301(FAZ,3M) | 2015/复测 2023 | 经典编码-解码 | 见 SAM-OCTA Table 8 复现口径 | — |
| — | VAMAE(半监督,50% 标签) | 78.4(大血管,6M 50% 标签口径) | 2026 | 掩码自编码预训练 + 半监督 | Pissas et al., 2026,见 sota2 榜单 | — |
| — | OCTA-Net UB(投影图分任务) | 91.32(3M ILM-OPL)/ 88.87(6M ILM-OPL) | — | 按投影层分任务评估 | 见 sota2 榜单 | — |
⚠️ 数值不可直接比较:① 6M 测试集存在 100 例与 50 例两种口径(坑点 3);② 标签版本不同(2023.10/2023.11 前后);③ 输入层选择不同(FULL vs ILM-OPL vs OPL-BM 投影);④ 部分数字来自第三方复现而非原论文。引用任何数字前请核对原论文协议。
§8.2 SOTA 总结与选型建议
- 要发论文比数字:先复现 U-Net 与 IPN-V2 建锚点,再与 H2C-Net(CAVF 全任务)对标;FAZ 任务上 SAM 微调路线(SAM-OCTA)证明基础模型先验有效,但零样本 SAM 完全不可用(Dice 0.3730)。
- 要落地部署:FRNet V2 参数量 0.29M、推理快,适合边缘部署;IPN-V2 系列在精度-速度权衡上被 MedIA 论文认可为基线。
- 标签稀缺场景:半监督路线(5–50% 标签)已有成熟参照系,双路 SAM 半监督在 5% 标签下达 Dice 0.9134/0.8924(Applied Soft Computing, 2026)。
- 多目标统一分割:CAVF 已被 MedIA 论文确立为标准复合任务,单目标论文建议同时报告 CAVF 平均指标以便与生态接轨。
- 选型速查:精度优先 → H2C-Net / IPN-V2+;效率优先 → FRNet V2;交互式标注与局部修正 → SAM-OCTA 提示点模式;标签 <20% → 半监督双路 SAM / VAMAE 路线。
§8.3 评测协议
- 输入:B5(OCTA ILM-OPL 最大投影)为血管任务默认输入;CAVF 任务同层多目标输出。
- 划分:6M 180/20/100、3M 140/10/50(或声明 50 例测试变体口径)。
- 指标:Dice、mIoU(Jaccard)、Accuracy、AUC,部分工作报告 HD;按子集与疾病分层汇总。
- 公平性条件:同一标签版本、同一输入分辨率对齐方式、同一评估脚本;建议随论文发布预测掩码。
<details>
<summary>标准评测循环参考实现(逐例 Dice + 分层汇总)</summary>
import pandas as pd
import torch
@torch.no_grad()
def evaluate(model, loader, device="cuda"):
model.eval()
rows = []
for batch in loader:
prob = torch.sigmoid(model(batch["image"].to(device))).cpu()
pred = (prob > 0.5).numpy()[:, 0]
for i, sid in enumerate(batch["sid"]):
dice, iou = dice_iou(pred[i], batch["mask"].numpy()[i, 0])
subset = "3M" if sid >= 10301 else "6M"
rows.append({"sid": sid, "subset": subset, "dice": dice, "iou": iou})
df = pd.DataFrame(rows)
overall = {"dice_mean": df["dice"].mean(), "iou_mean": df["iou"].mean()}
stratified = df.groupby("subset")[["dice", "iou"]].mean()
return overall, stratified, df
</details>
提交评测结果时建议同时附上
df(逐例分数表):它使审稿人可以自行验证分层口径与离群样本,是该数据集社区正在形成的良好实践。
§8.4 相关数据集
| 数据集 | 模态 | 规模 | 标注 | 与 OCTA-500 关系 |
|---|---|---|---|---|
| ROSE | OCTA 投影图 | 229 例 | 大血管掩码 | 同门数据集(iMED-Lab),可作为外部验证 |
| ROSSA | OCTA 投影图 | 918 图 | 血管掩码(含半监督设定) | 规模更大的 2D 补充训练源 |
| DRAC | 超广角 OCTA | 1,103 图 | DR 分级 + 病灶分割 | 跨视野外部验证伙伴 |
| Giarratano et al. | OCTA 投影图 | 79 例 | 血管分割 | 早期小规模参考 |
| FAZID | OCTA 图像 | 小规模 | FAZ 标注 | FAZ 专项参照 |
| OCTA-500 本条目对比基线(U-Net/IPN 复现口径) | 投影图 | 500 例 | 7 类掩码 | 各表数字均受 §8.1 不可比警告约束 |
§8.5 关键论文 Top 10
- Li M, Huang K, Xu Q, Yang J, Zhang Y, Ji Z, Xie K, Yuan S, Liu Q, Chen Q. “OCTA-500: A retinal dataset for optical coherence tomography angiography study.” Medical Image Analysis, 93:103092, 2024. DOI 10.1016/j.media.2024.103092 — 数据集主论文,定义 CAVF 任务与 IPN-V2 基线。
- Li M, Chen Y, Ji Z, Xie K, Yuan S, Chen Q, Li S. “Image Projection Network: 3D to 2D Image Segmentation in OCTA Images.” IEEE Transactions on Medical Imaging, 39(11):3343–3354, 2020. DOI 10.1109/TMI.2020.2992244 — 提出 IPN 与数据集首发形态。
- Li M, Zhang Y, Ji Z, Xie K, Yuan S, Liu Q, Chen Q. “IPN-V2 and OCTA-500: Methodology and Dataset for Retinal Image Segmentation.” arXiv:2012.07261, 2022(v3). DOI 10.48550/arXiv.2012.07261 — 数据集与方法的完整方法论版。
- Cao G, Peng Z, Zhou Z, Wu Y, et al. “Multi-task OCTA image segmentation with innovative dimension compression.” Pattern Recognition, 2025. DOI 10.1016/j.patcog.2024.111123 — H2C-Net,CAVF 当前最强公开结果之一。
- Chen X, Wang C, Ning H, Li S, Shen M. “SAM-OCTA: Prompting Segment-Anything for OCTA Image Segmentation.” arXiv:2310.07183, 2023. DOI 10.48550/arXiv.2310.07183 — SAM 微调 + 提示点范式,含系统的基线复现表。
- Zhang Y, Huang C, Li M, Xie S, Xie K, Yuan S, Chen Q. “Robust layer segmentation against complex retinal abnormalities for en face OCTA generation.” MICCAI, 2020 — 分层标签的方法学来源。
- Yang J, Tao Y, Xu Q, Zhang Y, Ma X, Yuan S, Chen Q. “Self-supervised sequence recovery for semi-supervised retinal layer segmentation.” IEEE JBHI, 26(8):3872–3883, 2022 — 分层标签的半监督方法学来源。
- Xu Q, Zhang W, Zhu H, Chen Q. “Foveal avascular zone volume: a new index based on optical coherence tomography angiography images.” Retina, 41(3):595–601, 2021 — FAZ 容积指标的临床动机。
- Xu Q, Li M, Pan N, Chen Q, Zhang W. “Priors-guided convolutional neural network for 3D foveal avascular zone segmentation.” Optics Express, 30(9):14723–14736, 2022 — 3D FAZ 标签对应方法。
- Li M, Huang K, Zhang Z, Ma X, Chen Q. “Label adversarial learning for skeleton-level to pixel-level adjustable vessel segmentation.” arXiv:2205.03646, 2022. DOI 10.48550/arXiv.2205.03646 — 骨架级到像素级标签利用的扩展方向。
§8.6 社区活跃度
- 官方 IPNV2_pytorch 仓库 71 Star / 13 Fork(GitHub API,截至 2026-09),2021-05 后停更但 README 标签预处理说明仍是社区事实标准。
- H2C-Net 仓库 5 Star / 2 Fork(GitHub API,截至 2026-09),随 2025 Pattern Recognition 论文发布。
- 数据论文自 2024 年出版累计 205 次引用(Semantic Scholar,截至 2026-09),引用曲线稳定上行;基于该数据的论文覆盖分割、半监督、模态转换、基础模型适配四个方向。
- IPN 方法论文累计 137 次引用(Semantic Scholar,截至 2026-09),大量引用同时指向数据集本体,构成数据集的二级引用网络。
- 无官方维护的排行榜;第三方榜单(sota2.com)追踪部分任务,但口径混杂(见 §8.1 警告)。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| IPNV2_pytorch | 官方基线代码(PyTorch) | https://github.com/chaosallen/IPNV2_pytorch | 71 | 标签预处理事实标准 |
| IPN_tensorflow | 官方基线代码(TensorFlow) | https://github.com/chaosallen/IPN_tensorflow | — | IPN 原始实现 |
| H2C-Net | SOTA 多目标分割代码 | https://github.com/IAAI-SIT/H2C-Net | 5 | CAVF 任务对标 |
| SAM-OCTA-extend | SAM 微调代码 | https://github.com/ShellRedia/SAM-OCTA-extend | — | 基础模型适配范式 |
| IEEE DataPort 条目 | 官方数据托管 | https://ieee-dataport.org/open-access/octa-500 | — | 唯一下载入口 |
| ROSE 数据集页面 | 同门数据集 | https://imed.nimte.ac.cn/dataofrose.html | — | 外部验证首选 |
§9 相关资源与引用
§9.1 官方资源清单
- 数据下载(唯一官方入口):IEEE DataPort — OCTA-500(免费 IEEE 账号登录;解压密码邮件申请至 chen2qiang@njust.edu.cn)
- 数据论文(引用义务对象):PubMed 38325155 / DOI 10.1016/j.media.2024.103092
- 方法论文:IEEE TMI IPN(9085991) / arXiv 2012.07261
- 官方代码:IPNV2_pytorch、IPN_tensorflow;随数据分发的 Code.zip 含投影生成脚本
- 社区教程代码:SAM-OCTA-extend(LoRA 微调 SAM 的完整训练脚本)、H2C-Net(CAVF 多目标训练配置)
- 同门生态:ROSE 数据集(iMED-Lab,中科院宁波材料所),可作为 OCTA-500 模型的外部验证集
§9.2 BibTeX 引用块
@article{li2024octa500,
title = {OCTA-500: A retinal dataset for optical coherence tomography
angiography study},
author = {Li, Mingchao and Huang, Kun and Xu, Qiuzhuo and Yang, Jiadong and
Zhang, Yuhan and Ji, Zexuan and Xie, Keren and Yuan, Songtao and
Liu, Qinghuai and Chen, Qiang},
journal = {Medical Image Analysis},
volume = {93},
pages = {103092},
year = {2024},
doi = {10.1016/j.media.2024.103092}
}
@article{li2020ipn,
title = {Image Projection Network: 3D to 2D Image Segmentation in OCTA
Images},
author = {Li, Mingchao and Chen, Yerui and Ji, Zexuan and Xie, Keren and
Yuan, Songtao and Chen, Qiang and Li, Shuo},
journal = {IEEE Transactions on Medical Imaging},
volume = {39},
number = {11},
pages = {3343--3354},
year = {2020},
doi = {10.1109/TMI.2020.2992244}
}
@misc{li2022ipnv2,
title = {IPN-V2 and OCTA-500: Methodology and Dataset for Retinal Image
Segmentation},
author = {Li, Mingchao and Zhang, Yuhan and Ji, Zexuan and Xie, Keren and
Yuan, Songtao and Liu, Qinghuai and Chen, Qiang},
year = {2022},
eprint = {2012.07261},
archivePrefix = {arXiv},
doi = {10.48550/arXiv.2012.07261}
}
@data{octa500dataport,
title = {OCTA-500},
author = {Li, Mingchao and Yuan, Songtao and Chen, Qiang},
year = {2019},
publisher = {IEEE DataPort},
doi = {10.1016/j.media.2024.103092},
url = {https://ieee-dataport.org/open-access/octa-500}
}
§9.3 引用指南
官方要求使用数据集时至少引用主论文(MedIA 2024)与 IPN 论文(TMI 2020)之一;若使用 3D FAZ 或分层标签,建议同时引用对应方法论文(§8.5 第 6–9 条)。第三方逐例统计(§4.2 疾病构成)转引时请注明出自 medRxiv 统计而非官方计数表。
§10 AI 使用声明卡
§10.1 本页面使用的 AI 模型
- 大语言模型(CodeBuddy,fast-model):条目文本撰写、结构组织、代码示例编写。
§10.2 AI 参与范围
AI 负责初稿撰写与代码示例生成;全部事实性陈述(规模数字、疾病构成、基准数字、获取流程、版本历史)均取自 §10.3 所列公开来源并由人工核对;医学编码映射参考已上线同类条目的审核结论;人工审核确认后发布。
§10.3 输入来源(检索与写作依据)
- IEEE DataPort — OCTA-500 官方条目(结构、更新日志、文件清单、获取流程、引用要求)。https://ieee-dataport.org/open-access/octa-500
- Li M, et al. “OCTA-500: A Retinal Dataset for OCTA Study.” Medical Image Analysis, 93:103092, 2024. DOI 10.1016/j.media.2024.103092. https://pubmed.ncbi.nlm.nih.gov/38325155
- 同论文 ScienceDirect 摘要与正文节选(引言、相关工作、量化指标背景)。https://www.sciencedirect.com/science/article/abs/pii/S1361841524000173
- Li M, et al. “Image Projection Network…” IEEE TMI, 39(11):3343–3354, 2020. DOI 10.1109/TMI.2020.2992244. https://dblp.org/rec/journals/tmi/LiCJXYCL20.html
- arXiv 2012.07261(IPN-V2 与数据集方法论论文,v3 2022-12-25;作者机构脚注)。https://arxiv.org/abs/2012.07261
- Semantic Scholar API 引用计数(MedIA 2024:205;IPN TMI:137,截至 2026-09)。https://api.semanticscholar.org/graph/v1/paper/DOI:10.1016/j.media.2024.103092
- medRxiv 2024.02.23.24303275(3M/6M 逐例疾病构成与划分)。https://www.medrxiv.org/content/10.1101/2024.02.23.24303275v1.full.pdf
- MDPI Bioengineering 11(7):682,VQ-VAE 异常检测(子集年龄/患病率、DRAC→OCTA-500 外部验证)。https://www.mdpi.com/resolver?pii=bioengineering11070682
- MDPI Biomimetics 10(4):207,FRNet V2(划分、增广、轻量模型)。https://www.mdpi.com/article/10.3390/biomimetics10040207
- ScienceDirect S0031320324008744,H2C-Net(CAVF 基准数字)+ Crossref DOI 10.1016/j.patcog.2024.111123(作者)。https://www.sciencedirect.com/science/article/pii/S0031320324008744
- SAM-OCTA,arXiv 2310.07183(基线复现表、伪影讨论、作者与代码链接)。https://arxiv.org/abs/2310.07183
- Al-Hinnawi et al., 2023, IEEE Access(设备参数、SSADA、运动伪影、伦理声明转述)。https://ieeexplore.ieee.org/document/10070766/authors
- Politecnico di Torino 学位论文 23452(OCTA 160→640 插值、采集时间窗、B-scan 总量转述)。https://webthesis.biblio.polito.it/23452/1/tesi.pdf
- IPNV2_pytorch 官方仓库 README(标签旋转 90° 与灰度重映射)+ GitHub API(Star/Fork,截至 2026-09)。https://github.com/chaosallen/IPNV2_pytorch
- sota2.com 榜单(OCTA-Net UB 投影分任务 Dice、VAMAE 半监督 SOTA)。https://www.sota2.com/research/task/vessel-segmentation
- Applied Soft Computing,双路 SAM 半监督(5% 标签 Dice)。https://www.sciencedirect.com/science/article/pii/S1568494626002267
- MDPI Sensors,COSNet(iMED-Lab/CNITECH 致谢、ROSE 链接)。https://www.mdpi.com/resolver?pii=s22249847
- 千方病案医数集已上线条目 IDRiD/RETOUCH/RFMiD/OCT2017 的 ICD-11 与 SNOMED CT 审核结论(内部一致性参考)。
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| frontmatter 与 INFOBOX 数字 | 千方病案医学编辑部 | 逐项对照 DataPort 官方页与 Semantic Scholar API | ✅ 已通过/已验证 |
| §2 ICD-11/SNOMED 映射 | 千方病案医学编辑部 | 与 ICD-11/SNOMED 概念及已上线眼科条目核对并加注声明 | ✅ 已通过/已验证 |
| §3/§4 规格与数据结构 | 千方病案医学编辑部 | 对照官方条目结构与分卷文件清单逐行核对 | ✅ 已通过/已验证 |
| §5 划分与泄漏分析 | 医疗 AI 数据工程师 | 对照 FRNet V2/medRxiv/arXiv 三方划分口径交叉验证 | ✅ 已通过/已验证 |
| §6 代码可运行性 | 医疗 AI 数据工程师 | 依赖目录与官方 ZIP 结构、README 预处理要求逐行核对 | ✅ 已通过/已验证 |
| §7 DAIMS 与偏倚分析 | 千方病案医学编辑部 | 24 项逐项溯源至来源清单 §10.3 | ✅ 已通过/已验证 |
| §8 基准数字与完整引用 | 千方病案医学编辑部 | 数字回溯至原论文摘要/表格或第三方榜单并加不可比警告 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
本条目全部章节由大语言模型在人工监督下起草,人工审核者对事实、编码、代码与结论承担最终责任;无纯 AI 自动发布章节。
§10.6 最后人工审核日期
2026-09-05(与 §0.3 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- duke-dme — 共享标签:医学影像 / 眼科影像 / 医学图像分割 / 糖尿病视网膜病变
- octid — 共享标签:医学影像 / 眼科影像 / 医学图像分割 / 糖尿病视网膜病变
- fives — 共享标签:医学影像 / 眼科影像 / 医学图像分割 / 糖尿病视网膜病变
- iostar — 共享标签:医学影像 / 眼科影像 / 医学图像分割 / 糖尿病视网膜病变
- eyepacs — 共享标签:医学影像 / 眼科影像 / 糖尿病视网膜病变
- messidor — 共享标签:医学影像 / 眼科影像 / 糖尿病视网膜病变
- idrid — 共享标签:医学影像 / 眼科影像 / 医学图像分割
- ddr — 共享标签:医学影像 / 眼科影像 / 糖尿病视网膜病变
- fairseg — 共享标签:医学影像 / 眼科影像 / 医学图像分割
- fgadr — 共享标签:医学影像 / 眼科影像 / 医学图像分割 / 糖尿病视网膜病变
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

