背景
最近一段时间,基于 Transformer 网络结构的视觉大模型出现了爆发式的增长,继 Segment Anything(SAM)之后,Meta AI 再次发布重量级开源项目——DINOv2。DINOv2 可以抽取到强大的图像特征,且在下游任务上不需要微调,这使得它适合作为许多不同的应用中新的 Backbone。
与之前发布的 Segment Anything 相比,DINOv2 在应用领域和适用范围上更加广泛,原论文中的实验也涵盖了多个 CV 中经典的下游任务(深度估计、语义分割)。
如何实现的自监督学习?
自监督学习为何成立?
自监督学习之所以能成立,是因为它不依赖人工标注的标签,而是巧妙地利用数据本身作为监督信号。它通过设计一些被称为“借口任务”(Pretext Task)的辅助任务,让模型在完成这些任务的过程中,自动学习到数据中更深层次、更通用的特征表示。
你可以把这个过程想象成一个孩子通过玩积木来学习。这个孩子没有老师教他“这是红色积木”“那是蓝色积木”,也没有人告诉他“这是正方体”“那是长方体”。但他通过自己不断地搭建、拆解,会发现红色积木和蓝色积木可以一起搭成一个城堡,而正方体和长方体有着不同的放置方式。在这个过程中,他没有被直接告知任何标签,但他却自己摸索出了积木的颜色、形状等特征,并学会了如何利用这些特征。
自监督学习中的“借口任务”就相当于这个孩子玩积木的过程。这些任务本身可能没有实际意义,但为了解决这些任务,模型必须学会数据的内在结构和模式。例如,在计算机视觉领域,常见的借口任务包括:
- 预测图像旋转角度:给模型一张随机旋转过的图片(例如旋转了90度),让它预测旋转了多少度。为了完成这个任务,模型就必须理解图片中物体的原始姿态,从而学习到物体的形状和结构等特征。
- 图像修复:遮住图片的一部分,让模型去预测被遮住的内容。这迫使模型理解图片中物体之间的上下文关系。
通过这些任务,模型能够从海量的无标签数据中,学习到高质量的、可泛化的特征表示。这些表示可以作为“基础知识”,被迁移到各种下游任务中,例如图像分类、目标检测等。
Dinov2 的自监督实现
DINOv2(Self-distillation with no labels)是Meta AI推出的一个非常强大的自监督学习模型,它的实现核心是一种被称为**自蒸馏(Self-Distillation)**的机制。
这个模型的核心思想是:让一个模型(学生模型)去学习另一个模型(教师模型)的输出。而这个教师模型,本身就是学生模型的一个历史版本,并且它的参数更新更慢、更平滑。
具体来说,DINOv2的自监督学习过程是这样的:
- 数据增强:对同一张原始图片进行不同程度的裁剪和变换,生成多个“视图”(view)。例如,一张图片会被裁剪成一个小区域(小视图)和一个大区域(大视图)。
- 教师与学生:将这些“视图”同时输入给学生模型和教师模型。学生模型负责学习,而教师模型则提供学习目标。
- 预测与蒸馏:
- 学生模型:将大视图和小视图都输入到学生模型中,得到其特征表示。
- 教师模型:只将==大视图==输入到教师模型中,得到其特征表示。
- 蒸馏:让学生模型预测的结果去匹配教师模型的结果。具体来说,就是让学生模型从小视图中提取出的特征,与教师模型从大视图中提取出的特征尽可能地相似。
- 模型更新:
- 学生模型:正常地通过梯度下降来更新参数。
- 教师模型:参数更新非常缓慢,它不是通过梯度下降,而是通过学生模型参数的移动平均(Moving Average)来更新。这意味着教师模型的参数是学生模型历史状态的一个平滑版本。
为什么可以这样做?
这个机制之所以有效,是因为它巧妙地利用了数据增强和自蒸馏的结合。
- 数据增强:不同的视图本质上是同一张图片的“不同视角”。如果模型能识别出这些不同视角下的图片是同一个物体,它就必须学习到物体本身具有不变性(Invariance)的特征,例如物体的形状、纹理,而不是背景或者视角。
- 自蒸馏:教师模型作为学生模型的“平滑历史版本”,其输出更加稳定和可靠。学生模型通过模仿教师模型的输出,相当于是在学习一个更稳定、更鲁棒的知识。这种“自我模仿”的过程,让模型在没有外部标签的情况下,自己给自己生成了高质量的监督信号。
简单来说,DINOv2通过让模型在不同视角下对同一物体进行一致性预测,并利用一个更稳定的历史版本作为学习目标,有效地迫使模型学习到了图像中具有不变性的、强大的视觉特征,从而实现了在无标签数据上的高效训练。
Dinov2 模型结构
DINOv2的模型结构,简单来说,是基于一个名为 Vision Transformer(ViT)的骨干网络,并结合了自监督学习中的自蒸馏(self-distillation)框架。它的核心思想不是设计一个全新的网络架构,而是在一个强大的现有架构(ViT)上,通过一套创新的训练方法,让模型在没有标签的情况下高效学习。
1. Vision Transformer (ViT) 骨干网络
DINOv2的特征提取器是ViT。传统的卷积神经网络(CNN)通过逐层卷积来提取特征,而ViT则借鉴了自然语言处理(NLP)中Transformer的架构,将图像视为一系列“单词”。
ViT的工作流程如下:
- 分块(Patching):一张输入图片会被切分成许多小的、不重叠的图片块(patch)。例如,一张 224×224的图片会被切成 14×14 个图片块,每个图片块的大小是 16×16 像素。
- 嵌入(Embedding):每个图片块会被展平(flatten),然后通过一个线性层转换为一个高维的向量,这就是所谓的“嵌入”(embedding)。
- 位置编码(Positional Encoding):为了让模型知道每个图片块在原始图像中的位置,ViT会给每个嵌入向量加上一个位置编码向量。
- Transformer编码器:这些带有位置信息的嵌入向量被输入到一个标准的Transformer编码器中。这个编码器由多层自注意力(Self-Attention)机制和前馈神经网络(Feed-Forward Network)组成。
- 自注意力机制:这是ViT的核心。它允许模型在处理一个图片块时,能够考虑到图像中所有其他图片块的信息,从而捕捉到图片中物体之间的全局关系。
ViT的输出是每个图片块对应的特征向量,这些向量可以用于下游的各种任务,比如分类、分割或深度估计。
2. DINOv2 的双网络框架
DINOv2并没有直接使用一个单独的ViT模型,而是使用了两个ViT网络,它们在结构上完全相同,但参数不同,形成了教师(Teacher)网络和学生(Student)网络。
- 学生网络(Student Network):这是一个标准的ViT模型,它的参数会通过梯度下降进行常规更新。它的任务是从各种图像视图(view)中学习特征。
- 教师网络(Teacher Network):这也是一个ViT模型,但它的参数更新方式非常特殊。它的参数不是通过梯度下降直接优化的,而是通过**学生网络参数的指数移动平均(Exponential Moving Average, EMA)**来更新。这种更新方式让教师网络的参数变化更加平滑、稳定。
这种教师-学生框架的核心思想就是**“知识蒸馏”**(Knowledge Distillation)。学生模型的目标是学习并模仿教师模型的输出,即使它们的输入是图像的不同视图。
下游任务(使用场景)
dinov2 作为 vision encoder,需要结合下游任务才能发挥作用
-
深度估计 Depth Estimation
-
语义分割 Semantic Segmentation
-
实例检索 Instance Retrieval
-
密集匹配 Dense Matching——DINOv2 patch features can be used to consistently map all parts of an image without supervision.

-
稀疏匹配 Sparse Matching——Compare DINOv2 patch features across two images to match their most similar parts.
