模型提出#
在 DINO 出现之前,自监督视觉表示学习主要有两类主流方法:
对比学习(Contrastive Learning):如 SimCLR、MoCo → 通过拉近同一图像的不同视角表示、推远不同图像的表示来学习。 → 问题:需要大量负样本、较大batch size。
基于生成或重建的方法(如 MAE、BYOL、SimSiam): → 不依赖显式负样本,但往往需要设计复杂的目标或避免“坍塌问题”(collapse)。
DINO 的提出非常关键,它展示了:
不使用标签、也不使用对比损失(不需要负样本),仅靠自蒸馏(Self-Distillation)也能学到非常好的视觉特征。
模型架构#

DINO 支持多种 Backbone:
ViT-S/16、ViT-B/16、ViT-B/8
ResNet-50、ResNet-101
其中最具代表性的是 Vision Transformer \(ViT\) 版本。
ViT + DINO 的关键特性:
- DINO 的自监督训练使 ViT 学到 显著的语义分割能力(Emergent segmentation): → 不需任何标签,ViT 的 attention map 就能自动分离出目标物体区域!
怎么训练#
对同一张图像生成多个视角(multi-crop),用 Student 网络去预测 Teacher 的输出分布(softmax over projection head logits);Teacher 参数用 Student 的 EMA(滑动平均)更新,Teacher 的输出做 centering + 温度 sharpening,用交叉熵(KL)把 Student 输出对齐到 Teacher 输出。Student 用反向传播更新。
具体来说#
Backbone:ViT 或 ResNet(ViT 在 DINO 中表现特别好)。
Projection head(学生/教师):MLP,把 backbone 特征映射到 logits(再 softmax)。
温度(temperature):Student 温度 TsT_sTs 较大,Teacher 温度 TtT_tTt 较小(Teacher 输出更“尖锐”)。
Centering:对 Teacher 的 logits 做减均值(center),并随时间用 EMA 更新 center,避免分布偏移导致 collapse。(上一个Teacher的平均值)
EMA momentum:Teacher 参数以 θt←mθt+\(1−m\)θs\theta_{t} \leftarrow m \theta_{t} + \(1-m\)\theta_{s}θt←mθt+\(1−m\)θs 更新,m 从较小值逐渐接近 1(常见做法)。
Multi-crop:常见做法 2 个全局 crops + 6-8 个局部 crops(global 224x224,local 96x96)。

2 个 global crops:随机裁剪到大尺寸(例如 224×224),并进行常规增强(颜色抖动、随机灰度、Gaussian blur、随机水平翻转等)。
k 个 local crops(6~8):更小分辨率(96×96),做相似但更强的裁剪增强。
Teacher 只接收 global crops(2),Student 接收所有 crops(global + local)。
这样 Student 从局部视角也要匹配 teacher 的全局语义,促使模型学习尺度不变性的语义表示。
伪代码#

模型效果#

怎么做Loss#
我们令:
Student 输出的 logits 为 zsz_szs
Teacher 输出的 logits 为 ztz_tzt
然后通过 softmax 得到各自的概率分布:
ps=softmax\(zs/Ts\),pt=softmax\(\(zt−c\)/Tt)p_s = \text{softmax}\(z_s / T_s\), \quad p_t = \text{softmax}\(\(z_t - c\) / T_t)ps=softmax\(zs/Ts\),pt=softmax\(\(zt−c\)/Tt)
其中:
TsT_sTs:Student 的温度(通常 0.1)
TtT_tTt:Teacher 的温度(通常较小,如 0.04)
ccc:Center 向量,用于防止 collapse(防止 teacher 输出分布单一)
目标:让 Student 的输出分布 psp_sps 逼近 Teacher 的输出分布 ptp_tpt。


