DINOv2 with Registers 系列模型详解:Giant 版本规格、Register Token 机制与使用指南

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 库

    python 复制代码
    from 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)

    python 复制代码
    import 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_regvit_giant_patch14_reg4_dinov2.lvd142m,清晰表明其架构和特性。
  • 预训练数据 :所有DINOv2模型(包括带寄存器版本)均在包含 1.42 亿张图像的 LVD-142M 数据集上进行预训练。
  • 子系列说明 :你的问题中提到的 dinov2-with-registers 系列(包括Giant)是Facebook Research发布的官方核心模型系列 。此外,社区中还衍生出针对特定领域的变体,如医疗影像的 XRay-DINO 或显微图像的 Cell-DINO 等,它们是在核心系列的基础上进一步微调或改造的。
相关推荐
隐于花海,等待花开5 小时前
9. Python 文件与输入输出 深度解析
python
小江的记录本6 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
梦想不只是梦与想6 小时前
Python中 Pydantic数据验证库
python·pydantic
008爬虫实战录6 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
人道领域6 小时前
Java基础热门八股总结:八种基本数据类型 + 装箱拆箱 + 缓存机制,(90%的Java新手都搞不清的装箱拆箱问题)
java·开发语言·python
机汇五金_6 小时前
专业的电脑机箱厂商
python
smileNicky7 小时前
Spring框架懒加载怎么实现?
python·spring·rpc
熊猫_豆豆7 小时前
麦克斯韦方程组(电磁效应Python展示)
开发语言·python·电磁感应·麦克斯韦方程组
SilentSamsara7 小时前
属性查找顺序:实例 → 类 → 父类的完整 MRO
开发语言·python·算法·青少年编程