🚀 WhyXrayCLIP 🩻 模型卡片
WhyXrayCLIP 能夠將 X 光圖像與文本描述進行對齊。它在醫學圖像零樣本分類任務中表現出色,為醫學研究提供了有力工具。
🚀 快速開始
安裝依賴
使用以下命令安裝所需的庫:
pip install open_clip_torch
代碼示例
import torch
from PIL import Image
import open_clip
model, _, preprocess = open_clip.create_model_and_transforms("hf-hub:yyupenn/whyxrayclip")
model.eval()
tokenizer = open_clip.get_tokenizer("ViT-L-14")
image = preprocess(Image.open("test_xray.jpg")).unsqueeze(0)
text = tokenizer(["enlarged heart", "pleural effusion"])
with torch.no_grad(), torch.cuda.amp.autocast():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
print("Label probs:", text_probs)
✨ 主要特性
- 圖像文本對齊:WhyXrayCLIP 可以將 X 光圖像與文本描述進行有效對齊。
- 性能優異:在多種胸部 X 光數據集的零樣本和線性探測任務中,顯著優於 PubMedCLIP、BioMedCLIP 等模型。
- 快速收斂:訓練收斂速度快,但當前的對比目標可能未充分利用數據信息。
📦 安裝指南
使用以下命令安裝所需的庫:
pip install open_clip_torch
💻 使用示例
基礎用法
import torch
from PIL import Image
import open_clip
model, _, preprocess = open_clip.create_model_and_transforms("hf-hub:yyupenn/whyxrayclip")
model.eval()
tokenizer = open_clip.get_tokenizer("ViT-L-14")
image = preprocess(Image.open("test_xray.jpg")).unsqueeze(0)
text = tokenizer(["enlarged heart", "pleural effusion"])
with torch.no_grad(), torch.cuda.amp.autocast():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
print("Label probs:", text_probs)
📚 詳細文檔
用途
直接使用
WhyXrayCLIP 可用於零樣本 X 光分類,計算 X 光圖像與文本描述之間的相似度。
下游使用
可作為特徵提取器,為下游任務從 X 光圖像和文本描述中提取特徵。
適用範圍外使用
WhyXrayCLIP 不應用於臨床診斷或治療,也不用於任何臨床決策。用戶應瞭解模型的風險、偏差和侷限性。
訓練詳情
訓練數據
使用 MIMIC-CXR 數據集,僅選擇 PA 和 AP X 光片,共 243,334 張圖像,每張圖像都配有醫生撰寫的臨床報告。對報告進行預處理,提取醫學相關發現,共組裝 953K 圖像 - 文本對用於訓練。
訓練細節
使用 OpenCLIP 的訓練腳本,選擇 ViT-L/14 作為骨幹網絡。在 4 個 RTX A6000 GPU 上進行 10 個 epoch 的訓練,批量大小為 128,學習率為 1e−5。根據驗證集上的最低對比損失選擇檢查點。
評估
測試數據
在 5 個 X 光分類數據集上進行評估:Pneumonia、COVID-QU、NIH-CXR、Open-i 和 VinDr-CXR。報告上述 5 個數據集的零樣本和線性探測準確率。
基線模型
比較各種 CLIP 模型,包括 OpenAI-CLIP、OpenCLIP、PubMedCLIP、BioMedCLIP、PMC-CLIP 和 MedCLIP。在零樣本和線性探測場景下評估這些模型。在零樣本中,使用 GPT - 4 為每個類別生成提示,並使用圖像與提示之間的餘弦相似度的集合作為每個類別的分數。在線性探測中,使用 CLIP 模型作為圖像編碼器提取特徵進行邏輯迴歸。此外,將 DenseNet - 121(在預訓練數據集上使用交叉熵損失進行微調)作為線性探測的基線。
結果
下圖顯示了不同模型在五個胸部 X 光數據集上的平均零樣本和線性探測性能。

引用
如果在你的工作中使用了該模型,請引用我們的論文:
@article{yang2024textbook,
title={A Textbook Remedy for Domain Shifts: Knowledge Priors for Medical Image Analysis},
author={Yue Yang and Mona Gandhi and Yufei Wang and Yifan Wu and Michael S. Yao and Chris Callison-Burch and James C. Gee and Mark Yatskar},
journal={arXiv preprint arXiv:2405.14839},
year={2024}
}
📄 許可證
本項目採用 MIT 許可證。