资讯动态

中山大学联合港科大团队,在Nat Med发表冰冻切片专用基础模型,让手术决策“边切边准”

发布时间:2026/9/24 17:51:54 来源:尧图企业网站定制
小罗碎碎念文献来源Zhao Z, Zhou F, Li R, et al. A clinically-oriented foundation model for intraoperative pathology. Nature Medicine (2026). 研究由中山大学肿瘤防治中心蔡木炎团队与香港科技大学陈浩团队等联合完成数据来自10个医学中心。手术台上外科医生刚刚从患者体内切下一小块组织他需要立刻知道——这是良性还是恶性切缘干净了吗淋巴结里有没有转移如果答案是“恶性”手术方案可能当场就要扩大如果答案是“良性”患者就能少挨一刀。这个“当场裁决”的过程就是术中病理诊断依赖的核心技术是冰冻切片frozen section。自1905年首次描述以来它已走过整整一个世纪。冰冻切片的优势在于快——组织不经福尔马林固定、石蜡包埋直接冷冻切片、染色几分钟内就能出结果。它的准确率在临床上与金标准FFPE福尔马林固定石蜡包埋切片相当接近因此成为精准外科手术中不可或缺的一环。近年来计算病理学发展迅猛基础模型foundation model在FFPE切片上已经展现出强大能力。但绝大多数现有病理基础模型都是基于FFPE训练的它们对冰冻切片的形态学“完全陌生”。直接套用就像让一个只见过彩色照片的人去辨认黑白素描——冰晶伪影、组织压缩、染色差异这些冰冻切片特有的“方言”FFPE模型根本听不懂。而用虚拟染色技术把冰冻切片“翻译”成FFPE风格又引入了合成图像的可靠性和临床信任问题。所以思路清晰了——我们需要一个从一开始就只说“冰冻切片方言”的基础模型——这也正是CRISP的出发点。CRISP全称“Clinically-oriented Robust Intraoperative Support for Pathology”由中山大学肿瘤防治中心蔡木炎团队与香港科技大学陈浩团队等联合开发发表在Nature Medicine上。它是完全基于冰冻切片训练的大规模病理基础模型用来自10个医学中心的103,797张冰冻切片、约5000万个图像块进行预训练覆盖25个解剖部位。它的目标不是替代病理医生而是成为手术室里的“第二双眼睛”——在几秒钟内给出可靠的参考判断让手术决策更快、更准、更安全。CRISP技术架构研究构建的临床级术中冰冻切片数据集共包含103,797张全切片图像来自10个医学中心、51,186名患者和25个主要解剖部位其中81,667张切片用于无监督预训练其余数据分别投入回顾性验证和前瞻性真实世界评估。在技术层面CRISP将数字冰冻切片分割并切成512×512像素、0.25 MPP的图像块从8万余张切片中提取约5000万个图像块采用DINO教师-学生自监督框架以Virchow2为骨干网络并嵌入LoRA模块通过EMA更新教师网络使模型在不依赖人工标注的情况下学习冰冻切片特有的形态特征。雷达图进一步对比了CRISP与Virchow2、Virchow、UNI、CONCH、CHIEF等模型在PCNSLD、CNSLC、OCCGS、TNDD、SLMD等多项下游任务中的表现CRISP几乎始终位于最外圈显示其在多种术中诊断任务中具有更高且更稳定的AUROC。在真实临床部署部分图中展示了超过3000例前瞻性队列的完整工作流组织取样、冰冻切片制备、AI分流、辅助诊断和术中管理。CRISP将病例分为可由AI直接判断的典型病例和需要病理医生重点关注的挑战性病例从而减少约74.5%的不必要附加检测、降低病理医生约35%的工作量并检测出87.5%的微转移灶。一、深度拆解并复现CRISP复现范围官方线性探针基准 Thyroid-BM甲状腺良性 vs 恶性复现结果AUROC 0.9862 vs 论文 0.986Accuracy 0.9444 vs 论文 0.947设备RTX 4060 Laptop 8GB一台普通游戏本全程约 2 小时训练方式拆开看CRISP 的本体并不神秘一个 ViT-Huge 视觉 Transformer6.3 亿参数输入 224×224 的病理图像块输出一个 2560 维的特征向量。有意思的是它的训练方式下图作者没有从零训而是玩了一手站在巨人肩膀上的自蒸馏冰冻切片扫描成数字切片后先做组织分割把背景和刀痕去掉再按 512×512 网格切成小块凑出 5000 万个 patch然后搭一套 DINO 框架教师网络这里用的是基础模型 Virchow2参数冻结负责看图像的全局视野学生网络CRISP 骨干只在注意力层上挂了低秩适配器 LoRA改动量很小负责看局部视野训练目标让学生模仿教师同时教师自身也在被缓慢地学生 EMA 更新。用一句话概括让小模型在模仿大模型的过程中既继承后者的通用病理知识又被冰冻切片特有的图像分布重新塑形。复现准备论文在补充材料里写了一句话大意为了方便独立验证我们把线性探针实验用的 75 张冰冻切片、约 3.5 万个标注 patch 公开在了 HuggingFace 上。配套的补充表 S5.4 给出了 CRISP 和其他模型在这套基准上的成绩。先解释一下线性探针linear probing是什么这个概念值得零基础的朋友花两分钟搞懂因为它是整个深度学习领域评估特征好不好的金标准模型的 6.3 亿个参数全部冻结一个都不更新只在它输出的 2560 维特征后面接一个最简单的线性分类器2560 → 2只有五千多个参数拿极少量标注样本把这个线性层训一下然后在没见过的测试集上测试。这样测试出来的结果几乎完全取决于特征本身的质量如果这个分数很高就说明模型看图像的方式能把良性和恶性分开。以我们复现的甲状腺数据集Thyroid-BM为例为了直观快速的测试一下CRISP的效果所以我只选了35 张切片数据集划分方式如下对你没看错整个学习过程只用了 2 张切片上的 103 个 patch。6.3 亿参数的模型一动不动5 千多个参数的线性层靠 103 个样本训练然后到 30 张切片、2,913 个 patch 上测试。老规矩整个复现整理成了一个独立仓库CRISP-repro已经上传到了MedX想自己一步步跑看README.md四条命令从下载到出图想丢给 Codex / ZCode / WorkBuddy 让 AI 全自动复现把压缩包整个丢进去说一句按 AGENTS.md 复现本项目即可——里面写清了前置条件HF 点同意、token、五步命令、验收标准AUROC 与 0.986 差 ±0.01 内和七种常见报错的处置办法只想看结果results/report/comparison.md环境和数据准备环境作者要求的版本相当新Python 3.13.5 PyTorch 2.8但我的机器上已经有一个调试好的深度学习环境ghistPython 3.10 PyTorch 2.1.1 timm 1.0.29。按能复用就不新建的原则我先做了个兼容性判断代码里用的timm.create_model(vit_huge_patch14_224, reg_tokens4, mlp_layerSwiGLUPacked, ...)需要 timm ≥ 1.0ghist 的 1.0.29 满足唯一缺的依赖是 peft给模型挂 LoRA 用的pip install peft装上 0.21.0 即可pip 也确认没有动 torch 的版本。然后我做了本次复现最关键的一次预检先不碰数据直接让模型加载官方权重—— 6.3 亿个参数strictTrue逐一匹配成功前向输出 2560 维特征——说明 torch 2.1.1 跑作者 torch 2.8 保存的权重完全没问题。数据数据在 HuggingFace 的 FTZhou/CRISP模型权重在 FTZhou/CRISP2.5GB下载前有个小流程要走这两个仓库是 gated门禁 的需要登录 HuggingFace 账号、在仓库页面点一次同意使用条款然后配好 token 才能拉取。这一步是作者保护数据合规性的正常操作几分钟就能搞定。考虑到时间和算力我们没有下全部三个数据集乳腺/肺/甲状腺只下载了最小的甲状腺集3,098 个 patch约 3.4GB。另外数据集里每个器官还附带原始的全切片 TIFF 文件slides/ 目录线性探针根本用不到它们下载时直接用allow_patterns跳过。下载链接汇总模型权重https://huggingface.co/FTZhou/CRISP CRISP.pth2.5 GB基准数据https://huggingface.co/datasets/FTZhou/CRISP 三个器官单器官 3–26 GB 不等划分表 data.xlsx 已随作者代码附带论文补充材料Table S5.4 所在Nature 官网 “Supplementary information”下载下来的数据长这样上排是良性 patch能看到甲状腺滤泡结构和粉染的胶质下排是恶性乳头状结构、细胞核的异型性一眼可辨二、开始复现冒烟测试直接跑全量是复现大忌——万一第 40 分钟才报错呢所以我写了个四级冒烟测试每级只花几秒到几十秒逐级验证四条链路分别是权重能否严格加载并输出 2560 维 → 数据数量是否和论文对得上3,098 / 35 张切片分毫不差→ 真实病理图像提特征是否数值正常 → 线性层能不能正常前向反向。全部 [OK] 才进入正式复现。踩坑实录冒烟测试之后第一次正式提特征跑到第 13 个 batch 崩了PIL... PngImagePlugin.py... chunk_iCCP ValueError: Decompressed Data Too Large扫了一遍全部 3,098 张图1,803 张58%都报这个错而且高度集中在 Test 切片文件夹里。这就很有意思了——训练切片的图都好好的测试切片的图大面积出问题说明不同批次切片的扫描/导出设备不一样其中一种设备导出的 PNG 里塞了一个超大的 ICC 色彩配置文件iCCP 块老版本的 Pillow 库拒绝解压这么大的元数据。综合看下来像素数据本身没有任何问题出问题的只是 PNG 文件里的一段描述性元数据。所以我们要做的不是重新转码图片那会动像素、引入损失而是直接在二进制层面把 PNG 文件里的 iCCP 块整个摘掉摘除后 PIL 秒开且逐像素比对确认数据一个 bit 都没变。这个修复已经做成了仓库里的scripts/fix_png_icc.py正式脚本会在提特征前自动调用大家可以在MedX中获取。正式复现修复完 PNG正式跑run_repro.py加载权重 → 3,098 个 patch 提特征batch 32GPU 上约 2 分钟→ 训线性层 → 测试。左线性层训练损失第 4 个 epoch 就基本归零右验证集 AUROC 从第 1 个 epoch 起就饱和在 1.0这个图大家只需要看看就行毕竟验证集只有 2 张切片、82 个 patch特征又太好作者放出来肯定是核对过的所以随便训一个 epoch 线性层就能把它们全部分开。和论文对比实际测试下来AUROC 差在小数点后第四位Accuracy 差 0.26 个百分点约 8 个 patch 的归属差异来自训练时的随机性。考虑到我们用的是和作者不同的 torch 版本2.1.1 vs 2.8、不同的 GPU4060 Laptop vs A100这个量级的偏差是完全能够接受的。ROC 曲线在假阳性率 5% 以内就把真阳性率拉到了 90% 以上——对术中场景宁可多疑、不可漏诊的使用方式来说这个结果很有意义t-SNE 把 2,913 个测试 patch 的特征压到二维平面上良性和恶性能很好的区分开这也是为甚么线性探针能拿 0.986 的几何解释特征空间里这两类样本本来就分好了线性层只是画了一条线补充验证论文的所有临床结论都发生在切片级医生面对的是一整张切片不是一个 patch所以自然而然的我会想到一个问题——patch 级 0.986 的模型能不能撑起切片级的判断于是我把每张测试切片内所有 patch 的预测概率做了平均相当于全切片投票patch 级那些零星的错误在切片级别被平均掉了。这从另一个角度印证了论文的临床逻辑模型输出的价值不在单个 patch 的判决而在给整张切片提供稳定的整体证据。patch 内部的注意力热图把 ViT 每一层的注意力权重导出来取最后一层的 CLS 注意力DINO 系模型的标准做法叠回原始图像。第一次画出来的热图8 张图全部在左上角出现一个亮斑——排查后发现是 token 顺序问题。timm 的序列排布是 [CLS, 4 个 register token, 256 个 patch]我起初把 4 个 register token 也切进了 16×16 网格而 register token 的设计初衷恰恰是吸收无用注意力于是它们成了全图最亮的地方。按作者代码里output[:, 5:]的写法修正切片后结果如下恶性 patch概率 1.00的注意力集中在细胞密集的肿瘤巢良性 patch0.00集中在滤泡结构右二是被误报的纤维化区域0.89右一是被漏报的滤泡样结构0.02——错误案例的注意力也看错了地方与诊断错误自洽。三、复现总结为了尽可能降低复现门槛我用的只是一张8G显卡所以我们没法复现 10 万张切片的预训练更没法复现 2,000 例的前瞻研究但通过作者提供的测试数据我们可以快速验证了这篇论文最核心的观点CRISP 的特征空间里术中冰冻切片的良性与恶性天然可分——好到 103 个训练样本、一个线性层就足够读出来。这个观点是其它一切结论的基础如果特征本身不行后面的 92.6% 决策影响力、35% 工作量降低都无从谈起。交付物一个可以丢给 AI 的复现包整个复现整理成了一个独立仓库CRISP-reproCRISP-repro/ ├── codes/ # 作者原始代码改动处全部标注 [REPRO FIX] │ ├── feature_extraction/crisp.py # 模型定义 权重加载 │ └── linear_probing/ # extract_features.py main.py ├── scripts/ # 复现新增 │ ├── download_data.py # ① 下载自动跳过 slides支持单数据集 │ ├── fix_png_icc.py # ② PNG 元数据修复自动调用 │ ├── smoke_test.py # ③ 四级冒烟测试 │ ├── run_repro.py # ④ 一键复现 汇总 │ └── make_report.py # ⑤ 对比报告 全部图表 ├── results/ # 本次复现的全部产物指标 CSV、曲线、图 ├── AGENTS.md # 给 AI 编程软件看的自动复现说明书 ├── README.md # 详细文档含踩坑与修复说明 └── requirements.txt # 已验证版本清单老规矩有需要的小伙伴前往MedX领取即可学生可以免费领取一个月会员经验分享投稿到 Nature 级别的工作作者往往被要求公开可验证的部分。先翻论文的 Data availability 和 Code availability再翻 HuggingFace/GitHub确定可复现的最大公共子集而不是对着摘要硬刚。作者声明的版本要求Python 3.13 torch 2.8不一定真的是必要条件先搞清楚代码用到的 API 到底依赖什么往往一个老环境加一个小包就能跑不然每次复现都重装环境太麻烦了。先冒烟测试再全量验证。 58% 的 PNG 打不开这个坑如果没有冒烟测试会在全量跑的中途报错而坏图集中在测试集这种模式只有快速失败后才容易被注意到。最后留一个供大家思考和讨论的问题这套基准只用 2 张切片、103 个 patch 训练线性层就已经能到 AUROC 0.986——那如果训练切片是 20 张、200 张呢还能涨多少反过来说一个模型如果需要几千张标注切片才能做好一个任务它算不算基础模型欢迎带着你自己数据集用这个仓库试一试——换数据集只需要改一个--studies参数。注意本篇所有数据、脚本与结果均可在复现包中复现与复查论文作者提供了公开权重与基准数据这是这次复现得以成立的前提向开放科学的作者团队致意。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价