Virchow2
模型概述
模型特點
模型能力
使用案例
🚀 Virchow2模型卡片
Virchow2是一個自監督視覺變換器模型,它使用310萬張全切片組織病理學圖像進行預訓練。該模型可用作切片級特徵提取器(凍結或微調),能在各種下游計算病理學應用中取得最先進的成果。
🚀 快速開始
要求
- PyTorch(推薦2.0+版本)
- timm(要求版本 >= 0.9.11)
- huggingface_hub
登錄
在獲取該模型的訪問權限後,你需要在打算使用模型的環境中登錄HuggingFace。可以通過命令行完成:
huggingface-cli login
或者在Python代碼中實現:
from huggingface_hub import login
login()
更多詳細信息請參考HuggingFace官方文檔。
圖像嵌入
import timm
import torch
from timm.data import resolve_data_config
from timm.data.transforms_factory import create_transform
from timm.layers import SwiGLUPacked
from PIL import Image
# 需要指定MLP層和激活函數以進行正確初始化
model = timm.create_model("hf-hub:paige-ai/Virchow2", pretrained=True, mlp_layer=SwiGLUPacked, act_layer=torch.nn.SiLU)
model = model.eval()
transforms = create_transform(**resolve_data_config(model.pretrained_cfg, model=model))
image = Image.open("/path/to/your/image.png")
image = transforms(image).unsqueeze(0) # 尺寸: 1 x 3 x 224 x 224
output = model(image) # 尺寸: 1 x 261 x 1280
class_token = output[:, 0] # 尺寸: 1 x 1280
patch_tokens = output[:, 5:] # 尺寸: 1 x 256 x 1280,標記1 - 4是註冊標記,因此我們忽略它們
# 連接類別標記和補丁標記的平均池化
embedding = torch.cat([class_token, patch_tokens.mean(1)], dim=-1) # 尺寸: 1 x 2560
我們將類別標記和平均補丁標記連接起來,以創建最終的切片嵌入。在資源受限的情況下,可以嘗試僅使用類別標記或平均補丁標記。對於具有密集輸出的下游任務(例如分割),可以使用256 x 1280
的補丁標記張量。
我們強烈建議使用torch.autocast
在GPU上以混合精度(fp16
)運行模型:
model = model.to("cuda")
image = image.to("cuda")
with torch.inference_mode(), torch.autocast(device_type="cuda", dtype=torch.float16):
output = model(image)
class_token = output[:, 0]
patch_tokens = output[:, 5:]
embedding = torch.cat([class_token, patch_tokens.mean(1)], dim=-1)
# 模型輸出將是fp32,因為最終操作是在混合精度下運行的LayerNorm
# 為了提高下游使用的效率,你可以選擇將嵌入轉換為fp16
embedding = embedding.to(torch.float16)
✨ 主要特性
- 預訓練數據豐富:使用310萬張全切片組織病理學圖像進行預訓練。
- 應用廣泛:可用作切片級特徵提取器,適用於各種下游計算病理學應用。
- 性能先進:能在下游任務中取得最先進的成果。
📦 安裝指南
安裝所需的依賴庫:
- PyTorch(推薦2.0+版本)
- timm(要求版本 >= 0.9.11)
- huggingface_hub
💻 使用示例
基礎用法
import timm
import torch
from timm.data import resolve_data_config
from timm.data.transforms_factory import create_transform
from timm.layers import SwiGLUPacked
from PIL import Image
# 需要指定MLP層和激活函數以進行正確初始化
model = timm.create_model("hf-hub:paige-ai/Virchow2", pretrained=True, mlp_layer=SwiGLUPacked, act_layer=torch.nn.SiLU)
model = model.eval()
transforms = create_transform(**resolve_data_config(model.pretrained_cfg, model=model))
image = Image.open("/path/to/your/image.png")
image = transforms(image).unsqueeze(0) # 尺寸: 1 x 3 x 224 x 224
output = model(image) # 尺寸: 1 x 261 x 1280
class_token = output[:, 0] # 尺寸: 1 x 1280
patch_tokens = output[:, 5:] # 尺寸: 1 x 256 x 1280,標記1 - 4是註冊標記,因此我們忽略它們
# 連接類別標記和補丁標記的平均池化
embedding = torch.cat([class_token, patch_tokens.mean(1)], dim=-1) # 尺寸: 1 x 2560
高級用法
model = model.to("cuda")
image = image.to("cuda")
with torch.inference_mode(), torch.autocast(device_type="cuda", dtype=torch.float16):
output = model(image)
class_token = output[:, 0]
patch_tokens = output[:, 5:]
embedding = torch.cat([class_token, patch_tokens.mean(1)], dim=-1)
# 模型輸出將是fp32,因為最終操作是在混合精度下運行的LayerNorm
# 為了提高下游使用的效率,你可以選擇將嵌入轉換為fp16
embedding = embedding.to(torch.float16)
📚 詳細文檔
模型詳情
屬性 | 詳情 |
---|---|
開發者 | 美國紐約市的Paige公司和美國馬薩諸塞州劍橋市的微軟研究院 |
模型類型 | 圖像特徵骨幹網絡 |
模型參數(M) | 632 |
圖像尺寸 | 224 x 224 |
模型架構 | ViT - H/14 |
補丁尺寸 | 14 |
層數 | 32 |
嵌入維度 | 1280 |
激活函數 | SwiGLU |
注意力頭數 | 16 |
LayerScale | 啟用 |
註冊標記數 | 4 |
訓練精度 | 混合精度(fp16 ) |
訓練目標 | 修改後的DINOv2(https://doi.org/10.48550/arXiv.2304.07193),其中KoLeo正則化器替換為核密度估計器,裁剪和調整大小增強替換為擴展上下文平移 |
論文 | Virchow2: Scaling Self - Supervised Mixed Magnification Models in Pathology https://arxiv.org/pdf/2408.00738 |
預訓練數據集 | 紀念斯隆凱特琳癌症中心的310萬張全切片圖像的內部數據集,切片採樣分辨率為每像素2.0、1.0、0.5和0.25微米(5倍、10倍、20倍和40倍放大) |
許可證 | CC - BY - NC - ND - 4.0 |
使用方式
直接使用
Virchow2旨在用作凍結特徵提取器,作為切片級和全切片級分類器的基礎。
下游使用
Virchow2可以進行微調,以適應特定任務和/或數據集。
引用
如果在你的研究中使用了該模型,請引用以下文獻: Zimmermann, E., Vorontsov, E., Viret, J. et al. Virchow2: Scaling Self - Supervised Mixed Magnification Models in Pathology. arXiv preprint arXiv:2408.00738 (2024).
@article{zimmermann2024virchow2,
title={Virchow2: Scaling Self-Supervised Mixed Magnification Models in Pathology},
author={Eric Zimmermann and Eugene Vorontsov and Julian Viret and Adam Casson and Michal Zelechowski and George Shaikovski and Neil Tenenholtz and James Hall and Thomas Fuchs and Nicolo Fusi and Siqi Liu and Kristen Severson},
journal={arXiv preprint arXiv:2408.00738},
year={2024},
}
免責聲明
Virchow2是為研究目的而開發的,不用於對真實患者進行診斷或預測未來疾病可能性。
由於元數據的限制,無法完成公平性評估。訓練數據集的潛在偏差可能未得到充分表徵,可能無法代表所有人群。
🔧 技術細節
- 訓練目標修改:在DINOv2的基礎上,將KoLeo正則化器替換為核密度估計器,裁剪和調整大小增強替換為擴展上下文平移。
- 混合精度訓練:使用
fp16
混合精度進行訓練,提高訓練效率。
📄 許可證
本模型及相關代碼遵循CC - BY - NC - ND 4.0許可證發佈,僅可用於非商業性的學術研究,並需進行適當的引用。禁止對Virchow2模型及其衍生產品(包括基於Virchow2模型輸出訓練的模型或由Virchow2模型創建的數據集)進行任何商業使用、銷售或其他貨幣化操作,如需使用,需事先獲得批准。請注意,用於註冊Hugging Face賬戶的主要電子郵件必須與你的機構電子郵件匹配才能獲得批准。下載Virchow2模型需要事先在Hugging Face上註冊並同意使用條款。下載該模型即表示你同意不傳播、發佈或複製Virchow2模型。如果組織內的其他用戶希望使用Virchow2模型,他們必須作為獨立用戶進行註冊,並同意遵守使用條款。如果你是商業實體,請聯繫論文的通訊作者。
此外,下載Virchow2模型即表示你同意僅將其用於學術研究目的,並且不會使用或允許他人使用該模型進行以下操作:
- 診斷、治療、緩解、治癒或預防疾病或任何其他病症,包括僅用於研究用途(“IUO”)、僅用於研究目的(“RUO”)、商業、臨床或其他類似用途,也不能作為專業醫療建議、醫療意見、診斷、治療或醫療專業人員臨床判斷的替代品,因為未授予任何此類用途的許可或權利。
- 重新識別用於開發Virchow2模型的已去標識化數據。
- 違反法律或他人權利,包括: a. 參與、促進、生成、促成、鼓勵、策劃、煽動或推動非法或違法活動或內容。 b. 參與、促進、煽動或便利對個人或群體的騷擾、虐待、威脅或欺凌。 c. 參與、促進、煽動或便利在就業、就業福利、信貸、住房、其他經濟利益或其他基本商品和服務的提供方面的歧視或其他非法或有害行為。 d. 從事未經授權或無執照的任何專業活動,包括但不限於金融、法律、醫療/健康或相關專業實踐。 e. 在未獲得適用法律要求的權利和同意的情況下,收集、處理、披露、生成或推斷個人身份或個人的健康、人口統計或其他敏感個人或私人信息。 f. 參與或便利任何侵犯、盜用或以其他方式侵犯任何第三方權利的行為或生成任何內容,包括使用Virchow2模型或任何相關材料的任何產品或服務的輸出或結果。 g. 創建、生成或便利創建惡意代碼、惡意軟件、計算機病毒或進行任何可能禁用、負擔過重、干擾或損害網站或計算機系統正常運行、完整性、操作或外觀的其他操作。
- 參與、促進、煽動、便利或協助策劃或開展對個人有死亡或身體傷害風險的活動,包括將Virchow2模型用作醫療設備、臨床支持、診斷工具或其他旨在用於診斷、治療、緩解、治癒或預防疾病或其他病症的技術,包括僅用於研究用途(“IUO”)、僅用於研究目的(“RUO”)、商業、臨床或類似用途。
- 故意欺騙或誤導他人,包括聲稱Virchow2模型的使用或其輸出是人工生成的。
此外,你同意將AI系統的任何已知危險適當地披露給最終用戶。









