LUNA25 肺结节恶性风险估计挑战赛

NLST 四千余例低剂量胸部 CT、六千余个结节标注的恶性风险基准——给定结节位置输出 0-100 风险分,AUC 排序,与 75 位国际阅片者同台

来源 NLST 回顾性低剂量胸部 CT(.mha 格式,含结节世界坐标点与年龄/性别/吸烟状态)+ 随访确证的结节级良恶性标签 + DLCST/NELSON/MILD 隐藏测试集发布时间: 2026-10-18最后更新: 2026-10-18 阅读 21
LUNA25 肺结节恶性风险估计挑战赛

信息速览

数据集名称LUNA25 肺结节恶性风险估计挑战赛
数据类型影像数据,人工标注,临床数据
规模NLST 受试者 4,069 例扫描(公开训练集);隐藏测试集 468 个结节来自 DLCST、NELSON、MILD;阅片研究 300 例 × 75 位阅片者
接入方式NLST 回顾性低剂量胸部 CT(.mha 格式,含结节世界坐标点与年龄/性别/吸烟状态)+ 随访确证的结节级良恶性标签 + DLCST/NELSON/MILD 隐藏测试集
AI 就绪度

LUNA25(The LUNA25 Challenge)是荷兰 Radboud 大学医学中心医学影像系 / 诊断图像分析组(DIAG)主办的第二代肺结节挑战赛,2025 年 3 月 1 日在维也纳欧洲放射学大会(ECR 2025)发布。公开训练集是四千余例美国国家肺癌筛查试验(NLST)的低剂量胸部 CT,每个结节带一个随访确证的恶性或良性标签;隐藏测试集是四百余个来自丹麦、荷兰-比利时与意大利三项筛查试验的 5-15 毫米不确定结节。

它要解决的问题是「看着像不像癌,而不只是有没有」。低剂量 CT 筛查把肺癌死亡率压了下来,代价是海量小结节涌向读片医生:绝大多数良性,少数是早期癌,5-15 毫米正是最难分的一档。LUNA16 教会了机器找到结节,却没有教它判断善恶;临床上真正决定「三个月后复查还是立刻活检」的,是后者。LUNA25 把结节位置直接给定,只问一件事:这个结节有多大概率是恶性。

用它的第一件事,是分清自己要做的是检测还是风险判定——两者的输入、输出、指标、坑完全不同。第二件事,是在自己机器上把官方评测脚本跑通,确认输出的 JSON 结构与 AnnotationID 的对应关系无误,很多团队的第一次提交就栽在索引错位上。第三件事,是记住训练集全在美国、测试集全在欧洲,跨域这道坎不会因为 AUC 好看就消失。

§1 它是什么:从「找结节」到「判善恶」的第二代 LUNA

1.1 一句话定义与三个身份

LUNA25 有三重身份,混淆它们是使用这条数据最常见的第一道坎。

第一重是挑战赛:一场 2025 年举办、已于 9 月公布结果的国际公开竞赛,参赛者在 Grand Challenge 平台上提交 Docker 容器,在隐藏队列上被打分、排名。

第二重是数据集:一份可以脱离比赛单独下载使用的公开训练集,四千余例低剂量胸部 CT 加六千余条结节级良恶性标签,挂在 Zenodo 的两个 DOI 下(影像与标注分开)。

第三重是阅片研究:一项与竞赛并行的人类对照实验,75 位来自不同国家的放射科医生在同样的 300 个结节上给出 0-100 风险分与三档管理建议,为 AI 提供「人类平均线」这一参照系。

这三重身份对应三种不同的使用方式:想做方法研究,用第二重;想复现或对标 SOTA,看第一重的榜单与已发表结果;想研究「人机差距在哪些病例上最大」,用第三重的数据与论文里的分层分析。三者的获取条件、许可与可复现程度都不一样,§3 会逐条拆开。

1.2 官方称谓与不展开的缩写

官方网站、平台页面与论文里,这条挑战赛一律写作 LUNA25,全称只出现在标题级的「The LUNA25 Challenge」。与它的前代不同,官方页面没有逐字展开 LUNA 四个字母的含义。LUNA16 的官方写法是「LUng Nodule Analysis 2016」,中文文献常译作「肺结节分析」;到了 LUNA25,官网、规则页、引用块中均未出现任何展开式。检索中文资料时会看到「肺结节分析 2025」这类译法,它是对前代命名的类推,不是官方译名,引用时宜直接用 LUNA25。

同理,官网把研究对象写成 low-dose chest CT(低剂量胸部 CT)或 screening CT(筛查 CT),而不是 CT screening(CT 筛查)——前者指检查手段,后者指筛查项目,LUNA25 的数据全部来自后者的产物,但描述对象是前者。

1.3 谁在做,为什么是现在

主办方是 Radboud University Medical Center 的医学影像系下属诊断图像分析组,负责人 Colin Jacobs。联合组织方包括荷兰格罗宁根大学医学中心(UMCG)与丹麦哥本哈根大学——前者是 NELSON 试验的核心参与机构之一,后者对应丹麦肺癌筛查试验(DLCST)的数据供给。这一组合并非偶然:LUNA25 的测试集恰好由这三家所在国(加上意大利)的筛查队列构成。

学术层面,挑战赛设了一个 15 人的国际科学顾问委员会,成员覆盖放射学、呼吸病学、流行病学、人工智能,并包含一名肺癌患者代表。官网对顾问委员会的职责写得很具体:确保参考标准可靠、测试队列有代表性、AI 验证可信。在医学挑战赛里,把患者代表放进设计环节并不常见,它对应的正是「多检出一个癌」与「少做一次不必要活检」之间的价值权衡。

时间点上,2025 年是一个分水岭。欧洲多国正在推进肺癌筛查的全国 rollout,美国的筛查指南也已把低剂量 CT 列为高危人群的标准选项。官网给出的理由直白:全球每年 250 万人确诊肺癌、180 万人死亡;筛查一旦铺开,放射科医生的工作量将成倍增加,而市面上已有超过 15 款结节分析软件拿到欧洲 CE 认证,却没有一个足够硬的公开基准来判断它们谁更可靠。LUNA25 就是补这个缺口。

1.4 与 LUNA16 的关系:同系列,不同代

这一节是理解 LUNA25 的关键,也是中文资料里最常见的混淆点。

数据来源完全不同。 LUNA16 的地基是 LIDC-IDRI——千余例来自美国多中心的胸部 CT,由四名放射科医生分两阶段独立标注,最终取「至少三人认同」的结节。LUNA25 的地基是 NLST——一项 2011 年发表结果的随机对照试验,五万余名高危吸烟者被随机分入低剂量 CT 筛查组与胸片组,筛查组累计数十万次扫描。两者的受试者、扫描设备、扫描协议、标注方式、标注主体全不相同,没有任何一份扫描同时出现在两代数据里。

任务定义完全不同。 LUNA16 问「这里有没有一个直径不小于 3 毫米的结节,在哪」,输出是候选结节的坐标与置信度;LUNA25 问「这个已经由医生标出的结节有多大概率是恶性」,输出是 0-100 的风险分。前者的失败模式是漏检与假阳性;后者的失败模式是把良性判成高危(过度随访、不必要活检)或把恶性判成低危(延误)。这是两类完全不同的临床错误。

标注主体完全不同。 LUNA16 的标签是放射科医生的影像判读共识,回答的是「这是什么」;LUNA25 的标签是随访确证的临床结局,回答的是「后来怎样」。前者可以在单次读片中完整获得,后者必须等患者进入随访周期才有答案。这个差异决定了 LUNA25 的数据收集周期长、隐私敏感度高,也决定了它不可能像 LUNA16 那样以完全开放的方式分发。

评测指标完全不同。 LUNA16 用自由响应受试者工作特征曲线(FROC),核心是七个假阳性工作点上的平均敏感度(CPM),它天然惩罚「报太多」;LUNA25 用 ROC 曲线下面积(AUC),只关心排序,再辅以固定特异度下的敏感度与固定敏感度下的特异度两个临床工作点。

