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系统的任何已知危险适当地披露给最终用户。









