DINOV2算法详解及V3中的改进
DINO 算法在自监督学习领域具有里程碑性质的意义,本文主要介绍 DINOV2 的算法原理及创新点分析。
一、DINOV2算法原理细节详解
1.1 DINOV2 的整体框架:Teacher-Student 架构的升级版
DINO V2 的整体框架,其实可以看作是 DINO (Distillation with No labels) 算法的“升级版”。DINO 算法本身就采用了 Teacher-Student 的知识蒸馏框架,而 DINO V2 在此基础上进行了多方面的改进和优化,使其性能更上一层楼。
Teacher-Student 架构中,Teacher 模型和 Student 模型都是 Transformer 架构,老师模型 (Teacher Model) 比较强大,负责生成“知识”(通常是模型的输出,例如特征向量或概率分布),学生模型 (Student Model) 比较弱小,负责向老师学习“知识”,并努力模仿老师的行为。
具体如下图所示:
从图中我们可以看到:
输入图像 (Input Image):DINO V2 的输入是一张图像。为进行自监督学习,DINO V2 采用了Multi-Crop Augmentation (多裁剪增强)的策略,对同一张图像裁剪出多个不同的 views (视角)。这些 views 分为两类:
Global Crop (全局裁剪):通常是较大尺寸的裁剪,例如 224x224 或 256x256,用于提供图像的全局信息。Global Crop 会被输入到 Teacher 模型中。
Local Crops (局部裁剪):通常是较小尺寸的裁剪,例如 96x96 或 112x112,用于提供图像的局部细节信息。Local Crops 会被输入到 Student 模型中。
Transformer Encoder (Transformer 编码器):Teacher 模型和 Student 模型都使用 Transformer Encoder 作为 backbone (骨干网络)。Transformer Encoder 的作用是将输入的图像 patches (图像块) 转换为特征向量。
Teacher Output & Student Output (Teacher 和 Student 模型的输出):Teacher 模型和 Student 模型分别将输入的 Global Crop 和 Local Crops 编码成特征向量,作为各自的输出。
Distillation Loss (蒸馏损失):DINO V2 的核心是知识蒸馏。它通过计算 Teacher 模型和 Student 模型输出特征之间的 Distillation Loss,来指导 Student 模型的学习。Distillation Loss 目的是让 Student 模型的输出尽可能地接近 Teacher 模型的输出,从而让 Student 模型学习到 Teacher 模型的“知识”。
Optimize Student Model (优化 Student 模型):通过最小化 Distillation Loss,DINO V2 使用梯度下降等优化算法来更新 Student 模型的参数,使其不断地逼近 Teacher 模型。
Teacher 模型的参数更新方式与 Student 模型不同:DINO V2 并没有直接使用梯度下降来更新 Teacher 模型的参数,而是采用了Exponential Moving Average (EMA,指数移动平均)的策略。具体来说,Teacher 模型的参数是 Student 模型参数的 EMA 版本,即 Teacher 模型的参数会缓慢地向 Student 模型的参数靠拢,但又不会完全相同。这种 EMA 更新策略能够有效地稳定 Teacher 模型的训练,并提高模型的泛化能力。
总结一下,DINO V2 的整体框架可以概括为:使用 Teacher-Student 架构,Teacher 模型处理 Global Crop,Student 模型处理 Local Crops,通过 Distillation Loss 来指导 Student 模型的学习,Teacher 模型的参数通过 EMA 方式更新。这种框架的设计,使得 DINO V2 能够有效地从无标注数据中学习到高质量的视觉特征。
1.2 DINOV2 中的 Transformer 架构
Transformer 模型的核心组件是 Self-Attention 自注意力机制)。自注意力机制能够让模型在处理序列数据 (如文本) 时,动态地关注序列中不同位置的信息,从而更好理解序列的上下文关系。Transformer 的基本结构可以概括为:Encoder (编码器) 和 Decoder (解码器) 两部分:Encoder 负责将输入序列编码成一个固定长度的向量表示,Decoder 负责将这个向量表示解码成目标序列。在 DINO V2 中,我们主要使用的是 Transformer Encoder 部分。
Transformer Encoder 的基本组成单元是 Transformer Block (Transformer 块)。一个 Transformer Block 通常包含两个子层:
Multi-Head Self-Attention (多头自注意力):这是 Transformer 的核心组件。多头自注意力机制能够让模型并行地学习多个不同的注意力分布,从而更全面地捕捉输入序列的信息。
Feed-Forward Network (前馈神经网络):这是一个简单的两层全连接神经网络,用于对自注意力层的输出进行非线性变换。
Transformer Block 的结构可以用下图表示:
在 DINO V2 中,Transformer Encoder 被应用于图像处理。为了将 Transformer 应用于图像,DINO V2 首先将输入图像划分为一个个小的 patches (图像块)。例如,对于一张 224x224 的图像,可以将其划分为 16x16 个 14x14 的 patches。然后将每个 patch 展平成一个向量,作为 Transformer Encoder 的输入序列。
DINO V2 使用的 Transformer Encoder 结构与 Vision Transformer (ViT) 类似。ViT 是 Google 提出的将 Transformer 应用于图像分类的经典模型。ViT 的结构非常简洁,主要由以下几个部分组成:
Patch Embedding (图像块嵌入):将输入图像划分为 patches,并将每个 patch 展平成向量,然后通过一个线性层进行 embedding (嵌入),得到 patch embedding。
Positional Encoding (位置编码):由于 Transformer 的自注意力机制是位置无关的,为了让模型感知到 patches 的位置信息,需要添加 positional encoding。ViT 使用的是可学习的 positional encoding。
Transformer Encoder Layers (Transformer 编码器层):由多个 Transformer Block 堆叠而成。
Classification Head (分类头):对于图像分类任务,ViT 通常会在 Transformer Encoder 的输出上添加一个简单的分类头,例如一个线性层或 MLP (多层感知机)。
DINO V2 使用的 Transformer Encoder 结构与 ViT 类似,但也有一些不同之处。例如,DINO V2 并没有使用 ViT 的 classification head,而是直接使用 Transformer Encoder 的输出特征进行自监督学习。此外,DINO V2 在 Transformer Encoder 的结构细节上可能也进行了一些调整和优化,以更好地适应自监督学习任务。1
1.3 对比学习机制:让 Student 模型向 Teacher 模型看齐
DINO V2 的核心思想是知识蒸馏,在 DINO V2 中,它采用了Contrastive Learning (对比学习)的机制来实现知识蒸馏。
对比学习是一种自监督学习方法,它的核心思想是“物以类聚,人以群分”。简单来说,就是将相似的样本拉近,将不相似的样本推远。在图像领域,我们可以认为同一张图像的不同 views 是相似的,而不同图像的 views 是不相似的。
DINO V2 将对比学习应用于知识蒸馏的做法是:
Teacher 模型和 Student 模型分别处理同一张图像的不同 views。Teacher 模型处理 Global Crop,Student 模型处理 Local Crops。
Teacher 模型和 Student 模型分别输出特征向量。Teacher 输出特征向量 _zt_,Student 输出特征向量 _zs_。
**DINO V2 定义了一个 Contrastive Loss (对比损失)**来衡量 _zt_ 和 _zs_ 之间的距离。 Distillation Loss 其实就是一种 Contrastive Loss。。
1.4 DINOV2 中的 Loss
在 Loss 设计上,它引入了 iBOT (Image BERT Pre-training with Online Tokenizer) 的思想。
DINOv2 的总 Loss 由三部分组成:
1)损失
DINO V2 使用的 Contrastive Loss是Cross-Entropy Loss (交叉熵损失)的变体。
在分类任务中,Cross-Entropy Loss 通常用于衡量模型预测的概率分布与真实标签之间的差异。假设模型预测的概率分布为p = [p_1, p_2, ..., p_C],真实标签的 one-hot 向量为 q = [q_1, q_2, ..., q_C],其中 C 是类别数。则 Cross-Entropy Loss 定义为:
而在 DINO V2 中将 Cross-Entropy Loss 应用于特征向量之间的对比学习。具体来说,对于 Teacher 模型输出的特征向量 z_t和 Student 模型输出的特征向量z_s,DINO V2 首先对它们进行softmax 归一化,得到概率分布 P_t和P_s。然后,DINO V2 将 P_t 作为“伪标签”,使用 Cross-Entropy Loss 来衡量P_s和 P_t 之间的差异。
其中:
是 Student 模型输出的
个 Local Crops 的特征向量。
是 Teacher 模型输出的
个 Global Crops 的特征向量。
是所有 Teacher 和 Student 模型输出的特征向量的集合。
是 temperature 参数,用于控制 softmax 的平滑程度。
该 Loss 函数的含义是:对于 Student 模型输出的每个 Local Crop 特征向量,我们希望它能够"预测"出 Teacher 模型输出的 Global Crop 特征向量
,我们希望两者之间的相似度尽可能高,而
和其他特征向量
(包括其他 Teacher 和 Student模型的输出)之间的相似度尽可能低。
为进一步提高模型性能,DINO V2 在 Contrastive Loss 中还引入了两个重要技巧:
(1)Centering(中心化):在计算 softmax 之前,DINO V2 对 Teacher 模型的输出特征向量进行了中心化处理。具体来说,对于 Teacher 模型的输出特征向量
,DINO V2 计算其均值
,然后将
减去
,得到中心化后的特征向量
。中心化的目的是防止模型 collapse(坍塌),即所有样本的特征向量都聚集到同一个点。
(2)Sharpening(锐化):DINO V2 对 Teacher 模型的输出概率分布进行了锐化处理。具体来说,对于 Teacher 模型的输出概率分布
,DINO V2 使用一个更小的 temperature 参数
来计算 Student 模型的概率分布
。锐化的目的是让 Teacher 模型的概率分布更加 sharp(尖锐),从而提供更明确的学习目标给 Student 模型。
结合 Centering 和 Sharpening,DINO V2 的 Contrastive Loss 可以表示为:
其中是对应特征向量
的均值(如果 来自 Teacher 模型,则
,如果
来自 Student 模型,则
)。
2)iBOT Loss
这是提升密集预测(Dense Prediction)能力的关键。
操作:对 Student 的输入进行 随机 Masking(类似 MAE,遮挡部分 Patch)。
目标:Teacher 看到完整的图,Student 必须根据上下文,补全被 Mask 掉的 Patch 的特征。
区别于 MAE:MAE 预测的是像素值(Pixel reconstruction),而 iBOT 预测的是 Teacher 提取的 特征分布(Feature Softmax)。这让模型学到的是语义而非纹理。
3)KoLeo Regularizer
为了进一步提升特征的利用率,引入了 Kozachenko-Leonenko (KoLeo) 差分熵正则项。
作用:它鼓励 Batch 内的样本特征在特征空间中均匀分布(Uniform Span),避免特征簇过度拥挤。
总结一下,DINO V2 的对比学习机制可以概括为:使用 Cross-Entropy Loss 的变体,将 Teacher 模型的 Global Crop 特征向量作为“伪标签”,指导 Student 模型的 Local Crops 特征向量的学习。同时,引入 Centering 和 Sharpening 技巧,进一步提高模型的性能和稳定性。这种对比学习机制,使得 Student 模型能够有效地“看齐” Teacher 模型,学习到高质量的视觉特征。
1.5 Teacher 和 Student 模型之间的---知识蒸馏策略
DINO V2 的核心是知识蒸馏,而对比学习机制只是实现知识蒸馏的一种手段。知识蒸馏的最终目的是让 Student 模型学习到 Teacher 模型的“知识”。在 DINO V2 中,“知识”主要指的是 Teacher 模型学习到的 **特征表示 (Feature Representation)**。
Teacher 模型能够学习到更好的特征表示,主要归功于以下几个方面:
Global View (全局视角):Teacher 模型处理的是 Global Crop,能够获取图像的全局信息,从而更好地理解图像的整体结构和语义内容。
EMA Update (指数移动平均更新):Teacher 模型的参数通过 EMA 方式更新,能够有效地稳定训练过程,并提高模型的泛化能力。
更大的模型容量 (可能):在某些情况下,Teacher 模型可能比 Student 模型具有更大的模型容量 (例如,更深的网络结构或更多的参数)。更大的模型容量通常意味着更强的学习能力。
DINO V2 的知识蒸馏策略,有以下几个关键特点:
Self-Distillation (自蒸馏):DINO V2 的 Teacher 模型和 Student 模型都是基于同一个网络架构 (Transformer),只是参数更新方式不同。这种 Teacher 模型和 Student 模型来自同一个网络的知识蒸馏方式,被称为 Self-Distillation。Self-Distillation 的优势在于,Teacher 模型和 Student 模型具有相似的特征空间,更容易进行知识迁移。
No Labels (无标签):DINO V2 的训练过程完全不需要人工标注的标签,只需要大量的无标注图像数据。这使得 DINO V2 能够充分利用海量的无标注数据,学习到通用的视觉特征。
Online Distillation (在线蒸馏):DINO V2 的知识蒸馏过程是 online 的,即 Teacher 模型和 Student 模型是同时训练的。相对于离线蒸馏,Online Distillation 的优势在于 Teacher 模型和 Student 模型可以相互促进,共同进步。
二、DINO系列演变进程中的改进创新
2.1 DINOV3中的改进
1)Gram Anchoring
DINOv3 引入了一个核心创新:Gram Anchoring Loss,其目的就是锁住几何结构。
Gram 矩阵:
锚定机制 (Anchoring):
DINOv3 的策略是:
在训练的中途,当 Dense 性能达到峰值时,保存一个 “Gram Teacher”(或者使用 Teacher 的历史版本)。
在后续训练中,增加一个约束:Student 的 Patch 特征的 Gram 矩阵,必须与 Gram Teacher 保持一致。
直观理解:类似于给模型加了一个限制条件,可以继续学习更高级的语义(让 Global Loss 变小),但是不能破坏 Patch 之间的相对位置关系和几何结构。
2)Axial RoPE (Rotary Positional Embeddings)
DINOv3 在 Backbone 上也做了针对性修改,传统的绝对位置编码在推理分辨率改变时(如 224 -> 800)性能会剧降。DINOv3 引入RoPE旋转位置编码,改善ViT在长序列中的几何一致性问题,并引入了 Jitter(抖动) 机制。使得模型天然支持任意分辨率输入,无需插值。
3)单教师多学生蒸馏
7B教师模型向多个学生(ViT-S/B/L)蒸馏,提供多种选择,兼顾性能与部署效率。
2.2 DINOV1/V2/V3 的改进之处对比
此处用表格总结DINO系列的改进之处:
| 维度 | DINOV1 | DINOV2 | DINOV3 |
| 核心思路 | Student–Teacher 自蒸馏,global 对齐 | DINOv1 + iBOT:global + patch 预测 | 引入Gram Anchoring解决长训练下结构退化问题 |
| 位置编码 | 绝对、相对位置编码 | 绝对位置编码 | Axial RoPE + Jitter |
| 数据规模 | 以 ImageNet 为主(百万级) | LVD-142M(1.42亿) | Curated Web Data (17亿+) |
| 训练目标 | Global CE | Global CE + iBOT + KoLeo正则 | Global CE + iBOT + KoLeo正则+Gram Anchoring |
| 强项 | ViT 上的自监督分割能力、简洁框架 | 泛化强、任务覆盖面广、真正意义上的视觉基础特征 | 极致(sota), Gram锁结构 |
| 工程优化 | 多 crop + EMA + centering | 再加 FlashAttention / FSDP / 高分辨率收尾等 | FSDP2、fp8训练、高效推理 |
| 适用场景 | 中小规模数据上自监督预训练 | 希望直接用现成 backbone 做各种任务 |
