想象医院放射科来了两位实习医生。第一位实习医生的基本功是“看图配对”:护士把 X 光片和对应的放射报告打乱混在一起,他必须一张一张重新对上。练习了成千上万次之后,他练出了“扫一眼片子,脑海里就能浮现出描述文字”的本领。这位实习生,叫 BiomedCLIP。第二位更狠,他不仅要做配对训练,还要在看完片子之后,自己动手写出“检查所见”与“诊断结论”两段话。这位实习生,叫 RadFM。这两位实习医生的成长故事,就是医学 AI 领域的“多模态预训练”:教材是海量医学影像与临床报告,训练方式是让 AI 在图像与文字之间建立深层联系。读完你会明白,AI 为什么要先“看图配文”、再“看图写文”,三维 CT 数据如何被巧妙拆解,医学报告的“八股文”结构如何反成优势,以及怎样把预训练模型迁移到自己的医疗任务里。
对 AI 从业者而言,掌握 BiomedCLIP 与 RadFM 的预训练方法,相当于拿到了“医学影像界的 GPT”。学会迁移和微调,就能在影像分类、报告生成、跨模态检索等任务上快速落地,不必从零训练庞大模型。
可视化演示
动态演示医学多模态预训练的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
医学多模态预训练:Biom BiomedCLIP对比学习预 RadFM医学影像基础模型架构 核心机制可视化 医学多模态预训练整体架构与关键组件
模型总览
医院放射科一次来了两位风格迥异的实习医生。一位是“配对狂魔”,每天的任务就是把打乱的片子和报告重新对上,眼力越练越准;另一位是“写作能手”,看完片子必须自己动笔写完整份报告。同为多模态预训练出身,两位的“人设”却完全不同。
在 AI 的世界里,这两位就是 BiomedCLIP 和 RadFM。BiomedCLIP 采用“双塔结构”:一个图像编码器负责“看”,一个文本编码器负责“读”,两者把影像和报告分别压缩成特征向量,再通过对比学习让“该配对的靠拢”。RadFM 则走生成式路线:以图像为输入,像写文章一样逐词生成临床报告。两者都遵循“预训练范式”——先在大规模通用医学数据上练就通识,再迁移到具体任务。
双塔架构的本质,是把两种模态映射到同一个语义空间:
回到实习医生的故事:BiomedCLIP 练的是“看片识报告”的判别力,RadFM 练的是“看片写报告”的生成力。一个像选择题高手,一个像作文高手——这就是医学多模态预训练的两条主干路线。
- 图像编码器提取视觉特征z_I 是图像向量,E_I 把 X 光片或 CT 切片压缩成固定长度的特征表示。
- 文本编码器提取文本特征z_T 是报告向量,E_T 把“所见”与“结论”两段文字编码成向量。
- 共享语义空间两个向量处于同一空间,才能直接计算相似度、做对比学习。
数据工程
实习医生的教材从哪来?医院档案室里堆着几十年的影像胶片和手写报告。有人把它们一张张扫描、归档、配对,才让实习生有东西可学。对 AI 而言,这个“档案室”就是预训练数据。
BiomedCLIP 的训练数据主要来自 PMC-OA(PubMed Central 开放获取子集),从中构建了约 1500 万对医学图像-报告配对;RadFM 则在包含 2D 与 3D 影像的更大规模医学数据集上预训练。数据工程包含三个关键步骤:收集影像报告库、隐私清洗(去除患者姓名、ID 等标识信息)、图文配对校验(确保影像与报告确实属于同一次检查)。没有干净的配对数据,后面一切训练都是空谈。
数据集的数学描述非常简单:
档案室整理得越规范,实习医生学得越快。数据工程就是给模型“编教材”:规模要大、配对要准、隐私要净。医学数据比自然图像更难获取,这也是医学多模态模型的护城河。
- 数据集整体定义D 表示训练集,花括号内罗列的是一个个配对样本,N 是配对总数。
- 影像成员x_i 可以是 X 光平片、CT 切片、MRI 断层或病理图像。
- 报告成员t_i 是放射科医生为这张影像撰写的临床报告,二者同源。
对比预训练
实习医生做配对练习时是怎么得分的?护士会把 32 张片子和 32 份报告摆成两排,他每次从报告堆里挑一份,判断“这张片子配哪份报告”。挑对了加分,挑错了扣分。对比学习正是这个“配对得分游戏”。
BiomedCLIP 在训练时,每个批次有 N 个图文对。对第 i 张图像,模型要在 N 个候选文本中“认出”正确的那一个。它计算图像与所有文本的相似度,然后用一个叫 InfoNCE 的损失函数,把正确配对的相似度拉高、把错误配对的相似度压下去。这个损失要同时做两个方向:图像找文本、文本找图像,所以叫“双向对比损失”。
核心损失函数如下:
说白了,配对游戏的输赢规则就一条:让对的更对、让错的更错。经过上千万次这样的“练习”,BiomedCLIP 的图像编码器学会了抓住病灶、器官等视觉线索,文本编码器学会了理解医学术语,两者在语义空间中形成了漂亮的“对齐”。
- 相似度来源s_ij 用余弦相似度计算,衡量第 i 张图与第 j 段文本的匹配程度。
- 分子放大正确配对指数函数把 s_ii 的“优势”放大,τ 是温度系数,控制得分分布的陡峭程度。
- 分母构成归一化对批次内所有 N 个文本求和,相当于计算“在所有候选中选中正确项”的概率。
- 双向取平均第一项是图像到文本方向,第二项是文本到图像方向,两个方向都学会才稳健。
模态适配
实习医生在 X 光科练熟了平面片,轮转到 CT 室却傻了眼:CT 是几十上百层的“断层扫描”,像一本厚书。他必须学会一层一层地翻,才能找到病灶。这就是 3D 影像带来的模态适配挑战。
CT 和 MRI 本质是三维体数据,形状是“深度 × 高度 × 宽度”。而大多数图像编码器是为二维图片设计的。常见解决办法是“切片采样”:沿轴向把 3D 体积切成一叠 2D 切片,逐片送入编码器;RadFM 则更进一步,设计了专门的 3D patch embedding 来原生处理立体数据。此外还要处理伪影(运动模糊、金属伪影、噪声)以及模态差异(CT 擅长看密度、MRI 擅长看软组织),通过数据增强和归一化让模型对模态差异不敏感。
切片操作的数学表达:
就像实习医生学会了“翻书找病灶”,模型的模态适配本质是“降维但不丢信息”:要么切片、要么投影、要么设计原生 3D 编码器。理解了这一层,你就能明白为什么 RadFM 宣称支持 CT/MRI 三维输入时,技术含金量如此之高。
- 三维体积的定义x_3D 用三维张量表示,D 是层数(如 200 层 CT),H 和 W 是每层的高度与宽度。
- 切片操作slice(x_3D, s) 沿着层数维度取出第 s 个二维截面。
- 得到二维图像x_s 的形状变为 H × W,可以直接输入 ViT 等二维图像编码器。
医学文本处理
放射科报告是有“八股文”传统的:先写“检查所见”,客观描述片子上能看到什么;再写“诊断结论”,给出判断和建议。这种固定结构起初被吐槽刻板,却恰恰是 AI 学习的福音——规律越强,越好学。
医学报告的特殊性有三点。第一,结构化:报告天然分成“所见 + 结论”两段,模型可以分别建模再融合。第二,长文本:一份报告往往几百字甚至上千字,超出普通文本编码器的最大长度,需要分段截断或分层编码。第三,术语标准化:“结节”“磨玻璃影”“强化”等词汇含义精确,重复度高,反而让文本编码器更容易建立稳定的语义映射。
结构化报告的数学表示:
实习医生发现“所有报告都按这个模板写”,学起来事半功倍。对模型也是一样:医学报告的高度结构化,让预训练阶段的图文对齐有了更稳定的“锚点”。这也是为什么医学文本虽然“枯燥”,却比自由文本更适合做预训练。
- 检查所见部分F 描述影像上的客观发现,如“右下肺可见分叶状结节”。
- 诊断结论部分C 是医生的综合判断,如“考虑周围型肺癌,建议增强检查”。
- 两段拼接成完整报告方括号加分号表示按次序拼接,模型可以分别编码再融合。
生成式预训练
如果说 BiomedCLIP 是“配对狂魔”,RadFM 就是“写作能手”——它不满足于认出哪份报告配哪张图,而是要自己把整篇报告写出来。这背后是生成式预训练。
RadFM 采用自回归生成的方式:给定一张(或一组)医学影像,模型逐个预测下一个文本 token,像打字机一样把报告“打”出来。在预训练阶段,它还引入了指令微调:把“请描述这张 CT 的异常发现”“给出诊断建议”等临床问题封装成指令,让模型学会“看图回答问题”。经过海量数据训练,RadFM 既能生成结构化报告,也能做开放式临床问答,成为真正的多模态对话模型。
自回归生成的概率模型:
和人类写作一样,RadFM 也是一字一句“憋”出来的报告。对比之下:BiomedCLIP 学会的是“打分”,RadFM 学会的是“输出”。一个适合做检索和分类,一个适合做报告生成和临床问答——两种能力互补,构成了医学视觉语言模型的完整版图。
- 条件生成概率P(R | I) 表示“看到图像 I,生成报告 R”这一事件的可能性。
- 链式分解把整篇报告拆成 N 个词,每个词 w_k 的概率取决于图像和它前面的词。
- 连乘组合将所有词的条件概率乘起来,就得到整篇报告的概率,训练时最大化这个值。
迁移与微调
实习医生轮转完了所有科室,带着一身本领来到新科室。他不会从零学起,而是把之前练就的“看片能力”迁移过来,只需熟悉新科室的少量规矩就能上手。这就是预训练模型的价值:迁移学习。
把预训练模型用于下游任务,通常有三档做法。第一档是零样本推理:完全不训练,直接让模型在“图像 + 候选文本描述”之间做相似度比较,选出最匹配的答案。第二档是线性探测:冻结预训练主干的所有参数,只在特征之上加一个线性分类头,训几百个 epoch 就能达到不错效果。第三档是轻量微调:用 LoRA 等方法只更新少量新增参数,在保持通用能力的同时适配特定任务,这也是临床落地最常用的方案。
线性探测的数学表达:
实习医生靠“老本领 + 新规矩”快速上手,模型靠“预训练 + 轻量微调”快速落地。正因如此,BiomedCLIP 和 RadFM 这类大模型不再是实验室玩具:影像科医生用几百张标注数据、一两张显卡,就能在肺结节分类、骨折检测、报告生成等任务上取得实用效果。
- 冻结主干提取特征E_I 是预训练好的编码器,这一步训练时参数不再更新,只做前向计算。
- 线性分类头W_cls 是分类权重矩阵,把高维特征压缩到类别数,b 是偏置项。
- LoRA 的增量思想若想微调主干,用低秩矩阵对 B、A 近似权重增量,只需训练极少量参数。
AI 应用场景
跨模态病例检索辅助诊断
阶段:预训练模型推理应用
解决的问题:传统 PACS 系统只能靠关键词、检查号检索历史病例,无法用“影像内容 + 自然语言”组合检索。医生遇到疑难病例时,想找“外观相似的既往病例”非常困难。
具体案例:一位影像科医生看到一例可疑肺结节,他在检索框中输入“右下肺分叶状实性结节伴毛刺”,系统用 BiomedCLIP 将这句描述和全院历史 CT 影像各自编码成向量,算出相似度,秒级返回最相似的几十例历史病例及其随访结果,为诊断提供参考。这套系统的核心正是“图文对比学习”练出的对齐能力。
放射报告自动生成初稿
阶段:生成式多模态推理
解决的问题:放射科医生每天要写几十上百份报告,工作负荷大,且夜间急诊需要快速出报告。人工逐字撰写既耗时又容易疲劳漏写。
具体案例:医生上传一组胸部 CT 三维影像,RadFM 自动生成“检查所见 + 诊断结论”的完整初稿,医生在结构化报告界面上复核修改,几分钟即可完成原本需要十几分钟的报告。遇到急诊夜间,模型初稿还能帮助低年资医生减少遗漏。
少样本病灶分类迁移落地
阶段:迁移学习与微调
解决的问题:罕见病或新发病种的标注数据极少,从头训练一个 CNN 分类器很容易过拟合,精度远达不到临床要求。
具体案例:某团队要做一个“肺结节良恶性分类”模块,但只有 800 张带标注的结节影像。他们加载 BiomedCLIP 预训练权重,冻结图像编码器,只在特征后加一个线性分类头,训练 50 个 epoch,准确率就达到 89%,显著超过从零训练的 ResNet。整个微调过程只需要一张消费级显卡。
Python 演示
import numpy as np def normalize(z): return z / (np.linalg.norm(z, axis=1, keepdims=True) + 1e-8) def info_nce_loss(z_img, z_txt, tau=0.1): """双向 InfoNCE 对比损失, 返回损失和两个编码器的梯度""" logits = z_img @ z_txt.T / tau labels = np.arange(len(z_img)) onehot = np.eye(len(labels))[labels] exp = np.exp(logits - logits.max(axis=1, keepdims=True)) prob = exp / exp.sum(axis=1, keepdims=True) loss_1 = -np.mean(np.log(prob[np.arange(len(labels)), labels] + 1e-8)) exp_t = np.exp(logits.T - logits.T.max(axis=1, keepdims=True)) prob_t = exp_t / exp_t.sum(axis=1, keepdims=True) loss_2 = -np.mean(np.log(prob_t[np.arange(len(labels)), labels] + 1e-8)) loss = 0.5 * (loss_1 + loss_2) grad_img = (prob - onehot) / len(labels) @ z_txt / tau grad_txt = (prob_t - onehot) / len(labels) @ z_img / tau return loss, grad_img, grad_txt np.random.seed(42)N, D = 32, 64w_img = np.random.randn(D, D) * 0.08w_txt = np.random.randn(D, D) * 0.08x_img = np.random.randn(N, D)x_txt = x_img @ np.random.randn(D, D) * 0.1 + np.random.randn(N, D) * 0.2 print("epoch loss 匹配对相似度")for epoch in range(200): z_img = normalize(x_img @ w_img) z_txt = normalize(x_txt @ w_txt) loss, g_img, g_txt = info_nce_loss(z_img, z_txt, tau=0.1) w_img -= 0.05 * x_img.T @ g_img w_txt -= 0.05 * x_txt.T @ g_txt if epoch % 40 == 0: match_sim = np.diag(z_img @ z_txt.T).mean() print(f"{epoch:4d} {loss:.4f} {match_sim:.4f}")
logits = z_img @ z_txt.T / tau计算批次内所有图像与文本的相似度矩阵,除以温度系数放大差异,对应正文的 s_ij。labels = np.arange(len(z_img))对角线位置 (i, i) 才是正确配对,这是对比学习的“标准答案”。grad_img = (prob - onehot) / len(labels) @ z_txt / tau对比学习的关键梯度:正确配对概率不满 1 时,梯度会推动编码器提高它的相似度。w_img -= 0.05 * x_img.T @ g_img梯度下降更新图像编码器权重,学习率 0.05。match_sim = np.diag(z_img @ z_txt.T).mean()用对角线相似度的平均值监控“配对练习”的进展。
常见误区
误区都是“医学视觉语言预训练模型”,名字又都带字母缩写,应该只是同一个模型的不同版本,随便用哪个都一样。
正解两者架构路线完全不同。BiomedCLIP 是“双塔 + 对比学习”,擅长判别(匹配、分类、检索);RadFM 是“生成式”模型,擅长输出(写报告、答问题)。好比一个是“配对狂魔”,一个是“写作能手”,职责不同、用法也不同。
为何常见:两者常被放在一起介绍,且都叫“预训练模型”,初学者容易忽略判别式与生成式的本质差异。
误区OpenAI 的 CLIP 在自然图像上表现很好,医学影像也是图像,直接拿 CLIP 的权重来用就行,不用重新训练。
正解自然图像与医学影像的分布差异极大——病灶、器官、扫描伪影在自然图片里几乎不出现。直接用 CLIP 做医学图文匹配,准确率会大幅下降。BiomedCLIP 的价值恰恰在于用约 1500 万对医学图文重新预训练,让编码器“学会看病”。
为何常见:迁移学习的概念深入人心,但忽略了“源域与目标域差异太大时,直接迁移效果有限”这一前提。
误区对比学习就是让模型把“第 1 张图配第 1 段文字、第 2 张图配第 2 段文字”这些配对关系背下来,考试时默写即可。
正解对比学习学的是“语义表征”。训练时配对是随机采样的,模型从未见过固定的“标准答案”。它学到的是图像和文本在语义空间中的相对位置——相似的语义靠得近,不相关的离得远。因此它能泛化到训练中从未见过的新图像和新文本上。
为何常见:配对任务看起来像“记答案”,特别是损失函数里“正确配对对角线上”的写法容易让人误解为记忆。
误区CT 和 MRI 也是图像,把三维数据当成“多通道”直接丢进 2D 图像编码器就行,反正模型能自动学会。
正解三维体数据的深度维包含层间解剖关系,直接当作通道拼接会破坏空间结构,且带来巨大的计算量。标准做法是切片采样、最大密度投影等降维手段,或像 RadFM 那样设计原生 3D patch embedding。
为何常见:直觉上“图就是图”,加上 PyTorch 里 tensor 形状都是 (C, H, W),容易误以为 3D 只是 C 更大。
误区预训练模型宣传里有“零样本能力”,那拿到医院部署后直接就能诊断,不需要任何额外训练。
正解零样本推理只适用于“图像与文本描述直接比较”这类任务,且精度通常低于有监督方案。真实临床落地几乎都需要下游适配:线性探测、LoRA 微调,甚至结合领域专家的标注做进一步训练,才能达到可用水平。
为何常见:厂商宣传强调零样本能力,容易让非技术人员忽略“通用能力 ≠ 临床精度”的差距。
面试题
Q1. BiomedCLIP 的核心预训练任务是?
- A.自回归生成报告文本
- B.图像文本对比配对← 正确答案
- C.纯图像分类训练
- D.强化学习寻优策略
答案:B。BiomedCLIP 的核心是“图文对比学习”——在批次内找出图像对应的正确文本,答案为 B。A 是 RadFM 的生成式任务;C 只用了图像没用到文本;D 与预训练无关。可以类比实习医生的“配对练习”。
Q2. BiomedCLIP 主要训练数据来源是?
- A.通用自然图片库
- B.医学影像报告库← 正确答案
- C.人工标注的小样本
- D.纯文本医学文献
答案:B。BiomedCLIP 主要基于 PMC-OA 构建的医学影像-报告配对数据(约 1500 万对),故选 B。A 是自然图像 CLIP 的数据;C 样本量远不够预训练;D 只有文本没有图像,无法做图文对齐。
Q3. 双向 InfoNCE 损失的第一项含义是?
- A.文本到图像方向损失
- B.图像到文本方向损失← 正确答案
- C.图像自身的重构损失
- D.文本语言建模损失
答案:B。双向损失的第一项对每个图像 i,在 N 个文本候选中选出正确文本,是“图像到文本”方向;第二项才是“文本到图像”方向。C 是自编码器任务,D 是语言模型任务,都与对比学习无关。就像实习医生既要从图找文、也要从文找图。
Q4. CT 三维数据送入 2D 编码器的常见做法?
- A.轴向切片采样处理← 正确答案
- B.直接拼接三维通道
- C.随机丢弃大部分层
- D.压缩成一维向量训练
答案:A。常见做法是沿轴把三维体积切成 2D 切片逐片处理,故 A 正确。B 把深度当通道会破坏层间结构;C 随机丢层会丢失病灶信息;D 压缩成一维损失空间信息。好比实习医生翻书看 CT,一层层翻而不是把书揉成团。
Q5. 医学报告文本设计的典型结构?
- A.先结论后检查所见
- B.先所见后诊断结论← 正确答案
- C.随医生心情自由写
- D.只写结论不写所见
答案:B。放射报告的标准结构是“检查所见 + 诊断结论”,先描述客观发现、再给主观判断,故选 B。A 顺序颠倒不符合规范;C、D 破坏了结构规律,会让模型更难学习。正是这种“八股文”结构给了文本编码器稳定的锚点。
Q6. RadFM 与 BiomedCLIP 的主要区别?
- A.RadFM 属于生成式模型← 正确答案
- B.RadFM 能处理三维影像← 正确答案
- C.两者架构完全相同
- D.RadFM 可生成完整报告← 正确答案
答案:ABD。RadFM 是自回归生成式模型,支持原生 3D 输入,能逐词生成完整报告,故 A、B、D 正确。C 错误——BiomedCLIP 是双塔对比架构,RadFM 是生成式架构,两者设计路线截然不同,一个像“配对狂魔”、一个像“写作能手”。
Q7. 零样本推理指的是?
- A.不使用任何训练数据
- B.不额外训练直接推理← 正确答案
- C.需要完整重新微调
- D.只做数据增强处理
答案:B。零样本推理指加载预训练模型后,不经任何下游训练,直接对未见过的任务做预测,故选 B。A 说法不准确,预训练阶段已经用过数据;C 与零样本相反;D 只改数据不改模型,不是零样本推理的核心含义。
Q8. InfoNCE 损失训练中温度系数 τ 的作用?
- A.控制相似度分布陡峭← 正确答案
- B.影响难负样本惩罚强度← 正确答案
- C.决定图像分辨率大小
- D.改变模型参数量规模
答案:AB。τ 越小,相似度矩阵经过指数放大后分布越陡峭,模型对难负样本(与正确配对相似度较高的错误文本)的惩罚越强,故 A、B 正确。C 是数据预处理问题,D 是网络结构问题,都与温度系数无关。τ 好比配对练习的“评分尺度”:尺度越严,细小的差异越被放大。
Q9. 线性探测(Linear Probe)是指?
- A.微调全部网络参数
- B.用强化学习调策略
- C.对输入做线性插值
- D.冻结主干只训分类头← 正确答案
答案:D。线性探测是冻结预训练主干,只在特征之上训练一层线性分类器,故选 D。A 是全量微调;B 是完全不同的训练范式;C 是数据增强手段。类比实习医生轮转新科室:老本领(主干)不动,只需学轻量新规矩(分类头)。
Q10. 医学预训练数据清洗最关键的一点?
- A.去除患者隐私标识← 正确答案
- B.把所有图片转彩色
- C.删除全部罕见病样
- D.统一压缩成小尺寸
答案:A。医学数据涉及患者隐私,预训练前必须做去标识化(去除姓名、病历号等信息),这是合规底线,故 A 正确。B 转彩色反而可能引入无意义通道;C 删除罕见病样会损失重要信息;D 过度压缩会丢失影像细节,都不符合数据工程的正确做法。