把这四点连起来看,两代的关系是「同一家族的问题被重新定义了一次」,而不是「同一份数据加了几例」。§7.3 会用一张对照表把它们逐项并排。

1.5 版本与时间线

截至 2026 年 10 月,LUNA25 只有一代(2025 年度),不存在「LUNA24」或「LUNA26 预览版」之类的相邻版本。官网把 2025 年称作「LUNA 第 2025 版」,措辞暗示后续可能延续,但平台上除 LUNA25 外只有 LUNA16 一条已关闭的赛事记录,没有新一届的建档痕迹。

时间线按官方 Timeline 页逐条列出:

时间 事件
2024-11-07 平台建档,赛事尚未公开
2025-03-01 ECR 2025(维也纳)正式发布,公开训练集上线,开放开发阶段开始接收提交
2025-06-02 阅片研究开始
2025-07-01 封闭测试阶段开始接收提交
2025-07-31 开放开发阶段与封闭测试阶段同时截止
2025-09-19 阅片研究关闭
2025-09-22 MICCAI 2025(韩国大田)专题工作坊
2026-06-24 主结果发表于 Radiology: Artificial Intelligence
2026-07-07 院方发布新闻稿

任务头里若写「2024 年」,那是平台建档年,不是赛事年。赛事发布、数据上线、截止、公布结果全部发生在 2025 年。

§2 十二问十二答:把「怎么用」先问清楚

2.1 十二问速览

以下十二个问题按「先决定要不要用,再决定怎么用」的顺序排列。每一问的回答都可以在后续章节找到展开。

Q1:LUNA25 是不是 LUNA16 的新版本?
不是。两代的数据源(LIDC-IDRI 对 NLST)、任务(检出对恶性判定)、标签(医生判读对随访结局)、指标(FROC 对 AUC)四项全换,没有一份扫描重叠。把它当成「LUNA16 v2」会导致整套方法迁移错位:在这里,检测环节根本不存在。

Q2:训练集到底有多少例、多少个结节?
按 2026 年发表的结果口径:4,069 例 NLST 低剂量胸部 CT,555 个恶性结节、5,608 个良性结节,合计六千一百六十三个结节级样本。2025 年的研究协议摘要曾写五千零五十一例、六百二十四个恶性、七千四百一十四个良性,是规划阶段的数字,最终以结果口径为准。官网概览页只写「超过四千例、超过六千个标注」,与之相容但不精确。

Q3:一个「样本」的粒度是患者、扫描还是结节?
是结节。同一例扫描里可能有多个结节,每个结节有自己的 AnnotationID;算法的输出接口是「给定一张 CT + 一组结节坐标 → 每个结节一个 0-100 的概率」。训练与评测的分母都是结节数,不是人数。这条决定了你读指标时必须问清楚「n 是多少个结节」——论文里 0.78 这个 AUC 对应的是 300 个结节,不是 300 个人。

Q4:标签是良恶性二分类,还是风险分级?
训练集标签是二值(恶性 / 良性),来自随访结局。模型输出的是连续风险分(0-100 的整数)。二者之间没有原生的分级映射;阅片研究里的「低 / 中 / 高」三档管理建议是另一套东西,只存在于人类阅片者的回答里,不在训练标签中。想让模型输出三档,需要自己在风险分上定阈值——而那正是最容易做错的环节之一。

Q5:算法要给结节分割掩膜吗?
不需要,也不需要。任务定义里没有任何像素级输出,评测也不看分割。官方 baseline 的做法是以结节中心为中心、取一个 50 毫米见方、重采样到 64×64 的 2D 或 64×64×64 的 3D patch,直接做一个二分类。想加分割分支当然可以,但对 AUC 未必有帮助。

Q6:输入的临床信息有哪些?缺了怎么办?
样例里是六项:性别、年龄、吸烟状态、T 分期类别、区域淋巴结类别、远处转移类别。后三项在筛查场景下基本为空(null),吸烟状态也可能写作 Unknown。这意味着大多数情况下可用的只有性别与年龄两项。想复现经典的 Brock / PanCan 一类结合临床的量表,你会发现大部分输入项根本不存在。

Q7:影像是什么格式?
baseline 测试用例是 .mha(MetaImage,头文件与体数据同文件),预处理脚本读入后落成 .nii.gz 的结节块,再转成 .npy 供训练加速。上游 NLST 原始数据是 DICOM。管线里至少涉及三种格式,转换时的方向约定(.mha 的轴序与 NIfTI 不同)是高频出错点。

Q8:怎么评测?分数越高越好吗?
排名只用一个指标:AUC。官方脚本另外输出 AUC 的 95% 置信区间(bootstrap 1000 次)、95% 特异度下的敏感度、95% 敏感度下的特异度。后两个是给人看的临床参照,不用于排名。所以「我的敏感度很高」在 LUNA25 的语境里没有意义——除非同时说明特异度。

Q9:AUC 0.78 算好吗?
取决于比较对象。在 300 个 5-15 毫米不确定结节上,75 位阅片者的平均 AUC 是 0.69,最佳 AI 是 0.78,差距有统计学意义。但要与文献中动辄 0.90 以上的结节分类模型对比时必须小心:那些数字多来自更大的结节、更干净的良恶性分离、同院同期采集的数据。把 0.78 放到「全体结节」的语境里比较是不公平的,它的分母是最难的一档。

Q10:可以拿它训练一个产品级模型吗?
技术上可以,合规上要分两步。第一步是 Zenodo 记录页的条款,第二步是上游 NLST 的数据使用协议——NLST 受试者图像属于 NCI 托管资源,其再利用受独立协议约束。训练出一个模型不等于获得临床部署资质;论文里也强调,这类离线基准只测 AI 的独立性能,不涉及工作流整合。

Q11:能离线复现官方榜单吗?
不能完整复现。隐藏测试集不公开,官方脚本里读的 luna25_hidden_validation.csv 只在评测容器内可见,脚本自带的是五条演示样本。能做的是:在自己的留出集上跑同一套脚本,得到口径一致的 AUC 与置信区间,再与论文报告的数字对照。这属于「协议可复现」,不是「名次可复现」。

Q12:现在(2026 年)还能提交吗?
竞赛阶段已于 2025 年 7 月 31 日截止。官方保留了 Post-Challenge Phase,在与封闭测试阶段相同的隐藏队列上评测,用于与既有榜单一致地对外比较。参加需要另行签署法律协议,并承担一部分算力、存储、平台维护与数据持续使用的费用;具体由组织方 Colin Jacobs 对接。

2.2 这些问题背后的判断

把这十二问答压缩成一句:LUNA25 是一个「给定位置、只判善恶、只比排序」的基准。任何让它去找结节、让它输出分级、让它比工作点敏感度的用法,都是偏离。

下面几节按「数据构成 → 获取与许可 → 质量 → 任务 → 误读 → 生态 → 总结」展开。每一节都尽量给出可核对的出处,凡遇到官方口径不一致处,会在正文里并列写出两种说法,而不是挑一个看起来更整的。

§3 数据构成:三份数据、三种粒度、三条获取路径

3.1 三层数据结构

LUNA25 的数据在实际使用中分成三层,三层之间通过 AnnotationID 与病例标识关联。理解这三层,比记住任何一个数字都重要。

第一层:影像。 每例扫描是一份三维体数据。公开训练集的影像托管在 Zenodo 的「Imaging Data」记录下(DOI 10.5281/zenodo.14223624,版本 1.0.0),按 NLST 的病例编号组织。在 baseline 仓库的测试用例里,文件是 .mha 格式,文件名就是 DICOM 的 Series Instance UID(形如 1.2.840.113654.2.55.294281779470566559919697495520361195429.mha)——这是一个关键细节:数据集在去标识化后仍保留了原始的 DICOM 序列号作为主键,便于与 NLST 上游记录做交叉核对。

