plip
全球首个病理学视觉-语言基础模型,基于CLIP微调实现病理图像零样本分类与跨模态检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
全球首个病理学视觉-语言基础模型,基于CLIP微调实现病理图像零样本分类与跨模态检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:PLIP 项目概览
想象这样的场景:一位病理学家在 Twitter 上偶然看到一张从未见过的组织切片图像——细胞排列异常,形态模糊,他无法确定这是恶性肿瘤还是良性增生。传统的做法是翻阅厚厚的诊断手册、查阅病例数据库,或者等待专家会诊。但在 2023 年,一项发表在 Nature Medicine 上的研究彻底改变了这一局面:只需用文字描述症状,AI 就能在这张病理图像中找到最匹配的诊断依据。
这就是 PLIP(Pathology Language and Image Pre-Training)带来的变革。PLIP 是全球首个专门为病理学 AI 打造的视觉-语言基础模型,由 PathologyFoundation 团队基于 OpenAI 的 CLIP 框架微调而来,在 Nature Medicine 上正式发表(论文标题:A visual-language foundation model for pathology image analysis using medical Twitter)。它能同时理解病理切片的视觉特征和医学文本描述,实现跨模态检索、零样本分类等任务,为数字病理学的智能化转型提供了强大的底层工具。
PLIP 的诞生本身就是一个创新的故事。研究团队没有采用传统的标注方式(让医生手动标注数万张病理图像),而是另辟蹊径,从 Twitter(现 X)上挖掘医学讨论数据。医生们在社交媒体上分享病例图像时会附带文字描述,这种天然的"图像-文本对"构成了 PLIP 的训练语料。相比纯人工标注,这种数据收集方式成本更低、规模更大,且反映了真实临床场景中的表述习惯。
模型基于 OpenAI CLIP 架构进行微调。CLIP 本身在大规模互联网图文对上训练,已经具备强大的跨模态理解能力。PLIP 在此基础上,专门学习了病理学领域的视觉特征与专业术语之间的对应关系,从而在病理图像分析任务上实现了显著的精度提升。
PLIP 的技术核心是对 CLIP 模型的微调(Fine-tuning)。CLIP 的核心思想是将图像和文本分别编码到同一个向量空间中,使得语义相近的图文对在向量空间中距离更近。PLIP 在此基础上引入了病理学领域的专业图文数据进行微调。
PLIP 采用典型的双编码器(Dual-Encoder)架构:
两个编码器输出的向量在同一个语义空间内对齐,用户可以通过文本查询找到最相关的病理图像,也可以用图像反向检索匹配的文本描述。
从 plip.py 源码中可以清晰看到,PLIP 提供了以下核心功能:
# 初始化模型
from plip.plip import PLIP
plip = PLIP('vinid/plip') # 自动下载模型权重
# 生成图像嵌入向量
image_embeddings = plip.encode_images(images, batch_size=32)
# 生成文本嵌入向量
text_embeddings = plip.encode_text(texts, batch_size=32)
# 零样本图像分类
predictions = plip.zero_shot_classification(images, text_labels)
其中 zero_shot_classification 方法实现了无需任何训练数据的分类能力——只需提供候选标签的文本描述,即可对任意病理图像进行分类,分类依据是图像向量与文本标签向量的余弦相似度。
PLIP 支持两种典型的应用场景:
零样本分类(Zero-Shot Classification):将病理图像与候选文本标签编码后,计算余弦相似度,选择相似度最高的标签作为预测结果。这一能力使得 PLIP 无需在目标数据集上做任何微调,即可适配新的诊断分类体系。
图像检索(Image Retrieval):给定文本查询(如"显示有丝分裂像的病理切片"),编码查询文本后,在图像向量库中通过 K 近邻(KNN)检索最相似的图像。这一能力在构建病理图像数据库的语义搜索功能时非常有用。
从代码层面看,PLIP 的技术栈非常清晰:
| 组件 | 技术选型 |
|---|---|
| 深度学习框架 | PyTorch + transformers (CLIPModel, CLIPProcessor) |
| 数据集工具 | HuggingFace Datasets + PIL |
| 评估指标 | sklearn (AUC, F1, MCC, 敏感性/特异性等) |
| 可视化 | Matplotlib, seaborn |
| 骨干网络 | ViT-B/32 (Vision Transformer) |
代码采用面向对象的封装方式,PLIP 类提供了简洁的 API 接口,隐藏了模型加载、数据预处理等复杂性细节。源码约 200 行,结构清晰,可读性较好。评估脚本(metrics.py)实现了完整的医学指标体系,包括 AUC、F1 分数、MCC(Matthews 相关系数)、敏感性、特异性、PPV(阳性预测值)、NPV(阴性预测值)等,完全符合医学 AI 评估规范。
此外,项目在 reproducibility/ 目录下提供了完整的线性探测(Linear Probing)实验代码和配置脚本,支持在不同数据集(Kather、PanNuke、DigestPath、WSSS4LUAD)上复现论文结果。
最简单的方式是直接使用 HuggingFace 官方提供的模型卡片,无需安装 PLIP 包:
from PIL import Image
from transformers import CLIPProcessor, CLIPModel
model = CLIPModel.from_pretrained('vinid/plip')
processor = CLIPProcessor.from_pretrained('vinid/plip')
image = Image.open('path/to/slide.jpg')
inputs = processor(
text=['normal tissue', 'benign hyperplasia', 'malignant adenocarcinoma'],
images=image, return_tensors='pt', padding=True
)
outputs = model(**inputs)
probs = outputs.logits_per_image.softmax(dim=1)
print(probs) # 各分类概率
如果需要进行批量图像编码、文本编码或 KNN 检索,使用 PLIP 包更为高效:
pip install plip
PLIP 类的优势在于封装了 DataLoader 批处理逻辑和 tqdm 进度条,适合在大规模数据集上运行。
官方提供了 HuggingFace Spaces Gradio Demo(https://huggingface.co/spaces/vinid/webplip),可在线体验图像-文本跨模态交互,无需本地部署即可感受 PLIP 的能力。
PLIP 作为视觉-语言模型,对硬件有一定要求:
目前 PLIP 仓库不提供 Dockerfile,但得益于 HuggingFace Transformers 的良好封装,pip 安装即可运行,门槛并不高。
尽管 PLIP 在病理学 AI 领域具有里程碑意义,但也存在一些局限性:
骨干网络较小:PLIP 基于 ViT-B/32(86M 参数的 CLIP),相比 GPT-4V 等大型多模态模型,表达能力有限。当前研究趋势是使用更大规模的模型(如 ViT-L/14)以获得更精细的病理特征捕捉能力。
零样本检索功能尚未完全实现:README 中标注了 retrieval 方法为 TODO 状态,实际使用中需要额外的数据准备步骤。
数据偏见风险:训练数据来源于 Twitter 医学讨论,可能存在采样偏差——特定疾病、特定人群的病理图像在社交媒体上曝光更多,模型可能对其他类型图像的泛化能力不足。
临床合规性:作为研究工具,PLIP 尚未获得 FDA 等医疗器械监管机构的审批,不应直接用于临床诊断决策。
PLIP 的问世标志着病理学 AI 从"专用模型"向"基础模型"的范式转变。在 CLIP 时代之前,每个病理分析任务(如癌症分级、预后预测)都需要专门的训练数据集和模型。PLIP 证明了一个统一的视觉-语言基础模型可以在多个任务上展现竞争力,大幅降低了新病理学 AI 应用的开发成本。
这一方向正在快速发展:更大规模的病理学基础模型(如 REMEDIS、UNI、CONCH 等)陆续涌现,参数规模从数亿扩展到数十亿级别,在多项基准测试上超越了 PLIP。但 PLIP 作为该方向的先驱之作,其开源精神和创新的数据收集方式(利用社交媒体)仍然值得称道。
对于 AI 研究者和病理学从业者而言,PLIP 提供了一个优秀的起点:通过简单的 pip 安装,即可获得预训练好的病理学跨模态模型,用于快速原型验证、新数据集标注辅助、以及教学演示等多种场景。
图2:PathologyFoundation 团队 GitHub 组织头像
参考资源: