在前两篇文章中我们分别精读了 MAE 和 BEiT。MAE 的核心思想是遮住大部分图像 patch让模型重建被遮挡区域的像素。BEiT 的核心思想是先把图像转换成离散 visual token再像 BERT 一样预测被遮挡位置的视觉 token。这两类方法都属于 masked image modeling也就是通过“遮挡—预测”来学习图像表示。而 DINO 走的是另一条路线。DINO 不要求模型重建像素也不要求模型预测离散 visual token。它的核心思想是让一个 student 网络去对齐一个 teacher 网络的输出分布而 teacher 网络本身又由 student 网络的指数滑动平均得到。更有意思的是DINO 在没有任何人工标注的情况下训练出来的 ViT 注意力图竟然能够自动关注图像中的前景目标。这也是这篇论文最吸引人的地方。DINO 对应的论文是 Emerging Properties in Self-Supervised Vision Transformers由 Mathilde Caron、Hugo Touvron 等人提出发表于 ICCV 2021。论文将 DINO 解释为一种 self-distillation with no labels也就是无标签自蒸馏方法。一、为什么需要 DINO在监督学习中模型学习图像表示的方式非常直接给定一张图像预测它的人工类别标签。例如输入一张狗的图片模型输出 “dog”。但是在自监督学习中我们没有人工标签。模型必须从图像本身构造监督信号。在 DINO 之前视觉自监督学习中已经有很多经典方法例如 SimCLR、MoCo、BYOL、SwAV 等。这些方法通常围绕一个核心问题展开如何让同一张图像的不同增强视图具有相似表示同时避免所有图像都被映射到同一个无意义表示DINO 继承了这条思路但它特别关注 Vision Transformer。论文想回答的问题并不只是“DINO 能不能训练 ViT”而是当 ViT 通过自监督方式训练时会不会出现 CNN 或监督 ViT 中不明显的新性质论文的结论是肯定的。DINO 训练出的 ViT 特征不仅适合分类和检索而且最后一层 self-attention 中包含明显的语义分割信息这种现象在监督 ViT 和卷积网络中并不明显。二、DINO 的核心思想DINO 的全称可以理解为self-DIstillation with NO labels。也就是无标签自蒸馏。传统知识蒸馏中一般有一个已经训练好的 teacher 模型student 模型通过学习 teacher 的输出分布来提升性能。但 DINO 中没有预训练好的外部 teacher也没有人工标签。它的 teacher 是由 student 自己生成的。具体来说DINO 同时维护两个网络网络作用Student network通过梯度下降进行训练Teacher network不通过反向传播训练而是由 student 参数的 EMA 更新得到Student 和 teacher 的结构相同通常都是 ViT。训练时同一张图像会经过不同的数据增强生成多个视图。Teacher 处理部分全局视图student 处理所有视图然后 student 被训练去匹配 teacher 的输出分布。用一句话概括 DINODINO 让 student 学习 teacher 对图像不同视图的输出而 teacher 又是 student 的滑动平均版本。这听起来有点“自己教自己”但正是这种机制让模型可以在没有标签的情况下逐渐学到稳定的语义表示。三、DINO 和普通知识蒸馏有什么区别为了理解 DINO先看普通知识蒸馏。普通蒸馏一般是这样的输入图像 → teacher 输出软标签 → student 学习 teacher 输出。这里的 teacher 通常是一个已经训练好的强模型。而 DINO 是这样的输入图像的不同增强视图 → teacher 输出分布输入图像的不同增强视图 → student 输出分布student 学习 teacherteacher 由 student 的历史参数滑动平均得到所以 DINO 与普通蒸馏有三个明显区别。第一DINO 不需要人工标签。第二DINO 不需要外部预训练 teacher。第三DINO 的 teacher 是 student 的指数滑动平均版本。Teacher 参数更新方式可以写成θ_teacher ← m θ_teacher (1 - m) θ_student其中m 是 momentum 系数。这样 teacher 不会像 student 一样每一步都剧烈变化而是保留了 student 历史状态的平滑平均。论文也强调momentum encoder 是 DINO 能够稳定训练的重要因素之一。四、DINO 的整体训练流程DINO 的训练流程可以分为五步。1. 对同一张图像生成多个视图给定一张原始图像DINO 会通过数据增强生成多个 crop。其中包括global crops较大区域的全局视图local crops较小区域的局部视图。Teacher 通常只处理 global crops而 student 会处理 global crops 和 local crops。这样设计的目的是让 student 学会从局部区域推断全局语义也就是建立 local-to-global 的对应关系。2. Student 和 teacher 分别提取特征Student 和 teacher 都由 backbone 和 projection head 组成。Backbone 通常是 ViT负责提取图像特征。Projection head 将 backbone 输出映射到一个固定维度的输出空间并通过 softmax 得到概率分布。3. Teacher 输出作为 student 的学习目标Teacher 的输出不参与梯度反向传播。Student 的目标是让自己的输出分布接近 teacher 的输出分布。也就是说DINO 不预测类别标签而是预测 teacher 给出的概率分布。4. 使用交叉熵损失训练 studentDINO 使用交叉熵来度量 teacher 输出分布和 student 输出分布之间的差异。可以直观理解为loss teacher 分布 与 student 分布之间的交叉熵训练时student 通过反向传播更新参数而 teacher 不通过梯度更新。5. 用 student 的 EMA 更新 teacher每一步训练后teacher 参数通过 student 参数的指数滑动平均更新。这样 teacher 更稳定也能为 student 提供更可靠的学习目标。五 DINO 的损失函数如何理解设 student 网络为g_steacher 网络为g_t对于同一张图像的不同增强视图student 和 teacher 分别输出概率分布P_s(x)P_t(x)DINO 的目标就是让 student 的输出分布接近 teacher 的输出分布。论文中使用的 softmax 形式可以写成P_s(x) softmax(g_s(x) / τ_s)P_t(x) softmax((g_t(x) - c) / τ_t)τ_s 是 student temperatureτ_t 是 teacher temperaturec 是 center用于防止输出塌缩teacher 端使用 sharpening使输出分布更尖锐。损失函数可以理解为 teacher 分布和 student 分布之间的交叉熵L - P_t(x) log P_s(x)更完整地说DINO 会对不同视图之间的 teacher-student 输出进行匹配。Teacher 处理 global viewstudent 处理 global view 和 local view并在不同视图之间计算交叉熵。这点非常关键。DINO 不是让同一个视图复制自己而是让模型在不同增强视图之间保持语义一致。也就是说即使图像被裁剪、颜色扰动、模糊或局部遮挡模型也应该判断它们来自同一个对象或同一张图像。六 DINO 的注意力图为什么能自动关注目标这是这篇论文最值得展开讲的地方。在 ViT 中图像被切成 patch每个 patch 都变成一个 token。Class token 通过 self-attention 与所有 patch token 交互。在监督训练中模型的目标是分类。它只需要找到足以判断类别的判别性区域即可比如鸟的头部、狗的脸、汽车的轮廓。它不一定需要完整关注整个物体。而 DINO 的训练目标不同。DINO 要求同一张图像的不同增强视图在输出分布上保持一致。由于这些视图可能来自不同裁剪区域模型不能只记住某一个局部纹理而需要寻找跨视图稳定存在的语义结构。例如一张狗的图片被裁剪成不同视图一个视图包含狗头一个视图包含狗身体一个视图包含狗和部分背景。为了让这些视图输出一致模型更倾向于捕捉“狗”这个稳定语义而不是某个偶然的背景纹理。同时ViT 的 self-attention 机制天然可以建立 patch 之间的全局关系。因此当 DINO 的自监督目标与 ViT 的全局注意力机制结合时模型就可能学到前景目标内部 patch 的一致性并在注意力图中表现出来。所以 DINO 注意力图自动关注目标并不是因为模型被显式要求做分割而是因为多视图一致性目标 ViT 全局注意力机制 自蒸馏稳定训练共同促成了这种目标区域涌现现象。DINO 的实验主要验证了三个方面第一DINO 学到的特征是否适合图像分类。第二DINO 学到的特征是否适合图像检索和迁移任务。第三DINO 训练出的 ViT 是否真的会产生语义化注意力图。在 ImageNet 上论文报告 DINO 使用小型 ViT 时 k-NN 分类可以达到 78.3% top-1使用 ViT-Base 时linear evaluation 可以达到 80.1% top-1。论文还强调了几个关键因素momentum encoder 很重要multi-crop training 很重要ViT 中较小 patch size 有助于提升表现DINO 与 ViT 结合时能够产生更清晰的语义注意力图。官方代码仓库也提供了预训练模型和评估脚本包括 k-NN、linear evaluation、image retrieval、copy detection、video segmentation 和 attention visualization 等。现在我们已经连续读了 MAE、BEiT 和 DINO可以把它们放在一起比较。方法核心任务预测目标是否需要标签是否需要 tokenizer代表特点BEiTMasked Image Modeling离散 visual token不需要需要图像版 BERTMAEMasked Autoencoding原始像素不需要不需要高比例 mask 像素重建DINOSelf-distillationteacher 输出分布不需要不需要无标签自蒸馏 注意力涌现七 DINO 与对比学习有什么关系DINO 和对比学习方法有一定相似性但并不完全相同。以 SimCLR 为例对比学习通常需要构造正样本和负样本同一张图像的不同增强视图是正样本不同图像之间是负样本。模型训练目标是拉近正样本推远负样本。而 DINO 不显式使用负样本。它更接近 BYOL 一类方法通过 teacher-student 框架和多视图一致性来学习表示。不过 DINO 不是简单复制 BYOL。它额外引入了 centering、sharpening、multi-crop并且在 ViT 上观察到了非常突出的注意力涌现现象。论文也将 DINO 解释为一种无标签自蒸馏方法而不是标准对比学习方法。八、DINO 的贡献总结DINO 的贡献可以总结为三点。1. 提出了适用于 ViT 的无标签自蒸馏框架DINO 不需要人工标签也不需要外部 teacher。Teacher 由 student 的 EMA 得到student 通过匹配 teacher 的输出分布来学习图像表示。2. 发现自监督 ViT 会涌现语义注意力图这是论文最有影响力的发现。DINO 训练出的 ViT 注意力图能够自动关注图像中的前景目标说明自监督 ViT 特征中包含明显的语义分割信息。3. 证明 DINO 特征具有较强迁移能力DINO 特征不仅可以用于 ImageNet 分类也可以用于 k-NN 分类、图像检索、目标发现和视频分割等任务。官方实现中也提供了这些评估任务的相关脚本。九、DINO 的局限性DINO 虽然非常经典但也有一些局限。首先DINO 的训练依赖较多技巧。Momentum teacher、multi-crop、centering、sharpening、temperature schedule 等都会影响最终效果。如果实现细节处理不好训练可能不稳定。其次DINO 的注意力图虽然能突出目标区域但它并不是严格意义上的分割模型。它可以产生类分割的现象但没有像语义分割模型那样输出类别级 mask。第三DINO 的训练成本仍然较高。虽然它不需要标签但高质量自监督训练通常需要大量图像和较长训练周期。最后DINO 主要展示了自监督 ViT 的强大潜力但后续 DINOv2、DINOv3 等工作进一步将这一方向扩展到更大数据、更强 backbone 和更通用的视觉基础模型。Meta 在 2025 年介绍 DINOv3 时也明确将其定位为面向多种视觉任务的高分辨率自监督视觉 backbone。十、如何理解 DINO 在 ViT 发展中的位置如果把 ViT 自监督预训练的发展串起来DINO 是一个非常关键的节点。ViT 证明了 Transformer 可以用于图像分类。DeiT 证明了 ViT 可以在 ImageNet 上更高效地训练。BEiT 证明了图像可以借鉴 BERT通过 masked token prediction 进行预训练。MAE 证明了直接重建像素也可以训练出强大的 ViT 表示。而 DINO 证明了另一件事ViT 通过无标签自蒸馏不仅可以学到强表示还可能自然涌现出目标区域感知能力。这对后续视觉基础模型影响很大。因为基础模型需要的不只是分类能力更需要通用的空间理解能力。DINO 展示了自监督 ViT 在目标发现、区域匹配、图像检索和密集视觉任务中的潜力。