第二层:结节标注。 托管在「Annotation Data」记录下(DOI 10.5281/zenodo.14673658,版本 1.0.0)。每个结节有一个 AnnotationID,附三维世界坐标(毫米)、所属病例,以及恶性 / 良性标签。坐标是世界坐标系,不是体素下标,移植到自己的读取器时要做一次映射。官方 baseline 的 nodule-locations.json 样例展示了坐标的形态:三个浮点数,单位为毫米,形如 [-64.78, 64.5, -52.46]。

第三层:临床信息。 每例一个 JSON,字段包括 gender、age、smoking_status、clinical_category、regional_nodes_category、metastasis_category。样例值是 FEMALE、71、Unknown、null、null、null。

三层的连接关系是:影像 ← 病例编号 → 临床信息;影像 ← 病例编号 → 结节坐标 → AnnotationID → 标签。算法的输出只需回到 AnnotationID 这一层,不需要重算坐标。

3.2 规格表

项 训练 / 开发集 隐藏测试集 阅片研究 字段可靠性
来源队列 NLST(美国) DLCST(丹麦)、NELSON(荷兰-比利时)、MILD(意大利) 取测试集子集 原文可查(论文与官网一致)
扫描数 四千零六十九 468 个结节 300 个结节 训练集数字来自结果摘要,官网只写「四千余例」
恶性结节 五百五十五 156 300 中的一部分 同上
良性结节 五千六百零八 312 同上 同上
结节直径范围 未在公开材料中明确 5-15 毫米 5-15 毫米 测试集原文可查;训练集存疑
结节类型 未明确 实性与部分实性 同上 原文可查
影像格式 .mha(测试用例) 不公开 不公开 依 baseline 仓库推定
标注粒度 结节级 结节级 结节级 + 三档管理建议 原文可查
标签来源 随访确证的临床结局 同上 无(只有人类判读) 原文可查
临床信息 性别、年龄、吸烟状态等 6 项 同结构 年龄、性别、结节体积与等效直径 依样例 JSON 推定
获取方式 报名后下载 或 Zenodo 平台隐藏评测 未公开 原文可查
许可 Zenodo 记录页条款 — — 未能直读,见 §4.4

表里「字段可靠性」一列的三档含义:原文可查指官方页面或代码里能直接读到相应表述;依惯例推定指从样例文件、仓库结构推出来的、官方没有明说的;存疑指官方材料之间存在出入或干脆没有交代。引用时,前两档可以直接用,第三档必须带保留。

3.3 结节纳入标准:为什么是 5-15 毫米

5-15 毫米这一段被单独拎出来,是有临床理由的。

小于 5 毫米的结节恶性率极低,按现行指南多走「年度复查」或「不必随访」,AI 判不判对临床影响都不大;大于 15 毫米的结节影像学特征已经足够明确,往往直接进入 PET/CT 或活检流程,同样轮不到 AI 做决策。真正让人为难的是中间这一段:它大到不能忽略,小到没有一个可靠的形态学标准;它既可能是需要尽快处理的早期腺癌,也可能是三年不长个的良性肉芽肿。

结果摘要把这一段称作「不确定结节」(indeterminate nodule),并限定为实性与部分实性两种类型。纯磨玻璃结节被排除在外——这类结节的生长极慢、随访策略不同,把三者混在一起会稀释评测的临床意义。这一限定在训练集上是否同样适用,官方材料没有明确,是使用本数据时必须自己确认的一点。

3.4 标签的可信度与它的边界

LUNA25 的标签不是「医生说这是癌」,而是「这个结节后来被证实是癌」。这两种标签的可信度曲线完全不同。

好的一面是:随访结局是终点指标,不掺影像判读的主观性。LUNA16 那种「四人中有三人标了就算」的共识式标签,天然带有观察者间的模糊带;LUNA25 用的是硬结局,谁是真的谁是假的,在随访窗结束后是确定的。

有限制的一面是:随访结局依赖随访时长与随访质量。NLST 的随访设计是多年期、以确诊与死亡为主要终点,对生长缓慢的惰性肿瘤可能判定为「良性」——因为它在本研究窗口内没显形。这类「标签噪声」不是标注者的错误,而是研究设计固有的截断。用它训练的模型,学到的是「在这个随访窗内会不会显形」,而非「生物学上是不是癌」。

还有一层是:标签是结节级的,不是患者级的。同一患者若有多原发结节,每个结节各自带标签;这在统计上正确,但在临床上,医生决策时会考虑整体风险,而模型只看到一个结节的局部证据。

3.5 临床信息字段的可用性

六个字段里,真正在任何病例上都可用的只有两个:性别、年龄。吸烟状态在样例中写作 Unknown,说明并非所有病例都有可靠采集;三个分期类别(T、N、M)在筛查场景下为空值,因为筛查发现的是尚未分期的结节,不是已确诊的肿瘤。

这个结构在方法上有含义:任何以「临床 + 影像」联合建模为卖点的方案,在 LUNA25 上能拿到的临床信号非常稀薄。经典的 PanCan 模型(也称 Brock 模型)用年龄、性别、家族史、肺气肿、结节部位、结节大小、毛刺征、结节类型八项算风险,LUNA25 的接口只给了其中一部分。官方在任务描述里明确说「目标是给出一个类似 PanCan 思路的病灶级风险分」,指的是思路(结节级、连续、可用于分层),不是要求复现那张量表的输入。

3.6 阅片研究的数据结构

阅片研究与 AI 研究共享测试集,但人类阅片者看到的界面比算法多两项:结节的体积与等效直径。这是刻意的——临床上医生本来就能看到结节测量值,把这些藏起来再要求人类给出风险分,就不是真实场景的比较了。

阅片者的输出有两项:0-100 的整数风险分(步长 1),以及三档管理建议。三档的定义在官方页面写得很明确:低风险 = 回归常规筛查;中风险 = 短期随访;高风险 = 立即随访,例如转诊呼吸科或做 PET/CT。这三档对应的是行动而不是概率,把它与模型的连续评分混为一谈,是引用这类研究时常见的错。

阅片者被要求对所有其他阅片者与 AI 开发者保密自己的判读经验与发现(口头或截图),只对组织团队公开。这是为了保证独立判读,也意味着阅片研究的数据本身不构成一个可复用的「人类判读数据集」——公开的只有聚合统计与参与者名单。

3.7 覆盖与代表性

训练集全部来自美国 NLST,测试集全部来自欧洲三国的筛查试验。这一设计在方法学上是刻意的:它让挑战赛天然具备跨大西洋的域偏移,比「同院随机切分」更接近真实部署场景。

代价是:以一个美国队列训练、在三个欧洲队列测试,测出来的性能衰减既包含人群差异(吸烟史结构、年龄分布),也包含技术与流程差异(扫描仪型号、重建核、层厚、呼吸时相)。论文没有把这两类差异拆开,所以无法直接回答「性能下降是人的问题还是机器的问题」。

另一个不常被提起的覆盖问题是时间:NLST 的扫描在 2002-2004 年间采集,测试集的三个欧洲试验跨越 2000 年代到 2010 年代。也就是说,这批数据反映的是十五到二十年前的成像条件。对今天的迭代重建、低剂量协议、能谱成像,这批数据无法提供直接证据。

§4 怎么拿到:三条路径、两层合规、一份说不清的许可

4.1 三条获取路径

路径一:报名后下载。 在 grand-challenge.org 注册账号,报名 LUNA25,平台即开放公开训练集的下辖下载页。这是 2025 年参赛队伍的默认路径。优点是与平台账户绑定、版本由平台维护;缺点是数据页需要登录,匿名访问会收到 403。

路径二:Zenodo 直取。 影像与标注各有一条独立的 Zenodo 记录(DOI 10.5281/zenodo.14223624 与 10.5281/zenodo.14673658,均为 1.0.0 版),无需报名即可按 DOI 检索。这是目前对「不参赛、只想用数据」的研究者最直接的路径。两条记录分开的意义在于:影像体量大、更新少,标注体量小、可能随勘误更新,拆开后版本号可以各自演进。

