DINOv2 with registers(即"带寄存器的DINOv2")系列,是在原有DINOv2架构基础上引入"寄存器"标记(register token)改进而来的视觉Transformer(ViT)模型。这个系列的核心是包含四个不同尺寸 的模型,Giant(巨型)是这个系列中参数规模最大、性能最强的版本:
- Small (ViT-S/14) :约 2100万 参数。
- Base (ViT-B/14) :约 8600万 参数。
- Large (ViT-L/14) :约 3.01亿 参数。
- Giant (ViT-g/14) :约 11亿 参数。
这几个尺寸的模型都采用了相同的创新设计 :在预训练过程中额外添加了 4个可学习的"寄存器"标记,用于吸收和分担注意力图中的异常值,从而消除伪影,使注意力图更清晰可解释,并能提升在下游任务中的性能。
📈 Giant模型的详细规格:满配的性能之王
Giant (ViT-g/14) 版本的详细规格如下:
- 参数量 (Parameters) :约 11亿 (1,100M)。
- 模型深度 (Layers) :40层 Transformer 模块。
- 特征维度 (Embedding Dimension) :1536 维。
- 注意力头数 (Attention Heads) :24个。
- 补丁大小 (Patch Size) :将图像分割为 14x14 像素的补丁。
💡 Register Token 的作用
引入"寄存器"标记是为了解决视觉Transformer中一个有趣的问题:研究发现,模型有时会将图像中的某些背景区域错误地当作"寄存器"来使用,这导致了注意力图上的伪影,并可能降低性能。为了解决这个问题,研究者直接为模型加入了专用的寄存器标记,其优势在于:
- 无伪影:产生干净、无伪影的注意力图。
- 可解释性:注意力图变得更清晰,易于理解。
- 性能提升:通过避免模型误用图像块,寄存器标记带来了更稳定和更强的特征表示。
🛠️ 如何使用这些模型
你可以通过以下方式轻松调用这些模型:
-
方法一:使用 Hugging Face Transformers 库
pythonfrom transformers import AutoImageProcessor, AutoModel import torch from PIL import Image # 加载处理器和模型(将 'facebook/dinov2-with-registers-giant' 替换为相应模型ID) processor = AutoImageProcessor.from_pretrained('facebook/dinov2-with-registers-giant') model = AutoModel.from_pretrained('facebook/dinov2-with-registers-giant') # 处理图像 image = Image.open(...) inputs = processor(images=image, return_tensors="pt") with torch.no_grad(): outputs = model(**inputs) # 获取特征,shape: (batch_size, num_tokens, hidden_size) last_hidden_states = outputs.last_hidden_state -
方法二:使用 timm 库 (PyTorch Image Models)
pythonimport timm from PIL import Image # 加载预训练模型(模型ID: 'vit_giant_patch14_reg4_dinov2.lvd142m') model = timm.create_model('vit_giant_patch14_reg4_dinov2.lvd142m', pretrained=True) model = model.eval() # 获取模型配置并创建预处理 pipeline data_config = timm.data.resolve_model_data_config(model) transforms = timm.data.create_transform(**data_config, is_training=False) # 处理图像并进行推理 image = Image.open(...) output = model(transforms(image).unsqueeze(0))
🎯 性能评估
引入寄存器标记后,各尺寸模型的性能均有小幅提升,尤其是在作为特征提取器进行线性评估时。Giant (ViT-g/14) 模型的线性评估准确率为 87.1% ,比不使用寄存器时的 86.5% 提高了 0.6 个百分点。
💎 总结与补充
- 模型命名 :带寄存器的版本通常命名为
dinov2_vitg14_reg或vit_giant_patch14_reg4_dinov2.lvd142m,清晰表明其架构和特性。 - 预训练数据 :所有DINOv2模型(包括带寄存器版本)均在包含 1.42 亿张图像的 LVD-142M 数据集上进行预训练。
- 子系列说明 :你的问题中提到的
dinov2-with-registers系列(包括Giant)是Facebook Research发布的官方核心模型系列 。此外,社区中还衍生出针对特定领域的变体,如医疗影像的XRay-DINO或显微图像的Cell-DINO等,它们是在核心系列的基础上进一步微调或改造的。