DINOv2: Learning Robust Visual Features without Supervision(论文笔记)

DINOv2: Learning Robust Visual Features without Supervision(论文笔记)

作者 : Meta AI Research (FAIR) + Inria

发表于 : Transactions on Machine Learning Research (TMLR) , 2024/01

OpenReview : https://openreview.net/forum?id=a68SUt6zFt

核心贡献 : 证明纯视觉自监督学习 + 大规模高质量数据 → 可媲美甚至超越弱监督方法(CLIP/OpenCLIP)的通用冻结特征(frozen features)。

GitHub : https://github.com/facebookresearch/dinov2/tree/main


目录

  1. 模型功能与目标
  2. 模型架构设计
  3. 输入与输出
  4. 训练方法论
    • [4.1 数据处理管线](#4.1 数据处理管线)
    • [4.2 损失函数设计](#4.2 损失函数设计)
    • [4.3 工程优化与高效实现](#4.3 工程优化与高效实现)
    • [4.4 知识蒸馏](#4.4 知识蒸馏)
  5. 关键实验结论
  6. 总结

1. 模型功能与目标

核心目标

证明自监督学习(Self-Supervised Learning, SSL) 在经过大规模、高质量数据训练后,能够产生与弱监督模型(如 CLIP / OpenCLIP)相媲美甚至超越的通用视觉特征(Foundation Features)

三大特点

特点 说明
通用性(Foundation Model) 模型权重在预训练完成后冻结(Frozen) ,可直接提取特征用于多种下游任务,无需微调
双重能力 图像级(Image-Level) :图像分类、细粒度分类、实例检索等;像素级(Pixel-Level):语义分割、单目深度估计等。这是 DINOv2 区别于许多仅关注图像级特征模型的关键优势。
鲁棒性(Robustness) 在分布外(Out-of-Distribution, OOD)数据集(如 ImageNet-A/R/Sketch)上表现出极强的泛化能力。

2. 模型架构设计

DINOv2 基于 Vision Transformer (ViT) ,采用教师-学生(Teacher-Student)的自蒸馏框架。

2.1 模型规模

模型 参数量 Embedding 维度 注意力头数 层数 FFN 类型 训练方式
ViT-S/14 21M 384 6 12 MLP 蒸馏
ViT-B/14 86M 768 12 18 MLP 蒸馏
ViT-L/14 (蒸馏版) 304M 1024 16 24 MLP 蒸馏
ViT-L/14 (从头训练版) 304M 1024 16 24 SwiGLU 从头训练
ViT-g/14 1.1B 1536 24 40 SwiGLU 从头训练

注意

  • ViT-L 存在两个版本:蒸馏版(使用 MLP FFN)和从头训练版(使用 SwiGLU FFN)。
  • 从零训练的大模型使用 SwiGLU 激活函数(Shazeer, 2020)替代标准 MLP,以提升训练稳定性和性能。
  • 蒸馏得到的小模型使用标准 MLP FFN。

2.2 双塔结构(Teacher-Student)

复制代码
输入图像
   │
   ├─→ Student Network(梯度更新)     →  推理时使用的模型
   │     ├── DINO Head(图像级 [CLS] token)
   │     └── iBOT Head(块级 Patch tokens)
   │
   └─→ Teacher Network(EMA 动量更新)  →  提供训练目标
         ├── DINO Head
         └── iBOT Head
  • Student(学生网络):最终保存并部署的模型。包含两个并行的预测头(Heads)。
  • Teacher(教师网络) :结构与 Student 完全相同,但不通过梯度下降更新 ,而是通过 EMA(指数移动平均) 从 Student 复制,动量系数 λ ∈ 0.994 , 1.0 \lambda \in 0.994, 1.0 λ∈0.994,1.0,按余弦调度变化。

2.3 关键架构改进

改进 说明
解耦(Untying Heads) DINO Head 和 iBOT Head 不共享参数 。原 iBOT 论文发现共享更好,但 DINOv2 发现在大规模训练下分开更好(+0.3% k-NN)。
SwiGLU FFN 从零训练的大模型(ViT-L/14 scratch、ViT-g/14)使用 SwiGLU 激活函数替代标准 MLP。
Stochastic Depth 使用 40% 的高丢弃率(drop rate),配合高效实现随机跳过被丢弃的残差计算,大幅节省算力和显存。
LayerScale 初始值设为 10 − 5 10^{-5} 10−5,提升大规模训练的稳定性。

3. 输入与输出

3.1 输入

项目 说明
原始输入 RGB 图像
预训练分辨率 224 × 224 224 \times 224 224×224(主体阶段)
高分辨率适配 训练末期切换至 518 × 518 518 \times 518 518×518(约 10k iterations),大幅提升像素级任务表现而仅需极少额外算力
数据增强 多裁剪策略(Multi-crop):2 个全局视图(Global Crops)+ 多个局部视图(Local Crops);同时结合**随机掩码(Random Masking)**用于 iBOT 任务

论文在消融实验(Sec 6.6)中也测试了 416 × 416 416 \times 416 416×416 分辨率,证明"短时间高分辨率微调"能以极低成本逼近全时长高分辨率训练的效果。

3.2 输出

模型输出的是高维特征向量,具体取决于使用的 token:

输出类型 描述 对应 Token 典型用途
CLS Token 全局语义特征向量 z cls \mathbf{z}_{\text{cls}} zcls 图像分类、图像检索(Image-Level)
Patch Tokens 局部细节特征向量 { z 1 , . . . , z N } \{\mathbf{z}_1, ..., \mathbf{z}_N\} {z1,...,zN} 语义分割、深度估计、目标检测(Pixel-Level)

4. 训练方法论

4.1 数据处理管线

这是 DINOv2 成功的关键基础------"数据是燃料"。

论文提出了一套全自动、不依赖文本元数据 的数据处理管线,构建了高质量的 LVD-142M 数据集1.42 亿张图片)。

复制代码
未筛选数据源(1.2B 图片)
   │
   ├── ① 下载与初筛(URL 提取、安全过滤、PCA 哈希去重、NSFW 过滤、人脸模糊)
   │
   ├── ② 自去重(Self-deduplication):基于 SSCD 描述的 copy detection pipeline
   │     └── 相似度阈值 > 0.6,保留连通分量中一个代表 → 1.1B
   │
   ├── ③ 相对去重(Relative deduplication):去除与评估集测试/验证集相似的图片
   │     └── 相似度阈值 > 0.45 → 744M
   │
   ├── ④ 自监督检索(Self-supervised Retrieval):
   │     ├── 使用预训练的 ViT-H/16(ImageNet-22k 自监督)计算 embedding
   │     ├── 对未筛选数据做 k-means 聚类(100,000 簇)
   │     ├── 与精选数据集(ImageNet-22k, Google Landmarks, ADE20K 等 ~27 个)匹配
   │     │     ├── 大数据集(>1M):每个 query image 取 k=4 个近邻
   │     │     └── 小数据集:从对应簇中采样 M 张图片
   │     └── 结果 → LVD-142M(142,109,386 张图片)
   │
   └── 技术栈:Faiss(GPU 加速索引)+ 20 节点 × 8 V100-32GB,不到 2 天完成

关键设计原则:

  • 完全基于视觉相似性,不依赖任何文本标签或元数据
  • 精选数据集覆盖分类、分割、深度估计、检索等多种视觉任务
  • 检索增强保证了数据的多样性高质量

4.2 损失函数设计

训练目标是让 Student 去预测 Teacher 的输出,共包含三个损失项:

4.2.1 DINO Loss(图像级自蒸馏)

L DINO = − ∑ p t cls log ⁡ p s cls \mathcal{L}_{\text{DINO}} = -\sum \mathbf{p}_t^{\text{cls}} \log \mathbf{p}_s^{\text{cls}} LDINO=−∑ptclslogpscls

  • Student 的 CLS token 经过 DINO Head 后,预测 Teacher 的 CLS token。
  • Teacher 端 使用 Sinkhorn-Knopp(SK)Centering(来自 SwAV,运行 3 步迭代),替代原始 DINO 中的 Softmax Centering,强制特征在批次内均匀分布。
  • Student 端仍然使用 Softmax 归一化。
4.2.2 iBOT Loss(块级/掩码建模)

L iBOT = − ∑ i ∈ masked p t , i patch log ⁡ p s , i patch \mathcal{L}{\text{iBOT}} = -\sum{i \in \text{masked}} \mathbf{p}{t,i}^{\text{patch}} \log \mathbf{p}{s,i}^{\text{patch}} LiBOT=−i∈masked∑pt,ipatchlogps,ipatch

  • 随机遮挡部分图像块(Patch),Student 需要预测被遮挡部分对应的 Teacher 特征。
  • 迫使模型学习细粒度的局部语义信息 ,对像素级任务(分割、深度估计)至关重要(消融实验:去除 MIM → ADE-20K 分割下降 ~3% mIoU)。
4.2.3 KoLeo Regularizer(特征均匀化正则)

L KoLeo = − 1 n ∑ i = 1 n log ⁡ ( d n , i ) \mathcal{L}{\text{KoLeo}} = -\frac{1}{n} \sum{i=1}^{n} \log(d_{n,i}) LKoLeo=−n1i=1∑nlog(dn,i)

其中 d n , i = min ⁡ j ≠ i ∥ x i − x j ∥ d_{n,i} = \min_{j \neq i} \| \mathbf{x}_i - \mathbf{x}_j \| dn,i=minj=i∥xi−xj∥ 是特征向量 x i \mathbf{x}_i xi 与批次内其他向量的最小距离。

  • 基于 Kozachenko-Leonenko 微分熵估计器,鼓励特征在输出空间内均匀扩散
  • 对最近邻检索(k-NN)性能提升显著(+8% mAP on Oxford-M),不影响其他指标。
总损失

L total = L DINO + L iBOT + L KoLeo \mathcal{L}{\text{total}} = \mathcal{L}{\text{DINO}} + \mathcal{L}{\text{iBOT}} + \mathcal{L}{\text{KoLeo}} Ltotal=LDINO+LiBOT+LKoLeo

4.3 工程优化与高效实现

为了训练 1B 参数的 ViT-g,论文在底层做了大量工程优化,相对 iBOT 实现速度约 2×,显存约 1/3

优化项 说明
自定义 FlashAttention 自实现的注意力机制,性能与原版持平或更优,覆盖更多场景。嵌入维度为 64 的倍数时效率最优,256 的倍数时矩阵运算更优。
序列打包(Sequence Packing) 将不同图像的 patch 序列拼接为一个长序列送入 Transformer,通过块对角注意力掩码防止跨图像信息泄露。计算上等效于分别前向,但大幅提高 GPU 利用率。
高效 Stochastic Depth 随机丢弃残差块时直接跳过计算(而非计算后 mask),节省约 d%(即 40%)的计算和显存。实现方式:随机打乱批次样本,只取前 (1-d) 比例进行计算。
FSDP(Fully-Sharded Data Parallel) 使用 PyTorch FSDP 将模型分片存储在多 GPU 上,突破单卡显存限制。梯度通信使用 FP16(骨干网络)/ FP32(MLP Head 防止不稳定),相比 DDP 的 FP32 全局 reduce 节省 ~50% 通信成本
模型蒸馏(详见 4.4) 小模型不从头训练,而是从已训练好的大模型蒸馏获得。

4.4 知识蒸馏

对于小模型(ViT-S/B 以及 ViT-L 蒸馏版),不从头训练,而是用已冻结的 ViT-g/14 教师模型进行蒸馏:

  • 教师模型权重冻结,仅学生模型更新。
  • 蒸馏目标与预训练目标相同(DINO + iBOT + KoLeo)。
  • 结果:蒸馏版 ViT-L 在几乎所有指标上超越 从头训练的 ViT-L,甚至在部分指标上超越教师 ViT-g(知识蒸馏的正则化效应)。
  • 超参数:小模型 dropout rate = 0,学习率 1e-3,batch size 2048。

5. 关键实验结论

5.1 模型规模与数据规模的关系

  • 模型越大,LVD-142M(142M 图片)相比 ImageNet-22k(14M 图片)的优势越明显。
  • ViT-g 在 LVD-142M 上训练,在 ImageNet-1k 上与 ImageNet-22k 训练的持平,但在其他所有领域指标上显著领先

5.2 各损失项的消融

消融项 ImageNet-1k ImageNet-A ADE-20k Oxford-M
去掉 KoLeo 85.3 70.6 47.2 55.6
保留 KoLeo 85.8 72.8 47.1 63.9 (+8.3)
去掉 iBOT (MIM) 85.3 72.0 44.2 64.3
保留 iBOT 85.8 72.8 47.1 (+2.9) 63.9

KoLeo 对检索任务至关重要,iBOT (MIM) 对像素级任务至关重要。

5.3 与 SOTA 对比(冻结特征 + 线性探针)

  • ImageNet-1k : ViT-g/14 达 86.5%,超过 iBOT (+4.2%),与 OpenCLIP-G/14 (86.2%) 持平。
  • 细粒度分类 : iNaturalist 上比 OpenCLIP-G 最高领先 +9.7%
  • 语义分割 (ADE-20k): 线性探针 49.0 mIoU ,多尺度测试 53.0 mIoU,接近全微调 MAE(53.6)。
  • 深度估计 (NYUd): RMSE 0.279(DPT head),显著超越 OpenCLIP-G(0.414)和 iBOT(0.358)。
  • 实例检索 (Oxford-Hard): +41% mAP vs 最佳 SSL,+34% mAP vs OpenCLIP-G(弱监督)。

5.4 域外泛化与鲁棒性

模型 ImageNet-A ImageNet-R ImageNet-Sketch
iBOT ViT-L/16 41.5 51.0 38.5
OpenCLIP ViT-G/14 63.8 87.8 66.4
DINOv2 ViT-g/14 75.9 78.8 62.5

在 ImageNet-A 上大幅超越所有方法,在 R/Sketch 上略低于 OpenCLIP。

5.5 定性分析

  • PCA 可视化:第一 PCA 分量能自动分离前景/背景(无需任何监督),其余分量自动捕获物体部件(如鸟翼、飞机翼)的对应关系。
  • 块匹配:patch 特征能在不同姿势、风格(照片 vs 绘画)、甚至不同物体类别之间建立语义对应(如飞机的机翼 ↔ 鸟的翅膀)。

6. 总结

维度 DINOv2 的贡献
问题 自监督视觉特征在大规模数据上泛化能力不足
数据方案 LVD-142M:全自动视觉检索管线,1.42 亿高质量精选图片,不依赖文本元数据
训练方法 DINO + iBOT + KoLeo 联合损失,SK Centering,解耦 Heads
工程方案 FlashAttention + 序列打包 + 高效 Stochastic Depth + FSDP,速度 2×、显存 1/3
模型发布 多尺度 ViT 模型(ViT-S/B/L/g),大模型蒸馏小模型
核心发现 纯视觉自监督学习 → 冻结特征直接使用 → 在大多数视觉任务上媲美或超越弱监督方法
局限性 地理公平性仍有偏差(非洲地区性能下降 25.7%),且弱于部分文本监督模型在特定数据集(SUN、Cars)上的表现

DINOv2 证明了纯视觉的自监督学习 是构建视觉基础模型的可行且高效路径,无需依赖文本监督。它提供了一套从数据清洗、模型架构设计到高效分布式训练的完整解决方案。


整理日期:2026-06-13

原始论文:DINOv2: Learning Robust Visual Features without Supervision (TMLR 2024)