三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从“认出这是一只狗”到“知道狗头、狗腿分别在哪”:DINO-v3中判别性特征(Discriminative Features)、局部一致性(Local Consistency)与Gram锚定的完整逻辑

从“认出这是一只狗”到“知道狗头、狗腿分别在哪”:DINO-v3中判别性特征(Discriminative Features)、局部一致性(Local Consistency)与Gram锚定的完整逻辑

DINO-v3 判别性特征与一致性

4.2 Gram Anchoring Objective

4.2 Gram 锚定目标(Gram Anchoring Objective

Throughout our experiments, we have identified a relative independence between learning strong discriminative features and maintaining local consistency, as observed in the lack of correlation between global and dense performance. While combining the global DINO loss with the local iBOT loss has begun to address this issue, we observe that the balance is unstable, with global representation dominating as training progresses. Building on this insight, we propose a novel solution that explicitly leverages this independence.

在我们的实验过程中,我们发现,学习强判别性特征Discriminative Features)与保持局部一致性Local Consistency)之间存在相对独立性

这一点可以从全局性能(Global Performance)与密集性能(Dense Performance)之间缺乏相关性这一现象中观察到。

虽然将全局 DINO 损失(Global DINO Loss)与局部 iBOT 损失(Local iBOT Loss)结合起来已经开始缓解这一问题,但我们发现,这种平衡是不稳定的:随着训练不断推进,全局表示( Global Representation )会逐渐占据主导地位。

详细解释DINO-v3中的以上内容,结合数学公式和mermaid图详细解释 判别性特征( Discriminative Features )、保持局部一致性( Local Consistency )分别是指是什么?为什么存在相对独立性?给出完整的由浅到深的由逻辑层次的解释并给出一个标题

我会先把这段话放回 DINO-v3 的整体训练机制里,再从“图像级语义”与“局部 patch 结构”两个视角拆开解释。最后我会把它们为什么会“相对独立”、为什么全局目标会逐渐压过局部目标,以及Gram 锚定(Gram Anchoring)想解决什么问题,连成一条完整逻辑链。

这里最容易混淆的一点是:

  • 论文里的“局部一致性”并不是简单地说“相邻像素越像越好”。
  • 它更接近于:同一物体/语义区域内部的 patch 特征关系应当连贯,而不相关区域不要莫名其妙变得高度相似
  • 论文直接用 patch 间余弦相似度图来观察这个性质;训练到后期,相似度图越来越噪,而 ImageNet 分类却还在提升。

从“认出这是一只狗”到“知道狗头、狗腿分别在哪”:DINO-v3 中判别性特征(Discriminative Features)局部一致性(Local Consistency)Gram 锚定(Gram Anchoring)的完整逻辑

你引用的这段话,其实正好击中了 DINO-v3 最重要的技术矛盾:

一个视觉模型可以越来越擅长回答“这张图整体是什么”,却同时越来越不擅长回答“图中每一个位置分别是什么”。

换句话说:

  • 全局语义能力(Global Semantic Ability)可以越来越强;
  • 局部空间结构(Local Spatial Structure)却可能越来越差。

DINO-v3 的论文发现,在长时间训练中,ImageNet 图像分类性能持续提升,但依赖 patch 特征的分割性能大约在200 k 200k200k次迭代之后开始下降;与此同时,patch 之间的相似度图越来越不局部、越来越嘈杂。turn981523view1

Gram 锚定(Gram Anchoring),就是专门为了解决这个问题提出的。


一、先建立最重要的直觉:ViT 实际上同时产生“两种东西”

假设输入一张狗的图片。

ViT 不会直接把整张图一次性塞进去,而是把图像切成很多小块:

Input Image
Dog

Patch 1
Sky

Patch 2
Dog Head

Patch 3
Dog Body

Patch 4
Grass

Patch Token x₁

Patch Token x₂

Patch Token x₃

Patch Token x₄

Vision Transformer

CLS Token c
Global Representation

Patch Features X
Dense Representation

假设一张图被划分成P PP个 patch,每个 patch 最终得到一个d dd维向量:

x 1 , x 2 , … , x P ∈ R d \mathbf{x}_1,\mathbf{x}_2,\ldots,\mathbf{x}_P\in\mathbb{R}^dx1,x2,,xPRd

