本文基于 DINOv2 论文全文(arXiv:2304.07193)、官方 GitHub 仓库源码与配置文件、模型卡,以及谱系中各前驱论文的一手材料交叉核验写成。文中所有关键数字均标注来源;少数未能核验的实现细节会显式说明。公式以代码风格书写,保证在任意阅读环境下可读。
一、DINOv2 是什么,为什么重要
一句话定位:DINOv2 = 把”DINO 自蒸馏 + iBOT 掩码建模”这套自监督配方,用自动化的数据工程(LVD-142M 数据集)和大规模训练工程(FSDP + FlashAttention + 模型蒸馏),推到 1.1B 参数规模后得到的、无需微调即可通吃分类、分割、深度与检索的通用视觉特征模型12。
它回答的是 2023 年视觉领域的一场路线之争:不用文本监督(CLIP 路线)、不用人工标签(监督路线),纯视觉自监督能不能产出通用基础特征? 论文的答案是能——冻结特征在绝大多数图像级和像素级基准上超过了当时最好的通用特征 OpenCLIP1。
这个结论冲击了两个流行假设。其一,”CLIP 式图文对比是通往视觉基础模型的唯一道路”:DINOv2 证明 caption 只是对图像内容的粗糙近似,复杂的像素级信息在语言监督下反而难以涌现。其二,”自监督方法只在小数据集上有效”:此前 SSL 进展基本在 ImageNet-1k 上评测,直接换大规模未精选数据会显著掉点;DINOv2 用自动数据管线解决了这个问题,把 SSL 第一次推上与弱监督同台的位置3。
先把视觉自监督的三大流派放在一张表里,后面所有内容都在这张表的坐标系里展开:
| 流派 | 代表方法 | 核心机制 | 防坍塌手段 |
|---|---|---|---|
| 对比学习 | SimCLR、MoCo | 拉近正样本对、推开负样本对 | 负样本本身构成约束 |
| 自蒸馏 / 免对比 | BYOL、SimSiam、DINO | 学生模仿 EMA 教师的输出 | stop-gradient、predictor、centering+sharpening |
| 掩码图像建模(MIM) | BEiT、MAE、iBOT | 重建被遮住的 patch | 重建目标本身有信息量 |
| (参照)语言监督 | CLIP、OpenCLIP | 图文对比对齐 | 对比损失 |
DINOv2 是②③的融合,外加一个来自检索文献的正则项。要理解它为什么长成这样,必须从地基讲起。
二、地基:Transformer 与 Vision Transformer
2.1 自注意力
Transformer 的核心运算4:
Attention(Q, K, V) = softmax(Q·Kᵀ / √d_k) · V
除以 √d_k 的原因:当 q、k 各分量独立同分布时,点积的方差随维度 d_k 增长,过大的点积会把 softmax 推入饱和区导致梯度消失。多头机制将 d_model 维切给 h 组独立低维投影并行计算再拼接,总计算量与单头全维近似。自注意力对序列长度的复杂度是 O(N²·d),且标准实现要在显存中物化 N×N 的注意力矩阵——这是 ViT 处理高分辨率的根本瓶颈,也是 DINOv2 在工程上大量投入的动因。
2.2 Vision Transformer
ViT5 把图像切成 P×P 的不重叠 patch,每个 patch 展平后经一个可学习线性投影变成 token(实现上就是 stride=P 的卷积),再拼上一个类似 BERT 的可学习 CLS token,加上可学习的一维位置编码:
z₀ = [x_cls; x_p¹E; x_p²E; ...; x_pᴺE] + E_pos
三个对理解 DINOv2 至关重要的细节:
- Pre-norm 结构。每个子层先 LayerNorm 再计算,残差连接在外:
x ← x + Attn(LN(x)),x ← x + MLP(LN(x))。梯度可以经残差路径直达深层,ViT-g 的 40 层深度因此可行(原始 Transformer 是 post-norm)。 - 位置编码插值。换输入分辨率时把 patch 位置编码重排成二维网格做双三次插值。DINOv2 官方实现里
interpolate_pos_encoding的interpolate_offset=0.1是修正插值浮点误差的历史性小技巧。 - Patch 14。224² 输入下 P=16 得 196 个 patch token,而 DINOv2 全系用 P=14,得 16×16=256 个。这也带来一个使用约束:输入尺寸必须是 14 的倍数。
模型规格与 DINOv2 中的角色:
| 变体 | 层数 | 维度 | 头数 | 参数量 | DINOv2 中的角色 |
|---|---|---|---|---|---|
| ViT-S/14 | 12 | 384 | 6 | 21M | 蒸馏产物 |
| ViT-B/14 | 12 | 768 | 12 | 86M | 蒸馏产物 |
| ViT-L/14 | 24 | 1024 | 16 | 300M | 蒸馏产物(也训过从零对照组) |
| ViT-g/14 | 40 | 1536 | 24 | 1.1B | 唯一从零训练的模型 |
ViT-g 取 1536 维、24 头(每头 64 维)而非文献常用的 1408 维、16 头,纯粹是算力适配:FlashAttention 在”每头维度是 64 的倍数、总维度是 256 的倍数”时最快,实测无精度损失1。
2.3 EMA 动量教师
θ_teacher ← m · θ_teacher + (1 − m) · θ_student
教师不接收梯度(requires_grad=False),仅作为伪标签来源;动量 m 按余弦调度逐渐升到 1.0。训练后期 m→1,教师退化为一个慢速累积的集成平均——这是 DINO 系”教师全程优于学生、最终发布教师”的原因。DINOv2 代码用 torch._foreach_mul_/_foreach_add_ 融合算子一次内核更新全部参数。
三、前传:DINOv2 之前的方法谱系
3.1 SimCLR 与 MoCo:对比学习确立范式
SimCLR6 用 NT-Xent 损失把同一图像的两个增强视图互为正样本、batch 内其余样本全部当作负样本,确立了”强增强组合 + projection head + 大 batch”的范式。两个关键经验:颜色扰动必不可少,否则网络走颜色直方图的捷径;projection head 显著提升迁移性能。
MoCo7 把对比学习表述为”查字典”问题,贡献了两个构件:动量编码器(θ_k ← m·θ_k + (1−m)·θ_q,m=0.999)保证 key 表征的一致性;队列(K=65536)让负字典大小与 batch 解耦。EMA 教师这一构件的出处就在这里。
3.2 BYOL 与 SimSiam:没有负样本行不行
BYOL8 让 online 网络(encoder + projector + predictor)直接回归 target 网络(EMA + stop-gradient)的输出,完全不用负样本,性能反超同期对比方法。SimSiam 进一步证明最小充分组件是 predictor + stop-gradient——去掉任一个训练立即坍塌到常数解。这为自蒸馏家族提供了参照系:免对比学习的坍塌规避本质上是优化动力学的非对称性问题,而不是负样本提供的排斥力。
3.3 SwAV:在线聚类、multi-crop 与 Sinkhorn-Knopp
SwAV9 不做图像-图像对比,而是让特征与 K 个可学习原型比较,执行”交换预测”:用 A 视图的聚类分配去预测 B 视图的输出。它贡献了三个被 DINOv2 直接继承的组件:
- multi-crop 增强:2 个大图 + 若干小图,小图只作为学生输入、不产生监督目标;
- 原型投影头:MLP + ℓ2 归一化瓶颈 + weight-normalized 线性原型层;
- Sinkhorn-Knopp 均衡分配:在”每个原型平均分得 B/K 个样本”的运输多面体约束下求熵正则最优传输,通过交替行列归一化的迭代(3 次即够)得到均衡软分配——从数学上禁止所有样本挤进同一个簇。
3.4 BEiT 与 MAE:掩码图像建模
BEiT10 把 BERT 范式搬进视觉:先用 dVAE(DALL-E 的分词器,8192 词表)把图片离散化,再 blockwise 遮住约 40% 的 patch、预测其离散 token。它确立了”blockwise masking + 可学习 mask token + 离散目标”的范式,但离线分词器只含低层语义——iBOT 论文实测其冻结特征做线性分割只有 27.4 mIoU11。
MAE12 用非对称 encoder-decoder 把 MIM 推向极致:encoder 只计算 25% 可见 patch,轻量 decoder 重建被遮 patch 的归一化像素,75% 的超高遮蔽率反而可行(图像空间冗余大、信息密度低)。但纯重建的线性探测偏弱(ViT-L 75.8% vs iBOT 82.3%)——”重建给密集特征、自蒸馏给语义特征”的分工在此显现。
3.5 DINO:无标签自蒸馏与涌现性质
DINO13(2021)是这条线的灵魂。框架:student 与 teacher 同构,teacher 是 student 的 EMA(0.996→1 余弦调度),损失是跨视图软交叉熵:
H(P_t, P_s) = −P_t · log P_s
防坍塌 = centering + sharpening,缺一不可:
P_t = softmax((g_t(x) − c) / τ_t), c ← m·c + (1−m)·mean_batch(g_t)
论文用熵分解 H(P_t,P_s) = h(P_t) + KL(P_t‖P_s) 论证:只有 centering 时模型坍塌到均匀分布(熵最大、KL 趋零),只有 sharpening 时坍塌到 one-hot;两者作用方向相反,恰好互相抵消,同时压制 KL 项。附录还证明了在有 EMA 动量的前提下,centering、Softmax(batch) 与 SwAV 的 Sinkhorn-Knopp 三者等效——而去掉动量后只有 SK 这类强约束不坍塌。这一结论是 DINOv2 后来把 centering 换成 SK 的伏笔。
DINO 的标志性发现是涌现性质:最后一层 CLS 对 patch 的注意力图无需任何监督就能分割前景物体(ViT-S/16 上 Jaccard 45.9,监督训练只有 27.3);k-NN 分类器性能接近线性探测,说明特征本身已线性可分;自监督下 ViT 对 CNN 的优势被显著放大。
3.6 iBOT:在线分词器的掩码建模
iBOT11(2021)把 BEiT 的离线 dVAE 分词器换成 teacher 网络本身——teacher 对被遮 patch 的 softmax 输出直接作为软监督目标,两阶段变一阶段,且分词器的语义由 DINO 损失供给、与主目标共同优化。两项损失:
L_CLS = −P_t^CLS(v)ᵀ log P_s^CLS(û) (DINO 式,跨视图)
L_MIM = −Σᵢ mᵢ · P_t^patch(uᵢ)ᵀ log P_s^patch(ûᵢ) (同视图、异 masking)
三个对 DINOv2 直接相关的经验:软目标至关重要(softmax+centering 74.2% 线性精度,BEiT 式 one-hot 只有 69.0%);masking 只施加于 224² 的 global crops(小图一遮就不稳定);随机化遮蔽比例(一半概率不遮、一半概率从 [0.1, 0.5] 采样)比固定比例更稳更好。另外,单独的 MIM 会坍塌(k-NN 只有 9.5%)——语义必须由 CLS 自蒸馏损失供给。
3.7 KoLeo:让特征均匀铺满超球面
KoLeo14 来自检索文献《Spreading vectors for similarity search》:
L_koleo = −(1/n) · Σᵢ log( min_{j≠i} ‖xᵢ − xⱼ‖ )
数学基础是 Kozachenko–Leonenko 微分熵估计器:最小化该损失等价于最大化特征分布的微分熵,而在单位球面上(先做 ℓ2 归一化)熵最大的分布是均匀分布。它的梯度像”斥力随距离衰减的弹簧”:只推开扎堆的向量、不破坏远处的邻域结构——这解释了它为何不伤分类却能大幅提升检索。
3.8 谱系继承总表
| 前驱 | DINOv2 继承的组件 | 在 DINOv2 中的形态 |
|---|---|---|
| MoCo | EMA 动量编码器 | teacher = student 的 EMA(0.994→1.0) |
| BYOL / SimSiam | 免负样本自蒸馏 + stop-gradient | teacher 无梯度,用均衡约束替代 predictor 防坍塌 |
| SwAV | multi-crop、原型头、Sinkhorn-Knopp | teacher 侧 centering 换成 3 次 SK 迭代;原型扩到 131072 个 |
| DINO | CLS 跨视图自蒸馏损失、温度与动量调度 | 三大损失之一 |
| BEiT | MIM 范式、blockwise masking、mask token | 遮蔽只加于 student 的 global crops |
| iBOT | patch 级 MIM 自蒸馏 + 在线分词器(直接母体) | 三大损失之二,但两个头解耦 |
| MAE | 高遮蔽率可行、随机遮蔽、效率意识 | 随机比例 [0.1, 0.5],一半概率不遮 |
| Sablayrolles et al. | KoLeo 熵正则 | 权重 0.1,作用于 global crops 的 CLS |
四、DINOv2 本体
4.1 核心主张
论文对 CLIP 路线的批评:caption 只是图像内容的粗糙近似,复杂的像素级信息在语言监督下难以涌现,而且适配新任务需要 prompt engineering。对既有自监督方法的批评:进展都在 ImageNet-1k 上评测,直接扩大到未精选网络数据会显著掉点。因此论文把问题重构为两件事——自动数据管线与训练稳定性效率。原话说得很直白:大部分贡献是”加速和稳定大规模训练”(比 iBOT 原实现快约 2 倍、显存约 1/3)1。
4.2 LVD-142M:自动化数据管线
这是 DINOv2 与前作拉开身位的核心——自监督学习第一次拥有了为它量身定制的大规模精选数据:
- 未精选池:公开网络爬取数据取
<img>标签 URL,丢弃不安全域名,经 PCA 哈希去重、NSFW 过滤、人脸模糊,得到 12 亿张唯一图像; - 精选种子:ImageNet-22k、ImageNet-1k 训练集、Google Landmarks 与若干细粒度数据集;
- 嵌入与检索:用一个在 ImageNet-22k 上预训练的自监督 ViT-H/16 提特征,余弦相似度;Faiss 的 GPU 倒排文件索引加乘积量化压缩,20 节点 × 8 块 V100 共 160 卡,不到两天建成;
- 选择策略:对未精选池做 k-means 聚类;大种子集为每张种子图取 4 个最近邻,小种子集从对应簇采样;用聚类欠采样实现跨数据集再平衡;
- 去重:SSCD 复制检测管线删除近重复,并删除与所有评测基准的测试/验证集近重复的图片以防泄漏。
数据消融(论文 Table 2,ViT-L 同配方训练、冻结特征评测)最能说明问题:
| 训练数据 | IN-1k 线性 | Im-A | ADE20k mIoU | Oxford-M mAP |
|---|---|---|---|---|
| ImageNet-22k | 85.9 | 73.5 | 46.6 | 62.5 |
| 随机未精选 142M | 83.3 | 59.4 | 48.5 | 54.3 |
| LVD-142M | 85.8 | 73.9 | 47.7 | 64.6 |
同样 142M 规模,随机数据在域外基准(Im-A)上崩塌到 59.4;LVD-142M 在 ImageNet-1k 上追平 ImageNet-22k、其余基准全面胜出,且模型越大优势越大。精选与平衡对自监督同样关键——这是论文最重要的实证结论之一。注意 LVD-142M 数据集本身并未公开发布,官方复现配置用 ImageNet-22k 替代。
4.3 方法:三项损失与防坍塌
每个样本产生 2 个 global crops(224²,面积比例 0.32–1.0)加 8 个 local crops(98²,0.05–0.32);global crops 被随机遮蔽(一半概率不遮,否则比例在 [0.1, 0.5] 内均匀采样)。总损失:
L = 1.0 · L_DINO + 1.0 · L_iBOT + 0.1 · L_KoLeo
DINO 损失(图像级):teacher 只看干净的 2 个 global crops,CLS 特征经 DINO 头(3 层 MLP,ℓ2 归一化的 384 维瓶颈,weight-norm 线性层投影到 131072 个原型);teacher 输出经 Sinkhorn-Knopp 三次迭代归一化为均衡软分配,替代原版 DINO 的 centering+sharpening(大规模下更稳);student 对全部 10 个 crop 的输出与之做交叉熵。
iBOT 损失(patch 级):只在被遮的 patch 上,student(看遮蔽视图)与 teacher(看干净视图)的 patch 原型分布做交叉熵;teacher 侧同样跑 SK;每张图按遮蔽数的倒数加权。iBOT 使用独立于 DINO 的单独头。
KoLeo:对 student 两个 global crop 的 CLS 特征分别计算最近邻距离的负对数(代码里 chunk(2) 分开算,避免同一图像的两个 crop 互为最近邻),权重 0.1。
teacher 更新:EMA 动量 0.994 余弦升到 1.0;教师参数同样被 weight decay 覆盖(沿用 DINO 的参数化技巧)。
三个损失的分工在消融中一目了然:iBOT 的掩码建模贡献了分割的 +3 mIoU(密集特征),KoLeo 贡献了检索 Oxford-M 的 +8 mAP(55.6→63.9),DINO 损失供给整体语义。
4.4 消融:从 iBOT 到 DINOv2 的每一级台阶
论文 Table 1(ViT-L 在 ImageNet-22k 上训练,kNN/线性精度)值得逐行研读——kNN 累计提升 9.1,线性累计提升 4.2:
| 步骤 | kNN | Δ | 线性 | Δ |
|---|---|---|---|---|
| iBOT 基线 | 72.9 | — | 82.3 | — |
| 改进的复现 | 74.5 | +1.6 | 83.2 | +0.9 |
| LayerScale + StochDepth(0.4) | 75.4 | +0.9 | 82.0 | −1.2 |
| 128k 原型 | 76.6 | +1.2 | 81.9 | −0.1 |
| KoLeo | 78.9 | +2.3 | 82.5 | +0.6 |
| SwiGLU FFN | 78.7 | −0.2 | 83.1 | +0.6 |
| patch size 14 | 78.9 | +0.2 | 83.5 | +0.4 |
| teacher momentum 0.994 | 79.4 | +0.5 | 83.6 | +0.1 |
| warmup 调整(80 ep) | 80.5 | +1.1 | 83.8 | +0.2 |
| batch size 3072 | 81.7 | +1.2 | 84.7 | +0.9 |
| Sinkhorn-Knopp | 81.7 | 0 | 84.7 | 0 |
| 解耦 DINO/iBOT 头(= DINOv2) | 82.0 | +0.3 | 84.5 | −0.2 |
三处教科书级的注解:
- LayerScale 和随机深度让线性探测微降 1.2,但消除了大规模训练中的 NaN——后面所有增益都建立在这个稳定性之上;
- KoLeo 单项 +2.3 kNN 是最大台阶;
- 解耦头:iBOT 原文在小规模上共享 CLS/patch 投影头略优(74.2 vs 73.8),但在 DINOv2 的规模上共享导致”patch 级欠拟合、图像级过拟合”,解耦后 kNN 再涨——小规模消融结论在大规模上反转的典型教学案例。
4.5 规模化:ViT-g、蒸馏与高分辨率尾巴
ViT-g/14 从零训练:batch 3072、500 个官方 epoch(每 epoch 1250 次迭代,共 62.5 万步)、AdamW(学习率 2e-4@batch1024 基准按根号缩放、weight decay 0.04→0.2、warmup 80 epoch、梯度裁剪 3.0)15。成本 22016 A100 GPU 小时(约 917 GPU 天)1。
蒸馏出小模型:ViT-S/B/L 不从零训练,而是从冻结的 ViT-g 教师蒸馏——沿用同一套训练循环(只保留两个 global crops、去掉遮蔽与随机深度),发布的是 student 的一份 EMA 副本。效果:蒸馏 ViT-L 在 12 个基准中的 10 个超过从零训练(ImageNet-1k 线性 86.3 vs 84.5),逼近教师的 86.5。
高分辨率短程适应:预训练主体在 224²;末段以预训练权重初始化,用压缩后的相同调度再训 1 万次迭代 @518²(37×37 patch,位置编码插值),只降低基准学习率。消融显示全程 416² 训练的计算量是 224² 的 3 倍,而”224 主体 + 10k 高分辨率尾巴”几乎追平——用三分之一的算力买高分辨率能力,分割与深度等密集任务直接受益。
效率工程:FSDP 全分片数据并行加 fp16 权重广播(AdamW 需同时持有学生、教师、一阶矩、二阶矩四份副本,1B 参数 fp32 下约 16GB,不分片放不进单卡);xFormers 的 memory-efficient attention(FlashAttention 思想:分块载入 SRAM + online softmax,从不物化 N×N 矩阵,显存从 O(N²) 降到 O(N))16;嵌套张量把不同长度的 crop 序列用块对角掩码拼成一条前向;高效随机深度直接跳过被丢弃样本的子层计算。合计比 iBOT 原实现快约 2 倍、省约 2/3 显存。
4.6 主要结果(全部为冻结特征)
ImageNet-1k(论文 Table 4):
| 方法 | 架构 | kNN | 线性 | ReaL | V2 |
|---|---|---|---|---|---|
| MAE | ViT-H/14 | 49.4 | 76.6 | 83.3 | 64.8 |
| iBOT | ViT-L/16 | 72.9 | 82.3 | 87.5 | 72.4 |
| OpenCLIP | ViT-G/14 | 83.2 | 86.2 | 89.4 | 77.2 |
| DINOv2 | ViT-g/14 | 83.5 | 86.5 | 89.6 | 78.4 |
深度估计(冻结 + DPT 头,RMSE 越低越好):NYUd 0.279 / KITTI 2.11 / SUN-RGBD 零样本 0.338——全面超过 OpenCLIP-G(0.414/2.56/0.408),接近全监督微调的 SOTA(0.330/2.10)。
分割:ADE20k 线性探测从 ViT-S 的 44.3 到 ViT-g 的 49.0 mIoU,多尺度 4 层特征可达 53.1;接 ViT-Adapter + Mask2Former 达 60.2。
域外与检索:ImageNet-A 75.9(比 OpenCLIP 高 12.1)、iNat2021 高 9.7、SSv2 视频高 2.5;实例检索 Oxford-Hard 54.0 vs OpenCLIP 的 19.7。
落后项(诚实记录):ImageNet-R(−9.0)、Sketch(−3.9)、SUN397、Cars、Places205 小幅落后——语言对齐类语义上 CLIP 仍占优。
官方模型库(含 2023 年 10 月后的 registers 变体):
| 模型 | 参数量 | kNN | 线性 |
|---|---|---|---|
| ViT-S/14 | 21M | 79.0 | 81.1 |
| ViT-B/14 | 86M | 82.1 | 84.5 |
| ViT-L/14 | 300M | 83.5 | 86.3 |
| ViT-g/14 | 1.1B | 83.5 | 86.5 |
| ViT-L/14 + registers | 300M | 83.8 | 86.7 |
| ViT-g/14 + registers | 1.1B | 83.7 | 87.1 |
4.7 局限与偏差
论文自认:地理与收入偏差显著(Dollar Street 基准上非洲图像比欧洲低 25.7%,高收入与低收入家庭图像差距 31.7%,继承自网络数据分布);无文本接口(零样本文本语义不是它的能力,论文把”接入语言系统”列为未来工作);特征图存在伪影(见第七节 Registers)。
五、代码库解剖
官方仓库2的结构围绕”一个 backbone + 三个损失 + 一套 FSDP 训练循环”组织,核心目录如下:
dinov2/
├── configs/ # ssl_default_config.yaml(默认超参)+ train/ + eval/
├── data/ # augmentations.py、collate.py(MaskCollator)、masking.py
├── layers/ # attention、block、dino_head、swiglu_ffn、patch_embed 等积木
├── loss/ # 仅三个损失:dino_clstoken_loss / ibot_patch_loss / koleo_loss
├── models/ # vision_transformer.py(唯一 backbone 定义)
├── train/ # ssl_meta_arch.py(师生主逻辑)+ train.py(循环与调度器)
├── fsdp/ # FSDP 封装、ShardedGradScaler、分片 checkpoint
├── eval/ # linear / knn / depth(DPT 头)/ segmentation(含 Mask2Former 全移植)
└── hub/ # torch.hub 模型注册
几个值得精读的实现细节:
DINOLoss.sinkhorn_knopp_teacher:Q = exp(out/τ)ᵀ归一化总和后,交替”行归一化除以 K、列归一化除以 B”三次迭代,最后乘 B 得到列和为 1 的均衡软分配;行列和都做跨 GPU all_reduce。原版 DINO 的 centering 路径也保留在代码里,由配置项train.centering二选一,正式训练配置均为sinkhorn_knopp。KoLeoLoss:全实现仅约 20 行——ℓ2 归一化后用 Gram 矩阵点积找最近邻(对角线填 −1 的小技巧,纯 GPU 不依赖 Faiss),损失为-log(最近邻距离).mean(),并在autocast(enabled=False)中强制 fp32 计算。SSLMetaArch.forward_backward:teacher 只看两个 global crops 且 CLS 特征交叉配对(crop1 的目标配 crop2 的视图,交换预测防捷径);算完 SK 软标签立即 reshard 释放教师参数;student 把 global(带掩码)与 local crops 用块对角掩码打包成一次前向。- 数据侧:
MaskingGenerator是 BEiT 式块状遮蔽(长宽比取 exp 均匀采样);collate 时对 batch 中一半样本生成掩码、比例从 [0.1, 0.5] 分段采样,同时产出 SK 均衡所需的全局掩码 patch 数。 - 增强管线:两个 global crops 分别施加”色彩扰动 + p=1.0 高斯模糊”和”色彩扰动 + p=0.1 模糊 + p=0.2 曝光反转”,8 个 local crops 施加”色彩扰动 + p=0.5 模糊”,色彩扰动(亮度 0.4/对比度 0.4/饱和度 0.2/色相 0.1,p=0.8)与 p=0.2 灰度化对所有 crop 生效。
- 配置三级体系:
ssl_default_config.yaml是 ImageNet-1k 小规模默认(65536 原型、centering、共享头),configs/train/vitg14.yaml才是正式配方(131072 原型、SK、解耦头、teacher momentum 0.994、500 epoch、warmup 80)——读论文后去读默认配置会得出错误结论,必须以 train/ 下的正式配置为准。
六、实践使用指南
加载与取特征:
import torch
model = torch.hub.load('facebookresearch/dinov2', 'dinov2_vitl14_reg') # 推荐 reg 版
features = model.forward_features(img) # dict: x_norm_clstoken / x_norm_patchtokens / ...
patch_feats = model.get_intermediate_layers(img, n=4, reshape=True, return_class_token=True)
使用要点:
- 默认用
_reg版本——registers 修复了背景 token 伪影,密集任务收益明显; - 输入尺寸必须是 14 的倍数,否则被中心裁剪到最近的更小倍数;
- 模型卡自评”微调仅带来约 +2%,是最后手段”——冻结加轻量头是设计意图;
- 官方还提供即用的线性分类头(
_lc)、线性/DPT 深度头(NYUd/KITTI 的_ld/_dd)、ADE20K 的 Mask2Former 全模型,以及 dino.txt 文本对齐模型; - 许可证:核心代码与权重现为 Apache-2.0;XRay-DINO、Cell-DINO 等附属权重为 FAIR 非商业研究许可,使用前需确认。
七、后续演进
7.1 Vision Transformers Need Registers
DINOv2(以及监督 ViT、OpenCLIP)的特征图在低信息背景区域(天空、角落)会出现范数约为普通 token 10 倍的离群 token——模型把冗余背景 patch 挪用作全局计算的内部寄存器,代价是密集特征图被污染。证据链很漂亮:这些离群 token 的位置预测能力差、像素重建误差大,但单个 token 就能完成图像级分类(79.1%,接近 CLS 的 87.3%)17。
修复方式出人意料地简单:输入序列加 4 个可学习的 register token(输出端丢弃),1 个就足以消除伪影,FLOPs 增加不足 2%。收益:ViT-L 线性 84.3→84.8,ADE20k 46.6→47.9,无监督目标发现 VOC07 CorLoc 35.3→55.4——LOST 这类目标发现方法因此”解锁”了 DINOv2。官方全系列 _reg 权重即来源于此。
7.2 dino.txt:补语言接口而不伤视觉特征
dino.txt18(CVPR 2025)的思路是 LiT 范式:视觉端冻结 DINOv2 ViT-L(附加 2 个可学习 vision blocks 弥合域差),文本塔从零训练,用 CLIP 原始双向对比损失对齐。全局表示取”CLS 拼接 patch 平均池化”,patch 与文本的对齐没有单独损失、靠梯度流经平均池化涌现。效果:开放词汇分割 ADE-150 达 20.6(高分辨率 25.1),对比 SigLIP 的 9.1 与 CLIP 的 6.0;训练成本约 2432 A100 GPU 时(约为 CLIP 的三十分之一)。弱项是文本检索(COCO R@1 45.4 vs SigLIP 52.7)——”视觉特征优先,语言对齐是事后外挂”的立场贯穿始终。
7.3 DINOv3:同谱系的规模续作
DINOv319(2025)暴露并解决了这条路线的一个结构性问题:更大模型加更长训练后,分类继续涨但分割退化——patch 间相似度结构崩坏,无关 patch 之间也出现高相似。修复手段 Gram anchoring:
L_Gram = ‖ X_S·X_Sᵀ − X_G·X_Gᵀ ‖²_F
即约束 patch 两两点积结构(Gram 矩阵)而非特征本身——特征仍可自由漂移,但局部几何被早期快照的 Gram teacher 锚定。数据升级为 LVD-1689M(从约 170 亿图池用层级 k-means 再平衡采样),旗舰 ViT-7B/16 权重开放(专属许可)。冻结对比 DINOv2-g+reg:ImageNet 线性 87.3→88.4,ObjectNet 66.4→79.0,ADE 线性 49.5→55.9。
7.4 应用生态选录
- 深度估计:Depth Anything 的编码器全部以 DINOv2 初始化,其教师模型亦源自 DINOv220;
- 视频与跟踪:CoTracker、DINO-Tracker、VideoDINO;
- 3D:PoseDiffusion(位姿)、SAMPart3D 与 SegDINO3D(把 2D DINO 特征聚合到 3D 部件分割);
- 医学影像:官方 Cell-DINO(荧光显微)、XRay-DINO/RayDINO(放射),微软 RAD-DINO(胸片);
- 多模态 LLM 编码器:Cambrian-1 的系统评测发现 CLIP 类编码器缺空间接地、DINOv2 类在空间结构理解上显著更强——当前多模态模型常见 CLIP+DINO 双编码器组合;
- 与 SAM 互补:SAM 冻结特征语义弱(”There is no SAMantics”一文实测),社区标准做法是 SAM 出掩码、DINOv2 出语义。
路线之争的共识现状:CLIP 系赢零样本分类、开放词汇与文本检索;DINO 系赢密集任务、结构理解与深度,且数据上限不受图文对约束。两条线正在互相吸收(dino.txt、双编码器融合等)。
八、批评与失败模式汇总
- 特征图伪影(registers 之前):最著名的失败模式,说明”冻结特征图并非天然干净的表示”;
- 无语言接口:零样本与开放词汇是能力空洞,需外挂 dino.txt;
- “打平而非超越”之争:86.5% 线性精度只是与弱监督 CLIP 持平却缺语言接口;线性探测排名是否反映真实特征质量亦存在方法学批评;
- 偏差:显著的西方与富裕家庭偏向;
- 不可复现性:LVD-142M 与去重管线未发布,复现只能以 ImageNet-22k 替代;
- 长训练密集退化:DINOv2 时代未被发现的结构性问题,由 DINOv3 的 Gram anchoring 解决。
九、总结
DINOv2 的启示可以浓缩为几句话:算法上是继承者而非发明者(DINO+iBOT+SwAV 的 SK+KoLeo),但它证明了在视觉自监督这条线上,真正的瓶颈是数据工程与训练工程,而这两者都能被系统性地解决;小规模消融的结论会随规模反转(共享头 vs 解耦头是最佳教学案例);高分辨率的”尾巴训练”与”只训一个大模型、其余全蒸馏”是极具性价比的工程模式;冻结特征加轻量头的使用范式,则重新定义了”视觉基础模型”该被怎么评价——不是微调后的榜单,而是冻结特征在分类、分割、深度、检索上的全面表现。
推荐阅读路线(按依赖顺序):Attention Is All You Need → ViT → SimCLR → MoCo → BYOL → SwAV → BEiT → DINO → iBOT → MAE → KoLeo(Spreading vectors)→ DINOv2 → Registers → dino.txt → DINOv3。
参考文献
-
Oquab, M., Darcet, T., Moutakanni, T., et al. 《DINOv2: Learning Robust Visual Features without Supervision》, arXiv:2304.07193, 2023(TMLR 2024):https://arxiv.org/abs/2304.07193 ↩ ↩2 ↩3 ↩4 ↩5
-
Meta AI Research, facebookresearch/dinov2 官方仓库(代码、预训练权重、模型卡):https://github.com/facebookresearch/dinov2 ↩ ↩2
-
Meta AI, DINOv2 官方博客:https://ai.meta.com/blog/dino-v2-computer-vision-self-supervised-learning/ ↩
-
Vaswani, A., Shazeer, N., Parmar, N., et al. 《Attention Is All You Need》, arXiv:1706.03762, 2017(NeurIPS 2017):https://arxiv.org/abs/1706.03762 ↩
-
Dosovitskiy, A., Beyer, L., Kolesnikov, A., et al. 《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (ViT)》, arXiv:2010.11929, 2020(ICLR 2021):https://arxiv.org/abs/2010.11929 ↩
-
Chen, T., Kornblith, S., Norouzi, M., Hinton, G. 《A Simple Framework for Contrastive Learning of Visual Representations (SimCLR)》, arXiv:2002.05709, 2020(ICML 2020):https://arxiv.org/abs/2002.05709 ↩
-
He, K., Fan, H., Wu, Y., Xie, S., Girshick, R. 《Momentum Contrast for Unsupervised Visual Representation Learning (MoCo)》, arXiv:1911.05722, 2019(CVPR 2020):https://arxiv.org/abs/1911.05722 ↩
-
Grill, J.-B., Strub, F., Altché, F., et al. 《Bootstrap Your Own Latent (BYOL): A New Approach to Self-Supervised Learning》, arXiv:2006.07733, 2020(NeurIPS 2020):https://arxiv.org/abs/2006.07733 ↩
-
Caron, M., Misra, I., Mairal, J., Goyal, P., Bojanowski, P., Joulin, A. 《Unsupervised Learning of Visual Features by Contrasting Cluster Assignments (SwAV)》, arXiv:2006.09882, 2020(NeurIPS 2020):https://arxiv.org/abs/2006.09882 ↩
-
Bao, H., Dong, L., Piao, S., Wei, F. 《BEiT: BERT Pre-training of Image Transformers》, arXiv:2106.08254, 2021(ICLR 2022):https://arxiv.org/abs/2106.08254 ↩
-
Zhou, J., Wei, C., Wang, H., Li, W., Chen, W. 《iBOT: Image BERT Pre-training with Online Tokenizer》, arXiv:2111.07832, 2021(ICLR 2022):https://arxiv.org/abs/2111.07832 ↩ ↩2
-
He, K., Chen, X., Xie, S., Li, Y., Dollár, P., Girshick, R. 《Masked Autoencoders Are Scalable Vision Learners (MAE)》, arXiv:2111.06377, 2021(CVPR 2022):https://arxiv.org/abs/2111.06377 ↩
-
Caron, M., Touvron, H., Misra, I., Jégou, H., Mairal, J., Bojanowski, P., Joulin, A. 《Emerging Properties in Self-Supervised Vision Transformers》, arXiv:2104.14294, 2021:https://arxiv.org/abs/2104.14294 ↩
-
Sablayrolles, A., Douze, M., Schmid, C., Jégou, H. 《Spreading Vectors for Similarity Search: Little Bit Goes a Long Way》(KoLeo 正则出处), arXiv:1806.03198, 2018(ICLR 2019):https://arxiv.org/abs/1806.03198 ↩
-
Loshchilov, I., Hutter, F. 《Decoupled Weight Decay Regularization (AdamW)》, arXiv:1711.05101, 2017(ICLR 2019):https://arxiv.org/abs/1711.05101 ↩
-
Dao, T., Fu, D., Ermon, S., Rudra, A., Ré, C. 《FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness》, arXiv:2205.14135, 2022(NeurIPS 2022):https://arxiv.org/abs/2205.14135 ↩
-
Darcet, T., Oquab, M., Mairal, J., Bojanowski, P. 《Vision Transformers Need Registers》, arXiv:2309.16588, 2023(ICLR 2024):https://arxiv.org/abs/2309.16588 ↩
-
Joseph, S., Moutakanni, T., et al. 《DINOv2 Meets Text: A Unified Framework for Image- and Pixel-Level Vision-Language Alignment (dino.txt)》, arXiv:2412.16334, 2024(CVPR 2025):https://arxiv.org/abs/2412.16334 ↩
-
Siméoni, O., Vo, H. V., Seitzer, M., et al. 《DINOv3》, arXiv:2508.10104, 2025:https://arxiv.org/abs/2508.10104 ↩
-
Yang, L., Kang, B., Huang, Z., et al. 《Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data》, arXiv:2401.10891, 2024(ICLR 2024):https://arxiv.org/abs/2401.10891 ↩