路径三:Post-Challenge 评测。 只有这条路能拿到隐藏测试集上的分数。竞赛关闭后,官方把封闭测试阶段用过的隐藏队列保留下来,接受后续提交,以便新方法与历史榜单在同一把尺子上比较。这条路需要签独立的协议、承担一部分平台与数据成本,且要提交一份描述方法的短文档。

三条路径的分岔点很明确:要数据走 1 或 2,要分数走 3。没有「先拿数据试跑、再顺手提交一下」的中间态。

4.2 许可:能确认什么、不能确认什么

官方引用块把数据与代码分开列出,但没有在任何页面写明数据的许可类型。这是使用 LUNA25 时必须自己补的一课。

能确认的部分:

  • 评测代码仓库(luna25-evaluation-public)采用 Apache License 2.0,可自由使用、修改、分发,需保留版权与许可声明。
  • baseline 仓库(luna25-baseline-public)同样附带 LICENSE 文件,按 DIAG 团队的惯例为同一许可,但这属于依惯例推定,未经逐字核对。
  • 官方要求所有使用者引用三条文献中的一条(主结果、研究协议、数据),这是学术规范而非许可条款。

不能确认的部分:

  • Zenodo 两条记录各自的 license 字段。Zenodo 对部分来源网络的访问做了限流,从技术侧无法直读记录页,因此这里不代官方断言 CC 类型。使用前请打开这两个 DOI 对应的记录页,查看侧栏的 License 栏。
  • 上游 NLST 的再利用条件。NLST 受试者的影像与临床数据由美国国家癌症研究所托管,其分发与再利用受独立的数据使用协议约束。LUNA25 把数据重新整理成挑战赛格式,并不等于解除了上游约束。
  • 「训练出一个模型」与「部署一个产品」之间的差别。即便数据条款允许商用,模型作为医疗器械上市仍需独立的注册与临床评价。

把这些拼起来:代码层面是宽松的(Apache-2.0),数据层面是不明确的(需自行核对 Zenodo 与 NLST)。这不是 LUNA25 独有的问题,而是绝大多数以二次整理形式发布的医学影像数据集共有的结构。

4.3 提交与参赛规则(对复现者仍然有用)

竞赛虽已关闭,规则页里的技术约束仍是用这套数据做评测时必须遵守的边界,也是复现历史成绩的前提。

约束 内容
提交形态 Docker 推理容器,全自动,不接受半自动或交互式方法
网络 容器离线运行,不得联网,所有权重必须预先打包
次数 开放开发阶段最多 15 次,每周不超过 2 次
单例时限 每个病例 5 分钟
硬件 默认 NVIDIA T4(16 GB 显存);有充分理由可申请 A10G(24 GB)
身份 必须实名,展示单位与国家,不接受匿名
团队 每人只能属于一个团队
外部数据 争奖者须用宽松许可、开发期截止前三个月公开、并在算法名中声明
论文 争奖须提交 2-3 页方法学短文,建议附 GitHub 链接

其中「容器离线」与「单例 5 分钟」两条对工程实现的影响最大。前者意味着不能依赖任何在线服务做后处理,后者意味着全肺级 3D 网络在高分辨率重建上往往跑不完——这也是多数队伍最终转向「先裁结节 patch、再判」的原因。

规则里还有一条容易被忽略:组织方成员(Radboudumc、UMCG、哥本哈根大学)可以参赛,但不得进入最终排名与评奖。这条在处理榜单解读时必须记得——榜单上的某些高分条目可能来自组织方内部,不代表外部团队的水平。

4.4 未取得的一手材料

诚实起见,列出三处未能直读的官方材料,它们会影响对数据细节的判断:

  1. 数据页(/datasets/):匿名访问返回 403,需要登录。文件清单、压缩包结构、总字节数、影像格式的确切说明都在这一页,未能取得。正文里关于格式的描述来自 baseline 仓库的测试用例与预处理说明,属于间接证据。
  2. Zenodo 记录页:限流,未能取得 license 字段与文件级元数据。
  3. 榜单明细:Closed Testing Phase 的排行榜由前端异步加载,静态抓取得到的是空表(页面上显示「Loading Results…」)。各队名称与分数未转录,正文不列具体名次。

这三处的缺失不影响任务、数据规模与评测方法的判断——它们分别有三源互证——但会影响「下载体验」与「名次复现」两个细节问题。使用者自己打开时会看到更完整的信息。

4.5 最小可用路径

如果只想尽快把这套数据跑起来,最短的路径是:

  1. 读 Zenodo 影像与标注两条记录的说明,确认体积与解压后结构;
  2. 克隆 baseline 仓库,按 README 装依赖(Python 3.9 以上,PyTorch + SimpleITK 一类);
  3. 用仓库自带的 test/input 单例跑通推理容器,确认输入输出契约无误;
  4. 在自有留出集上复现官方脚本的 AUC 与置信区间;
  5. 再决定是扩到全量训练,还是把模型迁移到自己的队列。

第 3 步是最容易被跳过、也最容易出问题的一步:容器能跑通,说明坐标映射、轴序、强度裁剪三件事都对上了;跳过它直接上全量训练,往往会训练几天才发现 patch 抽错了位置。

§5 质量与已知问题:从「假设—支持—反对」看它靠得住到什么程度

5.1 数据质量的五条判断

判断一:参考标准的强度。
LUNA25 最强的部分是标签来源。它不是四个医生的多数票,而是随访确证的临床结局;不是「像不像」,而是「是不是」。这一点在 5-15 毫米这个模糊带上尤其值钱——这一档的影像判读一致性历来很差,而结局不会说谎。代价是标签的时间截断,见 §3.4。

判断二:测试集的独立性。
测试集取自三个不同的欧洲筛查试验,与训练集无重叠,且从未公开。从数据卫生的角度,这比同行许多「随机切分同一队列」的基准干净得多。隐藏测试集的另一个好处是杜绝了「在测试集上反复调参」这一常见作弊方式。

判断三:结节位置由谁标注。
算法拿到的位置来自人工或半自动的结节识别。如果位置本身有偏差,风险分再准也没有意义。官方材料没有详述训练集结节坐标的产生流程(是放射科医生逐一点标,还是从既有结构化报告导入),这一点影响对「端到端可用性」的推断。

判断四:阅片者的分层。
75 位阅片者来自不同国家、不同资历,覆盖的执业环境从大型学术医院到私人诊所。这种异质性对「平均人」的估计是有利的,但对「专家上限」的估计是不利的——如果把最好的阅片者单独拎出来,与 AI 的差距可能小于「均值对 AI」。论文报告的平均 AUC 0.69 应该被理解为群体均值,而非能力上限。

判断五:可复现性的边界。
协议可复现、名次不可复现。任何声称「在 LUNA25 上超过了某某队」的说法,若没有走 Post-Challenge 流程,就只能是与论文报告数字的间接比较。

5.2 假设—支持—反对

有些结论只能停在「尚不清楚」。把不清楚写成有信息量的陈述,比硬给一个答案更有用。

假设 支持证据 反对证据
训练集结节计数五百五十五恶加五千六百零八良是最终值 2026 年结果摘要与官网「六千余个标注」相容;与同一摘要的测试集数字(156+312)互为印证 2025 年协议摘要给的是 624 恶 + 7414 良,说明开发过程中数据发生过收缩;未见勘误说明收缩原因
精确数四,〇六九与官网「四千余例」是同一批数据 四,〇六九大于四千,且取整的说法在公告里很常见 官网从未给出精确值,无法排除公告发布时是另一个中间版本
训练集结节同样限定 5-15 毫米 挑战赛的整体题设就是「不确定结节」,训练集应与之对齐 结果摘要只在描述测试集时写了 5-15 毫米;训练集描述未提直径范围
影像格式为 .mha baseline 仓库的测试输入确为 .mha,文件名即 DICOM 序列号 预处理脚本把中间产物写成 .nii.gz;原始分发格式未见官方明文
阅片者人数以 75 为准 reader-study 页写明「75 readers completed」;结果摘要用 75 作平均基数 新闻稿写 65 位、23 国,并称 AI 胜过 65 人中的 62 人,暗示统计口径是 65
最佳 AI 的 0.78 与阅片平均 0.69 可比 同一 300 个结节、同一 AUC 定义、同一时间窗 阅片者额外看到了结节体积与等效直径,算法未必获得同等信息;若信息不对称,比较的公平性存疑

