DINOV2 骨干网络详解

一、基本概况

DINOV2(Distillation with No Labels version 2)是 Meta AI 开发的自监督视觉基础模型,基于Vision Transformer (ViT) 架构,在 1.42 亿张无标注图像上训练,能生成无需微调即可直接用于下游任务的通用视觉特征

二、核心架构

1. 基础结构

  • 输入处理:将图像分割为 14×14 像素的非重叠块 (patch),通过线性投影嵌入
  • 主体:多层 Transformer 编码器,包含多头自注意力和前馈网络
  • 输出:返回类别 token(全局图像表示)和patch tokens(局部特征),可选4 个寄存器 tokens

2. 模型规模

提供四种大小的预训练模型:
模型 参数规模 嵌入维度 头数 层数 特点
ViT-S/14 21M 384 6 - MLP 前馈网络
ViT-B/14 86M 768 12 - MLP 前馈网络
ViT-L/14 300M 1024 16 24 MLP 前馈网络
ViT-g/14 1.1B 1536 24 40 SwiGLU 前馈网络
注:所有模型 patch size 均为 14,适用于 224×224 及更大尺寸图像(需为 14 的倍数)

三、关键技术创新

1. 寄存器机制 (Registers) - 革命性突破

  • 问题:传统 ViT 会将某些图像块用作 "临时存储器",导致注意力图出现伪影
  • 解决方案:在输入序列中添加4 个专门的可学习寄存器 token(不对应任何图像区域)
  • 作用:作为 "计算中转站",让模型将全局信息存储在专用 tokens 而非图像块中
  • 效果:消除注意力伪影,提升特征质量,增强模型对局部和全局信息的捕捉能力

2. 训练策略创新

(1) 教师 - 学生框架
  • 两个网络:学生网络(参数可学习)和教师网络(学生 EMA 更新,参数缓慢变化)
  • 训练目标:学生网络学习匹配教师网络的输出分布
(2) 双重损失函数
  • DINO 损失:图像级对比,匹配教师和学生的 [CLS] token
  • iBOT 损失:patch 级重建,预测被 mask 的图像块(增强局部理解)
(3) 其他优化
  • Untied 投影头:图像级和 patch 级损失使用独立 MLP 头,提高表示多样性
  • Sinkhorn-Knopp 归一化:稳定训练,增强 batch 多样性
  • KoLeo 熵正则化:鼓励特征空间分布更分散
  • 高效注意力:实现 FlashAttention 和序列打包,减少内存占用,加速训练

3. 数据策略

  • LVD-142M 数据集:精心筛选的 1.42 亿图像,通过去重、聚类确保多样性
  • 自动筛选:使用自监督特征进行相似性检索和 K-means 聚类,避免类别不平衡
  • 去偏处理:减少对西方高收入家庭图像的偏差

四、性能表现

1. 图像分类(ImageNet-1k)

  • ViT-g/14(带寄存器):87.1% top-1 准确率(线性评估,无需微调)
  • 超越 OpenCLIP 等模型,接近弱监督 SOTA

2. 下游任务表现(无需微调)

任务 表现 备注
深度估计 (NYUv2) RMSE=0.298 仅需线性层
语义分割 (ADE20K) mIoU=53.0% 接近全监督模型
实例检索 (Oxford-H) mAP=58.2% 大幅领先其他自监督模型
细粒度分类 与 OpenCLIP 相当或超越 Cars、Aircraft 等数据集
注:使用更大模型 (ViT-g) 和寄存器机制效果更佳

五、核心优势

1. 零样本迁移能力

  • 特征可直接用于线性分类器k-NN 检索语义分割等任务,无需微调
  • 节省 90% 以上训练时间,降低部署门槛

2. 特征质量卓越

  • 同时捕获全局语义局部细节,适用于图像和像素级任务
  • 视角变化光照差异遮挡等具有强鲁棒性

3. 模型灵活可扩展

  • 提供多种规模,从小巧的 ViT-S (21M) 到大型的 ViT-g (1.1B)
  • 支持模型蒸馏:小模型可从大模型获取知识,提升性能且减少计算

六、应用场景

1. 计算机视觉基础任务

  • 图像分类:直接使用线性层进行高精度分类
  • 目标检测:结合轻量级检测器,如 YOLO、Mask R-CNN
  • 实例分割:与 Mask2Former 等模型结合,实现像素级精度

2. 行业应用

  • 医疗影像:疾病诊断、器官分割(如 ProtoSAM 框架)
  • 自动驾驶:道路检测、障碍物识别、场景理解
  • 遥感:卫星图像分析、环境监测
  • 工业检测:光伏板故障识别(准确率 98.7%,效率提升 5 倍)

七、使用方式

python
运行
# 使用PyTorch加载预训练模型
import torch

# 加载基础模型
model = torch.hub.load(‘facebookresearch/dinov2’, ‘dinov2_vitb14’)

# 加载带寄存器的模型
model_with_registers = torch.hub.load(‘facebookresearch/dinov2’, ‘dinov2_vitb14_reg’)

# 提取特征
image = torch.randn(1, 3, 224, 224) # 输入图像
with torch.no_grad():
outputs = model(image)
cls_token = outputs[‘cls_token’] # 全局特征 (1, 768)
patch_tokens = outputs[‘patch_tokens’] # 局部特征 (1, 256, 768)

注:模型支持任意大小图像,会自动裁剪至 14 的倍数

八、总结

DINOV2通过自监督学习 + ViT 架构 + 寄存器机制的组合,构建了一个 **"即插即用" 的通用视觉骨干 **,无需标注数据和微调就能在各种视觉任务中表现出色。其技术创新不仅推动了计算机视觉基础研究,也为 AI 应用落地提供了强大工具。
信息来源:Meta AI 论文 "DINOv2: Learning Robust Visual Features without Supervision"(2023) 及官方实现
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