把它们堆起来:

X = [ x 1 ⊤ x 2 ⊤ ⋮ x P ⊤ ] ∈ R P × d \mathbf{X}=\begin{bmatrix}\mathbf{x}_1^\top\\\mathbf{x}_2^\top\\\vdots\\\mathbf{x}_P^\top\end{bmatrix}\in\mathbb{R}^{P\times d}X=x1x2xPRP×d

除此之外,ViT 还有一个特殊的CLS 标记(CLS Token)

c ∈ R d \mathbf{c}\in\mathbb{R}^dcRd

所以你可以暂时这样理解:

CLS Token:

“把整张图片浓缩成一句话。”

比如:

这是一只狗。

Patch Token:

“告诉你图片每个地方是什么。”

比如:

左上角是天空。
中间是狗头。
右侧是狗身体。
下方是草地。

这两个能力虽然来自同一个网络,但并不是完全相同的能力。

这正是理解你这段论文的钥匙。


二、什么叫判别性特征(Discriminative Features)

“判别性”这个词对于初学者比较抽象。

你可以先把它翻译成人话:

能不能把不同语义的图片区分开。

例如给模型三张图片:

I 1 = 金毛犬 I_1=\text{金毛犬}I1=金毛犬

I 2 = 哈士奇 I_2=\text{哈士奇}I2=哈士奇

I 3 = 汽车 I_3=\text{汽车}I3=汽车

一个好的视觉表示应该让:

sim ⁡ ( f ( I 1 ) , f ( I 2 ) ) > sim ⁡ ( f ( I 1 ) , f ( I 3 ) ) \operatorname{sim}(f(I_1),f(I_2))>\operatorname{sim}(f(I_1),f(I_3))sim(f(I1),f(I2))>sim(f(I1),f(I3))

因为:

金毛和哈士奇都是狗,所以语义应该比较接近;
狗和汽车则应该比较远。

因此,一个拥有强判别性特征(Discriminative Features)的模型,应该能够把特征空间组织成这样:

特征空间 金毛 ● \ ● 哈士奇 ● 汽车 \ ● 卡车 ● 苹果 \ ● 橘子

语义相近的东西聚集起来。

语义不同的东西分开。


三、DINO 是怎么让模型获得这种能力的?

DINO 的核心思想是自蒸馏(Self-Distillation)

它有两个模型:

  • 学生网络(Student Network)
  • 教师网络(Teacher Network)

但这里没有人工标签。

例如原图是一只狗:

原始图片 │ ├── 随机裁剪 A → 狗头 │ └── 随机裁剪 B → 狗 + 草地

虽然两个 crop 看起来不同,但它们来自同一张图片。

DINO 要求:

学生看到 crop A 后得到的整体语义判断,要接近教师看到 crop B 后得到的整体语义判断。

DINOv2/DINOv3 的图像级目标主要作用于CLS 标记(CLS Token)。DINO-v3 延续这一框架,同时配合 patch 级 iBOT 目标。turn981523view0

简化以后:

p s = softmax ⁡ ( h s ( c s ) ) \mathbf{p}_s=\operatorname{softmax}(h_s(\mathbf{c}_s))ps=softmax(hs(cs))

p t = Normalize ⁡ ( h t ( c t ) ) \mathbf{p}_t=\operatorname{Normalize}(h_t(\mathbf{c}_t))pt=Normalize(ht(ct))

其中:

c s \mathbf{c}_scs是学生的 CLS 特征;

c t \mathbf{c}_tct是教师的 CLS 特征;

h s , h t h_s,h_ths,ht是 DINO head。

然后让学生模仿教师:

L D I N O = − ∑ k p t ( k ) log ⁡ p s ( k ) \mathcal{L}_{\mathrm{DINO}}=-\sum_k p_t^{(k)}\log p_s^{(k)}LDINO=kpt(k)logps(k)

DINO-v3 在教师端具体采用Sinkhorn-Knopp(SK)机制进行归一化,而不再简单沿用最初 DINO 的 centering。turn285419view0


四、DINO Loss 真正在训练什么?

核心不是:

“第37 3737类是狗。”

因为根本没有人工标签。

它训练的是:

同一个东西从不同视角看,整体语义应该保持一致。

比如:

← 返回列表