最后一行值得多说一句。AI 的输入是影像加结节位置,人类额外得到体积与等效直径两项定量测量。这些测量通常由软件自动给出,而在真实工作流里,AI 同样可以调用同一套测量工具。所以这个不对称更可能是实验设计上的简化,而非有意偏袒;但它确实意味着 0.78 对 0.69 这个差距,不能简单读作「AI 比人更会看形态」。

5.3 已知的技术与统计陷阱

陷阱一:AUC 对类不平衡不敏感,但对手工阈值很敏感。
排行榜只看 AUC,意味着你可以随便给分,只要排序对。一旦进入临床,就必须定一个阈值,而阈值的选取在 LUNA25 的评测框架里没有标准答案。论文里用的「≥ 不确定风险」阈值是研究设定,不是临床指南。把 AUC 0.78 直接翻译成「能挽救多少生命」,中间隔着整套结节管理路径。

陷阱二:置信区间跨零点被误读。
官方脚本用 1000 次 bootstrap、固定随机种子 42,返回 2.5% 与 97.5% 分位。样本量只有 300 个结节、其中恶性约三分之一时,AUC 的 95% 区间宽度在 0.1 上下是正常的。0.78(0.73-0.84)与 0.69(0.64-0.74)两个区间不重叠,所以差异显著;但在更小的子组里做分析时,区间很容易重叠,此时「A 比 B 高 0.05」就不该被当成结论。

陷阱三:结节级与患者级的统计单位错配。
所有指标的分母是结节。若某位患者有五个结节,他在统计里占五份权重。做患者级决策(「这位病人要不要活检」)时,需要把结节分聚合成患者分,而这个聚合规则官方没有给。

陷阱四:良恶性比例失真。
训练集里恶性占比不足一成(约百分之九),测试集里 156/468 ≈ 33%。测试集刻意提高了恶性比例(因为它只选了不确定结节),这会让在测试集上校准过的概率阈值在真实筛查人群里严重偏高。任何在 LUNA25 上调过阈值的模型,迁移回筛查场景都要重新校准。

陷阱五:临床字段的空值被当成「阴性」。
clinical_category、regional_nodes_category、metastasis_category 三项在筛查场景下几乎全为空。把 null 直接编码成 0 送进网络,等于告诉模型「所有病人都是 T0N0M0」,这会引入一个恒定的伪信号。正确做法是把这三个字段整体剔除,或显式建模缺失。

§6 能做什么:六个研究问题与两个最小可执行示例

6.1 六个合适的研究问题

LUNA25 的结构决定了它适合回答哪一类问题。下列六个方向都有明确的接口支撑,不需要额外造数据。

方向一:5-15 毫米结节的恶性风险估计方法本身。
这是挑战赛的原问题。可比较的对象包括基于手工影像组学特征的模型、3D 卷积网络、多尺度 patch 融合、序列模型(若同一患者的多次扫描可得)、以及把结节周围 20-50 毫米上下文一起建模的方案。评价一律用 AUC 加固定工作点的敏感度 / 特异度,且必须报置信区间。

方向二:人类与 AI 的差距落在哪些病例上。
阅片研究给出的不只是一个平均 AUC,还有 75 个个体分数。把它与 AI 分数并排,可以问:AI 在哪些结节上显著优于中位阅片者?在哪些结节上连最弱的阅片者都不如?这类「错误互补性」分析是决策支持类产品设计的核心依据,也是这组数据与纯 AI 基准的最大区别。

方向三:跨队列域偏移的量化。
训练在美国、测试在欧洲,天然构成一次跨域实验。可以把测试集的三个来源国分开看(虽然官方只公布合并结果),或用自行划出的留出集模拟「美国训练、欧洲验证」的衰减曲线。

方向四:风险分与临床路径的对接。
把 0-100 的连续分映射到「回归筛查 / 短期随访 / 立即随访」三档,与阅片者的三档管理建议做一致性分析。这是一个几乎没有文献覆盖的问题:AI 输出概率,医生输出行动,二者之间的转换规则缺乏证据。

方向五:标签噪声与随访截断的敏感性分析。
把随访窗口内未显形的惰性病变视为「良性」,会系统性地压低下游模型的阳性识别能力。可以在训练中引入标签平滑、或用疑似漏诊的病例做半监督,量化这一偏差。

方向六:临床字段稀疏情况下的多模态融合。
六个字段里两个可用,是典型的「结构化数据缺失」场景。如何在这种条件下做「影像 + 临床」的稳健融合,是一个有工程价值的小问题。

不适用的方向也要说清楚:结节检测(位置已给)、像素级分割(无掩膜标签)、分期或预后预测(无分期与生存信息)、多读者一致性研究(标签是结局不是判读)。

6.2 最小可执行示例一:把一个结节切成 patch

下面的代码片段示意从 .mha 读取到取一个 64×64×64、50 毫米见方的 patch 全过程。它对应官方 baseline 的 processor.py 逻辑,去掉训练部分,只留推理。

import numpy as np
import SimpleITK as sitk

SIZE_MM = 50.0      # patch 物理边长
SIZE_PX = 64        # 重采样后的体素数
SPACING = (SIZE_MM / SIZE_PX,) * 3   # 每轴 0.78 mm

def load_volume(path):
    img = sitk.ReadImage(path)
    arr = sitk.GetArrayFromImage(img)          # 轴序 [z, y, x]
    header = {
        "origin": np.array(img.GetOrigin()),   # 世界坐标 (x, y, z) mm
        "spacing": np.array(img.GetSpacing()), # (x, y, z) mm
        "transform": np.array(img.GetDirection()).reshape(3, 3),
    }
    return arr, header

def world_to_voxel(coord_mm, header):
    """世界坐标 -> 连续体素下标 [z, y, x]"""
    d = np.array(coord_mm) - header["origin"]
    idx_xyz = header["transform"].T @ d / header["spacing"]
    return np.array([idx_xyz[2], idx_xyz[1], idx_xyz[0]])

def extract_patch(arr, header, coord_mm, size_px=SIZE_PX, spacing=SPACING):
    """以世界坐标为中心抽立方 patch,重采样到 size_px^3"""
    half = size_px / 2.0
    # 在目标网格上生成采样点(目标网格本身是各向同性 spacing)
    ax = np.arange(-half, half)
    zz, yy, xx = np.meshgrid(ax, ax, ax, indexing="ij")
    # 目标体素偏移 -> 源体素偏移
    src_spacing = header["spacing"]           # (x, y, z)
    off = np.stack([xx * spacing[2] / src_spacing[2],
                    yy * spacing[1] / src_spacing[1],
                    zz * spacing[0] / src_spacing[0]], axis=-1)
    c = world_to_voxel(coord_mm, header)
    coords = off + c.reshape(1, 1, 1, 3)
    out = map_coordinates(arr.astype(np.float32), coords.reshape(-1, 3).T,
                          order=1, mode="nearest").reshape(size_px, size_px, size_px)
    return out

def clip_and_scale(patch, lo=-1024, hi=400):
    p = np.clip(patch, lo, hi)
    return (p - lo) / (hi - lo)

三个必须在自己的代码里二次确认的点:GetDirection 的 3×3 矩阵在多数 NLST 病例里是单位阵,但不是全部;world_to_voxel 里 transform.T 与 spacing 的除法顺序取决于你用行向量还是列向量约定,写反了 patch 会整体偏移;clip_and_scale 的窗宽(-1024 到 400 HU)是 baseline 的选择,不是评测规定。

