天津大学团队发表最新多模态模型,融合医学图像与微生物菌群的信息做生存预后,零基础带你在8G显卡上复现

发布时间:2026/10/30 8:16:20
天津大学团队发表最新多模态模型,融合医学图像与微生物菌群的信息做生存预后,零基础带你在8G显卡上复现 小罗碎碎念文献来源Zhang F., Hu K., Sun C., Liu X., Wei L., Su R.HyM²Surv: Hypergraph learning for cross-magnification and microbiome-attentive multimodal survival prediction.Medical Image Analysis, 2027, 115: 104343。第一作者单位天津大学计算机科学与技术学院合作单位包括澳大利亚 CSIRO Data61、天津医科大学肿瘤医院。做病理AI的读者对WSI 基因组多模态融合这套配方已经不陌生了——MCAT、SurvPath、PORPOISE过去几年这个方向卷得很热闹。但今天这篇论文的第二个模态不是基因而是肿瘤微生物组intratumoral microbiome。2020年Science上发表了一篇论文分析了上千例人类肿瘤发现细菌分布在大多数癌种里而且不同癌种的菌群构成还不一样——胃癌、肠癌这种消化道肿瘤尤其丰富。消化道黏膜天天接触外界组织里有点菌不奇怪奇怪的是有证据表明这些菌会影响肿瘤微环境、代谢甚至免疫治疗的效果。那问题就来了既然菌群和预后有关系病理图像也和预后有关系能不能把这两路信息放到一个模型里一起做生存预测这就是HyM²Surv干的事作者用的微生物组数据来自Dohlman团队2021年发布的TCMAThe Cancer Microbiome Atlas——他们把TCGA的测序数据重新做了一遍去污染剔除了试剂、环境带来的假菌得到了一套干净的肿瘤组织菌群丰度表。HyM²Surv把这套数据和TCGA的病理切片配对胃癌STAD 110例、肠癌COAD 111例、食管癌ESCA 57例、头颈鳞癌HNSC 133例在四个癌种上把C-index做到了全面领先比第二名SurMoE平均高7%以上。HyM²Surv 概述全切片图像WSI的特征提取一张 TCGA 切片分别在 10× 和 20× 两个倍率下切成图像块经病理基础模型 UNI图中 E_P独立编码为两组补丁嵌入 H_l 与 H_h低倍率负责组织架构、高倍率负责细胞细节肿瘤微生物组特征患者的肿瘤组织先做全基因组测序WGS过滤出肿瘤区域的细菌丰度多样本取平均后汇成一条患者级微生物向量 M再由编码器 E_m 变换。两路原料一图像、一菌群在进入模型前各自完成标准化表征。WSI 内部的超图学习首先在每个倍率内部把相邻图像块按空间坐标的 k 近邻圈成单倍率超边 ε_l、ε_h捕捉局部组织的街坊结构随后跨倍率计算补丁间的余弦相似度把双向都排在对方 top-k 名单里的节点聚成跨倍率超边 ε_c让 10× 的全局描述与 20× 的精细细节按语义相似互相认亲两类超边与节点汇合后经 E_l、E_h 两个独立编码器和三层 HGNN 编码器完成节点特征聚合得到融合了空间结构与跨倍率语义的病理表征。多模态超图学习与最终预测核心是让微生物反向点名病理区域。微生物节点 M 与两个倍率的病理节点组成微生物居中的跨模型超边 ε_m超图卷积让 M 从被选中的高低倍率邻居聚合信息从而纠正病理特征一家独大的模态失衡更新后的微生物表征与病理表征再进入两个方向相反的交叉模型注意力CMA一个方向以病理为查询、微生物为键值另一个方向以微生物为查询、病理为键值双向建模后相加融合送入分类器输出每位患者的生存风险评分最终在时间轴上给出高风险到低风险的排序。整条链路因此形成双倍率病理建网—微生物居中连网—双向注意力融合—风险预测的闭环。阅前必读作者代码是开源的但是里面存在部分bug如果直接跑的话你大概率会遇到问题我已经把修复好的代码打包上传到了文末以及MedX知识岛中。这次复现我在自己的笔记本RTX 4060 Laptop8G显存上用26个胃癌配对样本跑通了从切片下载、特征提取、双倍率超图构建到5折交叉训练、推理评估、KM曲线和注意力热图的全流程还顺手做了加微生物 vs 不加微生物的消融对照。【1】获取方式1MedX知识岛推荐已经订阅MedX的用户可以前往MedX查看教程获取代码所有付费推送均可免费阅读更划算学生可以免费领取一个月会员【2】获取方式2微信付费阅读如果只对单篇内容感兴趣可以直接支付本篇文章费用。一、HyM²Surv到底想解决什么问题背景补充论文摘要里点出了现有方法的三个短板我个人觉得第三个最值得展开讲短板一单倍率浪费了WSI的层级结构。数字病理切片是个金字塔40x层能看清细胞核20x层看组织结构10x层看更大的视野。目前绝大多数MIL方法只在一个倍率上切patch等于拿着显微镜却只用一个物镜。pathology基础模型最近的趋势也是多尺度比如CONCH v2、UNI v2都强调multi-scale但下游任务端怎么把两个倍率的信息对齐利用还没有公认答案。短板二病理模态太强把小模态淹没了。一张切片几千个patch、每个patch一个1536维向量微生物组呢一个患者就一个14492维的丰度向量并且还就这一条这就是所谓模态不平衡modality imbalance。早期融合模型里弱模态的梯度很容易被强模态主导最后模型名义上是多模态实际上是单模态加噪声。短板三微生物组这个模态本身几乎没人用过。做预后的人宁可用临床表格变量也很少碰菌群数据——一部分是因为去污染的肿瘤微生物组数据直到2021年TCMA发布才真正可用。HyM²Surv的解法是用超图hypergraph同时解决前两个短板这就是比较有意思的地方为什么偏偏是超图可以承担这个角色超图一条边连一群节点普通图graph大家都熟一条边连两个节点。但病理场景里的很多关系天生是群体性的——一个20x patch和它周围的patch是一个空间群落一个10x视野和它覆盖的那几个20x patch是同一块物理组织的两个观察一个菌种和它相关的所有病理区域是一个跨模态关联簇。用普通图表达这些关系都要拆成两两成对用超图一条超边hyperedge可以直接把任意多个节点圈在一起高阶结构原生保留。有了这个概念铺垫我进步绘制一个简易的示意图来解释HyM²Surv的两阶段架构第一阶段病理内部先对齐。把20x和10x的patch特征作者用TRIDENTUNI2-h提取20x约数千个patch、10x约四分之一拼到一起构建三类超边20x内部的空间KNN超边坐标近的patch连成群10x内部的空间KNN超边跨倍率的特征KNN共享超边用特征相似度把长得像的20x patch和10x patch连起来这就是两个倍率对齐的桥梁。然后过一个三层的HGNN超图神经网络传播每个patch的表示都融合了自己群落的信息。第二阶段微生物当中心跨模态连接。微生物丰度向量过MLP编码成一个256维token然后和每个倍率的病理特征做点积注意力每个倍率挑出top-k个k_init8注意力最高的patch组成以微生物为中心的跨模态超边。注意这个设计对模态不平衡的针对性微生物不参与平均而是作为超边的枢纽hub——病理信息要经过它再聚合弱模态在结构上获得了和强模态对等的地位这也是论文标题里microbiome-attentive的含义。最后双向共注意力融合。跨模态超图再过一层HGNN后微生物token和病理token做一轮MCAT风格的双向co-attentionAlignFusion各自平均池化拼接过一个线性分类头输出4个离散生存区间的风险NLL survival loss这是MCAT一脉的标准做法。这套设计还有一个额外的好处微生物对patch的注意力分数天然是可解释性证据——模型认为哪些病理区域和菌群状态关联最强直接把注意力画回切片上就行论文的Fig.4就是这么做的我们复现时也会画。论文的实验结果STAD 0.788、COAD 0.733、ESCA 0.883、HNSC 0.723C-index5折均值四个癌种全部领先12个对比方法消融里P. → P.M.加微生物在四个数据集上都有稳定提升这就是我们要在小样本上验证的核心论点。二、一起来复现这篇文章开源代码存在的问题作者的仓库是开源的github.com/RanSuLab/HyMMSurv但直接跑你大概率会跑不通因为作者的代码有少许Bug。Bug 1构建数据集时引用了不存在的变量。Bug 2采样脚本丢了函数定义行set_seed无限递归。Bug 3训练引擎和模型的注意力键名对不上。Bug 4import了发布包里不存在的模块。Bug 5fusion.py 丢了class MLP:这一行。Bug 6Windows专属nmslib装不上。老规矩这些问题我都已经帮大家解决了——6个bug全部修复、缺失的KM曲线模块按调用签名重写lifelines实现、nmslib换成了sklearn的精确KNN结果还是确定的比近似检索更利于复现修改后的仓库可以交给Codex/Workbuddy/Zcode一键复现文末获取。复现计划作者的环境是 GTX 1080Ti24G显存、Python 3.11 PyTorch 2.5四个癌种全量数据。我们这次的复现设备是 RTX 4060 Laptop8G显存所以代码又需要进一步调整。调整一只做胃癌STAD一个癌种。四个癌种的方法完全一致选样本量适中、微生物组丰度高的STAD消化道肿瘤菌群最丰富最能体现论文卖点。调整二26个样本0.8GB。作者用了110例STAD对应的WSI总量要几十GB全量级下载会增加复现难度。所以我按三个条件筛选了子集与TCMA微生物组配对三方交集后有93例可选、生存标签完整、切片文件足够小≤0.35GB都是诊断DX切片从中选了13例死亡事件13例删失总共0.79GB。5折交叉下每折训练21例、验证5例能算出有效的C-index方差大是必然的这个我们后面结果部分再谈。调整三UNI2-h换成phikon。这是本次复现唯一的算法层面替换原因很实际作者用的UNI2-h在HuggingFace上是受限模型gated要申请同意条款登录token而且它依赖的TRIDENT工具链在Windows上也很折腾。我选了phikon替代——Owkin发布的病理基础模型ViT-B/16结构在40个TCGA癌种含胃癌、超过10万张切片上用DINOv2自监督训练而且开放下载国内走hf-mirror镜像345MB几分钟。代价是特征维度从1536变成768好在这只是模型入口的一个线性层输入维度改成参数即可超图结构、注意力、融合全部原样保留。环境配置直接复用了我机器上已有的conda环境Python 3.10 PyTorch 2.1.1 cu121额外只装了一个dhgDeepHypergraph超图神经网络的库。完整依赖清单在仓库的requirements.txt里。三、复现步骤数据获取数据是这次复现里最花心思的部分因为要用三个来源不同的数据对齐到同一批患者身上WSI切片GDC Data Portalapi.gdc.cancer.gov开放数据API直下不用登录微生物组丰度表Duke大学数据仓库TCMADohlman 2021生存标签GDC的临床BCR Biotab表格关键坑GDC的cases API不返回死亡时间必须下载Biotab解析death_days_to。微生物组数据论文README给的链接是Duke数据仓库的record/126我用requests直接请求返回的是202 Accepted加一个空body——这是AWS WAF的浏览器挑战JS challenge服务器在等你执行一段JavaScript证明自己是真浏览器。Python的requests过不去cookie复制也不行WAF的token绑定了TLS指纹。最后我用浏览器自动化打开这个页面让JS挑战自然通过然后在页面上下文里fetch数据文件——浏览器内的请求带着完整的合法会话再转成base64分块搬出来。整个过程写进了博客附带的操作记录里大家复现时如果拿到的是交付包这一步已经帮你做完了dataset/abundance/下。解压后的关键文件是bacteria.unambiguous.decontam.tissue.sample.rpm.relabund.txt一个14492行菌种× 625列TCGA样本barcode的相对丰度表。注意列名是完整的TCGA barcode形如TCGA-CG-5725-01A-11D-2340-08代码里按前12位case ID匹配并按第4段的样本类型码01/02/03/06为肿瘤样本过滤——这是作者数据处理的原始逻辑保留了。三方交集与样本挑选scripts/download_data.py把这个逻辑固化了用微生物组表的列名前缀取case集合509例GDC Biotab解析OS标签443例STAD患者392例有有效生存时间GDC API查所有带SVS切片的case423例每个case选最小的那张切片三方交集93例作者论文110例量级一致说明匹配逻辑对齐在交集内按文件≤0.35GB过滤80例事件/删失各半取26例。python scripts/download_data.py# 交付包已带数据时可跳过脚本带断点续传和8次重试GDC偶尔会被代理掐断连接实测重试都能救回来。特征提取作者用TRIDENTmahmoodlab的工具包做patch采样和编码命令是20x和10x各跑一遍。TRIDENT本身很优秀但它默认绑定的编码器下载链路和我们换掉的UNI2-h是耦合的所以我照着它的行为写了一个自包含版本scripts/extract_features.py逻辑对标组织分割openslide取低分辨率缩略图转HSV组织掩码 低明度非白背景或有饱和度染上色的并集。双倍率网格采样按切片元数据aperio.MPP算目标倍率的降采样系数20x下256×256、10x下同样物理尺寸对应level-0的512×512组织占比≥35%的格子保留。10x的patch数量是20x的约1/4视野面积是4倍——实测655 vs 165、1289 vs 328说明采样逻辑是对的。phikon编码patch缩放到224×224、ImageNet归一化取ViT的CLS token768维存成h5featurescoords坐标是level-0像素后面建空间超边要用。python scripts/extract_features.py\--wsi_dir./dataset/TCGA-WSI/STAD\--out_dir./dataset/TCGA-Features/STAD\--encoder_dir./checkpoints/phikon26张切片在4060上双倍率共提取约40分钟每张1~2分钟。正式实验先说一个太好了以至于不真实的结果跑完一看汇总五折 C-index 全部 1.000。C-index如果0.7或者0.8是要拍手但是出现了1那就一定是代码出问题了。于是我去翻了训练日志发现大部分折的best epoch是0或3——模型几乎没怎么学验证集就已经满分了。作者的代码是在验证集上选best epoch然后报告同一个验证集上的C-index。这在110例每折验证22例时问题不大但在26例每折验证5例时5个样本的可比较对最多也就几对从50个epoch里挑一个全对的epoch几乎必然挑得到这个框架把C-index的事件标志用成了risk_cohort生存时间中位数二值化短生存1模型要学好的本质上是一个二分类小样本下把两类分开所有可比较对就全对了。所以1.000记录的是选择偏差在小样本下的饱和不是模型能力。更换风险评分方式干净的做法每折各自用它的best模型对自己的验证集做预测这些样本模型从没在训练里见过把5折的预测合并成26个样本的out-of-fold风险评分再统一算指标这就消除了挑epoch带来的乐观偏差。左边完整模型红色高风险组明显掉得更快两组平均生存相差383天26例样本下log-rank p0.071右边消融模型生存曲线交叉并不显著p0.883。也就是说在方向正确的前提下加入微生物组后模型才具备风险分层能力这一论文核心论点在我们的1/4样本量子集上得到了复现。有趣的是论文Table 2里P.0.670与P.M.0.788的差距和我们P.0.699与P.M.0.791的差距方向一致、幅度相仿——当然26例的置信区间很宽这只当方向性印证。可解释性热图论文还有一个创新点是可解释性微生物token对病理patch的注意力可以回答模型认为哪些区域和菌群状态关联最强。推理时这些注意力已经存进了all_val_attn.pkl我写了个可视化脚本画回切片20x中间和10x右侧两张图各有分工10x图上注意力集中在肿瘤主灶的大结构上20x图上则能看到一些更局部的热点。四、复现资料获取数据、代码、权重、还有这篇博客里出现的所有图都打包在文末的交付包里。把整个文件夹丢给Codex/ZCode/Workbuddy说一句按AUTO_REPRODUCE.md复现就行——8G显卡的笔记本半小时内可以从数据跑到KM曲线。【1】获取方式1MedX知识岛推荐已经订阅MedX的用户可以前往MedX查看教程获取代码所有付费推送均可免费阅读更划算学生可以免费领取一个月会员【2】获取方式2微信付费阅读如果只对单篇内容感兴趣可以直接支付本篇文章费用。资料分享工10x图上注意力集中在肿瘤主灶的大结构上20x图上则能看到一些更局部的热点。四、复现资料获取数据、代码、权重、还有这篇博客里出现的所有图都打包在文末的交付包里。把整个文件夹丢给Codex/ZCode/Workbuddy说一句按AUTO_REPRODUCE.md复现就行——8G显卡的笔记本半小时内可以从数据跑到KM曲线。【1】获取方式1MedX知识岛推荐已经订阅MedX的用户可以前往MedX查看教程获取代码所有付费推送均可免费阅读更划算学生可以免费领取一个月会员【2】获取方式2微信付费阅读如果只对单篇内容感兴趣可以直接支付本篇文章费用。资料分享

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询