🚀 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)
✨ 主な機能
- ゼロショットX線分類:X線画像とテキスト記述の類似度を計算することができます。
- 特徴抽出器:下流タスクのために、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線画像とテキスト記述を対応付けることができます。このモデルは、OpenCLIP (ViT-L/14) を MIMIC-CXR データセットで微調整したもので、臨床レポートはGPT-4で処理されています。WhyXrayCLIPは、様々な胸部X線データセットでのゼロショットと線形プロービングにおいて、PubMedCLIPやBioMedCLIPなどを大幅に上回っています。(詳細な結果は 評価 を参照)
- 論文: https://arxiv.org/pdf/2405.14839
- ウェブサイト: https://yueyang1996.github.io/knobo/
- リポジトリ: https://github.com/YueYANG1996/KnoBo
用途
直接的な使用
WhyXrayCLIPは、ゼロショットX線分類に使用することができます。X線画像とテキスト記述の類似度を計算することができます。
下流タスクでの使用
WhyXrayCLIPは、下流タスクのための特徴抽出器として使用することができます。X線画像とテキスト記述から特徴を抽出し、他の下流タスクに利用することができます。
適用範囲外の使用
WhyXrayCLIPは、臨床診断や治療には使用しないでください。臨床的な意思決定に使用することを意図していません。ユーザーは、モデルのリスク、バイアス、制限事項を認識する必要があります。
学習詳細
学習データ
MIMIC-CXR データセットを使用し、PAとAPのX線画像のみを選択しました。これにより、243,334枚の画像が得られ、それぞれに医師による臨床レポートが付属しています。これらのレポートを前処理し、医学的に関連する所見を抽出し、それぞれを短く簡潔な用語で記述しました。合計で953Kの画像-テキストペアを収集し、WhyXrayCLIPの学習に使用しました。
学習設定
OpenCLIP の学習スクリプトを使用し、ViT-L/14 をバックボーンとして選択しました。学習は、4台のRTX A6000 GPUで10エポック行い、バッチサイズは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(事前学習データセットで交差エントロピー損失を使用して微調整)を線形プロービングのベースラインとして含めました。
結果
以下の図は、5つの胸部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ライセンスの下で提供されています。