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 等,它们是在核心系列的基础上进一步微调或改造的。
相关推荐
你好潘先生10 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师11 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码11 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf11 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent1 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6251 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python
SelectDB2 天前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码2 天前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python