6.3 最小可执行示例二:按官方口径算 AUC 与置信区间

下面的片段复刻官方评测脚本的统计部分。它最大的价值是让你在自有验证集上得到与榜单同定义的数字。

import numpy as np
from sklearn.metrics import roc_auc_score, roc_curve

def luna25_metrics(y_true, risk):          # risk: 0-100 的连续分
    auc = roc_auc_score(y_true, risk)

    # 95% CI:1000 次 bootstrap,固定种子 42(与官方脚本一致)
    rng = np.random.RandomState(seed=42)
    boots = []
    for _ in range(1000):
        idx = rng.choice(len(y_true), len(y_true), replace=True)
        yt, yr = y_true[idx], risk[idx]
        if len(np.unique(yt)) < 2:          # 只含一类的重采样直接跳过
            continue
        boots.append(roc_auc_score(yt, yr))
    lo, hi = np.percentile(boots, [2.5, 97.5])

    fpr, tpr, _ = roc_curve(y_true, risk)
    # 95% 特异度下的敏感度
    i = np.where(fpr <= 0.05)[0][-1]
    sens_at = tpr[i]
    # 95% 敏感度下的特异度
    j = np.where(tpr >= 0.95)[0][0]
    spec_at = 1 - fpr[j]

    return dict(auc=auc, ci=(lo, hi), sens95spec=sens_at, spec95sens=spec_at)

要注意:roc_curve 的返回阈值顺序与 np.where 取首/尾的选择,正好决定了两个工作点是「最接近 95%」还是「至少 95%」。官方脚本对特异度取最后一个满足 fpr <= 0.05 的点(即特异度不低于 95% 中的最高敏感度),对敏感度取第一个满足 tpr >= 0.95 的点。自己实现时若取反,会得到略低或略高的数,差异在小样本上可能超过一个百分点。

6.4 一个完整的工作流骨架

把上面两块拼起来,从数据到数字的完整链条是:

  1. 读标注:解析 Annotation Data,得到 AnnotationID、病例号、世界坐标、标签。
  2. 按病例分组切分:训练 / 验证按病例分,不能按结节分——同一患者的多结节必须整体落在同一侧,否则会泄漏。
  3. 抽 patch:对每个结节抽 2D 多方位切片或 3D 立方块,统一重采样与强度裁剪。
  4. 训练:二分类,BCE 损失,输出 logits,推理时 sigmoid 成概率再乘 100 取整。
  5. 自评:用 6.3 的函数在留出集上算 AUC 与工作点。
  6. 封装:按 Grand Challenge 的接口写成 Docker,nodule-locations-likelihoods 输出 JSON。
  7. 提交:先跑单例测试,再提交评测。

第 2 步是很多人栽跟头的地方。按结节随机切分,同一患者的相邻结节可能一半在训练一半在验证,模型记住了「这个人的肺纹理」而不是「这个结节的样子」,验证 AUC 会虚高。LUNA25 的病例级标识在标注文件里是有的,用它分组即可。

6.5 团队配置与算力需求

一个能在 LUNA25 上跑出有竞争力结果的团队,通常需要:

角色 职责 备注
影像算法 3D 网络、patch 策略、增广 主流方案是 2.5D 多切片或轻量 3D
临床/放射 结节形态判读、失败案例分析 5-15 毫米的判别高度依赖细节征象
工程 容器化、单例 5 分钟约束、显存 离线容器、T4 16GB 是硬约束
统计 置信区间、工作点、子组分析 AUC 的区间宽度在小样本上很宽

算力上,四千余例、六千余个结节的数据量对比 LUNA16 并未膨胀,单卡训练完全可行。真正的瓶颈不在训练,而在推理时的时限:全肺级高分辨率网络在 5 分钟内跑完一例是做不到的,所以必须走「先裁 patch」路线。这条路线又与官方给出的结节位置天然契合。

6.6 一句话方法学建议

不要把它做成检测任务的变体。位置已经给了,模型只需要回答「这个位置的病灶有多可疑」。把全部精力放在 patch 的尺度选择、上下文范围、以及多切片聚合上,比堆一个大的 3D 分割网络有效得多。

§7 常见误读与引用陷阱

7.1 误读表

下表左列是文献、博客、模型回答里最常出现的说法,中列是实际口径,右列是可以去核对的位置。

常见说法 实际口径 证据位置
LUNA25 是 LUNA16 的升级版,多了恶性标签 两代数据源、任务、标签、指标四项全换,无一份扫描重叠;不是同一份数据加标注 §1.4;LUNA16 数据 DOI 10.5281/zenodo.3723295 与 LUNA25 的 14223624 无交集
LUNA25 用 888 例 CT 888 是 LUNA16 从 LIDC-IDRI 筛出的层厚合格扫描数,与 LUNA25 无关 §1.4;LUNA16 词条
LUNA25 是 2024 年办的 2024-11-07 只是平台建档;发布、数据上线、截止、公布结果全在 2025 年 §1.5 时间线
LUNA25 训练集有五千余例(5,051) 五千零五十一例是 2025 年协议摘要的规划数,最终结果口径小于这个数 §5.2 假设表
测试集是 65 恶 + 818 良 那是早期协议(仅 DLCST)的数字;最终测试集是 156 恶 + 312 良,来自三项试验 §3.2 规格表
阅片者是 65 位 官方阅片研究页写 75 位完成 300 例评测;新闻稿写 65 位、23 国。两者并列存在 §5.2 假设表末三行
这是一条结节检测挑战赛 结节位置由输入给定,算法不做检测,只做风险估计 §2 Q5;官方任务页
评测看 FROC / CPM 那是 LUNA16 的指标;LUNA25 只看 AUC,辅以 95% 工作点 §8.3
排行榜按敏感度排名 官方明确写敏感度与特异度不参与排名,仅 AUC 决定名次 §8.3
AUC 0.91 是冠军成绩 0.91 是组织方内部算法在 DLCST 上的预实验数;冠军成绩是 0.78 §8.2
最佳 AI 全面超过放射科医生 只在 300 个 5-15 毫米不确定结节上、以平均 AUC 比较;新闻稿称胜过 65 人中的 62 人,不是全部 §8.2
可以下载隐藏测试集 测试集不公开,只在评测容器内可见,脚本自带的只是五条演示样本 §4.1;官方评测仓库
数据是 CC BY 4.0 官方页面未写数据许可类型;代码是 Apache-2.0,数据条款在 Zenodo 记录页,需自行核对 §4.2
训练集和测试集都限 5-15 毫米 测试集明确限定;训练集的直径范围未在公开材料中说明 §3.3
它测的是结节分割 没有任何像素级标签与分割评测 §6.1 不适用清单
可以直接拿来做临床部署 官方把「只测独立性能、不涉及工作流整合与人机交互」写进了局限 §5.1;研究协议摘要

表里的每一行都对应一类真实存在的错误引用。第 1、6、10、11 行尤其容易出现在中文综述里,因为它们都能在某个二手来源上找到「出处」,只是那个出处本身转述错了。

7.2 技术陷阱

坑 1:把 null 编码成 0。
临床 JSON 里的三个分期字段在筛查场景下全为空。把空值填 0 送进模型,等价于给所有病例注入「早期、无淋巴结、无转移」的先验,模型会学到一条恒定的伪路径。正确做法是整体丢弃这三个字段,或加一个缺失指示位。

坑 2:世界坐标与体素下标的轴序。
SimpleITK 读出来的数组是 [z, y, x],而 GetOrigin 与 GetSpacing 的顺序是 (x, y, z)。任何一处没转,patch 都会跑到对侧肺或是纵隔里去。这个错误不会报错,只会让模型表现莫名其妙地差。

坑 3:按结节而不是按病例切分。
同一患者多个结节分到不同集合,验证集 AUC 会虚高。必须用病例级标识分组。

