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

目录
- 模型功能与目标
- 模型架构设计
- 输入与输出
- 训练方法论
- [4.1 数据处理管线](#4.1 数据处理管线)
- [4.2 损失函数设计](#4.2 损失函数设计)
- [4.3 工程优化与高效实现](#4.3 工程优化与高效实现)
- [4.4 知识蒸馏](#4.4 知识蒸馏)
- 关键实验结论
- 总结
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)