坑 4:.mha 与 .nii.gz 的方向约定不同。
baseline 的预处理把 .mha 转成 .nii.gz 结节块。两种格式对轴的存储顺序与仿射矩阵约定不同,混用读取库时会出现「影像与坐标对得上、但左右相反」的情况。LUNA16 时代就有大量团队栽在这里。

坑 5:直接在 0-1 概率上取整当风险分。
官方接口要求 0-100 的整数。若把概率乘 100 后四舍五入,大量样本会挤在 0 与 100 两端,AUC 会因为并列值(tie)而被拉平。要么保留浮点、要么在输出前保证分数充分分散。

坑 6:用整肺推理去满足 5 分钟时限。
单例 5 分钟是硬约束,全肺高分辨率 3D 网络跑不完。必须在容器内先裁到结节周围的 patch,再推理。

坑 7:把小样本的 AUC 差异当成结论。
300 个结节、恶性占三分之一时,AUC 的区间宽度在 0.1 上下。子组分析(比如「5-8 毫米」与「8-15 毫米」分开)的样本会更少,此时 0.02 的差距没有意义。

坑 8:把测试集的恶性比例当成人群患病率。
测试集刻意挑选了不确定结节,恶性率约三分之一;真实筛查人群里,被检出的结节绝大多数是良性。在测试集上校准的概率,迁移回筛查场景会系统性偏高。

坑 9:忽略「位置由谁给出」这一前提。
LUNA25 的输入已经包含结节位置。若产品要从零开始找结节,那么「检出漏掉的结节」这一失败模式 LUNA25 完全测不出来,需要用检测类基准另行评估。

坑 10:把三个字段的临床类别当成 TNM 分期。
clinical_category、regional_nodes_category、metastasis_category 的命名模仿了 T/N/M,但在筛查场景下它们恒为空。把它们当作「分期标签」用于生存或预后研究,会得到一堆空列。

7.3 与 LUNA16 的逐项对照

这张表是把两代并排看清的最直接方式。它也是防止「把两代混为一谈」的最后一道防线。

维度 LUNA16(2016) LUNA25(2025)
数据来源 LIDC-IDRI(美国多中心,千余例) 训练 NLST(美国);测试 DLCST / NELSON / MILD(欧洲)
样本量 888 例扫描、1,186 个参考结节 四千余例扫描、六千余个结节级标签
结节纳入 直径 ≥3 毫米、≥3 名医生认同 测试集 5-15 毫米实性/部分实性不确定结节
标注主体 4 名放射科医生两阶段判读 随访确证的临床结局
任务 检出 + 定位(+ 假阳性削减子赛道) 病灶级恶性风险估计
模型输入 整卷 CT 整卷 CT + 结节坐标 + 稀疏临床信息
模型输出 候选坐标 + 置信度 每结节一个 0-100 风险分
指标 FROC 曲线、七点平均敏感度(CPM) AUC + 95% 工作点敏感度/特异度
验证协议 官方十折交叉验证 一次性隐藏测试集
人类对照 无系统性的阅片者研究 75 位阅片者、300 个结节
数据许可 影像 CC BY 3.0 上游 + 挑战赛条款 Zenodo 记录页条款(未在官网明示)
复现难度 高(十折、候选集庞大) 中(单次评测、容器化)
剩余价值 检测与 FP 削减的方法学基石 风险分层与临床路径的证据基础

从这张表能读出的最重要一点:两代之间不存在「继承关系」里那种可以复用的接口。LUNA16 训练出来的检测器,其输出恰好可以喂给 LUNA25 风格的风险模型——这是一个自然的串联,但串联出来的系统在 LUNA25 上评测时,检测环节的表现完全不计分。也就是说,LUNA25 只考核链条的第二段。

§8 在生态中的位置

8.1 与同代肺结节基准的分工

肺结节 AI 的公开基准已经形成一个小生态,按「任务粒度」可以排成一条线:检出 → 分割 → 分类 → 风险分层 → 报告生成。LUNA25 落在「风险分层」这一格。

基准 任务定位 与 LUNA25 的关系
LUNA16 检出与假阳性削减 上一代;接口可拼接,指标不可比
LIDC-IDRI 多读者影像标注的原始来源 LUNA16 的上游;无随访结局
NLST 大规模筛查队列 LUNA25 的训练来源;有随访结局
LNDb 结节检出 + 随访变化 同属「随访」谱系,规模与标注方式不同
DLDS / 各类胸部 CT 病灶集 病灶描述与报告 任务进一步向语言端延伸

放到这张表里看,LUNA25 的独特性在于它是少数以临床结局为标签的公开结节基准。这使它在方法学上比「医生说了算」的基准更难被质疑,也使它无法像 LUNA16 那样被随意再分发——结局数据天然带隐私。

8.2 与商用产品的关系

官网提到,截至发布时已有超过 15 款结节分析软件获得欧洲 CE 认证。这句话背后的问题是:这些产品各自用私有的、互不可比的验证集证明自己,买方无从判断谁更可靠。LUNA25 的定位就是给这个市场提供一把公共尺子。

但它不是认证基准。CE 认证依据的是医疗器械法规下的临床评价,不是挑战赛名次。把 LUNA25 的 AUC 当成产品性能的充分证据,是引用这类基准时最常见的越界。

8.3 评测协议的可移植性

LUNA25 的评测设计有三处值得移植:

第一,一次性隐藏队列。 相比十折交叉验证,一次性隐藏队列杜绝了「反复调整—反复提交」带来的过拟合。代价是单次估计的方差更大,用置信区间来补偿。

第二,只用一个排名指标。 排行榜只按 AUC 排序,避免了多指标加权带来的可操纵空间。工作点指标单独报告,不参与竞争。

第三,把人类对照内建进设计。 不是事后拿文献里的数字比较,而是在同一批病例上让人类阅片,得到一个时间、人群、设备都对齐的参照。这一条的成本很高,但它让「AI 到底比人强在哪」从修辞变成了可测问题。

§9 总结

9.1 适用与不适用

适用:

  • 做 5-15 毫米肺结节恶性风险估计的方法研究,需要公开标签与官方指标;
  • 需要一个人机对照的公开基准,研究 AI 与放射科医生的错误互补性;
  • 做跨大西洋队列的域偏移实验;
  • 教学场景中讲解「连续风险分 + 固定工作点」这套评测范式。

不适用:

  • 训练结节检测器或分割模型;
  • 做患者级预后或生存分析(无生存资料);
  • 直接用于产品注册的临床证据;
  • 复现官方榜单名次(测试集不公开)。

9.2 三句话

LUNA25 把肺结节 AI 的考题从「找得到吗」换成了「判得准吗」,用 NLST 的四千余例扫描与随访确证标签,在 5-15 毫米这个最难的区间上设了一道新题。它的答案是 AUC 与 75 位阅片者的同台对照,最佳 AI 的 0.78 对人类的平均 0.69,差距显著但只发生在回顾性的离线场景。用它之前要认清三件事:它不测检测、不公开测试集、许可需要自己到 Zenodo 与上游 NLST 逐层核对。

§10 附录:速查、标签与 DAIMS 评估

10.1 关键数字速查

项 数值 口径与出处
公开训练扫描 四千零六十九例 2026 结果摘要;官网写「四千余例」
训练恶性结节 五百五十五 同上
训练良性结节 五千六百零八 同上
结节级样本合计 六千一百六十三 恶性与良性之和
隐藏测试结节 468(156 恶 / 312 良) 与官网 overview「468 unseen cases」吻合
阅片研究 300 个结节 × 75 位阅片者 reader-study 页
主指标 AUC 官方任务页
AUC 置信区间 bootstrap 1000 次,种子 42 evaluate.py
工作点 95% 特异度下敏感度;95% 敏感度下特异度 evaluate.py
冠军 AI AUC 0.78(0.73-0.84) 结果摘要
阅片者平均 AUC 0.69(0.64-0.74) 结果摘要
临床增益 多检 12% 恶性、少 20% 假阳性 结果摘要 / 新闻稿
单例时限 5 分钟 规则页
默认 GPU T4 16 GB 规则页
提交上限 15 次 / 每周 2 次 规则页
奖金 €1,000 / 500 / 250 / 150 / 100 overview 页

10.2 缩写与术语

缩写 全称 说明
LUNA (官方未展开) 前代 LUNA16 写作 LUng Nodule Analysis 2016,本代官网未给出展开式
NLST National Lung Cancer Screening Trial 美国国家肺癌筛查试验
DLCST Danish Lung Cancer Screening Trial 丹麦肺癌筛查试验
NELSON Dutch-Belgian NELSON trial 荷兰-比利时肺癌筛查试验
MILD Multicentric Italian Lung Detection 意大利多中心肺部筛查
LDCT Low-Dose Computed Tomography 低剂量计算机断层扫描
AUC Area Under the ROC Curve ROC 曲线下面积
ROC Receiver Operating Characteristic 受试者工作特征曲线
FROC Free-Response ROC 自由响应 ROC,LUNA16 用
CPM Competition Performance Metric 七点平均敏感度,LUNA16 用
HU Hounsfield Unit 亨氏单位,CT 密度单位
SAB Scientific Advisory Board 科学顾问委员会
DIAG Diagnostic Image Analysis Group Radboudumc 诊断图像分析组
BIAS Biomedical Imaging Analysis Study 这里指研究协议所依的预注册框架

10.3 标签体系

标签 取值 来源 可靠性
结节级良恶性 恶性 / 良性二值 随访确证结局 原文可查
结节坐标 三维世界坐标(毫米) 人工或半自动标注 口径未详述
AnnotationID 字符串 标注记录 原文可查(样例可见)
性别 FEMALE / MALE 等 NLST 登记 原文可查
年龄 整数 NLST 登记 原文可查
吸烟状态 字符串,可为 Unknown NLST 登记 原文可查,覆盖不全
T / N / M 类别 多为 null 本数据集新增字段 语义存疑,筛查场景下基本为空
阅片者风险分 0-100 整数 阅片研究 只对 300 例存在
阅片者管理建议 低 / 中 / 高 阅片研究 同上

10.4 DAIMS 评估

DAIMS(Dataset Assessment and Insight Metrics Scheme)用于在数据集的七项关键属性上做定性打分。下表按公开材料能支持的程度给出判断,评分仅为使用者的阅读索引,非官方评价。

维度 评级 依据
文档完备度 B 任务、指标、时间线、规则完整;数据页需登录、细则层缺失
数据可获得性 B 训练集公开;隐藏测试集不公开,Post-Challenge 需付费
标签可信度 A 结局标签,非判读共识;随访截断是已知局限
许可清晰度 C 官网未写数据许可;代码 Apache-2.0 明确;上游 NLST 另有协议
版本可追溯 B Zenodo 两记录均标 1.0.0;未见过往版本记录
任务定义清晰度 A 输入、输出、指标、约束均写明
可复现性 B 协议可复现、名次不可复现;隐藏队列不可访问

综合看,这是一个「任务定义与标签质量强、获取与许可弱」的组合。对它最常见的误用,是把「标签可信」误读成「数据可以随意使用」。

10.5 检查清单

下载并使用 LUNA25 之前,按顺序过一遍:

  • [ ] 确认自己要解决的是风险估计,不是检测或分割;
  • [ ] 打开 Zenodo 两条记录页,记录下各自的 License 字段;
  • [ ] 核对自己机构是否另有使用 NLST 数据的协议要求;
  • [ ] 用自己的读取器打开一份 .mha,验证坐标映射与轴序;
  • [ ] 确认病例级标识存在,切分按病例而非结节;
  • [ ] 丢弃或显式建模三个空的分期字段;
  • [ ] 用官方脚本口径复算 AUC 与置信区间;
  • [ ] 在工作点上报告敏感度 / 特异度,并注明对应阈值;
  • [ ] 明确说明测试结果是否来自隐藏队列(若不是,不要与榜单直接比);
  • [ ] 引用时按官方建议至少给出主结果或数据 DOI 之一。

10.6 未覆盖内容

以下几块内容在公开材料中不存在,因此本页不予展开:各参赛队的完整名次与分数、隐藏测试集的逐例清单、训练集结节直径的分布直方图、阅片者个体分数的分布、病例级人口学统计表、Post-Challenge Phase 的评测费用。遇到需要这些信息的研究问题,需直接联系组织方。

编辑说明

  • 核验时间:2026-10-18,写作代理 agent-b-luna25。
  • 核验方式:官网 luna25.grand-challenge.org 的 overview-goals、timeline、ai-tasks-evaluation、ai-phases-rules、ai-algorithm-submissions、ai-challenge-rules、reader-study、scientific-advisory-board、miccai2025-workshop 九个页面直抓;grand-challenge.org API 的 challenge(slug=LUNA25)与 algorithm 端点;GitHub 上 DIAGNijmegen/luna25-evaluation-public 的 evaluate.py 与 LICENSE、luna25-baseline-public 的 README、processor.py、experiment_config.py、preprocessing/README.md 与 test/input 样例;diagnijmegen.nl 的结果摘要与协议摘要页面;Radboudumc 新闻稿;Radiology: Artificial Intelligence 的 DOI 由官网 timeline 与院方新闻稿两处互证(出版社页面直连返回 403,未直读全文)。
  • 双口径存照:①训练集 5,051/624/7,414(协议摘要)对 4,069/555/5,608(结果摘要),按后者成稿;②阅片者 75(reader-study 页,亦为结果摘要的统计基数)对 65(新闻稿,且新闻稿称 AI 胜过 65 人中的 62 人),两说并列;③测试集早期 65 恶 + 818 良(仅 DLCST)对最终 156 恶 + 312 良(三试验),按后者;④赛事年份「2024」实为平台建档年,赛事年为 2025。
  • 未取得的一手材料:数据页 /datasets/(匿名 403)、Zenodo 两条记录(网络限流)、Closed Testing Phase 榜单明细(前端异步加载,静态抓取为空表)。因此文件清单、字节数、原始影像格式的官方说明、数据 License 类型、各队名次均未转录,正文已逐处注明。
  • 与库内 237 号(luna16)的分工:237 号覆盖 2016 年 LUNA16 的 LIDC-IDRI 检出任务与 FROC/CPM 协议;本文只写 2025 年 LUNA25 的 NLST 训练集、风险估计任务与 AUC 协议,对 LUNA16 仅在必要性最小处(§1.4、§7.3、§10.1)作对照,不重复其数据构成与工程细节。查重确认 237 号正文无 LUNA25 字样,库内无任何条目涉及 LUNA25。
  • 版本日志:v1(2026-10-18)初稿,按 v4 体例成稿。
  • 下次复核:建议 2027 年上半年复核,重点看三条——Zenodo 许可字段是否在官网补明、Post-Challenge Phase 是否公开费用与队名、是否出现 LUNA26 或新一届建档。

相关数据集导航

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

  • lnq — 共享标签:医学影像 / CT / 挑战赛数据集 / 评测基准 / 肺癌
  • learn2reg — 共享标签:医学影像 / CT / 挑战赛数据集 / 评测基准 / 肺癌
  • ldctiqac2023 — 共享标签:医学影像 / CT / 挑战赛数据集 / 评测基准
  • cobra2026 — 共享标签:医学影像 / CT / 挑战赛数据集 / 评测基准
  • nsclc-radiomics — 共享标签:医学影像 / CT / 肺癌
  • rider-lung-ct — 共享标签:医学影像 / CT / 肺癌
  • bronchoaccess — 共享标签:医学影像 / CT / 评测基准 / 肺癌
  • nsclc-radiogenomics — 共享标签:医学影像 / CT / 肺癌
  • toothfairy2 — 共享标签:医学影像 / CT / 挑战赛数据集 / 评测基准
  • curvas — 共享标签:医学影像 / CT / 挑战赛数据集 / 评测基准

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

返回 AI-Ready 数据集